geonetwork-ui 2.6.0-dev.ceb4be4c1 → 2.6.0-dev.d1dbf336f
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.mjs +8 -4
- package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.mjs +5 -2
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +3 -3
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +2 -2
- package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +14 -5
- package/esm2022/libs/common/domain/src/lib/repository/records-repository.interface.mjs +1 -1
- package/esm2022/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.mjs +266 -11
- package/esm2022/libs/ui/search/src/index.mjs +2 -1
- package/esm2022/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.mjs +19 -12
- package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +3 -3
- package/esm2022/libs/ui/search/src/lib/ui-search.module.mjs +10 -4
- package/esm2022/libs/util/i18n/src/lib/i18n.constants.mjs +42 -1
- package/esm2022/libs/util/i18n/src/lib/language-codes.mjs +24 -2
- package/esm2022/translations/de.json +28 -4
- package/esm2022/translations/en.json +28 -4
- package/esm2022/translations/es.json +27 -3
- package/esm2022/translations/fr.json +28 -4
- package/esm2022/translations/it.json +27 -3
- package/esm2022/translations/nl.json +27 -3
- package/esm2022/translations/pt.json +27 -3
- package/fesm2022/geonetwork-ui.mjs +604 -107
- package/fesm2022/geonetwork-ui.mjs.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts +1 -0
- package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +4 -2
- package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
- package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts +1 -0
- package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.d.ts +48 -3
- package/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.d.ts.map +1 -1
- package/libs/ui/search/src/index.d.ts +1 -0
- package/libs/ui/search/src/index.d.ts.map +1 -1
- package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts +3 -3
- package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts.map +1 -1
- package/libs/ui/search/src/lib/ui-search.module.d.ts +2 -1
- package/libs/ui/search/src/lib/ui-search.module.d.ts.map +1 -1
- package/libs/util/i18n/src/lib/i18n.constants.d.ts +1 -0
- package/libs/util/i18n/src/lib/i18n.constants.d.ts.map +1 -1
- package/libs/util/i18n/src/lib/language-codes.d.ts +23 -1
- package/libs/util/i18n/src/lib/language-codes.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +1 -1
- package/src/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.ts +13 -3
- package/src/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.ts +5 -1
- package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +6 -3
- package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +4 -1
- package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +16 -2
- package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +1 -0
- package/src/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.html +117 -11
- package/src/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.ts +316 -6
- package/src/libs/ui/search/src/index.ts +1 -0
- package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.html +11 -3
- package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.ts +14 -11
- package/src/libs/ui/search/src/lib/results-table/results-table.component.html +1 -1
- package/src/libs/ui/search/src/lib/ui-search.module.ts +3 -0
- package/src/libs/util/i18n/src/lib/i18n.constants.ts +42 -0
- package/src/libs/util/i18n/src/lib/language-codes.ts +23 -1
- package/tailwind.base.css +1 -1
- package/translations/de.json +28 -4
- package/translations/en.json +28 -4
- package/translations/es.json +27 -3
- package/translations/fr.json +28 -4
- package/translations/it.json +27 -3
- package/translations/nl.json +27 -3
- package/translations/pt.json +27 -3
- package/translations/sk.json +27 -3
|
@@ -474,12 +474,12 @@ export function readSpatialExtents(rootEl) {
|
|
|
474
474
|
}
|
|
475
475
|
export function readOtherLanguages(rootEl) {
|
|
476
476
|
const defaultLanguage = readDefaultLanguage(rootEl);
|
|
477
|
-
return pipe(findChildrenElement('gmd:locale', false), mapArray(pipe(findChildElement('
|
|
477
|
+
return pipe(findChildrenElement('gmd:locale', false), mapArray(pipe(findChildElement('lan:LanguageCode'), readAttribute('codeListValue'), map((lang) => LANG_3_TO_2_MAPPER[lang.toLowerCase()] ?? lang))), map((languages) => languages.filter((lang) => lang !== null)), map((languages) => (languages.length ? languages : [defaultLanguage])))(rootEl);
|
|
478
478
|
}
|
|
479
479
|
export function readDefaultLanguage(rootEl) {
|
|
480
|
-
return pipe(findChildElement('gmd:language', false), findChildElement('
|
|
480
|
+
return pipe(findChildElement('gmd:language', false), findChildElement('lan:LanguageCode'), readAttribute('codeListValue'), map((lang) => (lang ? LANG_3_TO_2_MAPPER[lang.toLowerCase()] : null)))(rootEl);
|
|
481
481
|
}
|
|
482
482
|
export function readResourceIdentifier(rootEl) {
|
|
483
483
|
return pipe(findIdentification(), findNestedElement('gmd:citation', 'gmd:CI_Citation', 'gmd:identifier', 'gmd:MD_Identifier', 'gmd:code'), extractCharacterString())(rootEl);
|
|
484
484
|
}
|
|
485
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZC1wYXJ0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXBpL21ldGFkYXRhLWNvbnZlcnRlci9zcmMvbGliL2lzbzE5MTM5L3JlYWQtcGFydHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBNEJBLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUE7QUFDNUUsT0FBTyxFQUVMLE9BQU8sRUFDUCxRQUFRLEVBQ1IsV0FBVyxFQUNYLFlBQVksRUFDWixVQUFVLEVBQ1YsR0FBRyxFQUNILFFBQVEsRUFDUixJQUFJLEdBQ0wsTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLFVBQVUsRUFDVixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLFFBQVEsR0FFVCxNQUFNLGNBQWMsQ0FBQTtBQUNyQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBQ3pELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQzFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3pELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQy9ELE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQ3JGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlEQUF5RCxDQUFBO0FBQzVGLE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFFeEUsTUFBTSxVQUFVLHNCQUFzQjtJQUlwQyxPQUFPLElBQUksQ0FDVCxRQUFRLENBQ04sZ0JBQWdCLENBQUMscUJBQXFC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QU0sQ0FBQyxDQUFBO0FBQ1gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbnN0cmFpbnQsXG4gIENvbnN0cmFpbnRUcmFuc2xhdGlvbnMsXG4gIERhdGFzZXRPbmxpbmVSZXNvdXJjZSxcbiAgRmllbGRUcmFuc2xhdGlvbixcbiAgR3JhcGhpY092ZXJ2aWV3LFxuICBJbmRpdmlkdWFsLFxuICBLZXl3b3JkLFxuICBLZXl3b3JkVHJhbnNsYXRpb25zLFxuICBMYW5ndWFnZUNvZGUsXG4gIE1vZGVsVHJhbnNsYXRpb25zLFxuICBPbmxpbmVMaW5rUmVzb3VyY2UsXG4gIE9ubGluZVJlc291cmNlLFxuICBPbmxpbmVSZXNvdXJjZVRyYW5zbGF0aW9ucyxcbiAgT3JnYW5pemF0aW9uLFxuICBPcmdhbml6YXRpb25UcmFuc2xhdGlvbnMsXG4gIFJlY29yZEtpbmQsXG4gIFJlY29yZFN0YXR1cyxcbiAgUmVjb3JkVHJhbnNsYXRpb25zLFxuICBSZXVzZVR5cGUsXG4gIFJvbGUsXG4gIFNlcnZpY2VPbmxpbmVSZXNvdXJjZSxcbiAgU3BhdGlhbFJlcHJlc2VudGF0aW9uVHlwZSxcbiAgVXBkYXRlRnJlcXVlbmN5LFxuICBVcGRhdGVGcmVxdWVuY3lDdXN0b20sXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3JlY29yZCdcbmltcG9ydCB7IFRoZXNhdXJ1c01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvdGhlc2F1cnVzJ1xuaW1wb3J0IHsgR2VvbWV0cnkgfSBmcm9tICdnZW9qc29uJ1xuaW1wb3J0IHsgbWF0Y2hNaW1lVHlwZSwgbWF0Y2hQcm90b2NvbCB9IGZyb20gJy4uL2NvbW1vbi9kaXN0cmlidXRpb24ubWFwcGVyJ1xuaW1wb3J0IHtcbiAgQ2hhaW5hYmxlRnVuY3Rpb24sXG4gIGNvbWJpbmUsXG4gIGZhbGxiYWNrLFxuICBmaWx0ZXJBcnJheSxcbiAgZmxhdHRlbkFycmF5LFxuICBnZXRBdEluZGV4LFxuICBtYXAsXG4gIG1hcEFycmF5LFxuICBwaXBlLFxufSBmcm9tICcuLi9mdW5jdGlvbi11dGlscydcbmltcG9ydCB7XG4gIGZpbmRDaGlsZEVsZW1lbnQsXG4gIGZpbmRDaGlsZHJlbkVsZW1lbnQsXG4gIGZpbmROZXN0ZWRFbGVtZW50LFxuICBmaW5kTmVzdGVkRWxlbWVudHMsXG4gIGZpbmRQYXJlbnQsXG4gIGZpcnN0Q2hpbGRFbGVtZW50LFxuICByZWFkQXR0cmlidXRlLFxuICByZWFkVGV4dCxcbiAgWG1sRWxlbWVudCxcbn0gZnJvbSAnLi4veG1sLXV0aWxzJ1xuaW1wb3J0IHsgcmVhZEdlb21ldHJ5IH0gZnJvbSAnLi91dGlscy9nZW9tZXRyeSdcbmltcG9ydCB7IGZ1bGxOYW1lVG9QYXJ0cyB9IGZyb20gJy4vdXRpbHMvaW5kaXZpZHVhbC1uYW1lJ1xuaW1wb3J0IHsgZ2V0S2V5d29yZFR5cGVGcm9tS2V5d29yZFR5cGVDb2RlIH0gZnJvbSAnLi91dGlscy9rZXl3b3JkLm1hcHBlcidcbmltcG9ydCB7IGdldFJvbGVGcm9tUm9sZUNvZGUgfSBmcm9tICcuL3V0aWxzL3JvbGUubWFwcGVyJ1xuaW1wb3J0IHsgZ2V0U3RhdHVzRnJvbVN0YXR1c0NvZGUgfSBmcm9tICcuL3V0aWxzL3N0YXR1cy5tYXBwZXInXG5pbXBvcnQgeyBnZXRVcGRhdGVGcmVxdWVuY3lGcm9tRnJlcXVlbmN5Q29kZSB9IGZyb20gJy4vdXRpbHMvdXBkYXRlLWZyZXF1ZW5jeS5tYXBwZXInXG5pbXBvcnQgeyBMQU5HXzNfVE9fMl9NQVBQRVIgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3V0aWwvaTE4bi9zcmMvbGliL2xhbmd1YWdlLWNvZGVzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VUeXBlLCBnZXRSZXVzZVR5cGUgfSBmcm9tICcuLi9jb21tb24vcmVzb3VyY2UtdHlwZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCk6IENoYWluYWJsZUZ1bmN0aW9uPFxuICBYbWxFbGVtZW50LFxuICBzdHJpbmdcbj4ge1xuICByZXR1cm4gcGlwZShcbiAgICBmYWxsYmFjayhcbiAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2djbzpDaGFyYWN0ZXJTdHJpbmcnLCBmYWxzZSksXG4gICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbXg6QW5jaG9yJywgZmFsc2UpLFxuICAgICAgZmluZENoaWxkRWxlbWVudCgnZ214Ok1pbWVGaWxlVHlwZScsIGZhbHNlKVxuICAgICksXG4gICAgcmVhZFRleHQoKVxuICApXG59XG5cbi8qKlxuICogVHJhbnNsYXRlZCB2YWx1ZXMgd2lsbCBhbHNvIGJlIGNvbGxlY3RlZCBpbiB0aGUgdHJhbnNsYXRpb25zIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdExvY2FsaXplZENoYXJhY3RlclN0cmluZzxUIGV4dGVuZHMgTW9kZWxUcmFuc2xhdGlvbnM+KFxuICBmaWVsZE5hbWU6IHN0cmluZyxcbiAgdHJhbnNsYXRpb25zPzogVFxuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgW3N0cmluZywgVF0+IHtcbiAgcmV0dXJuIGNvbWJpbmUoXG4gICAgcGlwZShcbiAgICAgIGZhbGxiYWNrKFxuICAgICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnY286Q2hhcmFjdGVyU3RyaW5nJywgZmFsc2UpLFxuICAgICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbXg6QW5jaG9yJywgZmFsc2UpXG4gICAgICApLFxuICAgICAgcmVhZFRleHQoKVxuICAgICksXG4gICAgKGVsKSA9PiB7XG4gICAgICBjb25zdCB0cmFuc2xhdGVkVmFsdWVzID0gZmluZE5lc3RlZEVsZW1lbnRzKFxuICAgICAgICAnZ21kOlBUX0ZyZWVUZXh0JyxcbiAgICAgICAgJ2dtZDp0ZXh0R3JvdXAnLFxuICAgICAgICAnZ21kOkxvY2FsaXNlZENoYXJhY3RlclN0cmluZydcbiAgICAgICkoZWwpXG4gICAgICBjb25zdCB0cmFuc2xhdGlvbnNTYWZlID0gdHJhbnNsYXRpb25zID8/ICh7fSBhcyBUKVxuICAgICAgaWYgKCF0cmFuc2xhdGVkVmFsdWVzLmxlbmd0aCkgcmV0dXJuIHRyYW5zbGF0aW9uc1NhZmVcbiAgICAgIGNvbnN0IHZhbHVlVHJhbnNsYXRpb25zOiBGaWVsZFRyYW5zbGF0aW9uID0gdHJhbnNsYXRlZFZhbHVlcy5yZWR1Y2UoXG4gICAgICAgIChwcmV2LCB0cmFuc2xhdGlvbkVsKSA9PiB7XG4gICAgICAgICAgY29uc3QgbGFuZyA9IHJlYWRBdHRyaWJ1dGUoJ2xvY2FsZScpKHRyYW5zbGF0aW9uRWwpXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgLnJlcGxhY2UoL14jLywgJycpXG4gICAgICAgICAgY29uc3QgdmFsdWUgPSByZWFkVGV4dCgpKHRyYW5zbGF0aW9uRWwpXG4gICAgICAgICAgaWYgKCFsYW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJldlxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyAuLi5wcmV2LCBbbGFuZ106IHZhbHVlIH1cbiAgICAgICAgfSxcbiAgICAgICAge31cbiAgICAgIClcbiAgICAgIHRyYW5zbGF0aW9uc1NhZmVbZmllbGROYW1lXSA9IHtcbiAgICAgICAgLi4udHJhbnNsYXRpb25zU2FmZVtmaWVsZE5hbWVdLFxuICAgICAgICAuLi52YWx1ZVRyYW5zbGF0aW9ucyxcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cmFuc2xhdGlvbnNTYWZlXG4gICAgfVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RGF0ZVRpbWUoKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgRGF0ZT4ge1xuICByZXR1cm4gcGlwZShcbiAgICBmYWxsYmFjayhcbiAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2djbzpEYXRlVGltZScsIGZhbHNlKSxcbiAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2djbzpEYXRlJywgZmFsc2UpXG4gICAgKSxcbiAgICByZWFkVGV4dCgpLFxuICAgIG1hcCgoZGF0ZVN0cikgPT4gKGRhdGVTdHIgPyBuZXcgRGF0ZShkYXRlU3RyKSA6IG51bGwpKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RGVjaW1hbCgpOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBudW1iZXI+IHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ2NvOkRlY2ltYWwnLCBmYWxzZSksXG4gICAgcmVhZFRleHQoKSxcbiAgICBtYXAoKG51bWJlclN0cikgPT4gKG51bWJlclN0ciA/IE51bWJlcihudW1iZXJTdHIpIDogbnVsbCkpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RVcmwoKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgVVJMPiB7XG4gIGNvbnN0IGdldFVybCA9IHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOlVSTCcsIGZhbHNlKSwgcmVhZFRleHQoKSlcbiAgY29uc3QgZ2V0Q2hhcmFjdGVyU3RyaW5nID0gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnY286Q2hhcmFjdGVyU3RyaW5nJywgZmFsc2UpLFxuICAgIHJlYWRUZXh0KClcbiAgKVxuICBjb25zdCBnZXRBbmNob3IgPSBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dteDpBbmNob3InLCBmYWxzZSksXG4gICAgcmVhZEF0dHJpYnV0ZSgneGxpbms6aHJlZicpXG4gIClcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmFsbGJhY2soZ2V0VXJsLCBnZXRBbmNob3IsIGdldENoYXJhY3RlclN0cmluZyksXG4gICAgbWFwKCh1cmxTdHIpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBuZXcgVVJMKHVybFN0cilcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cbiAgICB9KVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0TWFuZGF0b3J5VXJsKCkge1xuICByZXR1cm4gZmFsbGJhY2soZXh0cmFjdFVybCgpLCAoKSA9PiBuZXcgVVJMKCdodHRwOi8vbWlzc2luZycpKVxufVxuXG4vLyBmcm9tIGdtZDpyb2xlXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFJvbGUoKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgUm9sZT4ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6Q0lfUm9sZUNvZGUnKSxcbiAgICByZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJyksXG4gICAgbWFwKGdldFJvbGVGcm9tUm9sZUNvZGUpXG4gIClcbn1cblxuLy8gZnJvbSBnbWQ6Q0lfUmVzcG9uc2libGVQYXJ0eVxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RPcmdhbml6YXRpb24oKTogQ2hhaW5hYmxlRnVuY3Rpb248XG4gIFhtbEVsZW1lbnQsXG4gIE9yZ2FuaXphdGlvblxuPiB7XG4gIGNvbnN0IGdldFVybCA9IHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnRzKFxuICAgICAgJ2dtZDpjb250YWN0SW5mbycsXG4gICAgICAnZ21kOkNJX0NvbnRhY3QnLFxuICAgICAgJ2dtZDpvbmxpbmVSZXNvdXJjZScsXG4gICAgICAnZ21kOkNJX09ubGluZVJlc291cmNlJyxcbiAgICAgICdnbWQ6bGlua2FnZSdcbiAgICApLFxuICAgIGdldEF0SW5kZXgoMCksXG4gICAgZXh0cmFjdFVybCgpXG4gIClcbiAgcmV0dXJuIHBpcGUoXG4gICAgY29tYmluZShcbiAgICAgIHBpcGUoXG4gICAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpvcmdhbmlzYXRpb25OYW1lJywgZmFsc2UpLFxuICAgICAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nPE9yZ2FuaXphdGlvblRyYW5zbGF0aW9ucz4oJ25hbWUnKVxuICAgICAgKSxcbiAgICAgIGdldFVybFxuICAgICksXG4gICAgbWFwKChbW25hbWUsIHRyYW5zbGF0aW9uc10sIHdlYnNpdGVdKSA9PiAoe1xuICAgICAgbmFtZSxcbiAgICAgIC4uLih3ZWJzaXRlICYmIHsgd2Vic2l0ZSB9KSxcbiAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICB9KSlcbiAgKVxufVxuXG4vLyBmcm9tIGdtZDpDSV9SZXNwb25zaWJsZVBhcnR5XG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdEluZGl2aWR1YWwoKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgSW5kaXZpZHVhbD4ge1xuICBjb25zdCBnZXRSb2xlID0gcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6cm9sZScpLCBleHRyYWN0Um9sZSgpKVxuICBjb25zdCBnZXRQb3NpdGlvbiA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOnBvc2l0aW9uTmFtZScpLFxuICAgIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKVxuICApXG4gIGNvbnN0IGdldE5hbWVQYXJ0cyA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOmluZGl2aWR1YWxOYW1lJyksXG4gICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpLFxuICAgIG1hcCgoZnVsbE5hbWUpID0+IHtcbiAgICAgIGlmICghZnVsbE5hbWUpIHJldHVybiBbXVxuICAgICAgcmV0dXJuIGZ1bGxOYW1lVG9QYXJ0cyhmdWxsTmFtZSlcbiAgICB9KVxuICApXG4gIGNvbnN0IGdldE9yZ2FuaXphdGlvbiA9IGV4dHJhY3RPcmdhbml6YXRpb24oKVxuICBjb25zdCBnZXRDb250YWN0Um9vdCA9IGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6Y29udGFjdEluZm8nLCAnZ21kOkNJX0NvbnRhY3QnKVxuICBjb25zdCBnZXRFbWFpbCA9IHBpcGUoXG4gICAgZ2V0Q29udGFjdFJvb3QsXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOmVsZWN0cm9uaWNNYWlsQWRkcmVzcycpLFxuICAgIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKSxcbiAgICBtYXAoKGVtYWlsKSA9PiAoZW1haWwgPT09IG51bGwgPyAnbWlzc2luZ0BtaXNzaW5nLmNvbScgOiBlbWFpbCkpXG4gIClcbiAgY29uc3QgZ2V0QWRkcmVzcyA9IHBpcGUoXG4gICAgZ2V0Q29udGFjdFJvb3QsXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoJ2dtZDphZGRyZXNzJywgJ2dtZDpDSV9BZGRyZXNzJyksXG4gICAgY29tYmluZShcbiAgICAgIHBpcGUoXG4gICAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpkZWxpdmVyeVBvaW50JywgZmFsc2UpLFxuICAgICAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKClcbiAgICAgICksXG4gICAgICBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpjaXR5JywgZmFsc2UpLCBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCkpLFxuICAgICAgcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6cG9zdGFsQ29kZScsIGZhbHNlKSwgZXh0cmFjdENoYXJhY3RlclN0cmluZygpKSxcbiAgICAgIHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOmNvdW50cnknLCBmYWxzZSksIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKSlcbiAgICApLFxuICAgIG1hcCgocGFydHMpID0+IHBhcnRzLmZpbHRlcigocCkgPT4gISFwKS5qb2luKCcsICcpKVxuICApXG4gIGNvbnN0IGdldFBob25lID0gcGlwZShcbiAgICBnZXRDb250YWN0Um9vdCxcbiAgICBmaW5kTmVzdGVkRWxlbWVudCgnZ21kOnBob25lJywgJ2dtZDpDSV9UZWxlcGhvbmUnLCAnZ21kOnZvaWNlJyksXG4gICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpXG4gIClcbiAgcmV0dXJuIHBpcGUoXG4gICAgY29tYmluZShcbiAgICAgIGdldFJvbGUsXG4gICAgICBnZXRQb3NpdGlvbixcbiAgICAgIGdldE5hbWVQYXJ0cyxcbiAgICAgIGdldE9yZ2FuaXphdGlvbixcbiAgICAgIGdldEVtYWlsLFxuICAgICAgZ2V0QWRkcmVzcyxcbiAgICAgIGdldFBob25lXG4gICAgKSxcbiAgICBtYXAoXG4gICAgICAoW1xuICAgICAgICByb2xlLFxuICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgW2ZpcnN0TmFtZSwgbGFzdE5hbWVdLFxuICAgICAgICBvcmdhbml6YXRpb24sXG4gICAgICAgIGVtYWlsLFxuICAgICAgICBhZGRyZXNzLFxuICAgICAgICBwaG9uZSxcbiAgICAgIF0pID0+ICh7XG4gICAgICAgIGVtYWlsLFxuICAgICAgICByb2xlLFxuICAgICAgICBvcmdhbml6YXRpb24sXG4gICAgICAgIC4uLihwb3NpdGlvbiAmJiB7IHBvc2l0aW9uIH0pLFxuICAgICAgICAuLi4oZmlyc3ROYW1lICYmIHsgZmlyc3ROYW1lIH0pLFxuICAgICAgICAuLi4obGFzdE5hbWUgJiYgeyBsYXN0TmFtZSB9KSxcbiAgICAgICAgLi4uKGFkZHJlc3MgJiYgeyBhZGRyZXNzIH0pLFxuICAgICAgICAuLi4ocGhvbmUgJiYgeyBwaG9uZSB9KSxcbiAgICAgIH0pXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0U3RhdHVzKCk6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFJlY29yZFN0YXR1cz4ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6TURfUHJvZ3Jlc3NDb2RlJyksXG4gICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpLFxuICAgIG1hcChnZXRTdGF0dXNGcm9tU3RhdHVzQ29kZSlcbiAgKVxufVxuXG4vLyBmcm9tIGdtZDpyZXNvdXJjZUNvbnN0cmFpbnRzXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdExlZ2FsQ29uc3RyYWludHMoKTogQ2hhaW5hYmxlRnVuY3Rpb248XG4gIFhtbEVsZW1lbnQsXG4gIEFycmF5PENvbnN0cmFpbnQ+XG4+IHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOk1EX0xlZ2FsQ29uc3RyYWludHMnLCBmYWxzZSksXG4gICAgZmlsdGVyQXJyYXkoXG4gICAgICBwaXBlKFxuICAgICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6TURfUmVzdHJpY3Rpb25Db2RlJyksXG4gICAgICAgIG1hcEFycmF5KHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSksXG4gICAgICAgIG1hcCgodmFsdWVzKSA9PiB2YWx1ZXMuaW5kZXhPZignbGljZW5zZScpID09PSAtMSlcbiAgICAgIClcbiAgICApLFxuICAgIG1hcEFycmF5KFxuICAgICAgY29tYmluZShcbiAgICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOm90aGVyQ29uc3RyYWludHMnKSxcbiAgICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOnVzZUxpbWl0YXRpb24nKVxuICAgICAgKVxuICAgICksXG4gICAgZmxhdHRlbkFycmF5KCksXG4gICAgZmxhdHRlbkFycmF5KCksXG4gICAgbWFwQXJyYXkoXG4gICAgICBjb21iaW5lKFxuICAgICAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nPENvbnN0cmFpbnRUcmFuc2xhdGlvbnM+KCd0ZXh0JyksXG4gICAgICAgIGV4dHJhY3RVcmwoKVxuICAgICAgKVxuICAgICksXG4gICAgbWFwQXJyYXkoKFtbdGV4dCwgdHJhbnNsYXRpb25zXSwgdXJsXSkgPT4gKHtcbiAgICAgIC4uLih1cmwgJiYgeyB1cmwgfSksXG4gICAgICB0ZXh0LFxuICAgICAgdHJhbnNsYXRpb25zLFxuICAgIH0pKVxuICApXG59XG5cbi8vIGZyb20gZ21kOnJlc291cmNlQ29uc3RyYWludHNcbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0U2VjdXJpdHlDb25zdHJhaW50cygpOiBDaGFpbmFibGVGdW5jdGlvbjxcbiAgWG1sRWxlbWVudCxcbiAgQXJyYXk8Q29uc3RyYWludD5cbj4ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpNRF9TZWN1cml0eUNvbnN0cmFpbnRzJywgJ2dtZDp1c2VMaW1pdGF0aW9uJyksXG4gICAgZmxhdHRlbkFycmF5KCksXG4gICAgbWFwQXJyYXkoXG4gICAgICBjb21iaW5lKFxuICAgICAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nPENvbnN0cmFpbnRUcmFuc2xhdGlvbnM+KCd0ZXh0JyksXG4gICAgICAgIGV4dHJhY3RVcmwoKVxuICAgICAgKVxuICAgICksXG4gICAgbWFwQXJyYXkoKFtbdGV4dCwgdHJhbnNsYXRpb25zXSwgdXJsXSkgPT4gKHtcbiAgICAgIC4uLih1cmwgJiYgeyB1cmwgfSksXG4gICAgICB0ZXh0LFxuICAgICAgdHJhbnNsYXRpb25zLFxuICAgIH0pKVxuICApXG59XG5cbi8vIGZyb20gZ21kOnJlc291cmNlQ29uc3RyYWludHNcbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0T3RoZXJDb25zdHJhaW50cygpOiBDaGFpbmFibGVGdW5jdGlvbjxcbiAgWG1sRWxlbWVudCxcbiAgQXJyYXk8Q29uc3RyYWludD5cbj4ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpNRF9Db25zdHJhaW50cycsICdnbWQ6dXNlTGltaXRhdGlvbicpLFxuICAgIGZsYXR0ZW5BcnJheSgpLFxuICAgIG1hcEFycmF5KFxuICAgICAgY29tYmluZShcbiAgICAgICAgZXh0cmFjdExvY2FsaXplZENoYXJhY3RlclN0cmluZzxDb25zdHJhaW50VHJhbnNsYXRpb25zPigndGV4dCcpLFxuICAgICAgICBleHRyYWN0VXJsKClcbiAgICAgIClcbiAgICApLFxuICAgIG1hcEFycmF5KChbW3RleHQsIHRyYW5zbGF0aW9uc10sIHVybF0pID0+ICh7XG4gICAgICAuLi4odXJsICYmIHsgdXJsIH0pLFxuICAgICAgdGV4dCxcbiAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICB9KSlcbiAgKVxufVxuXG4vLyBmcm9tIGdtZDpyZXNvdXJjZUNvbnN0cmFpbnRzXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdExpY2Vuc2VzKCk6IENoYWluYWJsZUZ1bmN0aW9uPFxuICBYbWxFbGVtZW50LFxuICBBcnJheTxDb25zdHJhaW50PlxuPiB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpNRF9MZWdhbENvbnN0cmFpbnRzJywgZmFsc2UpLFxuICAgIGZpbHRlckFycmF5KFxuICAgICAgcGlwZShcbiAgICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOk1EX1Jlc3RyaWN0aW9uQ29kZScpLFxuICAgICAgICBtYXBBcnJheShyZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJykpLFxuICAgICAgICBtYXAoKHZhbHVlcykgPT4gdmFsdWVzLmluZGV4T2YoJ2xpY2Vuc2UnKSA+IC0xKVxuICAgICAgKVxuICAgICksXG4gICAgbWFwQXJyYXkoXG4gICAgICBjb21iaW5lKFxuICAgICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6b3RoZXJDb25zdHJhaW50cycpLFxuICAgICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6dXNlTGltaXRhdGlvbicpXG4gICAgICApXG4gICAgKSxcbiAgICBmbGF0dGVuQXJyYXkoKSxcbiAgICBmbGF0dGVuQXJyYXkoKSxcbiAgICBtYXBBcnJheShcbiAgICAgIGNvbWJpbmUoXG4gICAgICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmc8Q29uc3RyYWludFRyYW5zbGF0aW9ucz4oJ3RleHQnKSxcbiAgICAgICAgZXh0cmFjdFVybCgpXG4gICAgICApXG4gICAgKSxcbiAgICBtYXBBcnJheSgoW1t0ZXh0LCB0cmFuc2xhdGlvbnNdLCB1cmxdKSA9PiAoe1xuICAgICAgLi4uKHVybCAmJiB7IHVybCB9KSxcbiAgICAgIHRleHQsXG4gICAgICB0cmFuc2xhdGlvbnMsXG4gICAgfSkpXG4gIClcbn1cblxuY29uc3QgZ2V0TWltZVR5cGUgPSBwaXBlKFxuICBmaW5kUGFyZW50KCdnbWQ6TURfRGlzdHJpYnV0aW9uJyksXG4gIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6ZGlzdHJpYnV0aW9uRm9ybWF0JywgJ2dtZDpNRF9Gb3JtYXQnLCAnZ21kOm5hbWUnKSxcbiAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpLFxuICBtYXAobWF0Y2hNaW1lVHlwZSlcbilcblxuLyoqXG4gKiBFeHRyYWN0IG9ubGluZSByZXNvdXJjZXMgZnJvbSBhbiBNRF9EaXN0cmlidXRpb24gZWxlbWVudFxuICogQHBhcmFtIGdldE1pbWVUeXBlRm4gVGhpcyBmdW5jdGlvbiBzdGFydHMgZnJvbSBhIGdtZDp0cmFuc2Zlck9wdGlvbnMgZWxlbWVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdERhdGFzZXRPbmxpbmVSZXNvdXJjZXMoXG4gIGdldE1pbWVUeXBlRm46IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIHN0cmluZz5cbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIERhdGFzZXRPbmxpbmVSZXNvdXJjZVtdPiB7XG4gIGNvbnN0IGdldFVybCA9IHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOmxpbmthZ2UnKSwgZXh0cmFjdE1hbmRhdG9yeVVybCgpKVxuICBjb25zdCBnZXRQcm90b2NvbFN0ciA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOnByb3RvY29sJyksXG4gICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpXG4gIClcbiAgY29uc3QgZ2V0UHJvdG9jb2wgPSBwaXBlKGdldFByb3RvY29sU3RyLCBtYXAobWF0Y2hQcm90b2NvbCkpXG4gIGNvbnN0IGdldE9ubGluZUZ1bmN0aW9uID0gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudCgnZ21kOmZ1bmN0aW9uJywgJ2dtZDpDSV9PbkxpbmVGdW5jdGlvbkNvZGUnKSxcbiAgICByZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJylcbiAgKVxuICBjb25zdCBnZXRJc1NlcnZpY2UgPSBwaXBlKFxuICAgIGdldFByb3RvY29sLFxuICAgIG1hcCgocHJvdG9jb2wpID0+IHByb3RvY29sICE9PSAnb3RoZXInKVxuICApXG4gIGNvbnN0IGdldElzRG93bmxvYWQgPSBwaXBlKFxuICAgIGNvbWJpbmUoZ2V0SXNTZXJ2aWNlLCBnZXRPbmxpbmVGdW5jdGlvbiwgZ2V0UHJvdG9jb2xTdHIpLFxuICAgIG1hcChcbiAgICAgIChbaXNTZXJ2aWNlLCBvbmxpbmVGdW5jdGlvbiwgcHJvdG9jb2xTdHJdKSA9PlxuICAgICAgICAoIWlzU2VydmljZSAmJiBvbmxpbmVGdW5jdGlvbiA9PT0gJ2Rvd25sb2FkJykgfHxcbiAgICAgICAgL2Rvd25sb2FkL2kudGVzdChwcm90b2NvbFN0cilcbiAgICApXG4gIClcbiAgY29uc3QgZ2V0TmFtZSA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOm5hbWUnKSxcbiAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nPE9ubGluZVJlc291cmNlVHJhbnNsYXRpb25zPignbmFtZScpXG4gIClcbiAgY29uc3QgZ2V0RGVzY3JpcHRpb24gPSBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpkZXNjcmlwdGlvbicpLFxuICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmc8T25saW5lUmVzb3VyY2VUcmFuc2xhdGlvbnM+KCdkZXNjcmlwdGlvbicpXG4gIClcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnRzKFxuICAgICAgJ2dtZDp0cmFuc2Zlck9wdGlvbnMnLFxuICAgICAgJ2dtZDpNRF9EaWdpdGFsVHJhbnNmZXJPcHRpb25zJyxcbiAgICAgICdnbWQ6b25MaW5lJyxcbiAgICAgICdnbWQ6Q0lfT25saW5lUmVzb3VyY2UnXG4gICAgKSxcbiAgICBtYXBBcnJheShcbiAgICAgIGNvbWJpbmUoXG4gICAgICAgIGdldElzU2VydmljZSxcbiAgICAgICAgZ2V0SXNEb3dubG9hZCxcbiAgICAgICAgZ2V0UHJvdG9jb2wsXG4gICAgICAgIGdldFVybCxcbiAgICAgICAgZ2V0TmFtZSxcbiAgICAgICAgZ2V0RGVzY3JpcHRpb24sXG4gICAgICAgIGdldE1pbWVUeXBlRm5cbiAgICAgIClcbiAgICApLFxuICAgIG1hcEFycmF5KFxuICAgICAgKFtcbiAgICAgICAgaXNTZXJ2aWNlLFxuICAgICAgICBpc0Rvd25sb2FkLFxuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgdXJsLFxuICAgICAgICBbbmFtZSwgbmFtZVRyYW5zbGF0aW9uc10sXG4gICAgICAgIFtkZXNjcmlwdGlvbiwgZGVzY3JpcHRpb25UcmFuc2xhdGlvbnNdLFxuICAgICAgICBtaW1lVHlwZSxcbiAgICAgIF0pID0+IHtcbiAgICAgICAgY29uc3QgdHJhbnNsYXRpb25zID0ge1xuICAgICAgICAgIC4uLm5hbWVUcmFuc2xhdGlvbnMsXG4gICAgICAgICAgLi4uZGVzY3JpcHRpb25UcmFuc2xhdGlvbnMsXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzU2VydmljZSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnc2VydmljZScsXG4gICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgIGFjY2Vzc1NlcnZpY2VQcm90b2NvbDogcHJvdG9jb2wsXG4gICAgICAgICAgICAuLi4obmFtZSAmJiB7IGlkZW50aWZpZXJJblNlcnZpY2U6IG5hbWUgfSksIC8vIHNob3VsZCB3ZSBrZWVwIHRoZSBpZGVudGlmaWVySW5TZXJ2aWNlPyByZWFkLXdyaXRlIGR1cGxpY2F0ZSB3aXRoIG5hbWVcbiAgICAgICAgICAgIC4uLihuYW1lICYmIHsgbmFtZSB9KSxcbiAgICAgICAgICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgICAgICAgICAgdHJhbnNsYXRpb25zLFxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChpc0Rvd25sb2FkKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdkb3dubG9hZCcsXG4gICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgIC4uLihuYW1lICYmIHsgbmFtZSB9KSxcbiAgICAgICAgICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgICAgICAgICAgLi4uKG1pbWVUeXBlICYmIHsgbWltZVR5cGUgfSksXG4gICAgICAgICAgICB0cmFuc2xhdGlvbnMsXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnbGluaycsXG4gICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgIC4uLihuYW1lICYmIHsgbmFtZSB9KSxcbiAgICAgICAgICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgICAgICAgICAgdHJhbnNsYXRpb25zLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXBkYXRlRnJlcXVlbmN5RnJvbUN1c3RvbVBlcmlvZChcbiAgaXNvUGVyaW9kOiBzdHJpbmdcbik6IFVwZGF0ZUZyZXF1ZW5jeUN1c3RvbSB7XG4gIGlmICghaXNvUGVyaW9kKSByZXR1cm4gbnVsbFxuICBjb25zdCBtYXRjaGVzID0gaXNvUGVyaW9kLm1hdGNoKFxuICAgIC9eLT9QKD86KFswLTldKylZKT8oPzooWzAtOV0rKU0pPyg/OihbMC05XSspRCk/VD8oPzooWzAtOV0rKUgpPy9cbiAgKVxuICBpZiAoIW1hdGNoZXMpIHJldHVybiBudWxsXG4gIGNvbnN0IHllYXJzID0gcGFyc2VJbnQobWF0Y2hlc1sxXSwgMTApIHx8IDBcbiAgY29uc3QgbW9udGhzID0gcGFyc2VJbnQobWF0Y2hlc1syXSwgMTApIHx8IDBcbiAgY29uc3QgZGF5cyA9IHBhcnNlSW50KG1hdGNoZXNbM10sIDEwKSB8fCAwXG4gIGNvbnN0IGhvdXJzID0gcGFyc2VJbnQobWF0Y2hlc1s0XSwgMTApIHx8IDBcbiAgaWYgKHllYXJzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBlcjogJ3llYXInLFxuICAgICAgdXBkYXRlZFRpbWVzOiAxLFxuICAgIH1cbiAgfSBlbHNlIGlmIChtb250aHMgPT09IDEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGVyOiAnbW9udGgnLFxuICAgICAgdXBkYXRlZFRpbWVzOiAxLFxuICAgIH1cbiAgfSBlbHNlIGlmIChtb250aHMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGVyOiAneWVhcicsXG4gICAgICB1cGRhdGVkVGltZXM6IE1hdGgucm91bmQoMTIgLyBtb250aHMpLFxuICAgIH1cbiAgfSBlbHNlIGlmIChkYXlzID09PSAxKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBlcjogJ2RheScsXG4gICAgICB1cGRhdGVkVGltZXM6IDEsXG4gICAgfVxuICB9IGVsc2UgaWYgKGRheXMgPj0gMSAmJiBkYXlzIDw9IDcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGVyOiAnd2VlaycsXG4gICAgICB1cGRhdGVkVGltZXM6IE1hdGgucm91bmQoNyAvIGRheXMgLSAwLjAwMDEpLCAvLyB0aGlzIGlzIHRvIG1ha2Ugc3VyZSB0aGF0ICdldmVyeSAyIGRheXMnID0gJzMgdGltZXMgcGVyIHdlZWsnXG4gICAgfVxuICB9IGVsc2UgaWYgKGRheXMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGVyOiAnbW9udGgnLFxuICAgICAgdXBkYXRlZFRpbWVzOiBNYXRoLnJvdW5kKDMwIC8gZGF5cyksXG4gICAgfVxuICB9IGVsc2UgaWYgKGhvdXJzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBlcjogJ2RheScsXG4gICAgICB1cGRhdGVkVGltZXM6IE1hdGgucm91bmQoMjQgLyBob3VycyksXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbi8vIGZyb20gZ21kOk1EX01haW50ZW5hbmNlSW5mb3JtYXRpb25cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0VXBkYXRlRnJlcXVlbmN5KCk6IENoYWluYWJsZUZ1bmN0aW9uPFxuICBYbWxFbGVtZW50LFxuICBVcGRhdGVGcmVxdWVuY3lcbj4ge1xuICByZXR1cm4gZmFsbGJhY2soXG4gICAgcGlwZShcbiAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpNRF9NYWludGVuYW5jZUZyZXF1ZW5jeUNvZGUnKSxcbiAgICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSxcbiAgICAgIG1hcChnZXRVcGRhdGVGcmVxdWVuY3lGcm9tRnJlcXVlbmN5Q29kZSlcbiAgICApLFxuICAgIHBpcGUoXG4gICAgICBmaW5kTmVzdGVkRWxlbWVudChcbiAgICAgICAgJ2dtZDp1c2VyRGVmaW5lZE1haW50ZW5hbmNlRnJlcXVlbmN5JyxcbiAgICAgICAgJ2d0czpUTV9QZXJpb2REdXJhdGlvbidcbiAgICAgICksXG4gICAgICByZWFkVGV4dCgpLFxuICAgICAgbWFwKGdldFVwZGF0ZUZyZXF1ZW5jeUZyb21DdXN0b21QZXJpb2QpXG4gICAgKSxcbiAgICBtYXAoKCkgPT4gJ3Vua25vd24nKVxuICApXG59XG5cbi8qKlxuICogTG9va3MgZm9yIHNydjpTVl9TZXJ2aWNlSWRlbnRpZmljYXRpb24gb3IgZ21kOk1EX0RhdGFJZGVudGlmaWNhdGlvbiBlbGVtZW50XG4gKiBXaWxsIGZpbmQgdGhlIGZpcnN0IG9uZSB0aGF0IGV4aXN0cywgbm90IHJlYWRpbmcgdGhlIHR5cGUgb2YgdGhlIHJlY29yZFxuICogKHRoaXMgYWxsb3dzIHVzaW5nIHRoaXMgZnVuY3Rpb24gaW4gb3RoZXIgc2ltaWxhciBzY2hlbWFzKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZElkZW50aWZpY2F0aW9uKCkge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6aWRlbnRpZmljYXRpb25JbmZvJywgZmFsc2UpLFxuICAgIGNvbWJpbmUoXG4gICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6TURfRGF0YUlkZW50aWZpY2F0aW9uJywgZmFsc2UpLFxuICAgICAgZmluZENoaWxkRWxlbWVudCgnc3J2OlNWX1NlcnZpY2VJZGVudGlmaWNhdGlvbicsIGZhbHNlKVxuICAgICksXG4gICAgZmlsdGVyQXJyYXkoKGVsKSA9PiBlbCAhPT0gbnVsbCksXG4gICAgZ2V0QXRJbmRleCgwKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0SWRlbnRpZmljYXRpb25EYXRlKFxuICB0eXBlOiAnY3JlYXRpb24nIHwgJ3JldmlzaW9uJyB8ICdwdWJsaWNhdGlvbidcbikge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpjaXRhdGlvbicsICdnbWQ6Q0lfQ2l0YXRpb24nLCAnZ21kOmRhdGUnKSxcbiAgICBmaWx0ZXJBcnJheShcbiAgICAgIHBpcGUoXG4gICAgICAgIGZpbmROZXN0ZWRFbGVtZW50cyhcbiAgICAgICAgICAnZ21kOkNJX0RhdGUnLFxuICAgICAgICAgICdnbWQ6ZGF0ZVR5cGUnLFxuICAgICAgICAgICdnbWQ6Q0lfRGF0ZVR5cGVDb2RlJ1xuICAgICAgICApLFxuICAgICAgICBnZXRBdEluZGV4KDApLFxuICAgICAgICByZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJyksXG4gICAgICAgIG1hcCgodmFsdWUpID0+IHZhbHVlID09PSB0eXBlKVxuICAgICAgKVxuICAgICksXG4gICAgZ2V0QXRJbmRleCgwKSxcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpDSV9EYXRlJywgJ2dtZDpkYXRlJyksXG4gICAgZ2V0QXRJbmRleCgwKSxcbiAgICBleHRyYWN0RGF0ZVRpbWUoKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTcGF0aWFsUmVwcmVzZW50YXRpb25Gcm9tQ29kZShcbiAgc3BhdGlhbFJlcHJlc2VudGF0aW9uQ29kZTogc3RyaW5nXG4pOiBTcGF0aWFsUmVwcmVzZW50YXRpb25UeXBlIHwgbnVsbCB7XG4gIHN3aXRjaCAoc3BhdGlhbFJlcHJlc2VudGF0aW9uQ29kZSkge1xuICAgIGNhc2UgJ2dyaWQnOlxuICAgIGNhc2UgJ3ZlY3Rvcic6XG4gICAgY2FzZSAndGluJzpcbiAgICBjYXNlICd0YWJsZSc6XG4gICAgY2FzZSAncG9pbnQnOlxuICAgICAgcmV0dXJuIHNwYXRpYWxSZXByZXNlbnRhdGlvbkNvZGVcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFVuaXF1ZUlkZW50aWZpZXIocm9vdEVsOiBYbWxFbGVtZW50KTogc3RyaW5nIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOmZpbGVJZGVudGlmaWVyJywgZmFsc2UpLFxuICAgIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRLaW5kKHJvb3RFbDogWG1sRWxlbWVudCk6IFJlY29yZEtpbmQge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudCgnZ21kOmhpZXJhcmNoeUxldmVsJywgJ2dtZDpNRF9TY29wZUNvZGUnKSxcbiAgICByZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJyksXG4gICAgbWFwKChzY29wZUNvZGUpOiBSZWNvcmRLaW5kID0+IGdldFJlc291cmNlVHlwZShzY29wZUNvZGUpKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRPd25lck9yZ2FuaXphdGlvbihyb290RWw6IFhtbEVsZW1lbnQpOiBPcmdhbml6YXRpb24ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudCgnZ21kOmNvbnRhY3QnLCAnZ21kOkNJX1Jlc3BvbnNpYmxlUGFydHknKSxcbiAgICBleHRyYWN0T3JnYW5pemF0aW9uKClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkUmVzb3VyY2VVcGRhdGVkKHJvb3RFbDogWG1sRWxlbWVudCk6IERhdGUge1xuICByZXR1cm4gZXh0cmFjdElkZW50aWZpY2F0aW9uRGF0ZSgncmV2aXNpb24nKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkUmVzb3VyY2VDcmVhdGVkKHJvb3RFbDogWG1sRWxlbWVudCk6IERhdGUge1xuICByZXR1cm4gZXh0cmFjdElkZW50aWZpY2F0aW9uRGF0ZSgnY3JlYXRpb24nKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkUmVzb3VyY2VQdWJsaXNoZWQocm9vdEVsOiBYbWxFbGVtZW50KTogRGF0ZSB7XG4gIHJldHVybiBleHRyYWN0SWRlbnRpZmljYXRpb25EYXRlKCdwdWJsaWNhdGlvbicpKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRSZWNvcmRVcGRhdGVkKHJvb3RFbDogWG1sRWxlbWVudCk6IERhdGUge1xuICByZXR1cm4gcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6ZGF0ZVN0YW1wJyksIGV4dHJhY3REYXRlVGltZSgpKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkUmV1c2VUeXBlKHJvb3RFbDogWG1sRWxlbWVudCk6IFJldXNlVHlwZSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6aGllcmFyY2h5TGV2ZWwnLCAnZ21kOk1EX1Njb3BlQ29kZScpLFxuICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSxcbiAgICBtYXAoKHNjb3BlQ29kZSk6IFJldXNlVHlwZSA9PiBnZXRSZXVzZVR5cGUoc2NvcGVDb2RlKSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkVGl0bGUoXG4gIHJvb3RFbDogWG1sRWxlbWVudCxcbiAgdHJhbnNsYXRpb25zOiBSZWNvcmRUcmFuc2xhdGlvbnNcbik6IHN0cmluZyB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6Y2l0YXRpb24nLCAnZ21kOkNJX0NpdGF0aW9uJywgJ2dtZDp0aXRsZScpLFxuICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmcoJ3RpdGxlJywgdHJhbnNsYXRpb25zKSxcbiAgICBtYXAoKFt0aXRsZV0pID0+IHRpdGxlKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRBYnN0cmFjdChcbiAgcm9vdEVsOiBYbWxFbGVtZW50LFxuICB0cmFuc2xhdGlvbnM6IFJlY29yZFRyYW5zbGF0aW9uc1xuKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOmFic3RyYWN0JywgZmFsc2UpLFxuICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmcoJ2Fic3RyYWN0JywgdHJhbnNsYXRpb25zKSxcbiAgICBtYXAoKFthYnN0cmFjdF0pID0+IGFic3RyYWN0KVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRDb250YWN0cyhyb290RWw6IFhtbEVsZW1lbnQpOiBJbmRpdmlkdWFsW10ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6Y29udGFjdCcsIGZhbHNlKSxcbiAgICBtYXBBcnJheShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6Q0lfUmVzcG9uc2libGVQYXJ0eScsIGZhbHNlKSksXG4gICAgbWFwQXJyYXkoZXh0cmFjdEluZGl2aWR1YWwoKSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkQ29udGFjdHNGb3JSZXNvdXJjZShyb290RWw6IFhtbEVsZW1lbnQpOiBJbmRpdmlkdWFsW10ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBjb21iaW5lKFxuICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOmNvbnRhY3QnLCBmYWxzZSksXG4gICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6cG9pbnRPZkNvbnRhY3QnLCBmYWxzZSlcbiAgICApLFxuICAgIGZsYXR0ZW5BcnJheSgpLFxuICAgIG1hcEFycmF5KGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpDSV9SZXNwb25zaWJsZVBhcnR5JywgZmFsc2UpKSxcbiAgICBtYXBBcnJheShleHRyYWN0SW5kaXZpZHVhbCgpKVxuICApKHJvb3RFbClcbn1cblxuLy8gZnJvbSBnbWQ6dGhlc2F1cnVzTmFtZVxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRUaGVzYXVydXMocm9vdEVsOiBYbWxFbGVtZW50KTogVGhlc2F1cnVzTW9kZWwge1xuICBpZiAoIXJvb3RFbCkgcmV0dXJuIG51bGxcblxuICBjb25zdCBmaW5kSWRlbnRpZmllciA9IGZpbmROZXN0ZWRFbGVtZW50KFxuICAgICdnbWQ6Q0lfQ2l0YXRpb24nLFxuICAgICdnbWQ6aWRlbnRpZmllcicsXG4gICAgJ2dtZDpNRF9JZGVudGlmaWVyJyxcbiAgICAnZ21kOmNvZGUnXG4gIClcbiAgY29uc3QgaWQgPSBwaXBlKGZpbmRJZGVudGlmaWVyLCBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCkpKHJvb3RFbClcbiAgY29uc3QgdXJsID0gcGlwZShmaW5kSWRlbnRpZmllciwgZXh0cmFjdFVybCgpKShyb290RWwpXG4gIGNvbnN0IG5hbWUgPSBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6Q0lfQ2l0YXRpb24nLCAnZ21kOnRpdGxlJyksXG4gICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpXG4gICkocm9vdEVsKVxuICByZXR1cm4ge1xuICAgIGlkLFxuICAgIC4uLihuYW1lICYmIHsgbmFtZSB9KSxcbiAgICAuLi4odXJsICYmIHsgdXJsIH0pLFxuICB9XG59XG5cbi8vIGZyb20gZ21kOk1EX0tleXdvcmRzXG5leHBvcnQgZnVuY3Rpb24gcmVhZEtleXdvcmRHcm91cChyb290RWw6IFhtbEVsZW1lbnQpOiBLZXl3b3JkW10ge1xuICBjb25zdCB0eXBlID0gcGlwZShcbiAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6TURfS2V5d29yZFR5cGVDb2RlJyksXG4gICAgbWFwQXJyYXkocmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpKSxcbiAgICBtYXAoKHZhbHVlcykgPT4gZ2V0S2V5d29yZFR5cGVGcm9tS2V5d29yZFR5cGVDb2RlKHZhbHVlc1swXSkpXG4gICkocm9vdEVsKVxuICBjb25zdCB0aGVzYXVydXMgPSBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6dGhlc2F1cnVzTmFtZScpLFxuICAgIHJlYWRUaGVzYXVydXNcbiAgKShyb290RWwpXG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDprZXl3b3JkJyksXG4gICAgbWFwQXJyYXkoKGVsKSA9PiB7XG4gICAgICBjb25zdCBbbGFiZWwsIHRyYW5zbGF0aW9uc10gPVxuICAgICAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nPEtleXdvcmRUcmFuc2xhdGlvbnM+KCdsYWJlbCcpKGVsKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uKHRoZXNhdXJ1cyA/IHsgdGhlc2F1cnVzIH0gOiB7fSksXG4gICAgICAgIGxhYmVsLFxuICAgICAgICB0eXBlLFxuICAgICAgICB0cmFuc2xhdGlvbnMsXG4gICAgICB9IGFzIEtleXdvcmRcbiAgICB9KVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRLZXl3b3Jkcyhyb290RWw6IFhtbEVsZW1lbnQpOiBLZXl3b3JkW10ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpkZXNjcmlwdGl2ZUtleXdvcmRzJywgJ2dtZDpNRF9LZXl3b3JkcycpLFxuICAgIG1hcEFycmF5KHJlYWRLZXl3b3JkR3JvdXApLFxuICAgIGZsYXR0ZW5BcnJheSgpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFN0YXR1cyhyb290RWw6IFhtbEVsZW1lbnQpOiBSZWNvcmRTdGF0dXMge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6c3RhdHVzJywgZmFsc2UpLFxuICAgIGV4dHJhY3RTdGF0dXMoKVxuICApKHJvb3RFbClcbn1cblxuY29uc3QgZ2V0Q29uc3RyYWludHMgPSBwaXBlKFxuICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOnJlc291cmNlQ29uc3RyYWludHMnLCBmYWxzZSlcbilcblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRMZWdhbENvbnN0cmFpbnRzKHJvb3RFbDogWG1sRWxlbWVudCk6IENvbnN0cmFpbnRbXSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGdldENvbnN0cmFpbnRzLFxuICAgIG1hcEFycmF5KGV4dHJhY3RMZWdhbENvbnN0cmFpbnRzKCkpLFxuICAgIGZsYXR0ZW5BcnJheSgpLFxuICAgIGZsYXR0ZW5BcnJheSgpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFNlY3VyaXR5Q29uc3RyYWludHMocm9vdEVsOiBYbWxFbGVtZW50KTogQ29uc3RyYWludFtdIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZ2V0Q29uc3RyYWludHMsXG4gICAgbWFwQXJyYXkoZXh0cmFjdFNlY3VyaXR5Q29uc3RyYWludHMoKSksXG4gICAgZmxhdHRlbkFycmF5KClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkT3RoZXJDb25zdHJhaW50cyhyb290RWw6IFhtbEVsZW1lbnQpOiBDb25zdHJhaW50W10ge1xuICByZXR1cm4gcGlwZShcbiAgICBnZXRDb25zdHJhaW50cyxcbiAgICBtYXBBcnJheShleHRyYWN0T3RoZXJDb25zdHJhaW50cygpKSxcbiAgICBmbGF0dGVuQXJyYXkoKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRMaWNlbnNlcyhyb290RWw6IFhtbEVsZW1lbnQpOiBDb25zdHJhaW50W10ge1xuICByZXR1cm4gcGlwZShcbiAgICBnZXRDb25zdHJhaW50cyxcbiAgICBtYXBBcnJheShleHRyYWN0TGljZW5zZXMoKSksXG4gICAgZmxhdHRlbkFycmF5KClcbiAgKShyb290RWwpXG59XG5cbi8vIG5vdCB1c2VkIHlldFxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRJc29Ub3BpY3Mocm9vdEVsOiBYbWxFbGVtZW50KTogc3RyaW5nW10ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6TURfVG9waWNDYXRlZ29yeUNvZGUnLCB0cnVlKSxcbiAgICBtYXBBcnJheShyZWFkVGV4dCgpKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRTcGF0aWFsUmVwcmVzZW50YXRpb24oXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKTogU3BhdGlhbFJlcHJlc2VudGF0aW9uVHlwZSB8IG51bGwge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkRWxlbWVudChcbiAgICAgICdnbWQ6c3BhdGlhbFJlcHJlc2VudGF0aW9uVHlwZScsXG4gICAgICAnZ21kOk1EX1NwYXRpYWxSZXByZXNlbnRhdGlvblR5cGVDb2RlJ1xuICAgICksXG4gICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpLFxuICAgIG1hcChnZXRTcGF0aWFsUmVwcmVzZW50YXRpb25Gcm9tQ29kZSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkT3ZlcnZpZXdzKHJvb3RFbDogWG1sRWxlbWVudCk6IEdyYXBoaWNPdmVydmlld1tdIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOmdyYXBoaWNPdmVydmlldycsIGZhbHNlKSxcbiAgICBtYXBBcnJheShcbiAgICAgIGNvbWJpbmUoXG4gICAgICAgIHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOmZpbGVOYW1lJyksIGV4dHJhY3RNYW5kYXRvcnlVcmwoKSksXG4gICAgICAgIHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOmZpbGVEZXNjcmlwdGlvbicpLCBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCkpXG4gICAgICApXG4gICAgKSxcbiAgICBtYXBBcnJheSgoW3VybCwgZGVzY3JpcHRpb25dKSA9PiAoe1xuICAgICAgdXJsLFxuICAgICAgLi4uKGRlc2NyaXB0aW9uICYmIHsgZGVzY3JpcHRpb24gfSksXG4gICAgfSkpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZExpbmVhZ2UoXG4gIHJvb3RFbDogWG1sRWxlbWVudCxcbiAgdHJhbnNsYXRpb25zOiBSZWNvcmRUcmFuc2xhdGlvbnNcbik6IHN0cmluZyB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KFxuICAgICAgJ2dtZDpkYXRhUXVhbGl0eUluZm8nLFxuICAgICAgJ2dtZDpEUV9EYXRhUXVhbGl0eScsXG4gICAgICAnZ21kOmxpbmVhZ2UnLFxuICAgICAgJ2dtZDpMSV9MaW5lYWdlJyxcbiAgICAgICdnbWQ6c3RhdGVtZW50J1xuICAgICksXG4gICAgZXh0cmFjdExvY2FsaXplZENoYXJhY3RlclN0cmluZygnbGluZWFnZScsIHRyYW5zbGF0aW9ucyksXG4gICAgbWFwKChbbGluZWFnZV0pID0+IGxpbmVhZ2UpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFVwZGF0ZUZyZXF1ZW5jeShyb290RWw6IFhtbEVsZW1lbnQpOiBVcGRhdGVGcmVxdWVuY3kge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkRWxlbWVudChcbiAgICAgICdnbWQ6cmVzb3VyY2VNYWludGVuYW5jZScsXG4gICAgICAnZ21kOk1EX01haW50ZW5hbmNlSW5mb3JtYXRpb24nXG4gICAgKSxcbiAgICBleHRyYWN0VXBkYXRlRnJlcXVlbmN5KCksXG4gICAgbWFwKCh1cGRhdGVGcmVxdWVuY3kpID0+IHVwZGF0ZUZyZXF1ZW5jeSB8fCAndW5rbm93bicpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFNlcnZpY2VPbmxpbmVSZXNvdXJjZXMoKTogQ2hhaW5hYmxlRnVuY3Rpb248XG4gIFhtbEVsZW1lbnQsXG4gIFNlcnZpY2VPbmxpbmVSZXNvdXJjZVtdXG4+IHtcbiAgY29uc3QgZ2V0VXJsID0gcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6bGlua2FnZScpLCBleHRyYWN0TWFuZGF0b3J5VXJsKCkpXG4gIGNvbnN0IGdldFByb3RvY29sU3RyID0gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6cHJvdG9jb2wnKSxcbiAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKClcbiAgKVxuICBjb25zdCBnZXRQcm90b2NvbCA9IHBpcGUoZ2V0UHJvdG9jb2xTdHIsIG1hcChtYXRjaFByb3RvY29sKSlcbiAgY29uc3QgZ2V0T25saW5lRnVuY3Rpb24gPSBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6ZnVuY3Rpb24nLCAnZ21kOkNJX09uTGluZUZ1bmN0aW9uQ29kZScpLFxuICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKVxuICApXG4gIGNvbnN0IGdldElzTGluayA9IHBpcGUoXG4gICAgZ2V0T25saW5lRnVuY3Rpb24sXG4gICAgbWFwKChvbmxpbmVGdW5jdGlvbikgPT4gb25saW5lRnVuY3Rpb24gPT09ICdpbmZvcm1hdGlvbicpXG4gIClcbiAgY29uc3QgZ2V0TmFtZSA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOm5hbWUnKSxcbiAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nPE9ubGluZVJlc291cmNlVHJhbnNsYXRpb25zPignbmFtZScpXG4gIClcbiAgY29uc3QgZ2V0RGVzY3JpcHRpb24gPSBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpkZXNjcmlwdGlvbicpLFxuICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmc8T25saW5lUmVzb3VyY2VUcmFuc2xhdGlvbnM+KFxuICAgICAgJ2Rlc2NyaXB0aW9uJyxcbiAgICAgIHt9XG4gICAgKVxuICApXG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50cyhcbiAgICAgICdnbWQ6dHJhbnNmZXJPcHRpb25zJyxcbiAgICAgICdnbWQ6TURfRGlnaXRhbFRyYW5zZmVyT3B0aW9ucycsXG4gICAgICAnZ21kOm9uTGluZScsXG4gICAgICAnZ21kOkNJX09ubGluZVJlc291cmNlJ1xuICAgICksXG4gICAgbWFwQXJyYXkoY29tYmluZShnZXRJc0xpbmssIGdldFByb3RvY29sLCBnZXRVcmwsIGdldE5hbWUsIGdldERlc2NyaXB0aW9uKSksXG4gICAgbWFwQXJyYXkoXG4gICAgICAoW1xuICAgICAgICBpc0xpbmssXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICB1cmwsXG4gICAgICAgIFtuYW1lLCBuYW1lVHJhbnNsYXRpb25zXSxcbiAgICAgICAgW2Rlc2NyaXB0aW9uLCBkZXNjcmlwdGlvblRyYW5zbGF0aW9uc10sXG4gICAgICBdKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IHtcbiAgICAgICAgICAuLi5uYW1lVHJhbnNsYXRpb25zLFxuICAgICAgICAgIC4uLmRlc2NyaXB0aW9uVHJhbnNsYXRpb25zLFxuICAgICAgICB9XG4gICAgICAgIGlmIChpc0xpbmspIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2xpbmsnLFxuICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICAuLi4obmFtZSAmJiB7IG5hbWUgfSksXG4gICAgICAgICAgICAuLi4oZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbiB9KSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdlbmRwb2ludCcsXG4gICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgIGFjY2Vzc1NlcnZpY2VQcm90b2NvbDogcHJvdG9jb2wsXG4gICAgICAgICAgICAuLi4oZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbiB9KSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RSZXVzZU9ubGluZVJlc291cmNlcygpOiBDaGFpbmFibGVGdW5jdGlvbjxcbiAgWG1sRWxlbWVudCxcbiAgT25saW5lTGlua1Jlc291cmNlW11cbj4ge1xuICBjb25zdCBnZXRVcmwgPSBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpsaW5rYWdlJyksIGV4dHJhY3RNYW5kYXRvcnlVcmwoKSlcbiAgY29uc3QgZ2V0TmFtZSA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOm5hbWUnKSxcbiAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nPE9ubGluZVJlc291cmNlVHJhbnNsYXRpb25zPignbmFtZScpXG4gIClcbiAgY29uc3QgZ2V0RGVzY3JpcHRpb24gPSBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpkZXNjcmlwdGlvbicpLFxuICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmc8T25saW5lUmVzb3VyY2VUcmFuc2xhdGlvbnM+KFxuICAgICAgJ2Rlc2NyaXB0aW9uJyxcbiAgICAgIHt9XG4gICAgKVxuICApXG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50cyhcbiAgICAgICdnbWQ6dHJhbnNmZXJPcHRpb25zJyxcbiAgICAgICdnbWQ6TURfRGlnaXRhbFRyYW5zZmVyT3B0aW9ucycsXG4gICAgICAnZ21kOm9uTGluZScsXG4gICAgICAnZ21kOkNJX09ubGluZVJlc291cmNlJ1xuICAgICksXG4gICAgbWFwQXJyYXkoY29tYmluZShnZXRVcmwsIGdldE5hbWUsIGdldERlc2NyaXB0aW9uKSksXG4gICAgbWFwQXJyYXkoXG4gICAgICAoW1xuICAgICAgICB1cmwsXG4gICAgICAgIFtuYW1lLCBuYW1lVHJhbnNsYXRpb25zXSxcbiAgICAgICAgW2Rlc2NyaXB0aW9uLCBkZXNjcmlwdGlvblRyYW5zbGF0aW9uc10sXG4gICAgICBdKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IHtcbiAgICAgICAgICAuLi5uYW1lVHJhbnNsYXRpb25zLFxuICAgICAgICAgIC4uLmRlc2NyaXB0aW9uVHJhbnNsYXRpb25zLFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogJ2xpbmsnLFxuICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgIC4uLihuYW1lICYmIHsgbmFtZSB9KSxcbiAgICAgICAgICAuLi4oZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbiB9KSxcbiAgICAgICAgICB0cmFuc2xhdGlvbnMsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRPbmxpbmVSZXNvdXJjZXMocm9vdEVsOiBYbWxFbGVtZW50KTogT25saW5lUmVzb3VyY2VbXSB7XG4gIGxldCBnZXRPbmxpbmVSZXNvdXJjZXM6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIE9ubGluZVJlc291cmNlW10+XG4gIGlmIChyZWFkS2luZChyb290RWwpID09PSAnZGF0YXNldCcpIHtcbiAgICBnZXRPbmxpbmVSZXNvdXJjZXMgPSAoZWwpID0+IGV4dHJhY3REYXRhc2V0T25saW5lUmVzb3VyY2VzKGdldE1pbWVUeXBlKShlbClcbiAgfSBlbHNlIGlmIChyZWFkS2luZChyb290RWwpID09PSAnc2VydmljZScpIHtcbiAgICBnZXRPbmxpbmVSZXNvdXJjZXMgPSBleHRyYWN0U2VydmljZU9ubGluZVJlc291cmNlcygpXG4gIH0gZWxzZSB7XG4gICAgZ2V0T25saW5lUmVzb3VyY2VzID0gZXh0cmFjdFJldXNlT25saW5lUmVzb3VyY2VzKClcbiAgfVxuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpkaXN0cmlidXRpb25JbmZvJywgJ2dtZDpNRF9EaXN0cmlidXRpb24nKSxcbiAgICBtYXBBcnJheShnZXRPbmxpbmVSZXNvdXJjZXMpLFxuICAgIGZsYXR0ZW5BcnJheSgpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFRlbXBvcmFsRXh0ZW50cyhyb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZEVsZW1lbnRzKCdnbWQ6ZXh0ZW50JywgJ2dtZDpFWF9FeHRlbnQnLCAnZ21kOnRlbXBvcmFsRWxlbWVudCcpLFxuICAgIG1hcEFycmF5KFxuICAgICAgY29tYmluZShcbiAgICAgICAgZmluZE5lc3RlZEVsZW1lbnQoXG4gICAgICAgICAgJ2dtZDpFWF9UZW1wb3JhbEV4dGVudCcsXG4gICAgICAgICAgJ2dtZDpleHRlbnQnLFxuICAgICAgICAgICdnbWw6VGltZVBlcmlvZCdcbiAgICAgICAgKSxcbiAgICAgICAgZmluZE5lc3RlZEVsZW1lbnQoXG4gICAgICAgICAgJ2dtZDpFWF9UZW1wb3JhbEV4dGVudCcsXG4gICAgICAgICAgJ2dtZDpleHRlbnQnLFxuICAgICAgICAgICdnbWw6VGltZUluc3RhbnQnXG4gICAgICAgIClcbiAgICAgIClcbiAgICApLFxuICAgIG1hcEFycmF5KChbcGVyaW9kRWwsIGluc3RhbnRFbF0pID0+IHtcbiAgICAgIGlmIChwZXJpb2RFbCkge1xuICAgICAgICByZXR1cm4gcGlwZShcbiAgICAgICAgICBjb21iaW5lKFxuICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgZmluZENoaWxkRWxlbWVudCgnZ21sOmJlZ2luUG9zaXRpb24nLCBmYWxzZSksXG4gICAgICAgICAgICAgIHJlYWRUZXh0KCksXG4gICAgICAgICAgICAgIG1hcCgoZGF0ZVN0cikgPT4gKGRhdGVTdHIgPyBuZXcgRGF0ZShkYXRlU3RyKSA6IG51bGwpKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtbDplbmRQb3NpdGlvbicsIGZhbHNlKSxcbiAgICAgICAgICAgICAgcmVhZFRleHQoKSxcbiAgICAgICAgICAgICAgbWFwKChkYXRlU3RyKSA9PiAoZGF0ZVN0ciA/IG5ldyBEYXRlKGRhdGVTdHIpIDogbnVsbCkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgICBtYXAoKFtzdGFydCwgZW5kXSkgPT4gKHtcbiAgICAgICAgICAgIHN0YXJ0LFxuICAgICAgICAgICAgZW5kLFxuICAgICAgICAgIH0pKVxuICAgICAgICApKHBlcmlvZEVsKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHBpcGUoXG4gICAgICAgICAgZmluZENoaWxkRWxlbWVudCgnZ21sOnRpbWVQb3NpdGlvbicsIGZhbHNlKSxcbiAgICAgICAgICByZWFkVGV4dCgpLFxuICAgICAgICAgIG1hcCgoZGF0ZVN0cikgPT4gKGRhdGVTdHIgPyBuZXcgRGF0ZShkYXRlU3RyKSA6IG51bGwpKSxcbiAgICAgICAgICBtYXAoKGRhdGUpID0+ICh7XG4gICAgICAgICAgICBzdGFydDogZGF0ZSxcbiAgICAgICAgICB9KSlcbiAgICAgICAgKShpbnN0YW50RWwpXG4gICAgICB9XG4gICAgfSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkU3BhdGlhbEV4dGVudHMocm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIGNvbnN0IGV4dHJhY3RHZW9tZXRyeSA9IChyb290RWw6IFhtbEVsZW1lbnQpOiBHZW9tZXRyeSA9PiB7XG4gICAgaWYgKCFyb290RWwpIHJldHVybiBudWxsXG4gICAgcmV0dXJuIHBpcGUoXG4gICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6cG9seWdvbicsIGZhbHNlKSxcbiAgICAgIGZpcnN0Q2hpbGRFbGVtZW50LFxuICAgICAgbWFwKChlbCkgPT4gKGVsID8gcmVhZEdlb21ldHJ5KGVsKSA6IG51bGwpKVxuICAgICkocm9vdEVsKVxuICB9XG5cbiAgY29uc3QgZXh0cmFjdEJCb3ggPSAoXG4gICAgcm9vdEVsOiBYbWxFbGVtZW50XG4gICk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdID0+IHtcbiAgICBpZiAoIXJvb3RFbCkgcmV0dXJuIG51bGxcbiAgICByZXR1cm4gcGlwZShcbiAgICAgIGNvbWJpbmUoXG4gICAgICAgIHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOndlc3RCb3VuZExvbmdpdHVkZScpLCBleHRyYWN0RGVjaW1hbCgpKSxcbiAgICAgICAgcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6c291dGhCb3VuZExhdGl0dWRlJyksIGV4dHJhY3REZWNpbWFsKCkpLFxuICAgICAgICBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDplYXN0Qm91bmRMb25naXR1ZGUnKSwgZXh0cmFjdERlY2ltYWwoKSksXG4gICAgICAgIHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOm5vcnRoQm91bmRMYXRpdHVkZScpLCBleHRyYWN0RGVjaW1hbCgpKVxuICAgICAgKVxuICAgICkocm9vdEVsKVxuICB9XG5cbiAgY29uc3QgZXh0cmFjdERlc2NyaXB0aW9uID0gKFxuICAgIHJvb3RFbDogWG1sRWxlbWVudFxuICApOiBbc3RyaW5nLCBNb2RlbFRyYW5zbGF0aW9uc10gPT4ge1xuICAgIGlmICghcm9vdEVsKSByZXR1cm4gW251bGwsIHt9XVxuICAgIHJldHVybiBwaXBlKFxuICAgICAgZmluZE5lc3RlZEVsZW1lbnQoXG4gICAgICAgICdnbWQ6Z2VvZ3JhcGhpY0lkZW50aWZpZXInLFxuICAgICAgICAnZ21kOk1EX0lkZW50aWZpZXInLFxuICAgICAgICAnZ21kOmNvZGUnXG4gICAgICApLFxuICAgICAgZXh0cmFjdExvY2FsaXplZENoYXJhY3RlclN0cmluZygnZGVzY3JpcHRpb24nKVxuICAgICkocm9vdEVsKVxuICB9XG5cbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZEVsZW1lbnRzKCdnbWQ6ZXh0ZW50JywgJ2dtZDpFWF9FeHRlbnQnLCAnZ21kOmdlb2dyYXBoaWNFbGVtZW50JyksXG4gICAgbWFwQXJyYXkoXG4gICAgICBjb21iaW5lKFxuICAgICAgICBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpFWF9Cb3VuZGluZ1BvbHlnb24nKSwgZXh0cmFjdEdlb21ldHJ5KSxcbiAgICAgICAgcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6RVhfR2VvZ3JhcGhpY0JvdW5kaW5nQm94JyksIGV4dHJhY3RCQm94KSxcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6RVhfR2VvZ3JhcGhpY0Rlc2NyaXB0aW9uJyksXG4gICAgICAgICAgZXh0cmFjdERlc2NyaXB0aW9uXG4gICAgICAgIClcbiAgICAgIClcbiAgICApLFxuICAgIGZpbHRlckFycmF5KFxuICAgICAgKFtnZW9tZXRyeSwgYmJveCwgW2Rlc2NyaXB0aW9uXV0pID0+ICEhZ2VvbWV0cnkgfHwgISFiYm94IHx8ICEhZGVzY3JpcHRpb25cbiAgICApLFxuICAgIG1hcEFycmF5KChbZ2VvbWV0cnksIGJib3gsIFtkZXNjcmlwdGlvbiwgdHJhbnNsYXRpb25zXV0pID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLihnZW9tZXRyeSAmJiB7IGdlb21ldHJ5IH0pLFxuICAgICAgICAuLi4oYmJveCAmJiB7IGJib3ggfSksXG4gICAgICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgICAgICB0cmFuc2xhdGlvbnMsXG4gICAgICB9XG4gICAgfSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkT3RoZXJMYW5ndWFnZXMocm9vdEVsOiBYbWxFbGVtZW50KTogTGFuZ3VhZ2VDb2RlW10ge1xuICBjb25zdCBkZWZhdWx0TGFuZ3VhZ2UgPSByZWFkRGVmYXVsdExhbmd1YWdlKHJvb3RFbClcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOmxvY2FsZScsIGZhbHNlKSxcbiAgICBtYXBBcnJheShcbiAgICAgIHBpcGUoXG4gICAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpMYW5ndWFnZUNvZGUnKSxcbiAgICAgICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpLFxuICAgICAgICBtYXAoKGxhbmcpID0+IExBTkdfM19UT18yX01BUFBFUltsYW5nLnRvTG93ZXJDYXNlKCldKVxuICAgICAgKVxuICAgICksXG4gICAgbWFwKChsYW5ndWFnZXMpID0+IChsYW5ndWFnZXMubGVuZ3RoID8gbGFuZ3VhZ2VzIDogW2RlZmF1bHRMYW5ndWFnZV0pKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWREZWZhdWx0TGFuZ3VhZ2Uocm9vdEVsOiBYbWxFbGVtZW50KTogTGFuZ3VhZ2VDb2RlIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOmxhbmd1YWdlJywgZmFsc2UpLFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpMYW5ndWFnZUNvZGUnKSxcbiAgICByZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJyksXG4gICAgbWFwKChsYW5nKSA9PiAobGFuZyA/IExBTkdfM19UT18yX01BUFBFUltsYW5nLnRvTG93ZXJDYXNlKCldIDogbnVsbCkpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFJlc291cmNlSWRlbnRpZmllcihyb290RWw6IFhtbEVsZW1lbnQpOiBzdHJpbmcge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkRWxlbWVudChcbiAgICAgICdnbWQ6Y2l0YXRpb24nLFxuICAgICAgJ2dtZDpDSV9DaXRhdGlvbicsXG4gICAgICAnZ21kOmlkZW50aWZpZXInLFxuICAgICAgJ2dtZDpNRF9JZGVudGlmaWVyJyxcbiAgICAgICdnbWQ6Y29kZSdcbiAgICApLFxuICAgIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKVxuICApKHJvb3RFbClcbn1cbiJdfQ==
|
|
485
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZC1wYXJ0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXBpL21ldGFkYXRhLWNvbnZlcnRlci9zcmMvbGliL2lzbzE5MTM5L3JlYWQtcGFydHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBNEJBLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUE7QUFDNUUsT0FBTyxFQUVMLE9BQU8sRUFDUCxRQUFRLEVBQ1IsV0FBVyxFQUNYLFlBQVksRUFDWixVQUFVLEVBQ1YsR0FBRyxFQUNILFFBQVEsRUFDUixJQUFJLEdBQ0wsTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLFVBQVUsRUFDVixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLFFBQVEsR0FFVCxNQUFNLGNBQWMsQ0FBQTtBQUNyQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBQ3pELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQzFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3pELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQy9ELE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQ3JGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlEQUF5RCxDQUFBO0FBQzVGLE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFFeEUsTUFBTSxVQUFVLHNCQUFzQjtJQUlwQyxPQUFPLElBQUksQ0FDVCxRQUFRLENBQ04sZ0JBQWdCLENBQUMscUJBQXFC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QUNULGtCQUFrQixFQUFFLEVBQ3BCLGlCQUFpQixDQUNmLGNBQWMsRUFDZCxpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixVQUFVLENBQ1gsRUFDRCxzQkFBc0IsRUFBRSxDQUN6QixDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ1gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbnN0cmFpbnQsXG4gIENvbnN0cmFpbnRUcmFuc2xhdGlvbnMsXG4gIERhdGFzZXRPbmxpbmVSZXNvdXJjZSxcbiAgRmllbGRUcmFuc2xhdGlvbixcbiAgR3JhcGhpY092ZXJ2aWV3LFxuICBJbmRpdmlkdWFsLFxuICBLZXl3b3JkLFxuICBLZXl3b3JkVHJhbnNsYXRpb25zLFxuICBMYW5ndWFnZUNvZGUsXG4gIE1vZGVsVHJhbnNsYXRpb25zLFxuICBPbmxpbmVMaW5rUmVzb3VyY2UsXG4gIE9ubGluZVJlc291cmNlLFxuICBPbmxpbmVSZXNvdXJjZVRyYW5zbGF0aW9ucyxcbiAgT3JnYW5pemF0aW9uLFxuICBPcmdhbml6YXRpb25UcmFuc2xhdGlvbnMsXG4gIFJlY29yZEtpbmQsXG4gIFJlY29yZFN0YXR1cyxcbiAgUmVjb3JkVHJhbnNsYXRpb25zLFxuICBSZXVzZVR5cGUsXG4gIFJvbGUsXG4gIFNlcnZpY2VPbmxpbmVSZXNvdXJjZSxcbiAgU3BhdGlhbFJlcHJlc2VudGF0aW9uVHlwZSxcbiAgVXBkYXRlRnJlcXVlbmN5LFxuICBVcGRhdGVGcmVxdWVuY3lDdXN0b20sXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3JlY29yZCdcbmltcG9ydCB7IFRoZXNhdXJ1c01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvdGhlc2F1cnVzJ1xuaW1wb3J0IHsgR2VvbWV0cnkgfSBmcm9tICdnZW9qc29uJ1xuaW1wb3J0IHsgbWF0Y2hNaW1lVHlwZSwgbWF0Y2hQcm90b2NvbCB9IGZyb20gJy4uL2NvbW1vbi9kaXN0cmlidXRpb24ubWFwcGVyJ1xuaW1wb3J0IHtcbiAgQ2hhaW5hYmxlRnVuY3Rpb24sXG4gIGNvbWJpbmUsXG4gIGZhbGxiYWNrLFxuICBmaWx0ZXJBcnJheSxcbiAgZmxhdHRlbkFycmF5LFxuICBnZXRBdEluZGV4LFxuICBtYXAsXG4gIG1hcEFycmF5LFxuICBwaXBlLFxufSBmcm9tICcuLi9mdW5jdGlvbi11dGlscydcbmltcG9ydCB7XG4gIGZpbmRDaGlsZEVsZW1lbnQsXG4gIGZpbmRDaGlsZHJlbkVsZW1lbnQsXG4gIGZpbmROZXN0ZWRFbGVtZW50LFxuICBmaW5kTmVzdGVkRWxlbWVudHMsXG4gIGZpbmRQYXJlbnQsXG4gIGZpcnN0Q2hpbGRFbGVtZW50LFxuICByZWFkQXR0cmlidXRlLFxuICByZWFkVGV4dCxcbiAgWG1sRWxlbWVudCxcbn0gZnJvbSAnLi4veG1sLXV0aWxzJ1xuaW1wb3J0IHsgcmVhZEdlb21ldHJ5IH0gZnJvbSAnLi91dGlscy9nZW9tZXRyeSdcbmltcG9ydCB7IGZ1bGxOYW1lVG9QYXJ0cyB9IGZyb20gJy4vdXRpbHMvaW5kaXZpZHVhbC1uYW1lJ1xuaW1wb3J0IHsgZ2V0S2V5d29yZFR5cGVGcm9tS2V5d29yZFR5cGVDb2RlIH0gZnJvbSAnLi91dGlscy9rZXl3b3JkLm1hcHBlcidcbmltcG9ydCB7IGdldFJvbGVGcm9tUm9sZUNvZGUgfSBmcm9tICcuL3V0aWxzL3JvbGUubWFwcGVyJ1xuaW1wb3J0IHsgZ2V0U3RhdHVzRnJvbVN0YXR1c0NvZGUgfSBmcm9tICcuL3V0aWxzL3N0YXR1cy5tYXBwZXInXG5pbXBvcnQgeyBnZXRVcGRhdGVGcmVxdWVuY3lGcm9tRnJlcXVlbmN5Q29kZSB9IGZyb20gJy4vdXRpbHMvdXBkYXRlLWZyZXF1ZW5jeS5tYXBwZXInXG5pbXBvcnQgeyBMQU5HXzNfVE9fMl9NQVBQRVIgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3V0aWwvaTE4bi9zcmMvbGliL2xhbmd1YWdlLWNvZGVzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VUeXBlLCBnZXRSZXVzZVR5cGUgfSBmcm9tICcuLi9jb21tb24vcmVzb3VyY2UtdHlwZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCk6IENoYWluYWJsZUZ1bmN0aW9uPFxuICBYbWxFbGVtZW50LFxuICBzdHJpbmdcbj4ge1xuICByZXR1cm4gcGlwZShcbiAgICBmYWxsYmFjayhcbiAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2djbzpDaGFyYWN0ZXJTdHJpbmcnLCBmYWxzZSksXG4gICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbXg6QW5jaG9yJywgZmFsc2UpLFxuICAgICAgZmluZENoaWxkRWxlbWVudCgnZ214Ok1pbWVGaWxlVHlwZScsIGZhbHNlKVxuICAgICksXG4gICAgcmVhZFRleHQoKVxuICApXG59XG5cbi8qKlxuICogVHJhbnNsYXRlZCB2YWx1ZXMgd2lsbCBhbHNvIGJlIGNvbGxlY3RlZCBpbiB0aGUgdHJhbnNsYXRpb25zIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdExvY2FsaXplZENoYXJhY3RlclN0cmluZzxUIGV4dGVuZHMgTW9kZWxUcmFuc2xhdGlvbnM+KFxuICBmaWVsZE5hbWU6IHN0cmluZyxcbiAgdHJhbnNsYXRpb25zPzogVFxuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgW3N0cmluZywgVF0+IHtcbiAgcmV0dXJuIGNvbWJpbmUoXG4gICAgcGlwZShcbiAgICAgIGZhbGxiYWNrKFxuICAgICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnY286Q2hhcmFjdGVyU3RyaW5nJywgZmFsc2UpLFxuICAgICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbXg6QW5jaG9yJywgZmFsc2UpXG4gICAgICApLFxuICAgICAgcmVhZFRleHQoKVxuICAgICksXG4gICAgKGVsKSA9PiB7XG4gICAgICBjb25zdCB0cmFuc2xhdGVkVmFsdWVzID0gZmluZE5lc3RlZEVsZW1lbnRzKFxuICAgICAgICAnZ21kOlBUX0ZyZWVUZXh0JyxcbiAgICAgICAgJ2dtZDp0ZXh0R3JvdXAnLFxuICAgICAgICAnZ21kOkxvY2FsaXNlZENoYXJhY3RlclN0cmluZydcbiAgICAgICkoZWwpXG4gICAgICBjb25zdCB0cmFuc2xhdGlvbnNTYWZlID0gdHJhbnNsYXRpb25zID8/ICh7fSBhcyBUKVxuICAgICAgaWYgKCF0cmFuc2xhdGVkVmFsdWVzLmxlbmd0aCkgcmV0dXJuIHRyYW5zbGF0aW9uc1NhZmVcbiAgICAgIGNvbnN0IHZhbHVlVHJhbnNsYXRpb25zOiBGaWVsZFRyYW5zbGF0aW9uID0gdHJhbnNsYXRlZFZhbHVlcy5yZWR1Y2UoXG4gICAgICAgIChwcmV2LCB0cmFuc2xhdGlvbkVsKSA9PiB7XG4gICAgICAgICAgY29uc3QgbGFuZyA9IHJlYWRBdHRyaWJ1dGUoJ2xvY2FsZScpKHRyYW5zbGF0aW9uRWwpXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgLnJlcGxhY2UoL14jLywgJycpXG4gICAgICAgICAgY29uc3QgdmFsdWUgPSByZWFkVGV4dCgpKHRyYW5zbGF0aW9uRWwpXG4gICAgICAgICAgaWYgKCFsYW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJldlxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyAuLi5wcmV2LCBbbGFuZ106IHZhbHVlIH1cbiAgICAgICAgfSxcbiAgICAgICAge31cbiAgICAgIClcbiAgICAgIHRyYW5zbGF0aW9uc1NhZmVbZmllbGROYW1lXSA9IHtcbiAgICAgICAgLi4udHJhbnNsYXRpb25zU2FmZVtmaWVsZE5hbWVdLFxuICAgICAgICAuLi52YWx1ZVRyYW5zbGF0aW9ucyxcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cmFuc2xhdGlvbnNTYWZlXG4gICAgfVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RGF0ZVRpbWUoKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgRGF0ZT4ge1xuICByZXR1cm4gcGlwZShcbiAgICBmYWxsYmFjayhcbiAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2djbzpEYXRlVGltZScsIGZhbHNlKSxcbiAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2djbzpEYXRlJywgZmFsc2UpXG4gICAgKSxcbiAgICByZWFkVGV4dCgpLFxuICAgIG1hcCgoZGF0ZVN0cikgPT4gKGRhdGVTdHIgPyBuZXcgRGF0ZShkYXRlU3RyKSA6IG51bGwpKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RGVjaW1hbCgpOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBudW1iZXI+IHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ2NvOkRlY2ltYWwnLCBmYWxzZSksXG4gICAgcmVhZFRleHQoKSxcbiAgICBtYXAoKG51bWJlclN0cikgPT4gKG51bWJlclN0ciA/IE51bWJlcihudW1iZXJTdHIpIDogbnVsbCkpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RVcmwoKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgVVJMPiB7XG4gIGNvbnN0IGdldFVybCA9IHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOlVSTCcsIGZhbHNlKSwgcmVhZFRleHQoKSlcbiAgY29uc3QgZ2V0Q2hhcmFjdGVyU3RyaW5nID0gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnY286Q2hhcmFjdGVyU3RyaW5nJywgZmFsc2UpLFxuICAgIHJlYWRUZXh0KClcbiAgKVxuICBjb25zdCBnZXRBbmNob3IgPSBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dteDpBbmNob3InLCBmYWxzZSksXG4gICAgcmVhZEF0dHJpYnV0ZSgneGxpbms6aHJlZicpXG4gIClcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmFsbGJhY2soZ2V0VXJsLCBnZXRBbmNob3IsIGdldENoYXJhY3RlclN0cmluZyksXG4gICAgbWFwKCh1cmxTdHIpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBuZXcgVVJMKHVybFN0cilcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cbiAgICB9KVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0TWFuZGF0b3J5VXJsKCkge1xuICByZXR1cm4gZmFsbGJhY2soZXh0cmFjdFVybCgpLCAoKSA9PiBuZXcgVVJMKCdodHRwOi8vbWlzc2luZycpKVxufVxuXG4vLyBmcm9tIGdtZDpyb2xlXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFJvbGUoKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgUm9sZT4ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6Q0lfUm9sZUNvZGUnKSxcbiAgICByZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJyksXG4gICAgbWFwKGdldFJvbGVGcm9tUm9sZUNvZGUpXG4gIClcbn1cblxuLy8gZnJvbSBnbWQ6Q0lfUmVzcG9uc2libGVQYXJ0eVxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RPcmdhbml6YXRpb24oKTogQ2hhaW5hYmxlRnVuY3Rpb248XG4gIFhtbEVsZW1lbnQsXG4gIE9yZ2FuaXphdGlvblxuPiB7XG4gIGNvbnN0IGdldFVybCA9IHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnRzKFxuICAgICAgJ2dtZDpjb250YWN0SW5mbycsXG4gICAgICAnZ21kOkNJX0NvbnRhY3QnLFxuICAgICAgJ2dtZDpvbmxpbmVSZXNvdXJjZScsXG4gICAgICAnZ21kOkNJX09ubGluZVJlc291cmNlJyxcbiAgICAgICdnbWQ6bGlua2FnZSdcbiAgICApLFxuICAgIGdldEF0SW5kZXgoMCksXG4gICAgZXh0cmFjdFVybCgpXG4gIClcbiAgcmV0dXJuIHBpcGUoXG4gICAgY29tYmluZShcbiAgICAgIHBpcGUoXG4gICAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpvcmdhbmlzYXRpb25OYW1lJywgZmFsc2UpLFxuICAgICAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nPE9yZ2FuaXphdGlvblRyYW5zbGF0aW9ucz4oJ25hbWUnKVxuICAgICAgKSxcbiAgICAgIGdldFVybFxuICAgICksXG4gICAgbWFwKChbW25hbWUsIHRyYW5zbGF0aW9uc10sIHdlYnNpdGVdKSA9PiAoe1xuICAgICAgbmFtZSxcbiAgICAgIC4uLih3ZWJzaXRlICYmIHsgd2Vic2l0ZSB9KSxcbiAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICB9KSlcbiAgKVxufVxuXG4vLyBmcm9tIGdtZDpDSV9SZXNwb25zaWJsZVBhcnR5XG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdEluZGl2aWR1YWwoKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgSW5kaXZpZHVhbD4ge1xuICBjb25zdCBnZXRSb2xlID0gcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6cm9sZScpLCBleHRyYWN0Um9sZSgpKVxuICBjb25zdCBnZXRQb3NpdGlvbiA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOnBvc2l0aW9uTmFtZScpLFxuICAgIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKVxuICApXG4gIGNvbnN0IGdldE5hbWVQYXJ0cyA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOmluZGl2aWR1YWxOYW1lJyksXG4gICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpLFxuICAgIG1hcCgoZnVsbE5hbWUpID0+IHtcbiAgICAgIGlmICghZnVsbE5hbWUpIHJldHVybiBbXVxuICAgICAgcmV0dXJuIGZ1bGxOYW1lVG9QYXJ0cyhmdWxsTmFtZSlcbiAgICB9KVxuICApXG4gIGNvbnN0IGdldE9yZ2FuaXphdGlvbiA9IGV4dHJhY3RPcmdhbml6YXRpb24oKVxuICBjb25zdCBnZXRDb250YWN0Um9vdCA9IGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6Y29udGFjdEluZm8nLCAnZ21kOkNJX0NvbnRhY3QnKVxuICBjb25zdCBnZXRFbWFpbCA9IHBpcGUoXG4gICAgZ2V0Q29udGFjdFJvb3QsXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOmVsZWN0cm9uaWNNYWlsQWRkcmVzcycpLFxuICAgIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKSxcbiAgICBtYXAoKGVtYWlsKSA9PiAoZW1haWwgPT09IG51bGwgPyAnbWlzc2luZ0BtaXNzaW5nLmNvbScgOiBlbWFpbCkpXG4gIClcbiAgY29uc3QgZ2V0QWRkcmVzcyA9IHBpcGUoXG4gICAgZ2V0Q29udGFjdFJvb3QsXG4gICAgZmluZE5lc3RlZEVsZW1lbnQoJ2dtZDphZGRyZXNzJywgJ2dtZDpDSV9BZGRyZXNzJyksXG4gICAgY29tYmluZShcbiAgICAgIHBpcGUoXG4gICAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpkZWxpdmVyeVBvaW50JywgZmFsc2UpLFxuICAgICAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKClcbiAgICAgICksXG4gICAgICBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpjaXR5JywgZmFsc2UpLCBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCkpLFxuICAgICAgcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6cG9zdGFsQ29kZScsIGZhbHNlKSwgZXh0cmFjdENoYXJhY3RlclN0cmluZygpKSxcbiAgICAgIHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOmNvdW50cnknLCBmYWxzZSksIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKSlcbiAgICApLFxuICAgIG1hcCgocGFydHMpID0+IHBhcnRzLmZpbHRlcigocCkgPT4gISFwKS5qb2luKCcsICcpKVxuICApXG4gIGNvbnN0IGdldFBob25lID0gcGlwZShcbiAgICBnZXRDb250YWN0Um9vdCxcbiAgICBmaW5kTmVzdGVkRWxlbWVudCgnZ21kOnBob25lJywgJ2dtZDpDSV9UZWxlcGhvbmUnLCAnZ21kOnZvaWNlJyksXG4gICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpXG4gIClcbiAgcmV0dXJuIHBpcGUoXG4gICAgY29tYmluZShcbiAgICAgIGdldFJvbGUsXG4gICAgICBnZXRQb3NpdGlvbixcbiAgICAgIGdldE5hbWVQYXJ0cyxcbiAgICAgIGdldE9yZ2FuaXphdGlvbixcbiAgICAgIGdldEVtYWlsLFxuICAgICAgZ2V0QWRkcmVzcyxcbiAgICAgIGdldFBob25lXG4gICAgKSxcbiAgICBtYXAoXG4gICAgICAoW1xuICAgICAgICByb2xlLFxuICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgW2ZpcnN0TmFtZSwgbGFzdE5hbWVdLFxuICAgICAgICBvcmdhbml6YXRpb24sXG4gICAgICAgIGVtYWlsLFxuICAgICAgICBhZGRyZXNzLFxuICAgICAgICBwaG9uZSxcbiAgICAgIF0pID0+ICh7XG4gICAgICAgIGVtYWlsLFxuICAgICAgICByb2xlLFxuICAgICAgICBvcmdhbml6YXRpb24sXG4gICAgICAgIC4uLihwb3NpdGlvbiAmJiB7IHBvc2l0aW9uIH0pLFxuICAgICAgICAuLi4oZmlyc3ROYW1lICYmIHsgZmlyc3ROYW1lIH0pLFxuICAgICAgICAuLi4obGFzdE5hbWUgJiYgeyBsYXN0TmFtZSB9KSxcbiAgICAgICAgLi4uKGFkZHJlc3MgJiYgeyBhZGRyZXNzIH0pLFxuICAgICAgICAuLi4ocGhvbmUgJiYgeyBwaG9uZSB9KSxcbiAgICAgIH0pXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0U3RhdHVzKCk6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFJlY29yZFN0YXR1cz4ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6TURfUHJvZ3Jlc3NDb2RlJyksXG4gICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpLFxuICAgIG1hcChnZXRTdGF0dXNGcm9tU3RhdHVzQ29kZSlcbiAgKVxufVxuXG4vLyBmcm9tIGdtZDpyZXNvdXJjZUNvbnN0cmFpbnRzXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdExlZ2FsQ29uc3RyYWludHMoKTogQ2hhaW5hYmxlRnVuY3Rpb248XG4gIFhtbEVsZW1lbnQsXG4gIEFycmF5PENvbnN0cmFpbnQ+XG4+IHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOk1EX0xlZ2FsQ29uc3RyYWludHMnLCBmYWxzZSksXG4gICAgZmlsdGVyQXJyYXkoXG4gICAgICBwaXBlKFxuICAgICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6TURfUmVzdHJpY3Rpb25Db2RlJyksXG4gICAgICAgIG1hcEFycmF5KHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSksXG4gICAgICAgIG1hcCgodmFsdWVzKSA9PiB2YWx1ZXMuaW5kZXhPZignbGljZW5zZScpID09PSAtMSlcbiAgICAgIClcbiAgICApLFxuICAgIG1hcEFycmF5KFxuICAgICAgY29tYmluZShcbiAgICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOm90aGVyQ29uc3RyYWludHMnKSxcbiAgICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOnVzZUxpbWl0YXRpb24nKVxuICAgICAgKVxuICAgICksXG4gICAgZmxhdHRlbkFycmF5KCksXG4gICAgZmxhdHRlbkFycmF5KCksXG4gICAgbWFwQXJyYXkoXG4gICAgICBjb21iaW5lKFxuICAgICAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nPENvbnN0cmFpbnRUcmFuc2xhdGlvbnM+KCd0ZXh0JyksXG4gICAgICAgIGV4dHJhY3RVcmwoKVxuICAgICAgKVxuICAgICksXG4gICAgbWFwQXJyYXkoKFtbdGV4dCwgdHJhbnNsYXRpb25zXSwgdXJsXSkgPT4gKHtcbiAgICAgIC4uLih1cmwgJiYgeyB1cmwgfSksXG4gICAgICB0ZXh0LFxuICAgICAgdHJhbnNsYXRpb25zLFxuICAgIH0pKVxuICApXG59XG5cbi8vIGZyb20gZ21kOnJlc291cmNlQ29uc3RyYWludHNcbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0U2VjdXJpdHlDb25zdHJhaW50cygpOiBDaGFpbmFibGVGdW5jdGlvbjxcbiAgWG1sRWxlbWVudCxcbiAgQXJyYXk8Q29uc3RyYWludD5cbj4ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpNRF9TZWN1cml0eUNvbnN0cmFpbnRzJywgJ2dtZDp1c2VMaW1pdGF0aW9uJyksXG4gICAgZmxhdHRlbkFycmF5KCksXG4gICAgbWFwQXJyYXkoXG4gICAgICBjb21iaW5lKFxuICAgICAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nPENvbnN0cmFpbnRUcmFuc2xhdGlvbnM+KCd0ZXh0JyksXG4gICAgICAgIGV4dHJhY3RVcmwoKVxuICAgICAgKVxuICAgICksXG4gICAgbWFwQXJyYXkoKFtbdGV4dCwgdHJhbnNsYXRpb25zXSwgdXJsXSkgPT4gKHtcbiAgICAgIC4uLih1cmwgJiYgeyB1cmwgfSksXG4gICAgICB0ZXh0LFxuICAgICAgdHJhbnNsYXRpb25zLFxuICAgIH0pKVxuICApXG59XG5cbi8vIGZyb20gZ21kOnJlc291cmNlQ29uc3RyYWludHNcbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0T3RoZXJDb25zdHJhaW50cygpOiBDaGFpbmFibGVGdW5jdGlvbjxcbiAgWG1sRWxlbWVudCxcbiAgQXJyYXk8Q29uc3RyYWludD5cbj4ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpNRF9Db25zdHJhaW50cycsICdnbWQ6dXNlTGltaXRhdGlvbicpLFxuICAgIGZsYXR0ZW5BcnJheSgpLFxuICAgIG1hcEFycmF5KFxuICAgICAgY29tYmluZShcbiAgICAgICAgZXh0cmFjdExvY2FsaXplZENoYXJhY3RlclN0cmluZzxDb25zdHJhaW50VHJhbnNsYXRpb25zPigndGV4dCcpLFxuICAgICAgICBleHRyYWN0VXJsKClcbiAgICAgIClcbiAgICApLFxuICAgIG1hcEFycmF5KChbW3RleHQsIHRyYW5zbGF0aW9uc10sIHVybF0pID0+ICh7XG4gICAgICAuLi4odXJsICYmIHsgdXJsIH0pLFxuICAgICAgdGV4dCxcbiAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICB9KSlcbiAgKVxufVxuXG4vLyBmcm9tIGdtZDpyZXNvdXJjZUNvbnN0cmFpbnRzXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdExpY2Vuc2VzKCk6IENoYWluYWJsZUZ1bmN0aW9uPFxuICBYbWxFbGVtZW50LFxuICBBcnJheTxDb25zdHJhaW50PlxuPiB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpNRF9MZWdhbENvbnN0cmFpbnRzJywgZmFsc2UpLFxuICAgIGZpbHRlckFycmF5KFxuICAgICAgcGlwZShcbiAgICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOk1EX1Jlc3RyaWN0aW9uQ29kZScpLFxuICAgICAgICBtYXBBcnJheShyZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJykpLFxuICAgICAgICBtYXAoKHZhbHVlcykgPT4gdmFsdWVzLmluZGV4T2YoJ2xpY2Vuc2UnKSA+IC0xKVxuICAgICAgKVxuICAgICksXG4gICAgbWFwQXJyYXkoXG4gICAgICBjb21iaW5lKFxuICAgICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6b3RoZXJDb25zdHJhaW50cycpLFxuICAgICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6dXNlTGltaXRhdGlvbicpXG4gICAgICApXG4gICAgKSxcbiAgICBmbGF0dGVuQXJyYXkoKSxcbiAgICBmbGF0dGVuQXJyYXkoKSxcbiAgICBtYXBBcnJheShcbiAgICAgIGNvbWJpbmUoXG4gICAgICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmc8Q29uc3RyYWludFRyYW5zbGF0aW9ucz4oJ3RleHQnKSxcbiAgICAgICAgZXh0cmFjdFVybCgpXG4gICAgICApXG4gICAgKSxcbiAgICBtYXBBcnJheSgoW1t0ZXh0LCB0cmFuc2xhdGlvbnNdLCB1cmxdKSA9PiAoe1xuICAgICAgLi4uKHVybCAmJiB7IHVybCB9KSxcbiAgICAgIHRleHQsXG4gICAgICB0cmFuc2xhdGlvbnMsXG4gICAgfSkpXG4gIClcbn1cblxuY29uc3QgZ2V0TWltZVR5cGUgPSBwaXBlKFxuICBmaW5kUGFyZW50KCdnbWQ6TURfRGlzdHJpYnV0aW9uJyksXG4gIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6ZGlzdHJpYnV0aW9uRm9ybWF0JywgJ2dtZDpNRF9Gb3JtYXQnLCAnZ21kOm5hbWUnKSxcbiAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpLFxuICBtYXAobWF0Y2hNaW1lVHlwZSlcbilcblxuLyoqXG4gKiBFeHRyYWN0IG9ubGluZSByZXNvdXJjZXMgZnJvbSBhbiBNRF9EaXN0cmlidXRpb24gZWxlbWVudFxuICogQHBhcmFtIGdldE1pbWVUeXBlRm4gVGhpcyBmdW5jdGlvbiBzdGFydHMgZnJvbSBhIGdtZDp0cmFuc2Zlck9wdGlvbnMgZWxlbWVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdERhdGFzZXRPbmxpbmVSZXNvdXJjZXMoXG4gIGdldE1pbWVUeXBlRm46IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIHN0cmluZz5cbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIERhdGFzZXRPbmxpbmVSZXNvdXJjZVtdPiB7XG4gIGNvbnN0IGdldFVybCA9IHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOmxpbmthZ2UnKSwgZXh0cmFjdE1hbmRhdG9yeVVybCgpKVxuICBjb25zdCBnZXRQcm90b2NvbFN0ciA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOnByb3RvY29sJyksXG4gICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpXG4gIClcbiAgY29uc3QgZ2V0UHJvdG9jb2wgPSBwaXBlKGdldFByb3RvY29sU3RyLCBtYXAobWF0Y2hQcm90b2NvbCkpXG4gIGNvbnN0IGdldE9ubGluZUZ1bmN0aW9uID0gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudCgnZ21kOmZ1bmN0aW9uJywgJ2dtZDpDSV9PbkxpbmVGdW5jdGlvbkNvZGUnKSxcbiAgICByZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJylcbiAgKVxuICBjb25zdCBnZXRJc1NlcnZpY2UgPSBwaXBlKFxuICAgIGdldFByb3RvY29sLFxuICAgIG1hcCgocHJvdG9jb2wpID0+IHByb3RvY29sICE9PSAnb3RoZXInKVxuICApXG4gIGNvbnN0IGdldElzRG93bmxvYWQgPSBwaXBlKFxuICAgIGNvbWJpbmUoZ2V0SXNTZXJ2aWNlLCBnZXRPbmxpbmVGdW5jdGlvbiwgZ2V0UHJvdG9jb2xTdHIpLFxuICAgIG1hcChcbiAgICAgIChbaXNTZXJ2aWNlLCBvbmxpbmVGdW5jdGlvbiwgcHJvdG9jb2xTdHJdKSA9PlxuICAgICAgICAoIWlzU2VydmljZSAmJiBvbmxpbmVGdW5jdGlvbiA9PT0gJ2Rvd25sb2FkJykgfHxcbiAgICAgICAgL2Rvd25sb2FkL2kudGVzdChwcm90b2NvbFN0cilcbiAgICApXG4gIClcbiAgY29uc3QgZ2V0TmFtZSA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOm5hbWUnKSxcbiAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nPE9ubGluZVJlc291cmNlVHJhbnNsYXRpb25zPignbmFtZScpXG4gIClcbiAgY29uc3QgZ2V0RGVzY3JpcHRpb24gPSBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpkZXNjcmlwdGlvbicpLFxuICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmc8T25saW5lUmVzb3VyY2VUcmFuc2xhdGlvbnM+KCdkZXNjcmlwdGlvbicpXG4gIClcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZE5lc3RlZEVsZW1lbnRzKFxuICAgICAgJ2dtZDp0cmFuc2Zlck9wdGlvbnMnLFxuICAgICAgJ2dtZDpNRF9EaWdpdGFsVHJhbnNmZXJPcHRpb25zJyxcbiAgICAgICdnbWQ6b25MaW5lJyxcbiAgICAgICdnbWQ6Q0lfT25saW5lUmVzb3VyY2UnXG4gICAgKSxcbiAgICBtYXBBcnJheShcbiAgICAgIGNvbWJpbmUoXG4gICAgICAgIGdldElzU2VydmljZSxcbiAgICAgICAgZ2V0SXNEb3dubG9hZCxcbiAgICAgICAgZ2V0UHJvdG9jb2wsXG4gICAgICAgIGdldFVybCxcbiAgICAgICAgZ2V0TmFtZSxcbiAgICAgICAgZ2V0RGVzY3JpcHRpb24sXG4gICAgICAgIGdldE1pbWVUeXBlRm5cbiAgICAgIClcbiAgICApLFxuICAgIG1hcEFycmF5KFxuICAgICAgKFtcbiAgICAgICAgaXNTZXJ2aWNlLFxuICAgICAgICBpc0Rvd25sb2FkLFxuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgdXJsLFxuICAgICAgICBbbmFtZSwgbmFtZVRyYW5zbGF0aW9uc10sXG4gICAgICAgIFtkZXNjcmlwdGlvbiwgZGVzY3JpcHRpb25UcmFuc2xhdGlvbnNdLFxuICAgICAgICBtaW1lVHlwZSxcbiAgICAgIF0pID0+IHtcbiAgICAgICAgY29uc3QgdHJhbnNsYXRpb25zID0ge1xuICAgICAgICAgIC4uLm5hbWVUcmFuc2xhdGlvbnMsXG4gICAgICAgICAgLi4uZGVzY3JpcHRpb25UcmFuc2xhdGlvbnMsXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzU2VydmljZSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnc2VydmljZScsXG4gICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgIGFjY2Vzc1NlcnZpY2VQcm90b2NvbDogcHJvdG9jb2wsXG4gICAgICAgICAgICAuLi4obmFtZSAmJiB7IGlkZW50aWZpZXJJblNlcnZpY2U6IG5hbWUgfSksIC8vIHNob3VsZCB3ZSBrZWVwIHRoZSBpZGVudGlmaWVySW5TZXJ2aWNlPyByZWFkLXdyaXRlIGR1cGxpY2F0ZSB3aXRoIG5hbWVcbiAgICAgICAgICAgIC4uLihuYW1lICYmIHsgbmFtZSB9KSxcbiAgICAgICAgICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgICAgICAgICAgdHJhbnNsYXRpb25zLFxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChpc0Rvd25sb2FkKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdkb3dubG9hZCcsXG4gICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgIC4uLihuYW1lICYmIHsgbmFtZSB9KSxcbiAgICAgICAgICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgICAgICAgICAgLi4uKG1pbWVUeXBlICYmIHsgbWltZVR5cGUgfSksXG4gICAgICAgICAgICB0cmFuc2xhdGlvbnMsXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnbGluaycsXG4gICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgIC4uLihuYW1lICYmIHsgbmFtZSB9KSxcbiAgICAgICAgICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgICAgICAgICAgdHJhbnNsYXRpb25zLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXBkYXRlRnJlcXVlbmN5RnJvbUN1c3RvbVBlcmlvZChcbiAgaXNvUGVyaW9kOiBzdHJpbmdcbik6IFVwZGF0ZUZyZXF1ZW5jeUN1c3RvbSB7XG4gIGlmICghaXNvUGVyaW9kKSByZXR1cm4gbnVsbFxuICBjb25zdCBtYXRjaGVzID0gaXNvUGVyaW9kLm1hdGNoKFxuICAgIC9eLT9QKD86KFswLTldKylZKT8oPzooWzAtOV0rKU0pPyg/OihbMC05XSspRCk/VD8oPzooWzAtOV0rKUgpPy9cbiAgKVxuICBpZiAoIW1hdGNoZXMpIHJldHVybiBudWxsXG4gIGNvbnN0IHllYXJzID0gcGFyc2VJbnQobWF0Y2hlc1sxXSwgMTApIHx8IDBcbiAgY29uc3QgbW9udGhzID0gcGFyc2VJbnQobWF0Y2hlc1syXSwgMTApIHx8IDBcbiAgY29uc3QgZGF5cyA9IHBhcnNlSW50KG1hdGNoZXNbM10sIDEwKSB8fCAwXG4gIGNvbnN0IGhvdXJzID0gcGFyc2VJbnQobWF0Y2hlc1s0XSwgMTApIHx8IDBcbiAgaWYgKHllYXJzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBlcjogJ3llYXInLFxuICAgICAgdXBkYXRlZFRpbWVzOiAxLFxuICAgIH1cbiAgfSBlbHNlIGlmIChtb250aHMgPT09IDEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGVyOiAnbW9udGgnLFxuICAgICAgdXBkYXRlZFRpbWVzOiAxLFxuICAgIH1cbiAgfSBlbHNlIGlmIChtb250aHMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGVyOiAneWVhcicsXG4gICAgICB1cGRhdGVkVGltZXM6IE1hdGgucm91bmQoMTIgLyBtb250aHMpLFxuICAgIH1cbiAgfSBlbHNlIGlmIChkYXlzID09PSAxKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBlcjogJ2RheScsXG4gICAgICB1cGRhdGVkVGltZXM6IDEsXG4gICAgfVxuICB9IGVsc2UgaWYgKGRheXMgPj0gMSAmJiBkYXlzIDw9IDcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGVyOiAnd2VlaycsXG4gICAgICB1cGRhdGVkVGltZXM6IE1hdGgucm91bmQoNyAvIGRheXMgLSAwLjAwMDEpLCAvLyB0aGlzIGlzIHRvIG1ha2Ugc3VyZSB0aGF0ICdldmVyeSAyIGRheXMnID0gJzMgdGltZXMgcGVyIHdlZWsnXG4gICAgfVxuICB9IGVsc2UgaWYgKGRheXMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGVyOiAnbW9udGgnLFxuICAgICAgdXBkYXRlZFRpbWVzOiBNYXRoLnJvdW5kKDMwIC8gZGF5cyksXG4gICAgfVxuICB9IGVsc2UgaWYgKGhvdXJzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBlcjogJ2RheScsXG4gICAgICB1cGRhdGVkVGltZXM6IE1hdGgucm91bmQoMjQgLyBob3VycyksXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbi8vIGZyb20gZ21kOk1EX01haW50ZW5hbmNlSW5mb3JtYXRpb25cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0VXBkYXRlRnJlcXVlbmN5KCk6IENoYWluYWJsZUZ1bmN0aW9uPFxuICBYbWxFbGVtZW50LFxuICBVcGRhdGVGcmVxdWVuY3lcbj4ge1xuICByZXR1cm4gZmFsbGJhY2soXG4gICAgcGlwZShcbiAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpNRF9NYWludGVuYW5jZUZyZXF1ZW5jeUNvZGUnKSxcbiAgICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSxcbiAgICAgIG1hcChnZXRVcGRhdGVGcmVxdWVuY3lGcm9tRnJlcXVlbmN5Q29kZSlcbiAgICApLFxuICAgIHBpcGUoXG4gICAgICBmaW5kTmVzdGVkRWxlbWVudChcbiAgICAgICAgJ2dtZDp1c2VyRGVmaW5lZE1haW50ZW5hbmNlRnJlcXVlbmN5JyxcbiAgICAgICAgJ2d0czpUTV9QZXJpb2REdXJhdGlvbidcbiAgICAgICksXG4gICAgICByZWFkVGV4dCgpLFxuICAgICAgbWFwKGdldFVwZGF0ZUZyZXF1ZW5jeUZyb21DdXN0b21QZXJpb2QpXG4gICAgKSxcbiAgICBtYXAoKCkgPT4gJ3Vua25vd24nKVxuICApXG59XG5cbi8qKlxuICogTG9va3MgZm9yIHNydjpTVl9TZXJ2aWNlSWRlbnRpZmljYXRpb24gb3IgZ21kOk1EX0RhdGFJZGVudGlmaWNhdGlvbiBlbGVtZW50XG4gKiBXaWxsIGZpbmQgdGhlIGZpcnN0IG9uZSB0aGF0IGV4aXN0cywgbm90IHJlYWRpbmcgdGhlIHR5cGUgb2YgdGhlIHJlY29yZFxuICogKHRoaXMgYWxsb3dzIHVzaW5nIHRoaXMgZnVuY3Rpb24gaW4gb3RoZXIgc2ltaWxhciBzY2hlbWFzKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZElkZW50aWZpY2F0aW9uKCkge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6aWRlbnRpZmljYXRpb25JbmZvJywgZmFsc2UpLFxuICAgIGNvbWJpbmUoXG4gICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6TURfRGF0YUlkZW50aWZpY2F0aW9uJywgZmFsc2UpLFxuICAgICAgZmluZENoaWxkRWxlbWVudCgnc3J2OlNWX1NlcnZpY2VJZGVudGlmaWNhdGlvbicsIGZhbHNlKVxuICAgICksXG4gICAgZmlsdGVyQXJyYXkoKGVsKSA9PiBlbCAhPT0gbnVsbCksXG4gICAgZ2V0QXRJbmRleCgwKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0SWRlbnRpZmljYXRpb25EYXRlKFxuICB0eXBlOiAnY3JlYXRpb24nIHwgJ3JldmlzaW9uJyB8ICdwdWJsaWNhdGlvbidcbikge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpjaXRhdGlvbicsICdnbWQ6Q0lfQ2l0YXRpb24nLCAnZ21kOmRhdGUnKSxcbiAgICBmaWx0ZXJBcnJheShcbiAgICAgIHBpcGUoXG4gICAgICAgIGZpbmROZXN0ZWRFbGVtZW50cyhcbiAgICAgICAgICAnZ21kOkNJX0RhdGUnLFxuICAgICAgICAgICdnbWQ6ZGF0ZVR5cGUnLFxuICAgICAgICAgICdnbWQ6Q0lfRGF0ZVR5cGVDb2RlJ1xuICAgICAgICApLFxuICAgICAgICBnZXRBdEluZGV4KDApLFxuICAgICAgICByZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJyksXG4gICAgICAgIG1hcCgodmFsdWUpID0+IHZhbHVlID09PSB0eXBlKVxuICAgICAgKVxuICAgICksXG4gICAgZ2V0QXRJbmRleCgwKSxcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpDSV9EYXRlJywgJ2dtZDpkYXRlJyksXG4gICAgZ2V0QXRJbmRleCgwKSxcbiAgICBleHRyYWN0RGF0ZVRpbWUoKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTcGF0aWFsUmVwcmVzZW50YXRpb25Gcm9tQ29kZShcbiAgc3BhdGlhbFJlcHJlc2VudGF0aW9uQ29kZTogc3RyaW5nXG4pOiBTcGF0aWFsUmVwcmVzZW50YXRpb25UeXBlIHwgbnVsbCB7XG4gIHN3aXRjaCAoc3BhdGlhbFJlcHJlc2VudGF0aW9uQ29kZSkge1xuICAgIGNhc2UgJ2dyaWQnOlxuICAgIGNhc2UgJ3ZlY3Rvcic6XG4gICAgY2FzZSAndGluJzpcbiAgICBjYXNlICd0YWJsZSc6XG4gICAgY2FzZSAncG9pbnQnOlxuICAgICAgcmV0dXJuIHNwYXRpYWxSZXByZXNlbnRhdGlvbkNvZGVcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFVuaXF1ZUlkZW50aWZpZXIocm9vdEVsOiBYbWxFbGVtZW50KTogc3RyaW5nIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOmZpbGVJZGVudGlmaWVyJywgZmFsc2UpLFxuICAgIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRLaW5kKHJvb3RFbDogWG1sRWxlbWVudCk6IFJlY29yZEtpbmQge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudCgnZ21kOmhpZXJhcmNoeUxldmVsJywgJ2dtZDpNRF9TY29wZUNvZGUnKSxcbiAgICByZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJyksXG4gICAgbWFwKChzY29wZUNvZGUpOiBSZWNvcmRLaW5kID0+IGdldFJlc291cmNlVHlwZShzY29wZUNvZGUpKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRPd25lck9yZ2FuaXphdGlvbihyb290RWw6IFhtbEVsZW1lbnQpOiBPcmdhbml6YXRpb24ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudCgnZ21kOmNvbnRhY3QnLCAnZ21kOkNJX1Jlc3BvbnNpYmxlUGFydHknKSxcbiAgICBleHRyYWN0T3JnYW5pemF0aW9uKClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkUmVzb3VyY2VVcGRhdGVkKHJvb3RFbDogWG1sRWxlbWVudCk6IERhdGUge1xuICByZXR1cm4gZXh0cmFjdElkZW50aWZpY2F0aW9uRGF0ZSgncmV2aXNpb24nKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkUmVzb3VyY2VDcmVhdGVkKHJvb3RFbDogWG1sRWxlbWVudCk6IERhdGUge1xuICByZXR1cm4gZXh0cmFjdElkZW50aWZpY2F0aW9uRGF0ZSgnY3JlYXRpb24nKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkUmVzb3VyY2VQdWJsaXNoZWQocm9vdEVsOiBYbWxFbGVtZW50KTogRGF0ZSB7XG4gIHJldHVybiBleHRyYWN0SWRlbnRpZmljYXRpb25EYXRlKCdwdWJsaWNhdGlvbicpKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRSZWNvcmRVcGRhdGVkKHJvb3RFbDogWG1sRWxlbWVudCk6IERhdGUge1xuICByZXR1cm4gcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6ZGF0ZVN0YW1wJyksIGV4dHJhY3REYXRlVGltZSgpKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkUmV1c2VUeXBlKHJvb3RFbDogWG1sRWxlbWVudCk6IFJldXNlVHlwZSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6aGllcmFyY2h5TGV2ZWwnLCAnZ21kOk1EX1Njb3BlQ29kZScpLFxuICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSxcbiAgICBtYXAoKHNjb3BlQ29kZSk6IFJldXNlVHlwZSA9PiBnZXRSZXVzZVR5cGUoc2NvcGVDb2RlKSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkVGl0bGUoXG4gIHJvb3RFbDogWG1sRWxlbWVudCxcbiAgdHJhbnNsYXRpb25zOiBSZWNvcmRUcmFuc2xhdGlvbnNcbik6IHN0cmluZyB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6Y2l0YXRpb24nLCAnZ21kOkNJX0NpdGF0aW9uJywgJ2dtZDp0aXRsZScpLFxuICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmcoJ3RpdGxlJywgdHJhbnNsYXRpb25zKSxcbiAgICBtYXAoKFt0aXRsZV0pID0+IHRpdGxlKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRBYnN0cmFjdChcbiAgcm9vdEVsOiBYbWxFbGVtZW50LFxuICB0cmFuc2xhdGlvbnM6IFJlY29yZFRyYW5zbGF0aW9uc1xuKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOmFic3RyYWN0JywgZmFsc2UpLFxuICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmcoJ2Fic3RyYWN0JywgdHJhbnNsYXRpb25zKSxcbiAgICBtYXAoKFthYnN0cmFjdF0pID0+IGFic3RyYWN0KVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRDb250YWN0cyhyb290RWw6IFhtbEVsZW1lbnQpOiBJbmRpdmlkdWFsW10ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6Y29udGFjdCcsIGZhbHNlKSxcbiAgICBtYXBBcnJheShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6Q0lfUmVzcG9uc2libGVQYXJ0eScsIGZhbHNlKSksXG4gICAgbWFwQXJyYXkoZXh0cmFjdEluZGl2aWR1YWwoKSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkQ29udGFjdHNGb3JSZXNvdXJjZShyb290RWw6IFhtbEVsZW1lbnQpOiBJbmRpdmlkdWFsW10ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBjb21iaW5lKFxuICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOmNvbnRhY3QnLCBmYWxzZSksXG4gICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6cG9pbnRPZkNvbnRhY3QnLCBmYWxzZSlcbiAgICApLFxuICAgIGZsYXR0ZW5BcnJheSgpLFxuICAgIG1hcEFycmF5KGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpDSV9SZXNwb25zaWJsZVBhcnR5JywgZmFsc2UpKSxcbiAgICBtYXBBcnJheShleHRyYWN0SW5kaXZpZHVhbCgpKVxuICApKHJvb3RFbClcbn1cblxuLy8gZnJvbSBnbWQ6dGhlc2F1cnVzTmFtZVxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRUaGVzYXVydXMocm9vdEVsOiBYbWxFbGVtZW50KTogVGhlc2F1cnVzTW9kZWwge1xuICBpZiAoIXJvb3RFbCkgcmV0dXJuIG51bGxcblxuICBjb25zdCBmaW5kSWRlbnRpZmllciA9IGZpbmROZXN0ZWRFbGVtZW50KFxuICAgICdnbWQ6Q0lfQ2l0YXRpb24nLFxuICAgICdnbWQ6aWRlbnRpZmllcicsXG4gICAgJ2dtZDpNRF9JZGVudGlmaWVyJyxcbiAgICAnZ21kOmNvZGUnXG4gIClcbiAgY29uc3QgaWQgPSBwaXBlKGZpbmRJZGVudGlmaWVyLCBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCkpKHJvb3RFbClcbiAgY29uc3QgdXJsID0gcGlwZShmaW5kSWRlbnRpZmllciwgZXh0cmFjdFVybCgpKShyb290RWwpXG4gIGNvbnN0IG5hbWUgPSBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6Q0lfQ2l0YXRpb24nLCAnZ21kOnRpdGxlJyksXG4gICAgZXh0cmFjdENoYXJhY3RlclN0cmluZygpXG4gICkocm9vdEVsKVxuICByZXR1cm4ge1xuICAgIGlkLFxuICAgIC4uLihuYW1lICYmIHsgbmFtZSB9KSxcbiAgICAuLi4odXJsICYmIHsgdXJsIH0pLFxuICB9XG59XG5cbi8vIGZyb20gZ21kOk1EX0tleXdvcmRzXG5leHBvcnQgZnVuY3Rpb24gcmVhZEtleXdvcmRHcm91cChyb290RWw6IFhtbEVsZW1lbnQpOiBLZXl3b3JkW10ge1xuICBjb25zdCB0eXBlID0gcGlwZShcbiAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6TURfS2V5d29yZFR5cGVDb2RlJyksXG4gICAgbWFwQXJyYXkocmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpKSxcbiAgICBtYXAoKHZhbHVlcykgPT4gZ2V0S2V5d29yZFR5cGVGcm9tS2V5d29yZFR5cGVDb2RlKHZhbHVlc1swXSkpXG4gICkocm9vdEVsKVxuICBjb25zdCB0aGVzYXVydXMgPSBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6dGhlc2F1cnVzTmFtZScpLFxuICAgIHJlYWRUaGVzYXVydXNcbiAgKShyb290RWwpXG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDprZXl3b3JkJyksXG4gICAgbWFwQXJyYXkoKGVsKSA9PiB7XG4gICAgICBjb25zdCBbbGFiZWwsIHRyYW5zbGF0aW9uc10gPVxuICAgICAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nPEtleXdvcmRUcmFuc2xhdGlvbnM+KCdsYWJlbCcpKGVsKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uKHRoZXNhdXJ1cyA/IHsgdGhlc2F1cnVzIH0gOiB7fSksXG4gICAgICAgIGxhYmVsLFxuICAgICAgICB0eXBlLFxuICAgICAgICB0cmFuc2xhdGlvbnMsXG4gICAgICB9IGFzIEtleXdvcmRcbiAgICB9KVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRLZXl3b3Jkcyhyb290RWw6IFhtbEVsZW1lbnQpOiBLZXl3b3JkW10ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpkZXNjcmlwdGl2ZUtleXdvcmRzJywgJ2dtZDpNRF9LZXl3b3JkcycpLFxuICAgIG1hcEFycmF5KHJlYWRLZXl3b3JkR3JvdXApLFxuICAgIGZsYXR0ZW5BcnJheSgpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFN0YXR1cyhyb290RWw6IFhtbEVsZW1lbnQpOiBSZWNvcmRTdGF0dXMge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6c3RhdHVzJywgZmFsc2UpLFxuICAgIGV4dHJhY3RTdGF0dXMoKVxuICApKHJvb3RFbClcbn1cblxuY29uc3QgZ2V0Q29uc3RyYWludHMgPSBwaXBlKFxuICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOnJlc291cmNlQ29uc3RyYWludHMnLCBmYWxzZSlcbilcblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRMZWdhbENvbnN0cmFpbnRzKHJvb3RFbDogWG1sRWxlbWVudCk6IENvbnN0cmFpbnRbXSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGdldENvbnN0cmFpbnRzLFxuICAgIG1hcEFycmF5KGV4dHJhY3RMZWdhbENvbnN0cmFpbnRzKCkpLFxuICAgIGZsYXR0ZW5BcnJheSgpLFxuICAgIGZsYXR0ZW5BcnJheSgpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFNlY3VyaXR5Q29uc3RyYWludHMocm9vdEVsOiBYbWxFbGVtZW50KTogQ29uc3RyYWludFtdIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZ2V0Q29uc3RyYWludHMsXG4gICAgbWFwQXJyYXkoZXh0cmFjdFNlY3VyaXR5Q29uc3RyYWludHMoKSksXG4gICAgZmxhdHRlbkFycmF5KClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkT3RoZXJDb25zdHJhaW50cyhyb290RWw6IFhtbEVsZW1lbnQpOiBDb25zdHJhaW50W10ge1xuICByZXR1cm4gcGlwZShcbiAgICBnZXRDb25zdHJhaW50cyxcbiAgICBtYXBBcnJheShleHRyYWN0T3RoZXJDb25zdHJhaW50cygpKSxcbiAgICBmbGF0dGVuQXJyYXkoKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRMaWNlbnNlcyhyb290RWw6IFhtbEVsZW1lbnQpOiBDb25zdHJhaW50W10ge1xuICByZXR1cm4gcGlwZShcbiAgICBnZXRDb25zdHJhaW50cyxcbiAgICBtYXBBcnJheShleHRyYWN0TGljZW5zZXMoKSksXG4gICAgZmxhdHRlbkFycmF5KClcbiAgKShyb290RWwpXG59XG5cbi8vIG5vdCB1c2VkIHlldFxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRJc29Ub3BpY3Mocm9vdEVsOiBYbWxFbGVtZW50KTogc3RyaW5nW10ge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6TURfVG9waWNDYXRlZ29yeUNvZGUnLCB0cnVlKSxcbiAgICBtYXBBcnJheShyZWFkVGV4dCgpKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRTcGF0aWFsUmVwcmVzZW50YXRpb24oXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKTogU3BhdGlhbFJlcHJlc2VudGF0aW9uVHlwZSB8IG51bGwge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkRWxlbWVudChcbiAgICAgICdnbWQ6c3BhdGlhbFJlcHJlc2VudGF0aW9uVHlwZScsXG4gICAgICAnZ21kOk1EX1NwYXRpYWxSZXByZXNlbnRhdGlvblR5cGVDb2RlJ1xuICAgICksXG4gICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpLFxuICAgIG1hcChnZXRTcGF0aWFsUmVwcmVzZW50YXRpb25Gcm9tQ29kZSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkT3ZlcnZpZXdzKHJvb3RFbDogWG1sRWxlbWVudCk6IEdyYXBoaWNPdmVydmlld1tdIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOmdyYXBoaWNPdmVydmlldycsIGZhbHNlKSxcbiAgICBtYXBBcnJheShcbiAgICAgIGNvbWJpbmUoXG4gICAgICAgIHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOmZpbGVOYW1lJyksIGV4dHJhY3RNYW5kYXRvcnlVcmwoKSksXG4gICAgICAgIHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOmZpbGVEZXNjcmlwdGlvbicpLCBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKCkpXG4gICAgICApXG4gICAgKSxcbiAgICBtYXBBcnJheSgoW3VybCwgZGVzY3JpcHRpb25dKSA9PiAoe1xuICAgICAgdXJsLFxuICAgICAgLi4uKGRlc2NyaXB0aW9uICYmIHsgZGVzY3JpcHRpb24gfSksXG4gICAgfSkpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZExpbmVhZ2UoXG4gIHJvb3RFbDogWG1sRWxlbWVudCxcbiAgdHJhbnNsYXRpb25zOiBSZWNvcmRUcmFuc2xhdGlvbnNcbik6IHN0cmluZyB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KFxuICAgICAgJ2dtZDpkYXRhUXVhbGl0eUluZm8nLFxuICAgICAgJ2dtZDpEUV9EYXRhUXVhbGl0eScsXG4gICAgICAnZ21kOmxpbmVhZ2UnLFxuICAgICAgJ2dtZDpMSV9MaW5lYWdlJyxcbiAgICAgICdnbWQ6c3RhdGVtZW50J1xuICAgICksXG4gICAgZXh0cmFjdExvY2FsaXplZENoYXJhY3RlclN0cmluZygnbGluZWFnZScsIHRyYW5zbGF0aW9ucyksXG4gICAgbWFwKChbbGluZWFnZV0pID0+IGxpbmVhZ2UpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFVwZGF0ZUZyZXF1ZW5jeShyb290RWw6IFhtbEVsZW1lbnQpOiBVcGRhdGVGcmVxdWVuY3kge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkRWxlbWVudChcbiAgICAgICdnbWQ6cmVzb3VyY2VNYWludGVuYW5jZScsXG4gICAgICAnZ21kOk1EX01haW50ZW5hbmNlSW5mb3JtYXRpb24nXG4gICAgKSxcbiAgICBleHRyYWN0VXBkYXRlRnJlcXVlbmN5KCksXG4gICAgbWFwKCh1cGRhdGVGcmVxdWVuY3kpID0+IHVwZGF0ZUZyZXF1ZW5jeSB8fCAndW5rbm93bicpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFNlcnZpY2VPbmxpbmVSZXNvdXJjZXMoKTogQ2hhaW5hYmxlRnVuY3Rpb248XG4gIFhtbEVsZW1lbnQsXG4gIFNlcnZpY2VPbmxpbmVSZXNvdXJjZVtdXG4+IHtcbiAgY29uc3QgZ2V0VXJsID0gcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6bGlua2FnZScpLCBleHRyYWN0TWFuZGF0b3J5VXJsKCkpXG4gIGNvbnN0IGdldFByb3RvY29sU3RyID0gcGlwZShcbiAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6cHJvdG9jb2wnKSxcbiAgICBleHRyYWN0Q2hhcmFjdGVyU3RyaW5nKClcbiAgKVxuICBjb25zdCBnZXRQcm90b2NvbCA9IHBpcGUoZ2V0UHJvdG9jb2xTdHIsIG1hcChtYXRjaFByb3RvY29sKSlcbiAgY29uc3QgZ2V0T25saW5lRnVuY3Rpb24gPSBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50KCdnbWQ6ZnVuY3Rpb24nLCAnZ21kOkNJX09uTGluZUZ1bmN0aW9uQ29kZScpLFxuICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKVxuICApXG4gIGNvbnN0IGdldElzTGluayA9IHBpcGUoXG4gICAgZ2V0T25saW5lRnVuY3Rpb24sXG4gICAgbWFwKChvbmxpbmVGdW5jdGlvbikgPT4gb25saW5lRnVuY3Rpb24gPT09ICdpbmZvcm1hdGlvbicpXG4gIClcbiAgY29uc3QgZ2V0TmFtZSA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOm5hbWUnKSxcbiAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nPE9ubGluZVJlc291cmNlVHJhbnNsYXRpb25zPignbmFtZScpXG4gIClcbiAgY29uc3QgZ2V0RGVzY3JpcHRpb24gPSBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpkZXNjcmlwdGlvbicpLFxuICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmc8T25saW5lUmVzb3VyY2VUcmFuc2xhdGlvbnM+KFxuICAgICAgJ2Rlc2NyaXB0aW9uJyxcbiAgICAgIHt9XG4gICAgKVxuICApXG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50cyhcbiAgICAgICdnbWQ6dHJhbnNmZXJPcHRpb25zJyxcbiAgICAgICdnbWQ6TURfRGlnaXRhbFRyYW5zZmVyT3B0aW9ucycsXG4gICAgICAnZ21kOm9uTGluZScsXG4gICAgICAnZ21kOkNJX09ubGluZVJlc291cmNlJ1xuICAgICksXG4gICAgbWFwQXJyYXkoY29tYmluZShnZXRJc0xpbmssIGdldFByb3RvY29sLCBnZXRVcmwsIGdldE5hbWUsIGdldERlc2NyaXB0aW9uKSksXG4gICAgbWFwQXJyYXkoXG4gICAgICAoW1xuICAgICAgICBpc0xpbmssXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICB1cmwsXG4gICAgICAgIFtuYW1lLCBuYW1lVHJhbnNsYXRpb25zXSxcbiAgICAgICAgW2Rlc2NyaXB0aW9uLCBkZXNjcmlwdGlvblRyYW5zbGF0aW9uc10sXG4gICAgICBdKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IHtcbiAgICAgICAgICAuLi5uYW1lVHJhbnNsYXRpb25zLFxuICAgICAgICAgIC4uLmRlc2NyaXB0aW9uVHJhbnNsYXRpb25zLFxuICAgICAgICB9XG4gICAgICAgIGlmIChpc0xpbmspIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2xpbmsnLFxuICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICAuLi4obmFtZSAmJiB7IG5hbWUgfSksXG4gICAgICAgICAgICAuLi4oZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbiB9KSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdlbmRwb2ludCcsXG4gICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgIGFjY2Vzc1NlcnZpY2VQcm90b2NvbDogcHJvdG9jb2wsXG4gICAgICAgICAgICAuLi4oZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbiB9KSxcbiAgICAgICAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RSZXVzZU9ubGluZVJlc291cmNlcygpOiBDaGFpbmFibGVGdW5jdGlvbjxcbiAgWG1sRWxlbWVudCxcbiAgT25saW5lTGlua1Jlc291cmNlW11cbj4ge1xuICBjb25zdCBnZXRVcmwgPSBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpsaW5rYWdlJyksIGV4dHJhY3RNYW5kYXRvcnlVcmwoKSlcbiAgY29uc3QgZ2V0TmFtZSA9IHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOm5hbWUnKSxcbiAgICBleHRyYWN0TG9jYWxpemVkQ2hhcmFjdGVyU3RyaW5nPE9ubGluZVJlc291cmNlVHJhbnNsYXRpb25zPignbmFtZScpXG4gIClcbiAgY29uc3QgZ2V0RGVzY3JpcHRpb24gPSBwaXBlKFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpkZXNjcmlwdGlvbicpLFxuICAgIGV4dHJhY3RMb2NhbGl6ZWRDaGFyYWN0ZXJTdHJpbmc8T25saW5lUmVzb3VyY2VUcmFuc2xhdGlvbnM+KFxuICAgICAgJ2Rlc2NyaXB0aW9uJyxcbiAgICAgIHt9XG4gICAgKVxuICApXG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50cyhcbiAgICAgICdnbWQ6dHJhbnNmZXJPcHRpb25zJyxcbiAgICAgICdnbWQ6TURfRGlnaXRhbFRyYW5zZmVyT3B0aW9ucycsXG4gICAgICAnZ21kOm9uTGluZScsXG4gICAgICAnZ21kOkNJX09ubGluZVJlc291cmNlJ1xuICAgICksXG4gICAgbWFwQXJyYXkoY29tYmluZShnZXRVcmwsIGdldE5hbWUsIGdldERlc2NyaXB0aW9uKSksXG4gICAgbWFwQXJyYXkoXG4gICAgICAoW1xuICAgICAgICB1cmwsXG4gICAgICAgIFtuYW1lLCBuYW1lVHJhbnNsYXRpb25zXSxcbiAgICAgICAgW2Rlc2NyaXB0aW9uLCBkZXNjcmlwdGlvblRyYW5zbGF0aW9uc10sXG4gICAgICBdKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IHtcbiAgICAgICAgICAuLi5uYW1lVHJhbnNsYXRpb25zLFxuICAgICAgICAgIC4uLmRlc2NyaXB0aW9uVHJhbnNsYXRpb25zLFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogJ2xpbmsnLFxuICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgIC4uLihuYW1lICYmIHsgbmFtZSB9KSxcbiAgICAgICAgICAuLi4oZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbiB9KSxcbiAgICAgICAgICB0cmFuc2xhdGlvbnMsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRPbmxpbmVSZXNvdXJjZXMocm9vdEVsOiBYbWxFbGVtZW50KTogT25saW5lUmVzb3VyY2VbXSB7XG4gIGxldCBnZXRPbmxpbmVSZXNvdXJjZXM6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIE9ubGluZVJlc291cmNlW10+XG4gIGlmIChyZWFkS2luZChyb290RWwpID09PSAnZGF0YXNldCcpIHtcbiAgICBnZXRPbmxpbmVSZXNvdXJjZXMgPSAoZWwpID0+IGV4dHJhY3REYXRhc2V0T25saW5lUmVzb3VyY2VzKGdldE1pbWVUeXBlKShlbClcbiAgfSBlbHNlIGlmIChyZWFkS2luZChyb290RWwpID09PSAnc2VydmljZScpIHtcbiAgICBnZXRPbmxpbmVSZXNvdXJjZXMgPSBleHRyYWN0U2VydmljZU9ubGluZVJlc291cmNlcygpXG4gIH0gZWxzZSB7XG4gICAgZ2V0T25saW5lUmVzb3VyY2VzID0gZXh0cmFjdFJldXNlT25saW5lUmVzb3VyY2VzKClcbiAgfVxuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpkaXN0cmlidXRpb25JbmZvJywgJ2dtZDpNRF9EaXN0cmlidXRpb24nKSxcbiAgICBtYXBBcnJheShnZXRPbmxpbmVSZXNvdXJjZXMpLFxuICAgIGZsYXR0ZW5BcnJheSgpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFRlbXBvcmFsRXh0ZW50cyhyb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZEVsZW1lbnRzKCdnbWQ6ZXh0ZW50JywgJ2dtZDpFWF9FeHRlbnQnLCAnZ21kOnRlbXBvcmFsRWxlbWVudCcpLFxuICAgIG1hcEFycmF5KFxuICAgICAgY29tYmluZShcbiAgICAgICAgZmluZE5lc3RlZEVsZW1lbnQoXG4gICAgICAgICAgJ2dtZDpFWF9UZW1wb3JhbEV4dGVudCcsXG4gICAgICAgICAgJ2dtZDpleHRlbnQnLFxuICAgICAgICAgICdnbWw6VGltZVBlcmlvZCdcbiAgICAgICAgKSxcbiAgICAgICAgZmluZE5lc3RlZEVsZW1lbnQoXG4gICAgICAgICAgJ2dtZDpFWF9UZW1wb3JhbEV4dGVudCcsXG4gICAgICAgICAgJ2dtZDpleHRlbnQnLFxuICAgICAgICAgICdnbWw6VGltZUluc3RhbnQnXG4gICAgICAgIClcbiAgICAgIClcbiAgICApLFxuICAgIG1hcEFycmF5KChbcGVyaW9kRWwsIGluc3RhbnRFbF0pID0+IHtcbiAgICAgIGlmIChwZXJpb2RFbCkge1xuICAgICAgICByZXR1cm4gcGlwZShcbiAgICAgICAgICBjb21iaW5lKFxuICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgZmluZENoaWxkRWxlbWVudCgnZ21sOmJlZ2luUG9zaXRpb24nLCBmYWxzZSksXG4gICAgICAgICAgICAgIHJlYWRUZXh0KCksXG4gICAgICAgICAgICAgIG1hcCgoZGF0ZVN0cikgPT4gKGRhdGVTdHIgPyBuZXcgRGF0ZShkYXRlU3RyKSA6IG51bGwpKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtbDplbmRQb3NpdGlvbicsIGZhbHNlKSxcbiAgICAgICAgICAgICAgcmVhZFRleHQoKSxcbiAgICAgICAgICAgICAgbWFwKChkYXRlU3RyKSA9PiAoZGF0ZVN0ciA/IG5ldyBEYXRlKGRhdGVTdHIpIDogbnVsbCkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgICBtYXAoKFtzdGFydCwgZW5kXSkgPT4gKHtcbiAgICAgICAgICAgIHN0YXJ0LFxuICAgICAgICAgICAgZW5kLFxuICAgICAgICAgIH0pKVxuICAgICAgICApKHBlcmlvZEVsKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHBpcGUoXG4gICAgICAgICAgZmluZENoaWxkRWxlbWVudCgnZ21sOnRpbWVQb3NpdGlvbicsIGZhbHNlKSxcbiAgICAgICAgICByZWFkVGV4dCgpLFxuICAgICAgICAgIG1hcCgoZGF0ZVN0cikgPT4gKGRhdGVTdHIgPyBuZXcgRGF0ZShkYXRlU3RyKSA6IG51bGwpKSxcbiAgICAgICAgICBtYXAoKGRhdGUpID0+ICh7XG4gICAgICAgICAgICBzdGFydDogZGF0ZSxcbiAgICAgICAgICB9KSlcbiAgICAgICAgKShpbnN0YW50RWwpXG4gICAgICB9XG4gICAgfSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkU3BhdGlhbEV4dGVudHMocm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIGNvbnN0IGV4dHJhY3RHZW9tZXRyeSA9IChyb290RWw6IFhtbEVsZW1lbnQpOiBHZW9tZXRyeSA9PiB7XG4gICAgaWYgKCFyb290RWwpIHJldHVybiBudWxsXG4gICAgcmV0dXJuIHBpcGUoXG4gICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6cG9seWdvbicsIGZhbHNlKSxcbiAgICAgIGZpcnN0Q2hpbGRFbGVtZW50LFxuICAgICAgbWFwKChlbCkgPT4gKGVsID8gcmVhZEdlb21ldHJ5KGVsKSA6IG51bGwpKVxuICAgICkocm9vdEVsKVxuICB9XG5cbiAgY29uc3QgZXh0cmFjdEJCb3ggPSAoXG4gICAgcm9vdEVsOiBYbWxFbGVtZW50XG4gICk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdID0+IHtcbiAgICBpZiAoIXJvb3RFbCkgcmV0dXJuIG51bGxcbiAgICByZXR1cm4gcGlwZShcbiAgICAgIGNvbWJpbmUoXG4gICAgICAgIHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOndlc3RCb3VuZExvbmdpdHVkZScpLCBleHRyYWN0RGVjaW1hbCgpKSxcbiAgICAgICAgcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6c291dGhCb3VuZExhdGl0dWRlJyksIGV4dHJhY3REZWNpbWFsKCkpLFxuICAgICAgICBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDplYXN0Qm91bmRMb25naXR1ZGUnKSwgZXh0cmFjdERlY2ltYWwoKSksXG4gICAgICAgIHBpcGUoZmluZENoaWxkRWxlbWVudCgnZ21kOm5vcnRoQm91bmRMYXRpdHVkZScpLCBleHRyYWN0RGVjaW1hbCgpKVxuICAgICAgKVxuICAgICkocm9vdEVsKVxuICB9XG5cbiAgY29uc3QgZXh0cmFjdERlc2NyaXB0aW9uID0gKFxuICAgIHJvb3RFbDogWG1sRWxlbWVudFxuICApOiBbc3RyaW5nLCBNb2RlbFRyYW5zbGF0aW9uc10gPT4ge1xuICAgIGlmICghcm9vdEVsKSByZXR1cm4gW251bGwsIHt9XVxuICAgIHJldHVybiBwaXBlKFxuICAgICAgZmluZE5lc3RlZEVsZW1lbnQoXG4gICAgICAgICdnbWQ6Z2VvZ3JhcGhpY0lkZW50aWZpZXInLFxuICAgICAgICAnZ21kOk1EX0lkZW50aWZpZXInLFxuICAgICAgICAnZ21kOmNvZGUnXG4gICAgICApLFxuICAgICAgZXh0cmFjdExvY2FsaXplZENoYXJhY3RlclN0cmluZygnZGVzY3JpcHRpb24nKVxuICAgICkocm9vdEVsKVxuICB9XG5cbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZElkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZEVsZW1lbnRzKCdnbWQ6ZXh0ZW50JywgJ2dtZDpFWF9FeHRlbnQnLCAnZ21kOmdlb2dyYXBoaWNFbGVtZW50JyksXG4gICAgbWFwQXJyYXkoXG4gICAgICBjb21iaW5lKFxuICAgICAgICBwaXBlKGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpFWF9Cb3VuZGluZ1BvbHlnb24nKSwgZXh0cmFjdEdlb21ldHJ5KSxcbiAgICAgICAgcGlwZShmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6RVhfR2VvZ3JhcGhpY0JvdW5kaW5nQm94JyksIGV4dHJhY3RCQm94KSxcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6RVhfR2VvZ3JhcGhpY0Rlc2NyaXB0aW9uJyksXG4gICAgICAgICAgZXh0cmFjdERlc2NyaXB0aW9uXG4gICAgICAgIClcbiAgICAgIClcbiAgICApLFxuICAgIGZpbHRlckFycmF5KFxuICAgICAgKFtnZW9tZXRyeSwgYmJveCwgW2Rlc2NyaXB0aW9uXV0pID0+ICEhZ2VvbWV0cnkgfHwgISFiYm94IHx8ICEhZGVzY3JpcHRpb25cbiAgICApLFxuICAgIG1hcEFycmF5KChbZ2VvbWV0cnksIGJib3gsIFtkZXNjcmlwdGlvbiwgdHJhbnNsYXRpb25zXV0pID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLihnZW9tZXRyeSAmJiB7IGdlb21ldHJ5IH0pLFxuICAgICAgICAuLi4oYmJveCAmJiB7IGJib3ggfSksXG4gICAgICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgICAgICB0cmFuc2xhdGlvbnMsXG4gICAgICB9XG4gICAgfSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkT3RoZXJMYW5ndWFnZXMocm9vdEVsOiBYbWxFbGVtZW50KTogTGFuZ3VhZ2VDb2RlW10ge1xuICBjb25zdCBkZWZhdWx0TGFuZ3VhZ2UgPSByZWFkRGVmYXVsdExhbmd1YWdlKHJvb3RFbClcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOmxvY2FsZScsIGZhbHNlKSxcbiAgICBtYXBBcnJheShcbiAgICAgIHBpcGUoXG4gICAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2xhbjpMYW5ndWFnZUNvZGUnKSxcbiAgICAgICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpLFxuICAgICAgICBtYXAoKGxhbmcpID0+IExBTkdfM19UT18yX01BUFBFUltsYW5nLnRvTG93ZXJDYXNlKCldID8/IGxhbmcpXG4gICAgICApXG4gICAgKSxcbiAgICBtYXAoKGxhbmd1YWdlcykgPT5cbiAgICAgIGxhbmd1YWdlcy5maWx0ZXIoKGxhbmcpOiBsYW5nIGlzIExhbmd1YWdlQ29kZSA9PiBsYW5nICE9PSBudWxsKVxuICAgICksXG4gICAgbWFwKChsYW5ndWFnZXMpID0+IChsYW5ndWFnZXMubGVuZ3RoID8gbGFuZ3VhZ2VzIDogW2RlZmF1bHRMYW5ndWFnZV0pKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWREZWZhdWx0TGFuZ3VhZ2Uocm9vdEVsOiBYbWxFbGVtZW50KTogTGFuZ3VhZ2VDb2RlIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOmxhbmd1YWdlJywgZmFsc2UpLFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2xhbjpMYW5ndWFnZUNvZGUnKSxcbiAgICByZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJyksXG4gICAgbWFwKChsYW5nKSA9PiAobGFuZyA/IExBTkdfM19UT18yX01BUFBFUltsYW5nLnRvTG93ZXJDYXNlKCldIDogbnVsbCkpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZFJlc291cmNlSWRlbnRpZmllcihyb290RWw6IFhtbEVsZW1lbnQpOiBzdHJpbmcge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkRWxlbWVudChcbiAgICAgICdnbWQ6Y2l0YXRpb24nLFxuICAgICAgJ2dtZDpDSV9DaXRhdGlvbicsXG4gICAgICAnZ21kOmlkZW50aWZpZXInLFxuICAgICAgJ2dtZDpNRF9JZGVudGlmaWVyJyxcbiAgICAgICdnbWQ6Y29kZSdcbiAgICApLFxuICAgIGV4dHJhY3RDaGFyYWN0ZXJTdHJpbmcoKVxuICApKHJvb3RFbClcbn1cbiJdfQ==
|