@envive-ai/react-hooks 0.2.7-arthur-2 → 0.2.7
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/dist/{NewOrgConfig-CInGtTV6.cjs → NewOrgConfig-Bo1seKr6.cjs} +2 -2
- package/dist/{NewOrgConfig-BVByiYPp.js → NewOrgConfig-yptI2imS.js} +2 -2
- package/dist/{SystemSettingsContext-ei5B0dxO.js → SystemSettingsContext-BY1BFgAQ.js} +2 -2
- package/dist/{SystemSettingsContext-150LTxIk.cjs → SystemSettingsContext-EDpRMMt2.cjs} +2 -2
- package/dist/{TrackComponentVisibleEvent-CuwSLbug.js → TrackComponentVisibleEvent-qNE0dIL1.js} +2 -2
- package/dist/{TrackComponentVisibleEvent-C7-nnBks.cjs → TrackComponentVisibleEvent-tDRnrJi3.cjs} +2 -2
- package/dist/{amplitudeContext-C-0-DDk3.cjs → amplitudeContext-C6LHpqP_.cjs} +10 -7
- package/dist/{amplitudeContext-BBQ1ATA3.js → amplitudeContext-rEjGf57q.js} +10 -7
- package/dist/{app-XEFPotoH.cjs → app-BbPSHefQ.cjs} +4 -3
- package/dist/{app-C_Y-57U5.js → app-CflxT_xI.js} +4 -3
- package/dist/application/utils/index.cjs +8 -8
- package/dist/application/utils/index.d.cts +2 -2
- package/dist/application/utils/index.d.ts +2 -2
- package/dist/application/utils/index.js +8 -8
- package/dist/{atomStore-8ppNkJ_n.cjs → atomStore-CmZbgQHc.cjs} +1 -1
- package/dist/{atomStore-BLYJ2ZoQ.js → atomStore-DEcDhiLp.js} +1 -1
- package/dist/atoms/app/index.cjs +4 -4
- package/dist/atoms/app/index.d.cts +7 -7
- package/dist/atoms/app/index.d.ts +7 -7
- package/dist/atoms/app/index.js +4 -4
- package/dist/atoms/atomStore/index.cjs +1 -1
- package/dist/atoms/atomStore/index.js +1 -1
- package/dist/atoms/chat/index.cjs +9 -9
- package/dist/atoms/chat/index.d.cts +26 -26
- package/dist/atoms/chat/index.d.ts +26 -26
- package/dist/atoms/chat/index.js +9 -9
- package/dist/atoms/globalSearch/index.d.cts +6 -6
- package/dist/atoms/globalSearch/index.d.ts +6 -6
- package/dist/atoms/org/index.cjs +1 -1
- package/dist/atoms/org/index.d.cts +15 -15
- package/dist/atoms/org/index.d.ts +17 -17
- package/dist/atoms/org/index.js +1 -1
- package/dist/atoms/search/index.cjs +11 -11
- package/dist/atoms/search/index.d.cts +1 -1
- package/dist/atoms/search/index.d.ts +1 -1
- package/dist/atoms/search/index.js +11 -11
- package/dist/{cdnContext-CTC-zBtx.js → cdnContext-B8zWuGGT.js} +2 -2
- package/dist/{cdnContext-Bzqk0s2M.cjs → cdnContext-DzifgoNo.cjs} +2 -2
- package/dist/{chat-Bzay7QnI.js → chat-DChvXHjz.js} +6 -6
- package/dist/{chat-Ckd1b_z_.cjs → chat-L_N0qaqs.cjs} +6 -6
- package/dist/{chatSearch-Bev4ZI8Z.cjs → chatSearch-B5whqPLW.cjs} +3 -3
- package/dist/{chatSearch-DNaGtQyx.js → chatSearch-so-qeiEL.js} +3 -3
- package/dist/{chatState-OkYPVghN.cjs → chatState-D9_aA1_h.cjs} +2 -2
- package/dist/{chatState-CcCvgmSM.js → chatState-Dl5lyuKC.js} +2 -2
- package/dist/{commerce-api-ml5fkEuk.js → commerce-api-DEFd5HUH.js} +6 -6
- package/dist/{commerce-api-sQtLuwTh.cjs → commerce-api-DqVD4NH8.cjs} +6 -6
- package/dist/contexts/amplitudeContext/index.cjs +8 -8
- package/dist/contexts/amplitudeContext/index.js +8 -8
- package/dist/contexts/cdnContext/index.cjs +3 -3
- package/dist/contexts/cdnContext/index.js +3 -3
- package/dist/contexts/chatContext/index.cjs +16 -16
- package/dist/contexts/chatContext/index.d.cts +2 -2
- package/dist/contexts/chatContext/index.d.ts +2 -2
- package/dist/contexts/chatContext/index.js +16 -16
- package/dist/contexts/enviveConfigContext/index.cjs +3 -3
- package/dist/contexts/enviveConfigContext/index.js +3 -3
- package/dist/contexts/enviveCssContext/index.cjs +6 -6
- package/dist/contexts/enviveCssContext/index.js +6 -6
- package/dist/contexts/featureFlagContext/index.cjs +4 -4
- package/dist/contexts/featureFlagContext/index.js +4 -4
- package/dist/contexts/graphqlContext/index.cjs +3 -3
- package/dist/contexts/graphqlContext/index.d.ts +1 -1
- package/dist/contexts/graphqlContext/index.js +3 -3
- package/dist/contexts/localStorageContext/index.cjs +1 -1
- package/dist/contexts/localStorageContext/index.js +1 -1
- package/dist/contexts/newOrgConfigContext/index.cjs +5 -5
- package/dist/contexts/newOrgConfigContext/index.d.ts +2 -2
- package/dist/contexts/newOrgConfigContext/index.js +5 -5
- package/dist/contexts/searchContext/index.cjs +10 -10
- package/dist/contexts/searchContext/index.js +10 -10
- package/dist/contexts/sessionStorageContext/index.cjs +1 -1
- package/dist/contexts/sessionStorageContext/index.js +1 -1
- package/dist/contexts/shopifyUrlContext/index.cjs +1 -1
- package/dist/contexts/shopifyUrlContext/index.js +1 -1
- package/dist/contexts/systemSettingsContext/index.cjs +3 -3
- package/dist/contexts/systemSettingsContext/index.d.ts +2 -2
- package/dist/contexts/systemSettingsContext/index.js +3 -3
- package/dist/contexts/userIdentityContext/index.cjs +11 -11
- package/dist/contexts/userIdentityContext/index.js +11 -11
- package/dist/{enviveConfig-DV8F12B9.js → enviveConfig-DZBohDpc.js} +2 -2
- package/dist/{enviveConfig-DZHdtLsQ.cjs → enviveConfig-Dv9-esGV.cjs} +2 -2
- package/dist/{enviveConfigContext-CTcHUIFP.cjs → enviveConfigContext-D2OELZDR.cjs} +2 -2
- package/dist/{enviveConfigContext-BS7aNop5.js → enviveConfigContext-DrDjCems.js} +2 -2
- package/dist/frontendConfig-Cawh5iqv.d.ts +1 -1
- package/dist/{graphqlContext-DgkS-UX1.d.ts → graphqlContext-CXQl0hq2.d.ts} +3 -3
- package/dist/{graphqlContext-CVbYIftg.cjs → graphqlContext-DP8T3-Kd.cjs} +2 -2
- package/dist/{graphqlContext-DouNZbYo.js → graphqlContext-czH0kIZg.js} +2 -2
- package/dist/hooks/AmplitudeOperations/index.cjs +8 -8
- package/dist/hooks/AmplitudeOperations/index.js +8 -8
- package/dist/hooks/AppDetails/index.cjs +7 -7
- package/dist/hooks/AppDetails/index.js +7 -7
- package/dist/hooks/CdnOperations/index.cjs +3 -3
- package/dist/hooks/CdnOperations/index.js +3 -3
- package/dist/hooks/ChatToggle/index.cjs +9 -9
- package/dist/hooks/ChatToggle/index.js +9 -9
- package/dist/hooks/ChatToggleAnalytics/index.cjs +9 -9
- package/dist/hooks/ChatToggleAnalytics/index.js +9 -9
- package/dist/hooks/GrabAndScroll/index.d.ts +2 -2
- package/dist/hooks/GraphQLConfig/index.cjs +4 -4
- package/dist/hooks/GraphQLConfig/index.d.ts +1 -1
- package/dist/hooks/GraphQLConfig/index.js +4 -4
- package/dist/hooks/IdentifyUser/index.cjs +11 -11
- package/dist/hooks/IdentifyUser/index.js +11 -11
- package/dist/hooks/ImageResolver/index.cjs +2 -2
- package/dist/hooks/ImageResolver/index.js +2 -2
- package/dist/hooks/LocalStorageOperations/index.cjs +1 -1
- package/dist/hooks/LocalStorageOperations/index.js +1 -1
- package/dist/hooks/NewOrgConfig/index.cjs +6 -6
- package/dist/hooks/NewOrgConfig/index.d.ts +2 -2
- package/dist/hooks/NewOrgConfig/index.js +6 -6
- package/dist/hooks/Search/index.cjs +17 -17
- package/dist/hooks/Search/index.d.cts +1 -1
- package/dist/hooks/Search/index.d.ts +1 -1
- package/dist/hooks/Search/index.js +17 -17
- package/dist/hooks/SearchOperations/index.cjs +10 -10
- package/dist/hooks/SearchOperations/index.js +10 -10
- package/dist/hooks/SessionStorageOperations/index.cjs +1 -1
- package/dist/hooks/SessionStorageOperations/index.js +1 -1
- package/dist/hooks/ShopifyUrlOperations/index.cjs +1 -1
- package/dist/hooks/ShopifyUrlOperations/index.js +1 -1
- package/dist/hooks/SystemSettingsContext/index.cjs +4 -4
- package/dist/hooks/SystemSettingsContext/index.d.cts +2 -2
- package/dist/hooks/SystemSettingsContext/index.d.ts +2 -2
- package/dist/hooks/SystemSettingsContext/index.js +4 -4
- package/dist/hooks/TrackComponentVisibleEvent/index.cjs +8 -8
- package/dist/hooks/TrackComponentVisibleEvent/index.js +8 -8
- package/dist/hooks/UpdateAnalyticsProps/index.cjs +7 -7
- package/dist/hooks/UpdateAnalyticsProps/index.js +7 -7
- package/dist/{index-DpJzjjpi.d.cts → index-BSd8767K.d.cts} +30 -30
- package/dist/{index-CMJM-3zV.d.ts → index-CUO68KG3.d.ts} +30 -30
- package/dist/{localStorageContext-CqcSvg2H.js → localStorageContext-BPZ82q-G.js} +1 -1
- package/dist/{localStorageContext-DiLfSsqL.cjs → localStorageContext-NRP-CdmF.cjs} +1 -1
- package/dist/{newOrgConfigContext-BIDz4ZuO.cjs → newOrgConfigContext-Bet9CgKP.cjs} +3 -3
- package/dist/{newOrgConfigContext-u_9UPNcX.js → newOrgConfigContext-Bi_dBNe5.js} +3 -3
- package/dist/{newOrgConfigContext-CKn7B2rj.d.ts → newOrgConfigContext-I2qceBB4.d.ts} +2 -2
- package/dist/{orgAnalyticsConfig-CGEQtAFs.cjs → orgAnalyticsConfig-Bm23fw4s.cjs} +1 -1
- package/dist/{orgAnalyticsConfig-i4jozLBB.js → orgAnalyticsConfig-CpBmga08.js} +1 -1
- package/dist/{search-CTVX9gC6.cjs → search-CneZkauD.cjs} +2 -2
- package/dist/{search-NgNrXNS9.js → search-DbZeJYdg.js} +2 -2
- package/dist/{searchContext-DtRmshTA.js → searchContext-BmgoAFMF.js} +5 -5
- package/dist/{searchContext-CnDXkawZ.cjs → searchContext-DksJfC1s.cjs} +5 -5
- package/dist/{sessionStorageContext-1Ks_d4Z0.cjs → sessionStorageContext-B6FsNKjj.cjs} +1 -1
- package/dist/{sessionStorageContext-CDcl7NVl.js → sessionStorageContext-CLYCm83p.js} +1 -1
- package/dist/{shopifyUrlContext-D2btP_lY.js → shopifyUrlContext-C-PkSgNC.js} +1 -1
- package/dist/{shopifyUrlContext-CxjV3qvH.cjs → shopifyUrlContext-ZOcARiMR.cjs} +1 -1
- package/dist/{systemSettingsContext-C4dtZ0uZ.js → systemSettingsContext-DF0jSq9m.js} +2 -2
- package/dist/{systemSettingsContext-BejoGzzB.cjs → systemSettingsContext-dmE1v6w8.cjs} +2 -2
- package/dist/types-BegmH0S1.d.ts +1 -1
- package/dist/{unsupportedProductExceptions-B0yx2bHK.cjs → unsupportedProductExceptions-DGENUnEA.cjs} +1 -1
- package/dist/{unsupportedProductExceptions-Cs66ngs3.js → unsupportedProductExceptions-uQuuelOs.js} +1 -1
- package/dist/{useAmplitudeOperations-Dym0Ker8.js → useAmplitudeOperations-B9HjVe6G.js} +2 -2
- package/dist/{useAmplitudeOperations-BJXD9v2u.cjs → useAmplitudeOperations-BdvxAzuI.cjs} +2 -2
- package/dist/{useAppDetails-Dmh16bWE.js → useAppDetails-B584gkCs.js} +4 -4
- package/dist/{useAppDetails-DsAZ1xQn.cjs → useAppDetails-DczgqeLG.cjs} +4 -4
- package/dist/{useGraphQLConfig-DSRaDTdT.js → useGraphQLConfig-7UxACM4n.js} +2 -2
- package/dist/{useGraphQLConfig-B3DlwmGg.cjs → useGraphQLConfig-D_rF2Sun.cjs} +2 -2
- package/dist/userIdentityContext-CPztaX6-.js +126 -0
- package/dist/userIdentityContext-DdySlQBz.cjs +143 -0
- package/dist/{utils-B7KTAEmV.js → utils-B4PvsKVY.js} +2 -2
- package/dist/{utils-CcC2jZRi.cjs → utils-BRVP7Mnu.cjs} +2 -2
- package/dist/utils-QKFAbPT6.d.ts +1 -1
- package/package.json +1 -1
- package/src/atoms/app/index.ts +1 -1
- package/src/contexts/amplitudeContext/amplitudeContext.tsx +1 -0
- package/src/contexts/userIdentityContext/__tests__/userIdentityContext.test.tsx +0 -162
- package/src/contexts/userIdentityContext/userIdentityContext.tsx +12 -5
- package/dist/userIdentityContext-DF3atBFE.js +0 -119
- package/dist/userIdentityContext-DpQTduhF.cjs +0 -136
- /package/dist/{amplitudeContext-BItT9HmT.js → amplitudeContext-DbicJUzl.js} +0 -0
- /package/dist/{amplitudeContext-DPtyVv3Q.cjs → amplitudeContext-q3mggFSE.cjs} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { MessageRole, MessageType } from "./models-CWOgrLCm.js";
|
|
2
|
-
import { messagesAtom, replyEventCategoryAtom, userHasRepliedAtom, userQueryAtom } from "./chatState-
|
|
3
|
-
import { queueUserEventAtom } from "./chat-
|
|
2
|
+
import { messagesAtom, replyEventCategoryAtom, userHasRepliedAtom, userQueryAtom } from "./chatState-Dl5lyuKC.js";
|
|
3
|
+
import { queueUserEventAtom } from "./chat-DChvXHjz.js";
|
|
4
4
|
import { newOrgConfigAtom } from "./newOrgConfigAtom-DEUj6H-p.js";
|
|
5
5
|
import { formatFilterDisplayName } from "./utils-D82gfbgU.js";
|
|
6
6
|
import { ProductSorting } from "./types-DXnG1tV0.js";
|
|
@@ -292,4 +292,4 @@ const setChatSearchParamsAtom = atom(null, (_, set, query) => {
|
|
|
292
292
|
|
|
293
293
|
//#endregion
|
|
294
294
|
export { ChatSearchTurnAtom, ProductFilters, ProductSorter, additiveDynamicFiltersAtom, chatSearchFiltersAtom, chatSearchHasProductsAtom, chatSearchIdAtom, chatSearchIsLoadingAtom, chatSearchParamsAtom, chatSearchProductSortingAtom, chatSearchProducts, chatSearchQueryAtom, chatSearchStateAtom, createChatSearchFilterOption, getSearchParamsAtom, handleSearchResultsAtom, initiateChatSearchAtom, selectedFilterOptionsAtom, setChatSearchParamsAtom, setSearchParams };
|
|
295
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdFNlYXJjaC1ETmFHdFF5eC5qcyIsIm5hbWVzIjpbInV1aWQiXSwic291cmNlcyI6WyIuLi9zcmMvYXRvbXMvc2VhcmNoL3Byb2R1Y3RGaWx0ZXJzLnRzIiwiLi4vc3JjL2F0b21zL3NlYXJjaC9wcm9kdWN0U29ydGVyLnRzIiwiLi4vc3JjL2F0b21zL3NlYXJjaC9jaGF0U2VhcmNoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXMgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcbmltcG9ydCB7IEZpbHRlckF0dHJpYnV0ZSB9IGZyb20gJ3NyYy9jb250ZXh0cy90eXBlcyc7XG5pbXBvcnQgeyBTZWxlY3RlZEZpbHRlck9wdGlvbiB9IGZyb20gJ3NyYy9hdG9tcy9zZWFyY2gvc2VhcmNoQVBJJztcbmltcG9ydCB7IENoYXRTZWFyY2hGaWx0ZXIsIENoYXRTZWFyY2hGaWx0ZXJJdGVtIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBmb3JtYXRGaWx0ZXJEaXNwbGF5TmFtZSB9IGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBnZXRQcmljZUJ1Y2tldCA9IChwcmljZTogbnVtYmVyLCBidWNrZXRTaXplOiBudW1iZXIpID0+IHtcbiAgY29uc3QgYnVja2V0ID0gTWF0aC5mbG9vcihwcmljZSAvIGJ1Y2tldFNpemUpO1xuICByZXR1cm4gYnVja2V0ICogYnVja2V0U2l6ZTtcbn07XG5cbmNvbnN0IGlzU3RyaW5nQXJyYXkgPSAodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBzdHJpbmdbXSA9PiB7XG4gIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlLmV2ZXJ5KChpdGVtKSA9PiB0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpO1xufTtcblxudHlwZSBGaWx0ZXJTb3J0RnVuY3Rpb24gPSAoYTogQ2hhdFNlYXJjaEZpbHRlckl0ZW0sIGI6IENoYXRTZWFyY2hGaWx0ZXJJdGVtKSA9PiBudW1iZXI7XG5cbmNvbnN0IHNvcnRGaWx0ZXIgPSAoZmlsdGVyQ29uZmlnOiBGaWx0ZXJBdHRyaWJ1dGUpOiBGaWx0ZXJTb3J0RnVuY3Rpb24gPT4ge1xuICBpZiAoZmlsdGVyQ29uZmlnLnR5cGUgPT09ICdwcmljZScpIHtcbiAgICByZXR1cm4gKGEsIGIpID0+IE51bWJlcihhLmZpbHRlckl0ZW1JZCkgLSBOdW1iZXIoYi5maWx0ZXJJdGVtSWQpO1xuICB9XG4gIGlmIChmaWx0ZXJDb25maWcudHlwZSA9PT0gJ2R5bmFtaWMnKSB7XG4gICAgaWYgKGZpbHRlckNvbmZpZy5zb3J0aW5nLnR5cGUgPT09ICdhbHBoYWJldGljJykge1xuICAgICAgcmV0dXJuIChhLCBiKSA9PiBhLmRpc3BsYXlOYW1lLmxvY2FsZUNvbXBhcmUoYi5kaXNwbGF5TmFtZSk7XG4gICAgfVxuICAgIC8vIFNvcnQgYnkgdGhlIG51bWJlciBvZiBwcm9kdWN0cywgaWYgdGhleSBtYXRjaCwgc29ydCBieSBhbHBoYWJldGljYWxcbiAgICBpZiAoZmlsdGVyQ29uZmlnLnNvcnRpbmcudHlwZSA9PT0gJ3Byb2R1Y3RDb3VudCcpIHtcbiAgICAgIHJldHVybiAoYSwgYikgPT5cbiAgICAgICAgYS5wcm9kdWN0Q291bnQgPT09IGIucHJvZHVjdENvdW50XG4gICAgICAgICAgPyBhLmRpc3BsYXlOYW1lLmxvY2FsZUNvbXBhcmUoYi5kaXNwbGF5TmFtZSlcbiAgICAgICAgICA6IGIucHJvZHVjdENvdW50IC0gYS5wcm9kdWN0Q291bnQ7XG4gICAgfVxuICAgIGlmIChmaWx0ZXJDb25maWcuc29ydGluZy50eXBlID09PSAnY3VzdG9tJykge1xuICAgICAgY29uc3Qgc29ydGVkS2V5cyA9IGZpbHRlckNvbmZpZy5zb3J0aW5nLm1hcDtcbiAgICAgIHJldHVybiAoYSwgYikgPT4ge1xuICAgICAgICBpZiAoc29ydGVkS2V5c1thLmRpc3BsYXlOYW1lXSAmJiBzb3J0ZWRLZXlzW2IuZGlzcGxheU5hbWVdKSB7XG4gICAgICAgICAgLy8gSWYgYm90aCBhcmUgaW4gdGhlIHNvcnRlZEtleXMsIHNvcnQgYnkgdGhlIGluZGV4XG4gICAgICAgICAgcmV0dXJuIHNvcnRlZEtleXNbYS5kaXNwbGF5TmFtZV0gLSBzb3J0ZWRLZXlzW2IuZGlzcGxheU5hbWVdO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIG9ubHkgJ2EnIGlzIGluIHRoZSBzb3J0ZWRLZXlzLCBwdXQgaXQgYmVmb3JlIHRoZSBvdGhlclxuICAgICAgICBpZiAoc29ydGVkS2V5c1thLmRpc3BsYXlOYW1lXSkge1xuICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiBvbmx5ICdiJyBpcyBpbiB0aGUgc29ydGVkS2V5cywgcHV0IGl0IGJlZm9yZSB0aGUgb3RoZXJcbiAgICAgICAgaWYgKHNvcnRlZEtleXNbYi5kaXNwbGF5TmFtZV0pIHtcbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiBuZWl0aGVyIGFyZSBpbiB0aGUgc29ydGVkS2V5cywgc29ydCBieSBwcm9kdWN0Q291bnRcbiAgICAgICAgcmV0dXJuIGIucHJvZHVjdENvdW50IC0gYS5wcm9kdWN0Q291bnQ7XG4gICAgICB9O1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFhbGlkIHNlYXJjaCBmaWx0ZXIgY29uZmlndXJhdGlvbicpO1xufTtcblxuZXhwb3J0IGNsYXNzIFByb2R1Y3RGaWx0ZXJzIHtcbiAgc3RhdGljIGdldEZpbHRlcnNGb3JQcm9kdWN0cyhcbiAgICBwcm9kdWN0czogUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlc1snYXR0cmlidXRlcyddW10sXG4gICAgZmlsdGVyQ29uZmlnczogRmlsdGVyQXR0cmlidXRlW10sXG4gICAgc2VsZWN0ZWRGaWx0ZXJPcHRpb25zOiBTZWxlY3RlZEZpbHRlck9wdGlvbltdLFxuICApOiBDaGF0U2VhcmNoRmlsdGVyW10ge1xuICAgIGlmICghcHJvZHVjdHMgfHwgcHJvZHVjdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVycyA9IGZpbHRlckNvbmZpZ3MubWFwKChmaWx0ZXJDb25maWcpID0+XG4gICAgICBwcm9kdWN0cy5yZWR1Y2UoXG4gICAgICAgIChhY2MsIHByb2R1Y3QpID0+IHtcbiAgICAgICAgICAvLyBQcmljZSBoYXMgc3BlY2lhbCBoYW5kbGluZyBmb3IgdGhlIGZpbHRlcnNcbiAgICAgICAgICBpZiAoZmlsdGVyQ29uZmlnLnR5cGUgPT09ICdwcmljZScpIHtcbiAgICAgICAgICAgIGNvbnN0IHByaWNlQnVja2V0ID0gZ2V0UHJpY2VCdWNrZXQoXG4gICAgICAgICAgICAgIHByb2R1Y3Quc2FsZVByaWNlID8/IHByb2R1Y3Qub3JpZ2luYWxQcmljZSA/PyAwLFxuICAgICAgICAgICAgICBmaWx0ZXJDb25maWcuYnVja2V0U2l6ZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gYWNjLm1hcFtwcmljZUJ1Y2tldF0gPz8ge1xuICAgICAgICAgICAgICBmaWx0ZXJJdGVtSWQ6IHByaWNlQnVja2V0LFxuICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogYCQke3ByaWNlQnVja2V0fS0kJHtwcmljZUJ1Y2tldCArIGZpbHRlckNvbmZpZy5idWNrZXRTaXplfWAsXG4gICAgICAgICAgICAgIHByb2R1Y3RDb3VudDogMCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhY2MubWFwW3ByaWNlQnVja2V0XSA9IHsgLi4uY3VycmVudCwgcHJvZHVjdENvdW50OiBjdXJyZW50LnByb2R1Y3RDb3VudCArIDEgfTtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQXNzdW1lIHRoYXQgdGhlIFwiYXR0cmlidXRlXCIgaXMgYW4gYXJyYXkgb2YgdmFsdWVzXG4gICAgICAgICAgY29uc3QgYXR0cmlidXRlVmFsdWVzID1cbiAgICAgICAgICAgIChwcm9kdWN0LmZpbHRlcnMgJiYgcHJvZHVjdC5maWx0ZXJzPy5bZmlsdGVyQ29uZmlnLmF0dHJpYnV0ZV0pID8/IFtdO1xuICAgICAgICAgIGlmIChpc1N0cmluZ0FycmF5KGF0dHJpYnV0ZVZhbHVlcykpIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlcy5mb3JFYWNoKCh2YWwpID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFZhbCA9IHZhbC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gYWNjLm1hcFtub3JtYWxpemVkVmFsXSA/PyB7XG4gICAgICAgICAgICAgICAgZmlsdGVySXRlbUlkOiBub3JtYWxpemVkVmFsLFxuICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBmb3JtYXRGaWx0ZXJEaXNwbGF5TmFtZSh2YWwpLCAvLyBLZWVwIG9yaWdpbmFsIGNhc2UgZm9yIGRpc3BsYXlcbiAgICAgICAgICAgICAgICBwcm9kdWN0Q291bnQ6IDAsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGFjYy5tYXBbbm9ybWFsaXplZFZhbF0gPSB7IC4uLmN1cnJlbnQsIHByb2R1Y3RDb3VudDogY3VycmVudC5wcm9kdWN0Q291bnQgKyAxIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZmlsdGVyQ29uZmlnLFxuICAgICAgICAgIG1hcDoge30gYXMgUmVjb3JkPHN0cmluZywgQ2hhdFNlYXJjaEZpbHRlckl0ZW0+LFxuICAgICAgICB9LFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgY29uc3QgdHJhbnNmb3JtZWRGaWx0ZXJzOiBDaGF0U2VhcmNoRmlsdGVyW10gPSBmaWx0ZXJzLm1hcCgoeyBmaWx0ZXJDb25maWcsIG1hcCB9KSA9PiAoe1xuICAgICAgZmlsdGVySWQ6IGZpbHRlckNvbmZpZy5maWx0ZXJJZCxcbiAgICAgIGRpc3BsYXlOYW1lOiBmaWx0ZXJDb25maWcuZGlzcGxheU5hbWUsXG4gICAgICBpdGVtczogT2JqZWN0LnZhbHVlcyhtYXApXG4gICAgICAgIC5tYXAoKGZpbHRlcikgPT4gKHtcbiAgICAgICAgICBmaWx0ZXJJdGVtSWQ6IGZpbHRlci5maWx0ZXJJdGVtSWQsXG4gICAgICAgICAgZGlzcGxheU5hbWU6IGZpbHRlci5kaXNwbGF5TmFtZSxcbiAgICAgICAgICBwcm9kdWN0Q291bnQ6IGZpbHRlci5wcm9kdWN0Q291bnQsXG4gICAgICAgICAgaXNTZWxlY3RlZDpcbiAgICAgICAgICAgIHNlbGVjdGVkRmlsdGVyT3B0aW9ucy5zb21lKFxuICAgICAgICAgICAgICAob3B0aW9uKSA9PiBvcHRpb24uaWQgPT09IGAke2ZpbHRlckNvbmZpZy5maWx0ZXJJZH06JHtmaWx0ZXIuZmlsdGVySXRlbUlkfWAsXG4gICAgICAgICAgICApID8/IGZhbHNlLFxuICAgICAgICB9KSlcbiAgICAgICAgLnNvcnQoc29ydEZpbHRlcihmaWx0ZXJDb25maWcpKSxcbiAgICB9KSk7XG5cbiAgICByZXR1cm4gWy4uLnRyYW5zZm9ybWVkRmlsdGVyc107XG4gIH1cblxuICBzdGF0aWMgZmlsdGVyUHJvZHVjdHMoXG4gICAgcHJvZHVjdHM6IFByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXNbJ2F0dHJpYnV0ZXMnXVtdLFxuICAgIGZpbHRlckNvbmZpZ3M6IEZpbHRlckF0dHJpYnV0ZVtdLFxuICAgIHNlbGVjdGVkRmlsdGVyT3B0aW9uczogU2VsZWN0ZWRGaWx0ZXJPcHRpb25bXSxcbiAgICBhZGRpdGl2ZUR5bmFtaWNGaWx0ZXJzID0gZmFsc2UsIC8vIFNldCB0aGlzIHRvIHRydWUgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYmVoYXZpb3Igd2hlcmUgc3RhY2tpbmcgZmlsdGVycyBoYXMgT1IgbG9naWMuXG4gICkge1xuICAgIGNvbnN0IHNlbGVjdGVkRmlsdGVycyA9IGZpbHRlckNvbmZpZ3NcbiAgICAgIC5tYXAoKGZpbHRlckNvbmZpZykgPT4gKHtcbiAgICAgICAgZmlsdGVyQ29uZmlnLFxuICAgICAgICBoYXNTZWxlY3RlZE9wdGlvbnM6IHNlbGVjdGVkRmlsdGVyT3B0aW9ucy5zb21lKFxuICAgICAgICAgIChvcHRpb24pID0+IG9wdGlvbi5maWx0ZXJJZCA9PT0gZmlsdGVyQ29uZmlnLmZpbHRlcklkLFxuICAgICAgICApLFxuICAgICAgfSkpXG4gICAgICAuZmlsdGVyKCh7IGhhc1NlbGVjdGVkT3B0aW9ucyB9KSA9PiBoYXNTZWxlY3RlZE9wdGlvbnMpO1xuICAgIHJldHVybiBzZWxlY3RlZEZpbHRlck9wdGlvbnMubGVuZ3RoID09PSAwXG4gICAgICA/IHByb2R1Y3RzXG4gICAgICA6IHByb2R1Y3RzLmZpbHRlcigocHJvZHVjdCkgPT5cbiAgICAgICAgICBzZWxlY3RlZEZpbHRlcnMucmVkdWNlKChhY2MsIHNlbGVjdGVkRmlsdGVyKSA9PiB7XG4gICAgICAgICAgICAvLyBGaW5kaW5nIG9uZSBmYWxzZSByZW1vdmVzIHRoZSBwcm9kdWN0XG4gICAgICAgICAgICBpZiAoIWFjYykge1xuICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUHJpY2UgaXMgc3BlY2lhbFxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkRmlsdGVyLmZpbHRlckNvbmZpZy50eXBlID09PSAncHJpY2UnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHByaWNlQnVja2V0ID0gZ2V0UHJpY2VCdWNrZXQoXG4gICAgICAgICAgICAgICAgcHJvZHVjdC5zYWxlUHJpY2UgPz8gcHJvZHVjdC5vcmlnaW5hbFByaWNlID8/IDAsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRGaWx0ZXIuZmlsdGVyQ29uZmlnLmJ1Y2tldFNpemUsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGNvbnN0IG1hdGNoZXNQcmljZUZpbHRlciA9IHNlbGVjdGVkRmlsdGVyT3B0aW9ucy5zb21lKFxuICAgICAgICAgICAgICAgIChvcHRpb24pID0+IG9wdGlvbi5pZCA9PT0gYHByaWNlOiR7cHJpY2VCdWNrZXR9YCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKCFtYXRjaGVzUHJpY2VGaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkRmlsdGVyLmZpbHRlckNvbmZpZy50eXBlID09PSAnZHluYW1pYycpIHtcbiAgICAgICAgICAgICAgLy8gZHluYW1pYyBpcyBtaXNsZWFkaW5nIGhlcmUuIEl0cyBub3QganVzdCBkeW5hbWljIGZpbHRlcnMsIGJ1dCBzdGF0aWMgZmlsdGVycyBiZWNhdXNlIHRoZSBjb25maWcgY291bnRzIHN0YXRpYyBmaWx0ZXJzIGFzIHR5cGU6IGR5bmFtaWMuXG4gICAgICAgICAgICAgIGNvbnN0IHsgZmlsdGVySWQsIGF0dHJpYnV0ZSB9ID0gc2VsZWN0ZWRGaWx0ZXIuZmlsdGVyQ29uZmlnO1xuICAgICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVWYWx1ZXMgPSBwcm9kdWN0LmZpbHRlcnM/LlthdHRyaWJ1dGVdO1xuXG4gICAgICAgICAgICAgIGlmICghaXNTdHJpbmdBcnJheShhdHRyaWJ1dGVWYWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgaXNEeW5hbWljRmlsdGVyID0gc2VsZWN0ZWRGaWx0ZXIuZmlsdGVyQ29uZmlnLmF0dHJpYnV0ZSA9PT0gJ2R5bmFtaWMnOyAvLyBUcnVlIGR5bmFtaWMgZmlsdGVycyAodGhlIG9uZXMgdGhhdCBhcHBlYXIgYmVuZWF0aCB0aGUgc2VhcmNoIGlucHV0KVxuICAgICAgICAgICAgICBjb25zdCBpc1N1YnRyYWN0aXZlTG9naWMgPSBpc0R5bmFtaWNGaWx0ZXIgJiYgIWFkZGl0aXZlRHluYW1pY0ZpbHRlcnM7XG5cbiAgICAgICAgICAgICAgaWYgKGlzU3VidHJhY3RpdmVMb2dpYykge1xuICAgICAgICAgICAgICAgIC8vIEFORCBsb2dpYyBmb3Igc3VidHJhY3RpdmUgZHluYW1pYyBmaWx0ZXJzIGFuZCBiZXR3ZWVuIHN0YXRpYyBmaWx0ZXIgY2F0ZWdvcmllc1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uc0ZvclRoaXNGaWx0ZXIgPSBzZWxlY3RlZEZpbHRlck9wdGlvbnNcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLmZpbHRlcklkID09PSBmaWx0ZXJJZClcbiAgICAgICAgICAgICAgICAgIC5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLmZpbHRlckl0ZW1JZC50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGhhc0FsbFNlbGVjdGVkVmFsdWVzID0gc2VsZWN0ZWRPcHRpb25zRm9yVGhpc0ZpbHRlci5ldmVyeSgoc2VsZWN0ZWRWYWx1ZSkgPT5cbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlcy5zb21lKCh2YWwpID0+IHZhbC50b0xvd2VyQ2FzZSgpID09PSBzZWxlY3RlZFZhbHVlKSxcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFoYXNBbGxTZWxlY3RlZFZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBPUiBsb2dpYyBmb3Igc3RhdGljIGZpbHRlcnMgaW4gdGhlIHNpZGViYXIgd2l0aGluIGEgY2F0ZWdvcnkuXG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlcyA9IGF0dHJpYnV0ZVZhbHVlcy5zb21lKCh2YWwpID0+XG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZEZpbHRlck9wdGlvbnMuc29tZShcbiAgICAgICAgICAgICAgICAgICAgKG9wdGlvbikgPT4gb3B0aW9uLmlkID09PSBgJHtmaWx0ZXJJZH06JHt2YWwudG9Mb3dlckNhc2UoKX1gLFxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmICghbWF0Y2hlcykge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSwgdHJ1ZSksXG4gICAgICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCB7IFByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXMgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcbmltcG9ydCB7IFByb2R1Y3RTb3J0aW5nIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBQcm9kdWN0U29ydGVyIHtcbiAgc3RhdGljIHNvcnQocHJvZHVjdHM6IFByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXNbJ2F0dHJpYnV0ZXMnXVtdLCBzb3J0aW5nOiBQcm9kdWN0U29ydGluZykge1xuICAgIHN3aXRjaCAoc29ydGluZykge1xuICAgICAgY2FzZSBQcm9kdWN0U29ydGluZy5QUklDRV9BU0M6XG4gICAgICAgIHJldHVybiBbLi4ucHJvZHVjdHNdLnNvcnQoXG4gICAgICAgICAgKHAxLCBwMikgPT5cbiAgICAgICAgICAgIChwMS5zYWxlUHJpY2UgPz8gcDEub3JpZ2luYWxQcmljZSA/PyAwKSAtIChwMi5zYWxlUHJpY2UgPz8gcDIub3JpZ2luYWxQcmljZSA/PyAwKSxcbiAgICAgICAgKTtcblxuICAgICAgY2FzZSBQcm9kdWN0U29ydGluZy5QUklDRV9ERVNDOlxuICAgICAgICByZXR1cm4gWy4uLnByb2R1Y3RzXS5zb3J0KFxuICAgICAgICAgIChwMSwgcDIpID0+XG4gICAgICAgICAgICAocDIuc2FsZVByaWNlID8/IHAyLm9yaWdpbmFsUHJpY2UgPz8gMCkgLSAocDEuc2FsZVByaWNlID8/IHAxLm9yaWdpbmFsUHJpY2UgPz8gMCksXG4gICAgICAgICk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBwcm9kdWN0cztcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IFVzZXJFdmVudENhdGVnb3J5IH0gZnJvbSBcIkBzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudFwiO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gXCJ1dWlkXCI7XG5pbXBvcnQgeyBhdG9tIH0gZnJvbSBcImpvdGFpXCI7XG5pbXBvcnQge1xuICBNZXNzYWdlLFxuICBNZXNzYWdlUm9sZSxcbiAgTWVzc2FnZVR5cGUsXG4gIFByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXMsXG59IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzXCI7XG5pbXBvcnQge1xuICBtZXNzYWdlc0F0b20sXG4gIHJlcGx5RXZlbnRDYXRlZ29yeUF0b20sXG4gIHVzZXJIYXNSZXBsaWVkQXRvbSxcbiAgdXNlclF1ZXJ5QXRvbSxcbn0gZnJvbSBcInNyYy9hdG9tcy9jaGF0XCI7XG5pbXBvcnQgeyBxdWV1ZVVzZXJFdmVudEF0b20gfSBmcm9tIFwiLi4vY2hhdC9tZXNzYWdlUXVldWVcIjtcbmltcG9ydCB7IG5ld09yZ0NvbmZpZ0F0b20gfSBmcm9tIFwiLi4vb3JnXCI7XG5pbXBvcnQgeyBQcm9kdWN0RmlsdGVycyB9IGZyb20gXCIuL3Byb2R1Y3RGaWx0ZXJzXCI7XG5pbXBvcnQgeyBQcm9kdWN0U29ydGVyIH0gZnJvbSBcIi4vcHJvZHVjdFNvcnRlclwiO1xuaW1wb3J0IHsgQ2hhdFNlYXJjaFN0YXRlVHlwZSwgUHJvZHVjdFNvcnRpbmcgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vLyBOT1RFOlxuLy8gVGhpcyBpcyBhIGxlZ2FjeSB2ZXJzaW9uIG9mIHNlYXJjaCB0aGF0IG5lZWRzIHRvIGJlIGRlY291cGxlZCBhbmQgcmVtb3ZlZC5cbi8vIHRoZSBuZXcgc2VhcmNoLnRzIGZpbGUgaW4gdGhpcyBkaXJlY3RvcnkgaXMgbGlrZWx5IHdoYXQgeW91J3JlIGxvb2tpbmcgZm9yLlxuXG5leHBvcnQgY29uc3QgY2hhdFNlYXJjaFN0YXRlQXRvbSA9IGF0b208Q2hhdFNlYXJjaFN0YXRlVHlwZT4oXCJlbnRyeXBvaW50XCIpO1xuZXhwb3J0IGNvbnN0IGNoYXRTZWFyY2hIYXNQcm9kdWN0c0F0b20gPSBhdG9tPGJvb2xlYW4+KGZhbHNlKTtcbmV4cG9ydCBjb25zdCBjaGF0U2VhcmNoUHJvZHVjdFNvcnRpbmdBdG9tID0gYXRvbTxQcm9kdWN0U29ydGluZz4oXG4gIFByb2R1Y3RTb3J0aW5nLkZFQVRVUkVEXG4pO1xuXG5jb25zdCBmaWx0ZXJQcm9kdWN0TGlzdCA9IChtZXNzYWdlOiBNZXNzYWdlKSA9PlxuICBtZXNzYWdlLnR5cGUgPT09IE1lc3NhZ2VUeXBlLlByb2R1Y3QgJiYgbWVzc2FnZS5tZXRhZGF0YS5pc0ZvckdyaWQgPT09IHRydWU7XG5jb25zdCBmaWx0ZXJGaWx0ZXJMaXN0ID0gKG1lc3NhZ2U6IE1lc3NhZ2UpID0+XG4gIG1lc3NhZ2UudHlwZSA9PT0gTWVzc2FnZVR5cGUuUHJvZHVjdFNlYXJjaEZpbHRlcjtcblxuZXhwb3J0IHR5cGUgQ2hhdFNlYXJjaFR1cm4gPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGdlbmVyYXRlZFF1ZXJ5Pzogc3RyaW5nO1xuICBwcm9kdWN0Q291bnQ6IG51bWJlcjtcbiAgcHJvZHVjdExpc3Q6IFByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXNbXCJhdHRyaWJ1dGVzXCJdW107XG4gIGZpbHRlckxpc3Q6IHN0cmluZ1tdO1xuICBtZXNzYWdlczogTWVzc2FnZVtdO1xufTtcblxuZXhwb3J0IGNvbnN0IGNoYXRTZWFyY2hJc0xvYWRpbmdBdG9tID0gYXRvbShmYWxzZSk7XG5cbmNvbnN0IGJ1aWxkQ2hhdFNlYXJjaFR1cm4gPSAoXG4gIG1lc3NhZ2VzOiBNZXNzYWdlW11cbik6IFtzdHJpbmcsIENoYXRTZWFyY2hUdXJuXSB8IG51bGwgPT4ge1xuICBjb25zdCBxdWVyeU1lc3NhZ2UgPSBtZXNzYWdlcy5maW5kKFxuICAgIChtZXNzYWdlKSA9PiBtZXNzYWdlLnR5cGUgPT09IE1lc3NhZ2VUeXBlLlByb2R1Y3RTZWFyY2hcbiAgKTtcbiAgaWYgKCFxdWVyeU1lc3NhZ2UpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCB7IGdlbmVyYXRlZFF1ZXJ5LCBwcm9kdWN0Q291bnQgfSA9IHF1ZXJ5TWVzc2FnZS5tZXRhZGF0YSA/PyB7fTtcbiAgY29uc3QgcHJvZHVjdExpc3QgPSBtZXNzYWdlc1xuICAgIC5maWx0ZXIoZmlsdGVyUHJvZHVjdExpc3QpXG4gICAgLm1hcCgobWVzc2FnZSkgPT4gKG1lc3NhZ2UgYXMgYW55KS5tZXRhZGF0YSk7XG4gIGNvbnN0IGZpbHRlckxpc3QgPSBtZXNzYWdlc1xuICAgIC5maWx0ZXIoZmlsdGVyRmlsdGVyTGlzdClcbiAgICAubWFwKChtZXNzYWdlKSA9PiBtZXNzYWdlLm1ldGFkYXRhLmZpbHRlck5hbWUpO1xuICByZXR1cm4gW1xuICAgIHF1ZXJ5TWVzc2FnZS5pZCxcbiAgICB7XG4gICAgICBpZDogcXVlcnlNZXNzYWdlLmlkLFxuICAgICAgZ2VuZXJhdGVkUXVlcnksXG4gICAgICBwcm9kdWN0Q291bnQ6IHByb2R1Y3RDb3VudCB8fCBwcm9kdWN0TGlzdC5sZW5ndGgsXG4gICAgICBwcm9kdWN0TGlzdCxcbiAgICAgIGZpbHRlckxpc3QsXG4gICAgICBtZXNzYWdlcyxcbiAgICB9LFxuICBdO1xufTtcblxuY29uc3QgY2hhdFNlYXJjaEZpbHRlckNvbmZpZ0F0b20gPSBhdG9tKChnZXQpID0+IHtcbiAgY29uc3QgbmV3T3JnQ29uZmlnID0gZ2V0KG5ld09yZ0NvbmZpZ0F0b20pO1xuICByZXR1cm4gKFxuICAgIG5ld09yZ0NvbmZpZz8uZnJvbnRlbmRDb25maWc/LnVpQ29uZmlncz8uc2VhcmNoQ29uZmlnPy5zZWFyY2hGaWx0ZXJDb25maWcgfHxcbiAgICBbXVxuICApO1xufSk7XG5cbmNvbnN0IHNlYXJjaE1hcEF0b20gPSBhdG9tKChnZXQpID0+IHtcbiAgY29uc3QgbWVzc2FnZXMgPSBnZXQobWVzc2FnZXNBdG9tKTtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBtZXNzYWdlcy5tYXAoYnVpbGRDaGF0U2VhcmNoVHVybikuZmlsdGVyKCh2KSA9PiB2ICE9PSBudWxsKVxuICApO1xufSk7XG5cbmNvbnN0IGludGVybmFsQ2hhdFNlYXJjaFBhcmFtc0F0b20gPSBhdG9tPHtcbiAgaWQ6IHN0cmluZyB8IG51bGw7XG4gIHF1ZXJ5OiBzdHJpbmcgfCBudWxsO1xufT4oe1xuICBpZDogbnVsbCxcbiAgcXVlcnk6IG51bGwsXG59KTtcblxuLy8gU2VsZWN0ZWQgZmlsdGVyIG9wdGlvbnMgd2l0aCBjb21wb3VuZCBvYmplY3RzIGZvciBiZXR0ZXIgdHlwZSBzYWZldHkgYW5kIGRpc3BsYXlcbmV4cG9ydCB0eXBlIFNlbGVjdGVkQ2hhdFNlYXJjaEZpbHRlck9wdGlvbiA9IHtcbiAgaWQ6IHN0cmluZzsgLy8gXCJmaWx0ZXJJZDpmaWx0ZXJJdGVtSWRcIiAtIG1haW50YWlucyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGZvciBjb21wYXJpc29uc1xuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xuICBmaWx0ZXJJZDogc3RyaW5nOyAvLyBGaWx0ZXIgY2F0ZWdvcnlcbiAgZmlsdGVySXRlbUlkOiBzdHJpbmc7IC8vIEZpbHRlciB2YWx1ZVxufTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdGVkRmlsdGVyT3B0aW9uc0F0b20gPSBhdG9tPFNlbGVjdGVkQ2hhdFNlYXJjaEZpbHRlck9wdGlvbltdPihcbiAgW11cbik7XG5cbmV4cG9ydCBjb25zdCBhZGRpdGl2ZUR5bmFtaWNGaWx0ZXJzQXRvbSA9IGF0b20oKGdldCkgPT4ge1xuICBjb25zdCBuZXdPcmdDb25maWcgPSBnZXQobmV3T3JnQ29uZmlnQXRvbSk7XG4gIHJldHVybiAoXG4gICAgbmV3T3JnQ29uZmlnPy5mcm9udGVuZENvbmZpZz8udWlDb25maWdzPy5zZWFyY2hDb25maWdcbiAgICAgID8uYWRkaXRpdmVEeW5hbWljRmlsdGVycyA/PyBmYWxzZVxuICApO1xufSk7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVDaGF0U2VhcmNoRmlsdGVyT3B0aW9uID0gKFxuICBmaWx0ZXJJZDogc3RyaW5nLFxuICBmaWx0ZXJJdGVtSWQ6IHN0cmluZyxcbiAgZGlzcGxheU5hbWU6IHN0cmluZ1xuKTogU2VsZWN0ZWRDaGF0U2VhcmNoRmlsdGVyT3B0aW9uID0+ICh7XG4gIGlkOiBgJHtmaWx0ZXJJZH06JHtmaWx0ZXJJdGVtSWR9YCxcbiAgZGlzcGxheU5hbWUsXG4gIGZpbHRlcklkLFxuICBmaWx0ZXJJdGVtSWQsXG59KTtcblxuY29uc3QgaGFuZGxlU2VhcmNoQXRvbSA9IGF0b20obnVsbCwgKGdldCwgc2V0LCBtZXNzYWdlOiBNZXNzYWdlKSA9PiB7XG4gIGlmIChtZXNzYWdlLnR5cGUgIT09IE1lc3NhZ2VUeXBlLlNlYXJjaCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHF1ZXJ5U2VhcmNoID0gbWVzc2FnZS5tZXRhZGF0YS5zZWFyY2hUZXJtO1xuXG4gIHNldChyZXBseUV2ZW50Q2F0ZWdvcnlBdG9tLCBVc2VyRXZlbnRDYXRlZ29yeS5TZWFyY2gpO1xuICBzZXQodXNlclF1ZXJ5QXRvbSwgcXVlcnlTZWFyY2gpO1xuICBzZXQobWVzc2FnZXNBdG9tLCBbLi4uZ2V0KG1lc3NhZ2VzQXRvbSksIFttZXNzYWdlXV0pO1xuICBzZXQodXNlckhhc1JlcGxpZWRBdG9tLCB0cnVlKTtcblxuICBzZXQocXVldWVVc2VyRXZlbnRBdG9tLCB7XG4gICAgZXZlbnRJZDogbWVzc2FnZS5pZCxcbiAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuU2VhcmNoLFxuICAgIGNyZWF0ZWRBdDogbWVzc2FnZS5jcmVhdGVkQXQsXG4gICAgYXR0cmlidXRlczoge1xuICAgICAgc2VhcmNoVGVybTogbWVzc2FnZS5tZXRhZGF0YS5zZWFyY2hUZXJtLFxuICAgICAgc2VsZWN0ZWRGaWx0ZXJzOiBtZXNzYWdlLm1ldGFkYXRhLnNlbGVjdGVkRmlsdGVycyxcbiAgICB9LFxuICB9KTtcbn0pO1xuXG4vLyBUaGlzIGludGVybmFsIGF0b20gaXMgdXNlZCB0byBzdG9yZSB0aGUgc2VhcmNoIHBhcmFtc1xuZXhwb3J0IGNvbnN0IGNoYXRTZWFyY2hQYXJhbXNBdG9tID0gYXRvbShcbiAgKGdldCkgPT4gZ2V0KGludGVybmFsQ2hhdFNlYXJjaFBhcmFtc0F0b20pLFxuICAoXywgc2V0LCB2YWx1ZTogeyBpZDogc3RyaW5nIHwgbnVsbDsgcXVlcnk6IHN0cmluZyB8IG51bGwgfSkgPT4ge1xuICAgIHNldChpbnRlcm5hbENoYXRTZWFyY2hQYXJhbXNBdG9tLCB2YWx1ZSk7XG4gIH1cbik7XG5cbmV4cG9ydCBjb25zdCBjaGF0U2VhcmNoUXVlcnlBdG9tID0gYXRvbShcbiAgKGdldCkgPT4gZ2V0KGNoYXRTZWFyY2hQYXJhbXNBdG9tKT8ucXVlcnkgPz8gbnVsbCxcbiAgKGdldCwgc2V0LCB2YWx1ZTogc3RyaW5nIHwgbnVsbCkgPT4ge1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IGdldChjaGF0U2VhcmNoUGFyYW1zQXRvbSk7XG4gICAgc2V0KGNoYXRTZWFyY2hQYXJhbXNBdG9tLCB7IGlkOiBzZWFyY2hQYXJhbXMuaWQsIHF1ZXJ5OiB2YWx1ZSB9KTtcbiAgfVxuKTtcblxuZXhwb3J0IGNvbnN0IGNoYXRTZWFyY2hJZEF0b20gPSBhdG9tKFxuICAoZ2V0KSA9PiBnZXQoY2hhdFNlYXJjaFBhcmFtc0F0b20pPy5pZCA/PyBudWxsLFxuICAoZ2V0LCBzZXQsIHZhbHVlOiBzdHJpbmcgfCBudWxsKSA9PiB7XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gZ2V0KGNoYXRTZWFyY2hQYXJhbXNBdG9tKTtcbiAgICBzZXQoY2hhdFNlYXJjaFBhcmFtc0F0b20sIHsgaWQ6IHZhbHVlLCBxdWVyeTogc2VhcmNoUGFyYW1zLnF1ZXJ5IH0pO1xuICB9XG4pO1xuXG5leHBvcnQgY29uc3QgQ2hhdFNlYXJjaFR1cm5BdG9tID0gYXRvbSgoZ2V0KSA9PiB7XG4gIGNvbnN0IHNlYXJjaEZpbHRlckNvbmZpZyA9IGdldChjaGF0U2VhcmNoRmlsdGVyQ29uZmlnQXRvbSk7XG4gIGNvbnN0IHNlYXJjaE1hcCA9IGdldChzZWFyY2hNYXBBdG9tKTtcbiAgY29uc3QgY2hhdFNlYXJjaElkID0gZ2V0KGNoYXRTZWFyY2hJZEF0b20pO1xuICBpZiAoIWNoYXRTZWFyY2hJZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IENoYXRTZWFyY2hUdXJuID0gc2VhcmNoTWFwW2NoYXRTZWFyY2hJZF07XG4gIGlmICghQ2hhdFNlYXJjaFR1cm4pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBwcm9kdWN0U29ydGluZyA9IGdldChjaGF0U2VhcmNoUHJvZHVjdFNvcnRpbmdBdG9tKTtcbiAgY29uc3Qgc2VsZWN0ZWRGaWx0ZXJPcHRpb25zID0gZ2V0KHNlbGVjdGVkRmlsdGVyT3B0aW9uc0F0b20pO1xuICBjb25zdCBhZGRpdGl2ZUR5bmFtaWNGaWx0ZXJzID0gZ2V0KGFkZGl0aXZlRHluYW1pY0ZpbHRlcnNBdG9tKTtcbiAgY29uc3QgZmlsdGVyZWRQcm9kdWN0cyA9IFByb2R1Y3RGaWx0ZXJzLmZpbHRlclByb2R1Y3RzKFxuICAgIENoYXRTZWFyY2hUdXJuLnByb2R1Y3RMaXN0LFxuICAgIHNlYXJjaEZpbHRlckNvbmZpZyxcbiAgICBzZWxlY3RlZEZpbHRlck9wdGlvbnMsXG4gICAgYWRkaXRpdmVEeW5hbWljRmlsdGVyc1xuICApO1xuXG4gIGNvbnN0IGZpbHRlcmVkQW5kU29ydGVkUHJvZHVjdHMgPSBQcm9kdWN0U29ydGVyLnNvcnQoXG4gICAgZmlsdGVyZWRQcm9kdWN0cyxcbiAgICBwcm9kdWN0U29ydGluZ1xuICApO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc2VhcmNoTWFwW2NoYXRTZWFyY2hJZF0sXG4gICAgcHJvZHVjdExpc3Q6IGZpbHRlcmVkQW5kU29ydGVkUHJvZHVjdHMsXG4gICAgcHJvZHVjdENvdW50OiBmaWx0ZXJlZEFuZFNvcnRlZFByb2R1Y3RzLmxlbmd0aCxcbiAgfTtcbn0pO1xuXG4vLyBUT0RPOiBXb3JrIG9uIGRlcHJlY2F0aW5nIHRoaXMgYXRvbSBpbiBmYXZvciBvZiB1c2luZyBDaGF0U2VhcmNoVHVybkF0b20gZGlyZWN0bHlcbmV4cG9ydCBjb25zdCBjaGF0U2VhcmNoUHJvZHVjdHMgPSBhdG9tKChnZXQpID0+IHtcbiAgY29uc3QgQ2hhdFNlYXJjaFR1cm4gPSBnZXQoQ2hhdFNlYXJjaFR1cm5BdG9tKTtcbiAgcmV0dXJuIENoYXRTZWFyY2hUdXJuPy5wcm9kdWN0TGlzdCA/PyBbXTtcbn0pO1xuXG5leHBvcnQgY29uc3QgY2hhdFNlYXJjaEZpbHRlcnNBdG9tID0gYXRvbSgoZ2V0KSA9PiB7XG4gIGNvbnN0IHNlYXJjaEZpbHRlckNvbmZpZyA9IGdldChjaGF0U2VhcmNoRmlsdGVyQ29uZmlnQXRvbSk7XG4gIGNvbnN0IHNlYXJjaE1hcCA9IGdldChzZWFyY2hNYXBBdG9tKTtcbiAgY29uc3QgY2hhdFNlYXJjaElkID0gZ2V0KGNoYXRTZWFyY2hJZEF0b20pO1xuXG4gIGlmIChjaGF0U2VhcmNoSWQgJiYgc2VhcmNoTWFwW2NoYXRTZWFyY2hJZF0pIHtcbiAgICBjb25zdCBwcm9kdWN0cyA9IHNlYXJjaE1hcFtjaGF0U2VhcmNoSWRdLnByb2R1Y3RMaXN0O1xuICAgIGNvbnN0IHNlbGVjdGVkRmlsdGVyT3B0aW9ucyA9IGdldChzZWxlY3RlZEZpbHRlck9wdGlvbnNBdG9tKTtcbiAgICByZXR1cm4gUHJvZHVjdEZpbHRlcnMuZ2V0RmlsdGVyc0ZvclByb2R1Y3RzKFxuICAgICAgcHJvZHVjdHMsXG4gICAgICBzZWFyY2hGaWx0ZXJDb25maWcsXG4gICAgICBzZWxlY3RlZEZpbHRlck9wdGlvbnNcbiAgICApO1xuICB9XG4gIHJldHVybiBbXTtcbn0pO1xuXG4vLyBGb3Igc2VhcmNoIHdlIHVzZSB0aGUgZm9sbG93aW5nIHF1ZXJ5IHBhcmFtczpcbi8vIGVzOiB0cnVlIC0gdGhpcyBpbmRpY2F0ZXMgdGhhdCB3ZSBhcmUgaW4gYSBzZWFyY2ggc3RhdGVcbi8vIGVzcTogcXVlcnkgLSB0aGlzIGlzIHRoZSBjdXJyZW50IHNlYXJjaCBxdWVyeVxuLy8gZXNpOiBzZWFyY2ggaWQgLSB0aGlzIGlzIHRoZSB1bmlxdWUgaWQgZm9yIHRoZSBzZWFyY2ggcmVzdWx0cyB0aGF0IHdlIGFyZSBkaXNwbGF5aW5nLiBJdCBpcyBwdWxsZWQgZnJvbSB0aGUgbWVzc2FnZSBpZCBmcm9tIHRoZSB0dXJuIHRoYXQgaW5jbHVkZXMgdGhlIHNlYXJjaCByZXN1bHRzXG5cbmV4cG9ydCBjb25zdCBzZXRTZWFyY2hQYXJhbXMgPSAocXVlcnk6IHN0cmluZykgPT4ge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJlc1wiLCBcInRydWVcIik7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwiZXNxXCIsIHF1ZXJ5KTtcbiAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKHt9LCBcIlwiLCB1cmwpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNlYXJjaFBhcmFtc0F0b20gPSBhdG9tKCgpID0+IHtcbiAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcbiAgcmV0dXJuIHtcbiAgICBlczogcGFyYW1zLmdldChcImVzXCIpLFxuICAgIGVzcTogcGFyYW1zLmdldChcImVzcVwiKSxcbiAgfTtcbn0pO1xuXG5leHBvcnQgY29uc3QgaW5pdGlhdGVDaGF0U2VhcmNoQXRvbSA9IGF0b20obnVsbCwgKF8sIHNldCwgcXVlcnk6IHN0cmluZykgPT4ge1xuICBzZXQoY2hhdFNlYXJjaElzTG9hZGluZ0F0b20sIHRydWUpO1xuICAvLyBVcGRhdGUgVVJMIGFuZCBtYW51YWxseSB0cmlnZ2VyIHN0YXRlIGNoYW5nZSAoc2luY2UgcHVzaFN0YXRlIGRvZXNuJ3QgdHJpZ2dlciBwb3BzdGF0ZSlcbiAgY29uc3QgdXJsID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwiZXNcIiwgXCJ0cnVlXCIpO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcImVzcVwiLCBxdWVyeSk7XG4gIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSh7fSwgXCJcIiwgdXJsKTtcblxuICAvLyBNYW51YWxseSB0cmlnZ2VyIHBhZ2UgdmFyaWFudCByZS1ldmFsdWF0aW9uIGJ5IGRpc3BhdGNoaW5nIGEgcG9wc3RhdGUgZXZlbnRcbiAgLy8gVGhpcyBlbnN1cmVzIHRoZSBwYWdlIHZhcmlhbnQgc3lzdGVtIGRldGVjdHMgdGhlIFVSTCBjaGFuZ2UgYW5kIG1vdW50cyBzZWFyY2ggcmVzdWx0c1xuICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgUG9wU3RhdGVFdmVudChcInBvcHN0YXRlXCIsIHsgc3RhdGU6IHt9IH0pKTtcblxuICBzZXQoY2hhdFNlYXJjaFBhcmFtc0F0b20sIHsgaWQ6IG51bGwsIHF1ZXJ5IH0pO1xuICBzZXQoaGFuZGxlU2VhcmNoQXRvbSwge1xuICAgIGlkOiB1dWlkKCksXG4gICAgcm9sZTogTWVzc2FnZVJvbGUuVXNlcixcbiAgICB0eXBlOiBNZXNzYWdlVHlwZS5TZWFyY2gsXG4gICAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgIHNlYXJjaFRlcm06IHF1ZXJ5LFxuICAgICAgLy8gRW5hYmxpbmcgdGhpcyB3aWxsIGVuYWJsZSB0aGUgbmV3IGJhY2tlbmQgc2VhcmNoXG4gICAgICBzZWxlY3RlZEZpbHRlcnM6IFtdLFxuICAgIH0sXG4gIH0pO1xufSk7XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVTZWFyY2hSZXN1bHRzQXRvbSA9IGF0b20oXG4gIG51bGwsXG4gIChnZXQsIHNldCwgbWVzc2FnZTogTWVzc2FnZSB8IHVuZGVmaW5lZCkgPT4ge1xuICAgIGlmICghbWVzc2FnZSB8fCBtZXNzYWdlLnR5cGUgIT09IE1lc3NhZ2VUeXBlLlByb2R1Y3RTZWFyY2gpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IHByb2R1Y3RDb3VudCwgZ2VuZXJhdGVkUXVlcnkgfSA9IG1lc3NhZ2UubWV0YWRhdGE7XG4gICAgaWYgKHByb2R1Y3RDb3VudCAhPT0gMCkge1xuICAgICAgLy8gQ2xlYXIgdGhlIGZpbHRlciBvcHRpb25zIHdoZW4gd2UgZ2V0IG5ldyBwcm9kdWN0c1xuICAgICAgc2V0KHNlbGVjdGVkRmlsdGVyT3B0aW9uc0F0b20sIFtdKTtcbiAgICAgIC8vIFRPRE86IFNob3VsZCB3ZSBzdGlsbCBkbyBhbnkgb2YgdGhlc2UgdGhpbmdzP1xuICAgICAgc2V0KGNoYXRTZWFyY2hTdGF0ZUF0b20sIFwicHJvZHVjdC1wYWdlXCIpO1xuICAgICAgY29uc3QgY3VycmVudFNlYXJjaFBhcmFtcyA9IGdldChjaGF0U2VhcmNoUGFyYW1zQXRvbSk7XG4gICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwiZXNcIiwgXCJ0cnVlXCIpO1xuICAgICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJlc3FcIiwgZ2VuZXJhdGVkUXVlcnkpO1xuICAgICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJlc2lcIiwgbWVzc2FnZS5pZCk7XG4gICAgICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUoe30sIFwiXCIsIHVybCk7XG4gICAgICBpZiAoY3VycmVudFNlYXJjaFBhcmFtcy5pZCA9PT0gbnVsbCkge1xuICAgICAgICAvLyBJZiB0aGUgaWQgaXMgbnVsbCwgd2UgbmVlZCB0byByZXBsYWNlIHRoZSBzdGF0ZVxuICAgICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwgXCJcIiwgdXJsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIHRoZSBxdWVyeSBpcyBkaWZmZXJlbnQsIHdlIG5lZWQgdG8gcHVzaCBhIG5ldyBzdGF0ZVxuICAgICAgICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUobnVsbCwgXCJcIiwgdXJsKTtcbiAgICAgIH1cbiAgICAgIHNldChjaGF0U2VhcmNoUGFyYW1zQXRvbSwgeyBpZDogbWVzc2FnZS5pZCwgcXVlcnk6IGdlbmVyYXRlZFF1ZXJ5IH0pO1xuICAgIH1cbiAgfVxuKTtcblxuZXhwb3J0IGNvbnN0IHNldENoYXRTZWFyY2hQYXJhbXNBdG9tID0gYXRvbShudWxsLCAoXywgc2V0LCBxdWVyeTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcImVzXCIsIFwidHJ1ZVwiKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJlc3FcIiwgcXVlcnkpO1xuICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUoe30sIFwiXCIsIHVybCk7XG4gIHNldChjaGF0U2VhcmNoUGFyYW1zQXRvbSwgeyBpZDogbnVsbCwgcXVlcnkgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFNQSxNQUFNLGtCQUFrQixPQUFlLGVBQXVCO0FBRTVELFFBRGUsS0FBSyxNQUFNLFFBQVEsV0FBVyxHQUM3Qjs7QUFHbEIsTUFBTSxpQkFBaUIsVUFBc0M7QUFDM0QsS0FBSSxDQUFDLE1BQU0sUUFBUSxNQUFNLENBQ3ZCLFFBQU87QUFFVCxRQUFPLE1BQU0sT0FBTyxTQUFTLE9BQU8sU0FBUyxTQUFTOztBQUt4RCxNQUFNLGNBQWMsaUJBQXNEO0FBQ3hFLEtBQUksYUFBYSxTQUFTLFFBQ3hCLFNBQVEsR0FBRyxNQUFNLE9BQU8sRUFBRSxhQUFhLEdBQUcsT0FBTyxFQUFFLGFBQWE7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
|
|
295
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdFNlYXJjaC1zby1xZWlFTC5qcyIsIm5hbWVzIjpbInV1aWQiXSwic291cmNlcyI6WyIuLi9zcmMvYXRvbXMvc2VhcmNoL3Byb2R1Y3RGaWx0ZXJzLnRzIiwiLi4vc3JjL2F0b21zL3NlYXJjaC9wcm9kdWN0U29ydGVyLnRzIiwiLi4vc3JjL2F0b21zL3NlYXJjaC9jaGF0U2VhcmNoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXMgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcbmltcG9ydCB7IEZpbHRlckF0dHJpYnV0ZSB9IGZyb20gJ3NyYy9jb250ZXh0cy90eXBlcyc7XG5pbXBvcnQgeyBTZWxlY3RlZEZpbHRlck9wdGlvbiB9IGZyb20gJ3NyYy9hdG9tcy9zZWFyY2gvc2VhcmNoQVBJJztcbmltcG9ydCB7IENoYXRTZWFyY2hGaWx0ZXIsIENoYXRTZWFyY2hGaWx0ZXJJdGVtIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBmb3JtYXRGaWx0ZXJEaXNwbGF5TmFtZSB9IGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBnZXRQcmljZUJ1Y2tldCA9IChwcmljZTogbnVtYmVyLCBidWNrZXRTaXplOiBudW1iZXIpID0+IHtcbiAgY29uc3QgYnVja2V0ID0gTWF0aC5mbG9vcihwcmljZSAvIGJ1Y2tldFNpemUpO1xuICByZXR1cm4gYnVja2V0ICogYnVja2V0U2l6ZTtcbn07XG5cbmNvbnN0IGlzU3RyaW5nQXJyYXkgPSAodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBzdHJpbmdbXSA9PiB7XG4gIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlLmV2ZXJ5KChpdGVtKSA9PiB0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpO1xufTtcblxudHlwZSBGaWx0ZXJTb3J0RnVuY3Rpb24gPSAoYTogQ2hhdFNlYXJjaEZpbHRlckl0ZW0sIGI6IENoYXRTZWFyY2hGaWx0ZXJJdGVtKSA9PiBudW1iZXI7XG5cbmNvbnN0IHNvcnRGaWx0ZXIgPSAoZmlsdGVyQ29uZmlnOiBGaWx0ZXJBdHRyaWJ1dGUpOiBGaWx0ZXJTb3J0RnVuY3Rpb24gPT4ge1xuICBpZiAoZmlsdGVyQ29uZmlnLnR5cGUgPT09ICdwcmljZScpIHtcbiAgICByZXR1cm4gKGEsIGIpID0+IE51bWJlcihhLmZpbHRlckl0ZW1JZCkgLSBOdW1iZXIoYi5maWx0ZXJJdGVtSWQpO1xuICB9XG4gIGlmIChmaWx0ZXJDb25maWcudHlwZSA9PT0gJ2R5bmFtaWMnKSB7XG4gICAgaWYgKGZpbHRlckNvbmZpZy5zb3J0aW5nLnR5cGUgPT09ICdhbHBoYWJldGljJykge1xuICAgICAgcmV0dXJuIChhLCBiKSA9PiBhLmRpc3BsYXlOYW1lLmxvY2FsZUNvbXBhcmUoYi5kaXNwbGF5TmFtZSk7XG4gICAgfVxuICAgIC8vIFNvcnQgYnkgdGhlIG51bWJlciBvZiBwcm9kdWN0cywgaWYgdGhleSBtYXRjaCwgc29ydCBieSBhbHBoYWJldGljYWxcbiAgICBpZiAoZmlsdGVyQ29uZmlnLnNvcnRpbmcudHlwZSA9PT0gJ3Byb2R1Y3RDb3VudCcpIHtcbiAgICAgIHJldHVybiAoYSwgYikgPT5cbiAgICAgICAgYS5wcm9kdWN0Q291bnQgPT09IGIucHJvZHVjdENvdW50XG4gICAgICAgICAgPyBhLmRpc3BsYXlOYW1lLmxvY2FsZUNvbXBhcmUoYi5kaXNwbGF5TmFtZSlcbiAgICAgICAgICA6IGIucHJvZHVjdENvdW50IC0gYS5wcm9kdWN0Q291bnQ7XG4gICAgfVxuICAgIGlmIChmaWx0ZXJDb25maWcuc29ydGluZy50eXBlID09PSAnY3VzdG9tJykge1xuICAgICAgY29uc3Qgc29ydGVkS2V5cyA9IGZpbHRlckNvbmZpZy5zb3J0aW5nLm1hcDtcbiAgICAgIHJldHVybiAoYSwgYikgPT4ge1xuICAgICAgICBpZiAoc29ydGVkS2V5c1thLmRpc3BsYXlOYW1lXSAmJiBzb3J0ZWRLZXlzW2IuZGlzcGxheU5hbWVdKSB7XG4gICAgICAgICAgLy8gSWYgYm90aCBhcmUgaW4gdGhlIHNvcnRlZEtleXMsIHNvcnQgYnkgdGhlIGluZGV4XG4gICAgICAgICAgcmV0dXJuIHNvcnRlZEtleXNbYS5kaXNwbGF5TmFtZV0gLSBzb3J0ZWRLZXlzW2IuZGlzcGxheU5hbWVdO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIG9ubHkgJ2EnIGlzIGluIHRoZSBzb3J0ZWRLZXlzLCBwdXQgaXQgYmVmb3JlIHRoZSBvdGhlclxuICAgICAgICBpZiAoc29ydGVkS2V5c1thLmRpc3BsYXlOYW1lXSkge1xuICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiBvbmx5ICdiJyBpcyBpbiB0aGUgc29ydGVkS2V5cywgcHV0IGl0IGJlZm9yZSB0aGUgb3RoZXJcbiAgICAgICAgaWYgKHNvcnRlZEtleXNbYi5kaXNwbGF5TmFtZV0pIHtcbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiBuZWl0aGVyIGFyZSBpbiB0aGUgc29ydGVkS2V5cywgc29ydCBieSBwcm9kdWN0Q291bnRcbiAgICAgICAgcmV0dXJuIGIucHJvZHVjdENvdW50IC0gYS5wcm9kdWN0Q291bnQ7XG4gICAgICB9O1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFhbGlkIHNlYXJjaCBmaWx0ZXIgY29uZmlndXJhdGlvbicpO1xufTtcblxuZXhwb3J0IGNsYXNzIFByb2R1Y3RGaWx0ZXJzIHtcbiAgc3RhdGljIGdldEZpbHRlcnNGb3JQcm9kdWN0cyhcbiAgICBwcm9kdWN0czogUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlc1snYXR0cmlidXRlcyddW10sXG4gICAgZmlsdGVyQ29uZmlnczogRmlsdGVyQXR0cmlidXRlW10sXG4gICAgc2VsZWN0ZWRGaWx0ZXJPcHRpb25zOiBTZWxlY3RlZEZpbHRlck9wdGlvbltdLFxuICApOiBDaGF0U2VhcmNoRmlsdGVyW10ge1xuICAgIGlmICghcHJvZHVjdHMgfHwgcHJvZHVjdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVycyA9IGZpbHRlckNvbmZpZ3MubWFwKChmaWx0ZXJDb25maWcpID0+XG4gICAgICBwcm9kdWN0cy5yZWR1Y2UoXG4gICAgICAgIChhY2MsIHByb2R1Y3QpID0+IHtcbiAgICAgICAgICAvLyBQcmljZSBoYXMgc3BlY2lhbCBoYW5kbGluZyBmb3IgdGhlIGZpbHRlcnNcbiAgICAgICAgICBpZiAoZmlsdGVyQ29uZmlnLnR5cGUgPT09ICdwcmljZScpIHtcbiAgICAgICAgICAgIGNvbnN0IHByaWNlQnVja2V0ID0gZ2V0UHJpY2VCdWNrZXQoXG4gICAgICAgICAgICAgIHByb2R1Y3Quc2FsZVByaWNlID8/IHByb2R1Y3Qub3JpZ2luYWxQcmljZSA/PyAwLFxuICAgICAgICAgICAgICBmaWx0ZXJDb25maWcuYnVja2V0U2l6ZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gYWNjLm1hcFtwcmljZUJ1Y2tldF0gPz8ge1xuICAgICAgICAgICAgICBmaWx0ZXJJdGVtSWQ6IHByaWNlQnVja2V0LFxuICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogYCQke3ByaWNlQnVja2V0fS0kJHtwcmljZUJ1Y2tldCArIGZpbHRlckNvbmZpZy5idWNrZXRTaXplfWAsXG4gICAgICAgICAgICAgIHByb2R1Y3RDb3VudDogMCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhY2MubWFwW3ByaWNlQnVja2V0XSA9IHsgLi4uY3VycmVudCwgcHJvZHVjdENvdW50OiBjdXJyZW50LnByb2R1Y3RDb3VudCArIDEgfTtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQXNzdW1lIHRoYXQgdGhlIFwiYXR0cmlidXRlXCIgaXMgYW4gYXJyYXkgb2YgdmFsdWVzXG4gICAgICAgICAgY29uc3QgYXR0cmlidXRlVmFsdWVzID1cbiAgICAgICAgICAgIChwcm9kdWN0LmZpbHRlcnMgJiYgcHJvZHVjdC5maWx0ZXJzPy5bZmlsdGVyQ29uZmlnLmF0dHJpYnV0ZV0pID8/IFtdO1xuICAgICAgICAgIGlmIChpc1N0cmluZ0FycmF5KGF0dHJpYnV0ZVZhbHVlcykpIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlcy5mb3JFYWNoKCh2YWwpID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFZhbCA9IHZhbC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gYWNjLm1hcFtub3JtYWxpemVkVmFsXSA/PyB7XG4gICAgICAgICAgICAgICAgZmlsdGVySXRlbUlkOiBub3JtYWxpemVkVmFsLFxuICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBmb3JtYXRGaWx0ZXJEaXNwbGF5TmFtZSh2YWwpLCAvLyBLZWVwIG9yaWdpbmFsIGNhc2UgZm9yIGRpc3BsYXlcbiAgICAgICAgICAgICAgICBwcm9kdWN0Q291bnQ6IDAsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGFjYy5tYXBbbm9ybWFsaXplZFZhbF0gPSB7IC4uLmN1cnJlbnQsIHByb2R1Y3RDb3VudDogY3VycmVudC5wcm9kdWN0Q291bnQgKyAxIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZmlsdGVyQ29uZmlnLFxuICAgICAgICAgIG1hcDoge30gYXMgUmVjb3JkPHN0cmluZywgQ2hhdFNlYXJjaEZpbHRlckl0ZW0+LFxuICAgICAgICB9LFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgY29uc3QgdHJhbnNmb3JtZWRGaWx0ZXJzOiBDaGF0U2VhcmNoRmlsdGVyW10gPSBmaWx0ZXJzLm1hcCgoeyBmaWx0ZXJDb25maWcsIG1hcCB9KSA9PiAoe1xuICAgICAgZmlsdGVySWQ6IGZpbHRlckNvbmZpZy5maWx0ZXJJZCxcbiAgICAgIGRpc3BsYXlOYW1lOiBmaWx0ZXJDb25maWcuZGlzcGxheU5hbWUsXG4gICAgICBpdGVtczogT2JqZWN0LnZhbHVlcyhtYXApXG4gICAgICAgIC5tYXAoKGZpbHRlcikgPT4gKHtcbiAgICAgICAgICBmaWx0ZXJJdGVtSWQ6IGZpbHRlci5maWx0ZXJJdGVtSWQsXG4gICAgICAgICAgZGlzcGxheU5hbWU6IGZpbHRlci5kaXNwbGF5TmFtZSxcbiAgICAgICAgICBwcm9kdWN0Q291bnQ6IGZpbHRlci5wcm9kdWN0Q291bnQsXG4gICAgICAgICAgaXNTZWxlY3RlZDpcbiAgICAgICAgICAgIHNlbGVjdGVkRmlsdGVyT3B0aW9ucy5zb21lKFxuICAgICAgICAgICAgICAob3B0aW9uKSA9PiBvcHRpb24uaWQgPT09IGAke2ZpbHRlckNvbmZpZy5maWx0ZXJJZH06JHtmaWx0ZXIuZmlsdGVySXRlbUlkfWAsXG4gICAgICAgICAgICApID8/IGZhbHNlLFxuICAgICAgICB9KSlcbiAgICAgICAgLnNvcnQoc29ydEZpbHRlcihmaWx0ZXJDb25maWcpKSxcbiAgICB9KSk7XG5cbiAgICByZXR1cm4gWy4uLnRyYW5zZm9ybWVkRmlsdGVyc107XG4gIH1cblxuICBzdGF0aWMgZmlsdGVyUHJvZHVjdHMoXG4gICAgcHJvZHVjdHM6IFByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXNbJ2F0dHJpYnV0ZXMnXVtdLFxuICAgIGZpbHRlckNvbmZpZ3M6IEZpbHRlckF0dHJpYnV0ZVtdLFxuICAgIHNlbGVjdGVkRmlsdGVyT3B0aW9uczogU2VsZWN0ZWRGaWx0ZXJPcHRpb25bXSxcbiAgICBhZGRpdGl2ZUR5bmFtaWNGaWx0ZXJzID0gZmFsc2UsIC8vIFNldCB0aGlzIHRvIHRydWUgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYmVoYXZpb3Igd2hlcmUgc3RhY2tpbmcgZmlsdGVycyBoYXMgT1IgbG9naWMuXG4gICkge1xuICAgIGNvbnN0IHNlbGVjdGVkRmlsdGVycyA9IGZpbHRlckNvbmZpZ3NcbiAgICAgIC5tYXAoKGZpbHRlckNvbmZpZykgPT4gKHtcbiAgICAgICAgZmlsdGVyQ29uZmlnLFxuICAgICAgICBoYXNTZWxlY3RlZE9wdGlvbnM6IHNlbGVjdGVkRmlsdGVyT3B0aW9ucy5zb21lKFxuICAgICAgICAgIChvcHRpb24pID0+IG9wdGlvbi5maWx0ZXJJZCA9PT0gZmlsdGVyQ29uZmlnLmZpbHRlcklkLFxuICAgICAgICApLFxuICAgICAgfSkpXG4gICAgICAuZmlsdGVyKCh7IGhhc1NlbGVjdGVkT3B0aW9ucyB9KSA9PiBoYXNTZWxlY3RlZE9wdGlvbnMpO1xuICAgIHJldHVybiBzZWxlY3RlZEZpbHRlck9wdGlvbnMubGVuZ3RoID09PSAwXG4gICAgICA/IHByb2R1Y3RzXG4gICAgICA6IHByb2R1Y3RzLmZpbHRlcigocHJvZHVjdCkgPT5cbiAgICAgICAgICBzZWxlY3RlZEZpbHRlcnMucmVkdWNlKChhY2MsIHNlbGVjdGVkRmlsdGVyKSA9PiB7XG4gICAgICAgICAgICAvLyBGaW5kaW5nIG9uZSBmYWxzZSByZW1vdmVzIHRoZSBwcm9kdWN0XG4gICAgICAgICAgICBpZiAoIWFjYykge1xuICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUHJpY2UgaXMgc3BlY2lhbFxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkRmlsdGVyLmZpbHRlckNvbmZpZy50eXBlID09PSAncHJpY2UnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHByaWNlQnVja2V0ID0gZ2V0UHJpY2VCdWNrZXQoXG4gICAgICAgICAgICAgICAgcHJvZHVjdC5zYWxlUHJpY2UgPz8gcHJvZHVjdC5vcmlnaW5hbFByaWNlID8/IDAsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRGaWx0ZXIuZmlsdGVyQ29uZmlnLmJ1Y2tldFNpemUsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGNvbnN0IG1hdGNoZXNQcmljZUZpbHRlciA9IHNlbGVjdGVkRmlsdGVyT3B0aW9ucy5zb21lKFxuICAgICAgICAgICAgICAgIChvcHRpb24pID0+IG9wdGlvbi5pZCA9PT0gYHByaWNlOiR7cHJpY2VCdWNrZXR9YCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKCFtYXRjaGVzUHJpY2VGaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkRmlsdGVyLmZpbHRlckNvbmZpZy50eXBlID09PSAnZHluYW1pYycpIHtcbiAgICAgICAgICAgICAgLy8gZHluYW1pYyBpcyBtaXNsZWFkaW5nIGhlcmUuIEl0cyBub3QganVzdCBkeW5hbWljIGZpbHRlcnMsIGJ1dCBzdGF0aWMgZmlsdGVycyBiZWNhdXNlIHRoZSBjb25maWcgY291bnRzIHN0YXRpYyBmaWx0ZXJzIGFzIHR5cGU6IGR5bmFtaWMuXG4gICAgICAgICAgICAgIGNvbnN0IHsgZmlsdGVySWQsIGF0dHJpYnV0ZSB9ID0gc2VsZWN0ZWRGaWx0ZXIuZmlsdGVyQ29uZmlnO1xuICAgICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVWYWx1ZXMgPSBwcm9kdWN0LmZpbHRlcnM/LlthdHRyaWJ1dGVdO1xuXG4gICAgICAgICAgICAgIGlmICghaXNTdHJpbmdBcnJheShhdHRyaWJ1dGVWYWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgaXNEeW5hbWljRmlsdGVyID0gc2VsZWN0ZWRGaWx0ZXIuZmlsdGVyQ29uZmlnLmF0dHJpYnV0ZSA9PT0gJ2R5bmFtaWMnOyAvLyBUcnVlIGR5bmFtaWMgZmlsdGVycyAodGhlIG9uZXMgdGhhdCBhcHBlYXIgYmVuZWF0aCB0aGUgc2VhcmNoIGlucHV0KVxuICAgICAgICAgICAgICBjb25zdCBpc1N1YnRyYWN0aXZlTG9naWMgPSBpc0R5bmFtaWNGaWx0ZXIgJiYgIWFkZGl0aXZlRHluYW1pY0ZpbHRlcnM7XG5cbiAgICAgICAgICAgICAgaWYgKGlzU3VidHJhY3RpdmVMb2dpYykge1xuICAgICAgICAgICAgICAgIC8vIEFORCBsb2dpYyBmb3Igc3VidHJhY3RpdmUgZHluYW1pYyBmaWx0ZXJzIGFuZCBiZXR3ZWVuIHN0YXRpYyBmaWx0ZXIgY2F0ZWdvcmllc1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uc0ZvclRoaXNGaWx0ZXIgPSBzZWxlY3RlZEZpbHRlck9wdGlvbnNcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLmZpbHRlcklkID09PSBmaWx0ZXJJZClcbiAgICAgICAgICAgICAgICAgIC5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLmZpbHRlckl0ZW1JZC50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGhhc0FsbFNlbGVjdGVkVmFsdWVzID0gc2VsZWN0ZWRPcHRpb25zRm9yVGhpc0ZpbHRlci5ldmVyeSgoc2VsZWN0ZWRWYWx1ZSkgPT5cbiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlcy5zb21lKCh2YWwpID0+IHZhbC50b0xvd2VyQ2FzZSgpID09PSBzZWxlY3RlZFZhbHVlKSxcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFoYXNBbGxTZWxlY3RlZFZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBPUiBsb2dpYyBmb3Igc3RhdGljIGZpbHRlcnMgaW4gdGhlIHNpZGViYXIgd2l0aGluIGEgY2F0ZWdvcnkuXG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlcyA9IGF0dHJpYnV0ZVZhbHVlcy5zb21lKCh2YWwpID0+XG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZEZpbHRlck9wdGlvbnMuc29tZShcbiAgICAgICAgICAgICAgICAgICAgKG9wdGlvbikgPT4gb3B0aW9uLmlkID09PSBgJHtmaWx0ZXJJZH06JHt2YWwudG9Mb3dlckNhc2UoKX1gLFxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmICghbWF0Y2hlcykge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSwgdHJ1ZSksXG4gICAgICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCB7IFByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXMgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcbmltcG9ydCB7IFByb2R1Y3RTb3J0aW5nIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBQcm9kdWN0U29ydGVyIHtcbiAgc3RhdGljIHNvcnQocHJvZHVjdHM6IFByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXNbJ2F0dHJpYnV0ZXMnXVtdLCBzb3J0aW5nOiBQcm9kdWN0U29ydGluZykge1xuICAgIHN3aXRjaCAoc29ydGluZykge1xuICAgICAgY2FzZSBQcm9kdWN0U29ydGluZy5QUklDRV9BU0M6XG4gICAgICAgIHJldHVybiBbLi4ucHJvZHVjdHNdLnNvcnQoXG4gICAgICAgICAgKHAxLCBwMikgPT5cbiAgICAgICAgICAgIChwMS5zYWxlUHJpY2UgPz8gcDEub3JpZ2luYWxQcmljZSA/PyAwKSAtIChwMi5zYWxlUHJpY2UgPz8gcDIub3JpZ2luYWxQcmljZSA/PyAwKSxcbiAgICAgICAgKTtcblxuICAgICAgY2FzZSBQcm9kdWN0U29ydGluZy5QUklDRV9ERVNDOlxuICAgICAgICByZXR1cm4gWy4uLnByb2R1Y3RzXS5zb3J0KFxuICAgICAgICAgIChwMSwgcDIpID0+XG4gICAgICAgICAgICAocDIuc2FsZVByaWNlID8/IHAyLm9yaWdpbmFsUHJpY2UgPz8gMCkgLSAocDEuc2FsZVByaWNlID8/IHAxLm9yaWdpbmFsUHJpY2UgPz8gMCksXG4gICAgICAgICk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBwcm9kdWN0cztcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IFVzZXJFdmVudENhdGVnb3J5IH0gZnJvbSBcIkBzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudFwiO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gXCJ1dWlkXCI7XG5pbXBvcnQgeyBhdG9tIH0gZnJvbSBcImpvdGFpXCI7XG5pbXBvcnQge1xuICBNZXNzYWdlLFxuICBNZXNzYWdlUm9sZSxcbiAgTWVzc2FnZVR5cGUsXG4gIFByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXMsXG59IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzXCI7XG5pbXBvcnQge1xuICBtZXNzYWdlc0F0b20sXG4gIHJlcGx5RXZlbnRDYXRlZ29yeUF0b20sXG4gIHVzZXJIYXNSZXBsaWVkQXRvbSxcbiAgdXNlclF1ZXJ5QXRvbSxcbn0gZnJvbSBcInNyYy9hdG9tcy9jaGF0XCI7XG5pbXBvcnQgeyBxdWV1ZVVzZXJFdmVudEF0b20gfSBmcm9tIFwiLi4vY2hhdC9tZXNzYWdlUXVldWVcIjtcbmltcG9ydCB7IG5ld09yZ0NvbmZpZ0F0b20gfSBmcm9tIFwiLi4vb3JnXCI7XG5pbXBvcnQgeyBQcm9kdWN0RmlsdGVycyB9IGZyb20gXCIuL3Byb2R1Y3RGaWx0ZXJzXCI7XG5pbXBvcnQgeyBQcm9kdWN0U29ydGVyIH0gZnJvbSBcIi4vcHJvZHVjdFNvcnRlclwiO1xuaW1wb3J0IHsgQ2hhdFNlYXJjaFN0YXRlVHlwZSwgUHJvZHVjdFNvcnRpbmcgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vLyBOT1RFOlxuLy8gVGhpcyBpcyBhIGxlZ2FjeSB2ZXJzaW9uIG9mIHNlYXJjaCB0aGF0IG5lZWRzIHRvIGJlIGRlY291cGxlZCBhbmQgcmVtb3ZlZC5cbi8vIHRoZSBuZXcgc2VhcmNoLnRzIGZpbGUgaW4gdGhpcyBkaXJlY3RvcnkgaXMgbGlrZWx5IHdoYXQgeW91J3JlIGxvb2tpbmcgZm9yLlxuXG5leHBvcnQgY29uc3QgY2hhdFNlYXJjaFN0YXRlQXRvbSA9IGF0b208Q2hhdFNlYXJjaFN0YXRlVHlwZT4oXCJlbnRyeXBvaW50XCIpO1xuZXhwb3J0IGNvbnN0IGNoYXRTZWFyY2hIYXNQcm9kdWN0c0F0b20gPSBhdG9tPGJvb2xlYW4+KGZhbHNlKTtcbmV4cG9ydCBjb25zdCBjaGF0U2VhcmNoUHJvZHVjdFNvcnRpbmdBdG9tID0gYXRvbTxQcm9kdWN0U29ydGluZz4oXG4gIFByb2R1Y3RTb3J0aW5nLkZFQVRVUkVEXG4pO1xuXG5jb25zdCBmaWx0ZXJQcm9kdWN0TGlzdCA9IChtZXNzYWdlOiBNZXNzYWdlKSA9PlxuICBtZXNzYWdlLnR5cGUgPT09IE1lc3NhZ2VUeXBlLlByb2R1Y3QgJiYgbWVzc2FnZS5tZXRhZGF0YS5pc0ZvckdyaWQgPT09IHRydWU7XG5jb25zdCBmaWx0ZXJGaWx0ZXJMaXN0ID0gKG1lc3NhZ2U6IE1lc3NhZ2UpID0+XG4gIG1lc3NhZ2UudHlwZSA9PT0gTWVzc2FnZVR5cGUuUHJvZHVjdFNlYXJjaEZpbHRlcjtcblxuZXhwb3J0IHR5cGUgQ2hhdFNlYXJjaFR1cm4gPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGdlbmVyYXRlZFF1ZXJ5Pzogc3RyaW5nO1xuICBwcm9kdWN0Q291bnQ6IG51bWJlcjtcbiAgcHJvZHVjdExpc3Q6IFByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXNbXCJhdHRyaWJ1dGVzXCJdW107XG4gIGZpbHRlckxpc3Q6IHN0cmluZ1tdO1xuICBtZXNzYWdlczogTWVzc2FnZVtdO1xufTtcblxuZXhwb3J0IGNvbnN0IGNoYXRTZWFyY2hJc0xvYWRpbmdBdG9tID0gYXRvbShmYWxzZSk7XG5cbmNvbnN0IGJ1aWxkQ2hhdFNlYXJjaFR1cm4gPSAoXG4gIG1lc3NhZ2VzOiBNZXNzYWdlW11cbik6IFtzdHJpbmcsIENoYXRTZWFyY2hUdXJuXSB8IG51bGwgPT4ge1xuICBjb25zdCBxdWVyeU1lc3NhZ2UgPSBtZXNzYWdlcy5maW5kKFxuICAgIChtZXNzYWdlKSA9PiBtZXNzYWdlLnR5cGUgPT09IE1lc3NhZ2VUeXBlLlByb2R1Y3RTZWFyY2hcbiAgKTtcbiAgaWYgKCFxdWVyeU1lc3NhZ2UpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCB7IGdlbmVyYXRlZFF1ZXJ5LCBwcm9kdWN0Q291bnQgfSA9IHF1ZXJ5TWVzc2FnZS5tZXRhZGF0YSA/PyB7fTtcbiAgY29uc3QgcHJvZHVjdExpc3QgPSBtZXNzYWdlc1xuICAgIC5maWx0ZXIoZmlsdGVyUHJvZHVjdExpc3QpXG4gICAgLm1hcCgobWVzc2FnZSkgPT4gKG1lc3NhZ2UgYXMgYW55KS5tZXRhZGF0YSk7XG4gIGNvbnN0IGZpbHRlckxpc3QgPSBtZXNzYWdlc1xuICAgIC5maWx0ZXIoZmlsdGVyRmlsdGVyTGlzdClcbiAgICAubWFwKChtZXNzYWdlKSA9PiBtZXNzYWdlLm1ldGFkYXRhLmZpbHRlck5hbWUpO1xuICByZXR1cm4gW1xuICAgIHF1ZXJ5TWVzc2FnZS5pZCxcbiAgICB7XG4gICAgICBpZDogcXVlcnlNZXNzYWdlLmlkLFxuICAgICAgZ2VuZXJhdGVkUXVlcnksXG4gICAgICBwcm9kdWN0Q291bnQ6IHByb2R1Y3RDb3VudCB8fCBwcm9kdWN0TGlzdC5sZW5ndGgsXG4gICAgICBwcm9kdWN0TGlzdCxcbiAgICAgIGZpbHRlckxpc3QsXG4gICAgICBtZXNzYWdlcyxcbiAgICB9LFxuICBdO1xufTtcblxuY29uc3QgY2hhdFNlYXJjaEZpbHRlckNvbmZpZ0F0b20gPSBhdG9tKChnZXQpID0+IHtcbiAgY29uc3QgbmV3T3JnQ29uZmlnID0gZ2V0KG5ld09yZ0NvbmZpZ0F0b20pO1xuICByZXR1cm4gKFxuICAgIG5ld09yZ0NvbmZpZz8uZnJvbnRlbmRDb25maWc/LnVpQ29uZmlncz8uc2VhcmNoQ29uZmlnPy5zZWFyY2hGaWx0ZXJDb25maWcgfHxcbiAgICBbXVxuICApO1xufSk7XG5cbmNvbnN0IHNlYXJjaE1hcEF0b20gPSBhdG9tKChnZXQpID0+IHtcbiAgY29uc3QgbWVzc2FnZXMgPSBnZXQobWVzc2FnZXNBdG9tKTtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBtZXNzYWdlcy5tYXAoYnVpbGRDaGF0U2VhcmNoVHVybikuZmlsdGVyKCh2KSA9PiB2ICE9PSBudWxsKVxuICApO1xufSk7XG5cbmNvbnN0IGludGVybmFsQ2hhdFNlYXJjaFBhcmFtc0F0b20gPSBhdG9tPHtcbiAgaWQ6IHN0cmluZyB8IG51bGw7XG4gIHF1ZXJ5OiBzdHJpbmcgfCBudWxsO1xufT4oe1xuICBpZDogbnVsbCxcbiAgcXVlcnk6IG51bGwsXG59KTtcblxuLy8gU2VsZWN0ZWQgZmlsdGVyIG9wdGlvbnMgd2l0aCBjb21wb3VuZCBvYmplY3RzIGZvciBiZXR0ZXIgdHlwZSBzYWZldHkgYW5kIGRpc3BsYXlcbmV4cG9ydCB0eXBlIFNlbGVjdGVkQ2hhdFNlYXJjaEZpbHRlck9wdGlvbiA9IHtcbiAgaWQ6IHN0cmluZzsgLy8gXCJmaWx0ZXJJZDpmaWx0ZXJJdGVtSWRcIiAtIG1haW50YWlucyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGZvciBjb21wYXJpc29uc1xuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xuICBmaWx0ZXJJZDogc3RyaW5nOyAvLyBGaWx0ZXIgY2F0ZWdvcnlcbiAgZmlsdGVySXRlbUlkOiBzdHJpbmc7IC8vIEZpbHRlciB2YWx1ZVxufTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdGVkRmlsdGVyT3B0aW9uc0F0b20gPSBhdG9tPFNlbGVjdGVkQ2hhdFNlYXJjaEZpbHRlck9wdGlvbltdPihcbiAgW11cbik7XG5cbmV4cG9ydCBjb25zdCBhZGRpdGl2ZUR5bmFtaWNGaWx0ZXJzQXRvbSA9IGF0b20oKGdldCkgPT4ge1xuICBjb25zdCBuZXdPcmdDb25maWcgPSBnZXQobmV3T3JnQ29uZmlnQXRvbSk7XG4gIHJldHVybiAoXG4gICAgbmV3T3JnQ29uZmlnPy5mcm9udGVuZENvbmZpZz8udWlDb25maWdzPy5zZWFyY2hDb25maWdcbiAgICAgID8uYWRkaXRpdmVEeW5hbWljRmlsdGVycyA/PyBmYWxzZVxuICApO1xufSk7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVDaGF0U2VhcmNoRmlsdGVyT3B0aW9uID0gKFxuICBmaWx0ZXJJZDogc3RyaW5nLFxuICBmaWx0ZXJJdGVtSWQ6IHN0cmluZyxcbiAgZGlzcGxheU5hbWU6IHN0cmluZ1xuKTogU2VsZWN0ZWRDaGF0U2VhcmNoRmlsdGVyT3B0aW9uID0+ICh7XG4gIGlkOiBgJHtmaWx0ZXJJZH06JHtmaWx0ZXJJdGVtSWR9YCxcbiAgZGlzcGxheU5hbWUsXG4gIGZpbHRlcklkLFxuICBmaWx0ZXJJdGVtSWQsXG59KTtcblxuY29uc3QgaGFuZGxlU2VhcmNoQXRvbSA9IGF0b20obnVsbCwgKGdldCwgc2V0LCBtZXNzYWdlOiBNZXNzYWdlKSA9PiB7XG4gIGlmIChtZXNzYWdlLnR5cGUgIT09IE1lc3NhZ2VUeXBlLlNlYXJjaCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHF1ZXJ5U2VhcmNoID0gbWVzc2FnZS5tZXRhZGF0YS5zZWFyY2hUZXJtO1xuXG4gIHNldChyZXBseUV2ZW50Q2F0ZWdvcnlBdG9tLCBVc2VyRXZlbnRDYXRlZ29yeS5TZWFyY2gpO1xuICBzZXQodXNlclF1ZXJ5QXRvbSwgcXVlcnlTZWFyY2gpO1xuICBzZXQobWVzc2FnZXNBdG9tLCBbLi4uZ2V0KG1lc3NhZ2VzQXRvbSksIFttZXNzYWdlXV0pO1xuICBzZXQodXNlckhhc1JlcGxpZWRBdG9tLCB0cnVlKTtcblxuICBzZXQocXVldWVVc2VyRXZlbnRBdG9tLCB7XG4gICAgZXZlbnRJZDogbWVzc2FnZS5pZCxcbiAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuU2VhcmNoLFxuICAgIGNyZWF0ZWRBdDogbWVzc2FnZS5jcmVhdGVkQXQsXG4gICAgYXR0cmlidXRlczoge1xuICAgICAgc2VhcmNoVGVybTogbWVzc2FnZS5tZXRhZGF0YS5zZWFyY2hUZXJtLFxuICAgICAgc2VsZWN0ZWRGaWx0ZXJzOiBtZXNzYWdlLm1ldGFkYXRhLnNlbGVjdGVkRmlsdGVycyxcbiAgICB9LFxuICB9KTtcbn0pO1xuXG4vLyBUaGlzIGludGVybmFsIGF0b20gaXMgdXNlZCB0byBzdG9yZSB0aGUgc2VhcmNoIHBhcmFtc1xuZXhwb3J0IGNvbnN0IGNoYXRTZWFyY2hQYXJhbXNBdG9tID0gYXRvbShcbiAgKGdldCkgPT4gZ2V0KGludGVybmFsQ2hhdFNlYXJjaFBhcmFtc0F0b20pLFxuICAoXywgc2V0LCB2YWx1ZTogeyBpZDogc3RyaW5nIHwgbnVsbDsgcXVlcnk6IHN0cmluZyB8IG51bGwgfSkgPT4ge1xuICAgIHNldChpbnRlcm5hbENoYXRTZWFyY2hQYXJhbXNBdG9tLCB2YWx1ZSk7XG4gIH1cbik7XG5cbmV4cG9ydCBjb25zdCBjaGF0U2VhcmNoUXVlcnlBdG9tID0gYXRvbShcbiAgKGdldCkgPT4gZ2V0KGNoYXRTZWFyY2hQYXJhbXNBdG9tKT8ucXVlcnkgPz8gbnVsbCxcbiAgKGdldCwgc2V0LCB2YWx1ZTogc3RyaW5nIHwgbnVsbCkgPT4ge1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IGdldChjaGF0U2VhcmNoUGFyYW1zQXRvbSk7XG4gICAgc2V0KGNoYXRTZWFyY2hQYXJhbXNBdG9tLCB7IGlkOiBzZWFyY2hQYXJhbXMuaWQsIHF1ZXJ5OiB2YWx1ZSB9KTtcbiAgfVxuKTtcblxuZXhwb3J0IGNvbnN0IGNoYXRTZWFyY2hJZEF0b20gPSBhdG9tKFxuICAoZ2V0KSA9PiBnZXQoY2hhdFNlYXJjaFBhcmFtc0F0b20pPy5pZCA/PyBudWxsLFxuICAoZ2V0LCBzZXQsIHZhbHVlOiBzdHJpbmcgfCBudWxsKSA9PiB7XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gZ2V0KGNoYXRTZWFyY2hQYXJhbXNBdG9tKTtcbiAgICBzZXQoY2hhdFNlYXJjaFBhcmFtc0F0b20sIHsgaWQ6IHZhbHVlLCBxdWVyeTogc2VhcmNoUGFyYW1zLnF1ZXJ5IH0pO1xuICB9XG4pO1xuXG5leHBvcnQgY29uc3QgQ2hhdFNlYXJjaFR1cm5BdG9tID0gYXRvbSgoZ2V0KSA9PiB7XG4gIGNvbnN0IHNlYXJjaEZpbHRlckNvbmZpZyA9IGdldChjaGF0U2VhcmNoRmlsdGVyQ29uZmlnQXRvbSk7XG4gIGNvbnN0IHNlYXJjaE1hcCA9IGdldChzZWFyY2hNYXBBdG9tKTtcbiAgY29uc3QgY2hhdFNlYXJjaElkID0gZ2V0KGNoYXRTZWFyY2hJZEF0b20pO1xuICBpZiAoIWNoYXRTZWFyY2hJZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IENoYXRTZWFyY2hUdXJuID0gc2VhcmNoTWFwW2NoYXRTZWFyY2hJZF07XG4gIGlmICghQ2hhdFNlYXJjaFR1cm4pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBwcm9kdWN0U29ydGluZyA9IGdldChjaGF0U2VhcmNoUHJvZHVjdFNvcnRpbmdBdG9tKTtcbiAgY29uc3Qgc2VsZWN0ZWRGaWx0ZXJPcHRpb25zID0gZ2V0KHNlbGVjdGVkRmlsdGVyT3B0aW9uc0F0b20pO1xuICBjb25zdCBhZGRpdGl2ZUR5bmFtaWNGaWx0ZXJzID0gZ2V0KGFkZGl0aXZlRHluYW1pY0ZpbHRlcnNBdG9tKTtcbiAgY29uc3QgZmlsdGVyZWRQcm9kdWN0cyA9IFByb2R1Y3RGaWx0ZXJzLmZpbHRlclByb2R1Y3RzKFxuICAgIENoYXRTZWFyY2hUdXJuLnByb2R1Y3RMaXN0LFxuICAgIHNlYXJjaEZpbHRlckNvbmZpZyxcbiAgICBzZWxlY3RlZEZpbHRlck9wdGlvbnMsXG4gICAgYWRkaXRpdmVEeW5hbWljRmlsdGVyc1xuICApO1xuXG4gIGNvbnN0IGZpbHRlcmVkQW5kU29ydGVkUHJvZHVjdHMgPSBQcm9kdWN0U29ydGVyLnNvcnQoXG4gICAgZmlsdGVyZWRQcm9kdWN0cyxcbiAgICBwcm9kdWN0U29ydGluZ1xuICApO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc2VhcmNoTWFwW2NoYXRTZWFyY2hJZF0sXG4gICAgcHJvZHVjdExpc3Q6IGZpbHRlcmVkQW5kU29ydGVkUHJvZHVjdHMsXG4gICAgcHJvZHVjdENvdW50OiBmaWx0ZXJlZEFuZFNvcnRlZFByb2R1Y3RzLmxlbmd0aCxcbiAgfTtcbn0pO1xuXG4vLyBUT0RPOiBXb3JrIG9uIGRlcHJlY2F0aW5nIHRoaXMgYXRvbSBpbiBmYXZvciBvZiB1c2luZyBDaGF0U2VhcmNoVHVybkF0b20gZGlyZWN0bHlcbmV4cG9ydCBjb25zdCBjaGF0U2VhcmNoUHJvZHVjdHMgPSBhdG9tKChnZXQpID0+IHtcbiAgY29uc3QgQ2hhdFNlYXJjaFR1cm4gPSBnZXQoQ2hhdFNlYXJjaFR1cm5BdG9tKTtcbiAgcmV0dXJuIENoYXRTZWFyY2hUdXJuPy5wcm9kdWN0TGlzdCA/PyBbXTtcbn0pO1xuXG5leHBvcnQgY29uc3QgY2hhdFNlYXJjaEZpbHRlcnNBdG9tID0gYXRvbSgoZ2V0KSA9PiB7XG4gIGNvbnN0IHNlYXJjaEZpbHRlckNvbmZpZyA9IGdldChjaGF0U2VhcmNoRmlsdGVyQ29uZmlnQXRvbSk7XG4gIGNvbnN0IHNlYXJjaE1hcCA9IGdldChzZWFyY2hNYXBBdG9tKTtcbiAgY29uc3QgY2hhdFNlYXJjaElkID0gZ2V0KGNoYXRTZWFyY2hJZEF0b20pO1xuXG4gIGlmIChjaGF0U2VhcmNoSWQgJiYgc2VhcmNoTWFwW2NoYXRTZWFyY2hJZF0pIHtcbiAgICBjb25zdCBwcm9kdWN0cyA9IHNlYXJjaE1hcFtjaGF0U2VhcmNoSWRdLnByb2R1Y3RMaXN0O1xuICAgIGNvbnN0IHNlbGVjdGVkRmlsdGVyT3B0aW9ucyA9IGdldChzZWxlY3RlZEZpbHRlck9wdGlvbnNBdG9tKTtcbiAgICByZXR1cm4gUHJvZHVjdEZpbHRlcnMuZ2V0RmlsdGVyc0ZvclByb2R1Y3RzKFxuICAgICAgcHJvZHVjdHMsXG4gICAgICBzZWFyY2hGaWx0ZXJDb25maWcsXG4gICAgICBzZWxlY3RlZEZpbHRlck9wdGlvbnNcbiAgICApO1xuICB9XG4gIHJldHVybiBbXTtcbn0pO1xuXG4vLyBGb3Igc2VhcmNoIHdlIHVzZSB0aGUgZm9sbG93aW5nIHF1ZXJ5IHBhcmFtczpcbi8vIGVzOiB0cnVlIC0gdGhpcyBpbmRpY2F0ZXMgdGhhdCB3ZSBhcmUgaW4gYSBzZWFyY2ggc3RhdGVcbi8vIGVzcTogcXVlcnkgLSB0aGlzIGlzIHRoZSBjdXJyZW50IHNlYXJjaCBxdWVyeVxuLy8gZXNpOiBzZWFyY2ggaWQgLSB0aGlzIGlzIHRoZSB1bmlxdWUgaWQgZm9yIHRoZSBzZWFyY2ggcmVzdWx0cyB0aGF0IHdlIGFyZSBkaXNwbGF5aW5nLiBJdCBpcyBwdWxsZWQgZnJvbSB0aGUgbWVzc2FnZSBpZCBmcm9tIHRoZSB0dXJuIHRoYXQgaW5jbHVkZXMgdGhlIHNlYXJjaCByZXN1bHRzXG5cbmV4cG9ydCBjb25zdCBzZXRTZWFyY2hQYXJhbXMgPSAocXVlcnk6IHN0cmluZykgPT4ge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJlc1wiLCBcInRydWVcIik7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwiZXNxXCIsIHF1ZXJ5KTtcbiAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKHt9LCBcIlwiLCB1cmwpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNlYXJjaFBhcmFtc0F0b20gPSBhdG9tKCgpID0+IHtcbiAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcbiAgcmV0dXJuIHtcbiAgICBlczogcGFyYW1zLmdldChcImVzXCIpLFxuICAgIGVzcTogcGFyYW1zLmdldChcImVzcVwiKSxcbiAgfTtcbn0pO1xuXG5leHBvcnQgY29uc3QgaW5pdGlhdGVDaGF0U2VhcmNoQXRvbSA9IGF0b20obnVsbCwgKF8sIHNldCwgcXVlcnk6IHN0cmluZykgPT4ge1xuICBzZXQoY2hhdFNlYXJjaElzTG9hZGluZ0F0b20sIHRydWUpO1xuICAvLyBVcGRhdGUgVVJMIGFuZCBtYW51YWxseSB0cmlnZ2VyIHN0YXRlIGNoYW5nZSAoc2luY2UgcHVzaFN0YXRlIGRvZXNuJ3QgdHJpZ2dlciBwb3BzdGF0ZSlcbiAgY29uc3QgdXJsID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwiZXNcIiwgXCJ0cnVlXCIpO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcImVzcVwiLCBxdWVyeSk7XG4gIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSh7fSwgXCJcIiwgdXJsKTtcblxuICAvLyBNYW51YWxseSB0cmlnZ2VyIHBhZ2UgdmFyaWFudCByZS1ldmFsdWF0aW9uIGJ5IGRpc3BhdGNoaW5nIGEgcG9wc3RhdGUgZXZlbnRcbiAgLy8gVGhpcyBlbnN1cmVzIHRoZSBwYWdlIHZhcmlhbnQgc3lzdGVtIGRldGVjdHMgdGhlIFVSTCBjaGFuZ2UgYW5kIG1vdW50cyBzZWFyY2ggcmVzdWx0c1xuICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgUG9wU3RhdGVFdmVudChcInBvcHN0YXRlXCIsIHsgc3RhdGU6IHt9IH0pKTtcblxuICBzZXQoY2hhdFNlYXJjaFBhcmFtc0F0b20sIHsgaWQ6IG51bGwsIHF1ZXJ5IH0pO1xuICBzZXQoaGFuZGxlU2VhcmNoQXRvbSwge1xuICAgIGlkOiB1dWlkKCksXG4gICAgcm9sZTogTWVzc2FnZVJvbGUuVXNlcixcbiAgICB0eXBlOiBNZXNzYWdlVHlwZS5TZWFyY2gsXG4gICAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgIHNlYXJjaFRlcm06IHF1ZXJ5LFxuICAgICAgLy8gRW5hYmxpbmcgdGhpcyB3aWxsIGVuYWJsZSB0aGUgbmV3IGJhY2tlbmQgc2VhcmNoXG4gICAgICBzZWxlY3RlZEZpbHRlcnM6IFtdLFxuICAgIH0sXG4gIH0pO1xufSk7XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVTZWFyY2hSZXN1bHRzQXRvbSA9IGF0b20oXG4gIG51bGwsXG4gIChnZXQsIHNldCwgbWVzc2FnZTogTWVzc2FnZSB8IHVuZGVmaW5lZCkgPT4ge1xuICAgIGlmICghbWVzc2FnZSB8fCBtZXNzYWdlLnR5cGUgIT09IE1lc3NhZ2VUeXBlLlByb2R1Y3RTZWFyY2gpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IHByb2R1Y3RDb3VudCwgZ2VuZXJhdGVkUXVlcnkgfSA9IG1lc3NhZ2UubWV0YWRhdGE7XG4gICAgaWYgKHByb2R1Y3RDb3VudCAhPT0gMCkge1xuICAgICAgLy8gQ2xlYXIgdGhlIGZpbHRlciBvcHRpb25zIHdoZW4gd2UgZ2V0IG5ldyBwcm9kdWN0c1xuICAgICAgc2V0KHNlbGVjdGVkRmlsdGVyT3B0aW9uc0F0b20sIFtdKTtcbiAgICAgIC8vIFRPRE86IFNob3VsZCB3ZSBzdGlsbCBkbyBhbnkgb2YgdGhlc2UgdGhpbmdzP1xuICAgICAgc2V0KGNoYXRTZWFyY2hTdGF0ZUF0b20sIFwicHJvZHVjdC1wYWdlXCIpO1xuICAgICAgY29uc3QgY3VycmVudFNlYXJjaFBhcmFtcyA9IGdldChjaGF0U2VhcmNoUGFyYW1zQXRvbSk7XG4gICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwiZXNcIiwgXCJ0cnVlXCIpO1xuICAgICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJlc3FcIiwgZ2VuZXJhdGVkUXVlcnkpO1xuICAgICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJlc2lcIiwgbWVzc2FnZS5pZCk7XG4gICAgICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUoe30sIFwiXCIsIHVybCk7XG4gICAgICBpZiAoY3VycmVudFNlYXJjaFBhcmFtcy5pZCA9PT0gbnVsbCkge1xuICAgICAgICAvLyBJZiB0aGUgaWQgaXMgbnVsbCwgd2UgbmVlZCB0byByZXBsYWNlIHRoZSBzdGF0ZVxuICAgICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwgXCJcIiwgdXJsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIHRoZSBxdWVyeSBpcyBkaWZmZXJlbnQsIHdlIG5lZWQgdG8gcHVzaCBhIG5ldyBzdGF0ZVxuICAgICAgICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUobnVsbCwgXCJcIiwgdXJsKTtcbiAgICAgIH1cbiAgICAgIHNldChjaGF0U2VhcmNoUGFyYW1zQXRvbSwgeyBpZDogbWVzc2FnZS5pZCwgcXVlcnk6IGdlbmVyYXRlZFF1ZXJ5IH0pO1xuICAgIH1cbiAgfVxuKTtcblxuZXhwb3J0IGNvbnN0IHNldENoYXRTZWFyY2hQYXJhbXNBdG9tID0gYXRvbShudWxsLCAoXywgc2V0LCBxdWVyeTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcImVzXCIsIFwidHJ1ZVwiKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJlc3FcIiwgcXVlcnkpO1xuICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUoe30sIFwiXCIsIHVybCk7XG4gIHNldChjaGF0U2VhcmNoUGFyYW1zQXRvbSwgeyBpZDogbnVsbCwgcXVlcnkgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFNQSxNQUFNLGtCQUFrQixPQUFlLGVBQXVCO0FBRTVELFFBRGUsS0FBSyxNQUFNLFFBQVEsV0FBVyxHQUM3Qjs7QUFHbEIsTUFBTSxpQkFBaUIsVUFBc0M7QUFDM0QsS0FBSSxDQUFDLE1BQU0sUUFBUSxNQUFNLENBQ3ZCLFFBQU87QUFFVCxRQUFPLE1BQU0sT0FBTyxTQUFTLE9BQU8sU0FBUyxTQUFTOztBQUt4RCxNQUFNLGNBQWMsaUJBQXNEO0FBQ3hFLEtBQUksYUFBYSxTQUFTLFFBQ3hCLFNBQVEsR0FBRyxNQUFNLE9BQU8sRUFBRSxhQUFhLEdBQUcsT0FBTyxFQUFFLGFBQWE7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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const require_chunk = require('./chunk-CUT6urMc.cjs');
|
|
2
2
|
const require_models = require('./models-DqdLOi2I.cjs');
|
|
3
|
-
const require_amplitudeContext = require('./amplitudeContext-
|
|
3
|
+
const require_amplitudeContext = require('./amplitudeContext-C6LHpqP_.cjs');
|
|
4
4
|
let jotai = require("jotai");
|
|
5
5
|
jotai = require_chunk.__toESM(jotai);
|
|
6
6
|
let __spiffy_ai_commerce_api_client_dist_models_UserEventCategory = require("@spiffy-ai/commerce-api-client/dist/models/UserEventCategory");
|
|
@@ -117,4 +117,4 @@ Object.defineProperty(exports, 'userQueryAtom', {
|
|
|
117
117
|
return userQueryAtom;
|
|
118
118
|
}
|
|
119
119
|
});
|
|
120
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
120
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdFN0YXRlLUQ5X2FBMV9oLmNqcyIsIm5hbWVzIjpbIlVzZXJFdmVudENhdGVnb3J5IiwiU3BpZmZ5RXZlbnROYW1lIiwiU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9hdG9tcy9jaGF0L2NoYXRTdGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVc2VyRXZlbnRDYXRlZ29yeSB9IGZyb20gXCJAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVXNlckV2ZW50Q2F0ZWdvcnlcIjtcbmltcG9ydCB7IGF0b20gfSBmcm9tIFwiam90YWlcIjtcbmltcG9ydCB7IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgfSBmcm9tIFwic3JjL2NvbnRleHRzL2FtcGxpdHVkZUNvbnRleHQvYW1wbGl0dWRlQ29udGV4dFwiO1xuaW1wb3J0IHtcbiAgRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXMsXG4gIE1lc3NhZ2UsXG4gIFN1Z2dlc3Rpb24sXG4gIFVzZXJFdmVudCxcbn0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHNcIjtcbmltcG9ydCB7IENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvY2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25cIjtcbmltcG9ydCB7IFNwaWZmeUV2ZW50TmFtZSB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzL2V2ZW50c1wiO1xuXG5leHBvcnQgY29uc3QgdXNlckhhc1JlcGxpZWRBdG9tID0gYXRvbTxib29sZWFuPihmYWxzZSk7XG5leHBvcnQgY29uc3QgcmVwbHlFdmVudENhdGVnb3J5QXRvbSA9IGF0b208VXNlckV2ZW50Q2F0ZWdvcnk+KFxuICBVc2VyRXZlbnRDYXRlZ29yeS5BcHBMb2FkZWRcbik7XG5leHBvcnQgY29uc3QgdXNlclF1ZXJ5QXRvbSA9IGF0b208c3RyaW5nPigpO1xuZXhwb3J0IGNvbnN0IHN1Z2dlc3Rpb25BdG9tID0gYXRvbTxTdWdnZXN0aW9uIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuZXhwb3J0IGNvbnN0IGFza1F1ZXN0aW9uQnRuQ2xpY2tlZEF0b20gPSBhdG9tPGJvb2xlYW4+KGZhbHNlKTtcbmV4cG9ydCBjb25zdCBtZXNzYWdlc0F0b20gPSBhdG9tPE1lc3NhZ2VbXVtdPihbXSk7XG5leHBvcnQgY29uc3QgdXNlckV2ZW50c0F0b20gPSBhdG9tPFVzZXJFdmVudFtdPihbXSk7XG5leHBvcnQgY29uc3Qgc3VnZ2VzdGlvbnNBdG9tID0gYXRvbTxTdWdnZXN0aW9uW10+KFtdKTtcbmV4cG9ydCBjb25zdCBzdWdnZXN0aW9uc0xvYWRpbmdBdG9tID0gYXRvbTxib29sZWFuPihmYWxzZSk7XG5leHBvcnQgY29uc3QgcmVzcG9uc2VTdHJlYW1pbmdBdG9tID0gYXRvbTxib29sZWFuPihmYWxzZSk7XG5leHBvcnQgY29uc3QgY2hhdElzT3BlbkF0b20gPSBhdG9tPGJvb2xlYW4+KGZhbHNlKTtcbmV4cG9ydCBjb25zdCByZXF1ZXN0RmFpbHVyZUF0b20gPSBhdG9tPGJvb2xlYW4+KGZhbHNlKTtcbmV4cG9ydCBjb25zdCBmb3JtU3VibWl0QXRvbSA9IGF0b208Rm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXM+KCk7XG5leHBvcnQgY29uc3QgY2hhdE9uVG9nZ2xlQXRvbSA9IGF0b20oXG4gIG51bGwsXG4gIChcbiAgICBnZXQsXG4gICAgc2V0LFxuICAgIHRyaWdnZXJMb2NhdGlvbj86IENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uLFxuICAgIHRyYWNrPzogKFxuICAgICAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLFxuICAgICAgZXZlbnRQcm9wcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgKSA9PiB2b2lkXG4gICkgPT4ge1xuICAgIGNvbnN0IGlzT3BlbiA9IGdldChjaGF0SXNPcGVuQXRvbSk7XG4gICAgc2V0KGNoYXRJc09wZW5BdG9tLCAhaXNPcGVuKTtcblxuICAgIGlmICghaXNPcGVuKSB7XG4gICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoU3BpZmZ5RXZlbnROYW1lLldpZGdldE9wZW4pKTtcbiAgICAgIHRyYWNrPy4oU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5DaGF0Q29tcG9uZW50RXhwYW5kZWQsIHtcbiAgICAgICAgbWVzc2FnZV9tZXRhZGF0YToge1xuICAgICAgICAgIHRyaWdnZXJfbG9jYXRpb246IHRyaWdnZXJMb2NhdGlvbixcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoU3BpZmZ5RXZlbnROYW1lLldpZGdldENsb3NlKSk7XG4gICAgICB0cmFjaz8uKFNwaWZmeU1ldHJpY3NFdmVudE5hbWUuQ2hhdENvbXBvbmVudENvbGxhcHNlZCk7XG4gICAgfVxuICB9XG4pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFZQSxNQUFhLHFDQUFtQyxNQUFNO0FBQ3RELE1BQWEseUNBQ1hBLGdGQUFrQixVQUNuQjtBQUNELE1BQWEsaUNBQThCO0FBQzNDLE1BQWEsaUNBQThDLE9BQVU7QUFDckUsTUFBYSw0Q0FBMEMsTUFBTTtBQUM3RCxNQUFhLCtCQUFpQyxFQUFFLENBQUM7QUFDakQsTUFBYSxpQ0FBbUMsRUFBRSxDQUFDO0FBQ25ELE1BQWEsa0NBQXFDLEVBQUUsQ0FBQztBQUNyRCxNQUFhLHlDQUF1QyxNQUFNO0FBQzFELE1BQWEsd0NBQXNDLE1BQU07QUFDekQsTUFBYSxpQ0FBK0IsTUFBTTtBQUNsRCxNQUFhLHFDQUFtQyxNQUFNO0FBQ3RELE1BQWEsa0NBQWdEO0FBQzdELE1BQWEsbUNBQ1gsT0FFRSxLQUNBLEtBQ0EsaUJBQ0EsVUFJRztDQUNILE1BQU0sU0FBUyxJQUFJLGVBQWU7QUFDbEMsS0FBSSxnQkFBZ0IsQ0FBQyxPQUFPO0FBRTVCLEtBQUksQ0FBQyxRQUFRO0FBQ1gsU0FBTyxjQUFjLElBQUksWUFBWUMsK0JBQWdCLFdBQVcsQ0FBQztBQUNqRSxVQUFRQyxnREFBdUIsdUJBQXVCLEVBQ3BELGtCQUFrQixFQUNoQixrQkFBa0IsaUJBQ25CLEVBQ0YsQ0FBQztRQUNHO0FBQ0wsU0FBTyxjQUFjLElBQUksWUFBWUQsK0JBQWdCLFlBQVksQ0FBQztBQUNsRSxVQUFRQyxnREFBdUIsdUJBQXVCOztFQUczRCJ9
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SpiffyEventName } from "./models-CWOgrLCm.js";
|
|
2
|
-
import { SpiffyMetricsEventName } from "./amplitudeContext-
|
|
2
|
+
import { SpiffyMetricsEventName } from "./amplitudeContext-rEjGf57q.js";
|
|
3
3
|
import { atom } from "jotai";
|
|
4
4
|
import { UserEventCategory } from "@spiffy-ai/commerce-api-client/dist/models/UserEventCategory";
|
|
5
5
|
|
|
@@ -31,4 +31,4 @@ const chatOnToggleAtom = atom(null, (get, set, triggerLocation, track) => {
|
|
|
31
31
|
|
|
32
32
|
//#endregion
|
|
33
33
|
export { askQuestionBtnClickedAtom, chatIsOpenAtom, chatOnToggleAtom, formSubmitAtom, messagesAtom, replyEventCategoryAtom, requestFailureAtom, responseStreamingAtom, suggestionAtom, suggestionsAtom, suggestionsLoadingAtom, userEventsAtom, userHasRepliedAtom, userQueryAtom };
|
|
34
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
34
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdFN0YXRlLURsNWx5dUtDLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uL3NyYy9hdG9tcy9jaGF0L2NoYXRTdGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVc2VyRXZlbnRDYXRlZ29yeSB9IGZyb20gXCJAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvVXNlckV2ZW50Q2F0ZWdvcnlcIjtcbmltcG9ydCB7IGF0b20gfSBmcm9tIFwiam90YWlcIjtcbmltcG9ydCB7IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgfSBmcm9tIFwic3JjL2NvbnRleHRzL2FtcGxpdHVkZUNvbnRleHQvYW1wbGl0dWRlQ29udGV4dFwiO1xuaW1wb3J0IHtcbiAgRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXMsXG4gIE1lc3NhZ2UsXG4gIFN1Z2dlc3Rpb24sXG4gIFVzZXJFdmVudCxcbn0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHNcIjtcbmltcG9ydCB7IENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvY2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25cIjtcbmltcG9ydCB7IFNwaWZmeUV2ZW50TmFtZSB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzL2V2ZW50c1wiO1xuXG5leHBvcnQgY29uc3QgdXNlckhhc1JlcGxpZWRBdG9tID0gYXRvbTxib29sZWFuPihmYWxzZSk7XG5leHBvcnQgY29uc3QgcmVwbHlFdmVudENhdGVnb3J5QXRvbSA9IGF0b208VXNlckV2ZW50Q2F0ZWdvcnk+KFxuICBVc2VyRXZlbnRDYXRlZ29yeS5BcHBMb2FkZWRcbik7XG5leHBvcnQgY29uc3QgdXNlclF1ZXJ5QXRvbSA9IGF0b208c3RyaW5nPigpO1xuZXhwb3J0IGNvbnN0IHN1Z2dlc3Rpb25BdG9tID0gYXRvbTxTdWdnZXN0aW9uIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuZXhwb3J0IGNvbnN0IGFza1F1ZXN0aW9uQnRuQ2xpY2tlZEF0b20gPSBhdG9tPGJvb2xlYW4+KGZhbHNlKTtcbmV4cG9ydCBjb25zdCBtZXNzYWdlc0F0b20gPSBhdG9tPE1lc3NhZ2VbXVtdPihbXSk7XG5leHBvcnQgY29uc3QgdXNlckV2ZW50c0F0b20gPSBhdG9tPFVzZXJFdmVudFtdPihbXSk7XG5leHBvcnQgY29uc3Qgc3VnZ2VzdGlvbnNBdG9tID0gYXRvbTxTdWdnZXN0aW9uW10+KFtdKTtcbmV4cG9ydCBjb25zdCBzdWdnZXN0aW9uc0xvYWRpbmdBdG9tID0gYXRvbTxib29sZWFuPihmYWxzZSk7XG5leHBvcnQgY29uc3QgcmVzcG9uc2VTdHJlYW1pbmdBdG9tID0gYXRvbTxib29sZWFuPihmYWxzZSk7XG5leHBvcnQgY29uc3QgY2hhdElzT3BlbkF0b20gPSBhdG9tPGJvb2xlYW4+KGZhbHNlKTtcbmV4cG9ydCBjb25zdCByZXF1ZXN0RmFpbHVyZUF0b20gPSBhdG9tPGJvb2xlYW4+KGZhbHNlKTtcbmV4cG9ydCBjb25zdCBmb3JtU3VibWl0QXRvbSA9IGF0b208Rm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXM+KCk7XG5leHBvcnQgY29uc3QgY2hhdE9uVG9nZ2xlQXRvbSA9IGF0b20oXG4gIG51bGwsXG4gIChcbiAgICBnZXQsXG4gICAgc2V0LFxuICAgIHRyaWdnZXJMb2NhdGlvbj86IENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uLFxuICAgIHRyYWNrPzogKFxuICAgICAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLFxuICAgICAgZXZlbnRQcm9wcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgKSA9PiB2b2lkXG4gICkgPT4ge1xuICAgIGNvbnN0IGlzT3BlbiA9IGdldChjaGF0SXNPcGVuQXRvbSk7XG4gICAgc2V0KGNoYXRJc09wZW5BdG9tLCAhaXNPcGVuKTtcblxuICAgIGlmICghaXNPcGVuKSB7XG4gICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoU3BpZmZ5RXZlbnROYW1lLldpZGdldE9wZW4pKTtcbiAgICAgIHRyYWNrPy4oU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5DaGF0Q29tcG9uZW50RXhwYW5kZWQsIHtcbiAgICAgICAgbWVzc2FnZV9tZXRhZGF0YToge1xuICAgICAgICAgIHRyaWdnZXJfbG9jYXRpb246IHRyaWdnZXJMb2NhdGlvbixcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoU3BpZmZ5RXZlbnROYW1lLldpZGdldENsb3NlKSk7XG4gICAgICB0cmFjaz8uKFNwaWZmeU1ldHJpY3NFdmVudE5hbWUuQ2hhdENvbXBvbmVudENvbGxhcHNlZCk7XG4gICAgfVxuICB9XG4pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFZQSxNQUFhLHFCQUFxQixLQUFjLE1BQU07QUFDdEQsTUFBYSx5QkFBeUIsS0FDcEMsa0JBQWtCLFVBQ25CO0FBQ0QsTUFBYSxnQkFBZ0IsTUFBYztBQUMzQyxNQUFhLGlCQUFpQixLQUE2QixPQUFVO0FBQ3JFLE1BQWEsNEJBQTRCLEtBQWMsTUFBTTtBQUM3RCxNQUFhLGVBQWUsS0FBa0IsRUFBRSxDQUFDO0FBQ2pELE1BQWEsaUJBQWlCLEtBQWtCLEVBQUUsQ0FBQztBQUNuRCxNQUFhLGtCQUFrQixLQUFtQixFQUFFLENBQUM7QUFDckQsTUFBYSx5QkFBeUIsS0FBYyxNQUFNO0FBQzFELE1BQWEsd0JBQXdCLEtBQWMsTUFBTTtBQUN6RCxNQUFhLGlCQUFpQixLQUFjLE1BQU07QUFDbEQsTUFBYSxxQkFBcUIsS0FBYyxNQUFNO0FBQ3RELE1BQWEsaUJBQWlCLE1BQStCO0FBQzdELE1BQWEsbUJBQW1CLEtBQzlCLE9BRUUsS0FDQSxLQUNBLGlCQUNBLFVBSUc7Q0FDSCxNQUFNLFNBQVMsSUFBSSxlQUFlO0FBQ2xDLEtBQUksZ0JBQWdCLENBQUMsT0FBTztBQUU1QixLQUFJLENBQUMsUUFBUTtBQUNYLFNBQU8sY0FBYyxJQUFJLFlBQVksZ0JBQWdCLFdBQVcsQ0FBQztBQUNqRSxVQUFRLHVCQUF1Qix1QkFBdUIsRUFDcEQsa0JBQWtCLEVBQ2hCLGtCQUFrQixpQkFDbkIsRUFDRixDQUFDO1FBQ0c7QUFDTCxTQUFPLGNBQWMsSUFBSSxZQUFZLGdCQUFnQixZQUFZLENBQUM7QUFDbEUsVUFBUSx1QkFBdUIsdUJBQXVCOztFQUczRCJ9
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { ProductExperiment, validateOrgConfigResults, validateResponse, validateSuggestion, validateUserEvent } from "./models-CWOgrLCm.js";
|
|
2
2
|
import { logger_default } from "./logger-W3lqg-4b.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { chatIdAtom, userIdAtom } from "./app-
|
|
6
|
-
import { coreSupportedEventRequestToApiRequest, messageFromFormSubmittedEvent, messageFromQueryEvent, messageFromResponse, messageFromSuggestionEvent, messageRequestToCommerceMessageRequest } from "./utils-
|
|
3
|
+
import { baseUrlAtom, contextSourceAtom, envAtom, orgShortNameAtom, reactAppNameAtom } from "./enviveConfig-DZBohDpc.js";
|
|
4
|
+
import { getAtomStore } from "./atomStore-DEcDhiLp.js";
|
|
5
|
+
import { chatIdAtom, userIdAtom } from "./app-CflxT_xI.js";
|
|
6
|
+
import { coreSupportedEventRequestToApiRequest, messageFromFormSubmittedEvent, messageFromQueryEvent, messageFromResponse, messageFromSuggestionEvent, messageRequestToCommerceMessageRequest } from "./utils-B4PvsKVY.js";
|
|
7
7
|
import { featureFlagServiceAtom, orgIdAtom } from "./graphqlConfig-CZGjJ8hP.js";
|
|
8
|
-
import { SessionRestartRequired, UnsupportedProductException } from "./unsupportedProductExceptions-
|
|
8
|
+
import { SessionRestartRequired, UnsupportedProductException } from "./unsupportedProductExceptions-uQuuelOs.js";
|
|
9
9
|
import { Configuration, ContextEnvEnum, ContextSourceEnum, CustomerServiceApi, DefaultApi, FormType, InferenceApi, ResponseCategory, ResponseError, UserEventCategory, V1OrgConfigGetSourceEnum } from "@spiffy-ai/commerce-api-client";
|
|
10
10
|
|
|
11
11
|
//#region src/application/commerce-api.ts
|
|
@@ -309,4 +309,4 @@ var commerce_api_default = CommerceApiClient;
|
|
|
309
309
|
|
|
310
310
|
//#endregion
|
|
311
311
|
export { commerce_api_default };
|
|
312
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVyY2UtYXBpLW1sNWZrRXVrLmpzIiwibmFtZXMiOlsiY29uZmlnOiBDb25maWd1cmF0aW9uIiwiY29udGV4dDogQ29udGV4dCIsImVycjogdW5rbm93biIsImVycm9yOiB1bmtub3duIiwiZGF0YTogVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZSIsInJlc3BvbnNlczogUmVzcG9uc2VbXVtdIiwic3VnZ2VzdGlvbnM6IFN1Z2dlc3Rpb25bXSIsInVzZXJFdmVudHM6IFVzZXJFdmVudFtdIiwiYXNzaXN0YW50TWVzc2FnZXM6IE1lc3NhZ2VbXVtdIiwidXNlck1lc3NhZ2VzOiBNZXNzYWdlW11bXSIsInJlcXVlc3Q6IFYxT3JnQ29uZmlnR2V0UmVxdWVzdCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9hcHBsaWNhdGlvbi9jb21tZXJjZS1hcGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZ2dlciBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyXCI7XG5pbXBvcnQge1xuICBDb25maWd1cmF0aW9uLFxuICBDdXN0b21lclNlcnZpY2VBcGksXG4gIERlZmF1bHRBcGksXG4gIEluZmVyZW5jZUFwaSxcbiAgUmVwb3J0U2Vzc2lvblJlcXVlc3QsXG4gIFJlc3BvbnNlRXJyb3IsXG4gIFVzZXJFdmVudENhdGVnb3J5LFxuICBWMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlLFxuICBWMU9yZ0NvbmZpZ0dldFJlcXVlc3QsXG4gIENvbnRleHRTb3VyY2VFbnVtLFxuICBWMU9yZ0NvbmZpZ0dldFNvdXJjZUVudW0sXG4gIEN1c3RvbWVyU2VydmljZVByb3ZpZGVyLFxuICBSZXNwb25zZUNhdGVnb3J5LFxuICBGb3JtVHlwZSxcbn0gZnJvbSBcIkBzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudFwiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdWdnZXN0aW9uIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZVN1Z2dlc3Rpb25cIjtcbmltcG9ydCB7IHZhbGlkYXRlVXNlckV2ZW50IH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZVVzZXJFdmVudFwiO1xuaW1wb3J0IHtcbiAgbWVzc2FnZUZyb21RdWVyeUV2ZW50LFxuICBtZXNzYWdlRnJvbVJlc3BvbnNlLFxuICBtZXNzYWdlRnJvbVN1Z2dlc3Rpb25FdmVudCxcbn0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi91dGlsc1wiO1xuaW1wb3J0IHtcbiAgTWVzc2FnZSxcbiAgTmV4dE1lc3NhZ2VSZXF1ZXN0LFxuICBSZXNwb25zZSxcbiAgU3VnZ2VzdGlvbixcbiAgU3VwcG9ydGVkRXZlbnRSZXF1ZXN0LFxuICBVc2VyRXZlbnQsXG59IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzXCI7XG5pbXBvcnQgeyBtZXNzYWdlUmVxdWVzdFRvQ29tbWVyY2VNZXNzYWdlUmVxdWVzdCB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vdXRpbHMvbmV4dE1lc3NhZ2VSZXF1ZXN0VG9BcGlSZXF1ZXN0XCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVJlc3BvbnNlIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZVJlc3BvbnNlXCI7XG5pbXBvcnQgeyBjb3JlU3VwcG9ydGVkRXZlbnRSZXF1ZXN0VG9BcGlSZXF1ZXN0IH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi91dGlscy9zdXBwb3J0ZWRFdmVudFJlcXVlc3RUb0FwaVJlcXVlc3RcIjtcbmltcG9ydCB7IFNlc3Npb25SZXN0YXJ0UmVxdWlyZWQgfSBmcm9tIFwic3JjL3R5cGVzL2V4Y2VwdGlvbnMvc2Vzc2lvbkV4Y2VwdGlvbnNcIjtcbmltcG9ydCB7IFVuc3VwcG9ydGVkUHJvZHVjdEV4Y2VwdGlvbiB9IGZyb20gXCJzcmMvdHlwZXMvZXhjZXB0aW9ucy91bnN1cHBvcnRlZFByb2R1Y3RFeGNlcHRpb25zXCI7XG5pbXBvcnQgeyBDbGllbnREZXRhaWxzIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvY2xpZW50RGV0YWlsc1wiO1xuaW1wb3J0IHsgZ2V0QXRvbVN0b3JlIH0gZnJvbSBcInNyYy9hdG9tcy9hdG9tU3RvcmUvYXRvbVN0b3JlXCI7XG5pbXBvcnQgeyBQcm9kdWN0RXhwZXJpbWVudCB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzL3Byb2R1Y3RFeHBlcmltZW50XCI7XG5pbXBvcnQgeyBGZWF0dXJlR2F0ZXMgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVscy9mZWF0dXJlR2F0ZXNcIjtcbmltcG9ydCB7IHZhbGlkYXRlT3JnQ29uZmlnUmVzdWx0cyB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzL3ZhbGlkYXRvcnMvdmFsaWRhdGVPcmdDb25maWdSZXN1bHRzXCI7XG5pbXBvcnQgeyBPcmdDb25maWcgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvb3JnQ29uZmlnUmVzdWx0c1wiO1xuaW1wb3J0IHsgU3VwcG9ydGVkRXZlbnQgfSBmcm9tIFwic3JjL2F0b21zL2FwcC92YXJpYW50XCI7XG5pbXBvcnQgeyBtZXNzYWdlRnJvbUZvcm1TdWJtaXR0ZWRFdmVudCB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vdXRpbHMvbWVzc2FnZUZyb21Gb3JtU3VibWl0dGVkRXZlbnRcIjtcbmltcG9ydCB0eXBlIHsgQ29udGV4dCB9IGZyb20gXCJAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ29udGV4dFwiO1xuaW1wb3J0IHsgQ29udGV4dEVudkVudW0gfSBmcm9tIFwiQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50XCI7IC8vIEltcG9ydCBDb250ZXh0RW52RW51bVxuaW1wb3J0IHtcbiAgYmFzZVVybEF0b20sXG4gIHJlYWN0QXBwTmFtZUF0b20sXG4gIGNvbnRleHRTb3VyY2VBdG9tLFxuICBvcmdTaG9ydE5hbWVBdG9tLFxuICBlbnZBdG9tLCAvLyBJbXBvcnQgZW52QXRvbVxufSBmcm9tIFwic3JjL2F0b21zL2Vudml2ZS9lbnZpdmVDb25maWdcIjtcbmltcG9ydCB7IHVzZXJJZEF0b20sIGNoYXRJZEF0b20gfSBmcm9tIFwic3JjL2F0b21zL2FwcFwiOyAvLyBJbXBvcnQgdXNlcklkQXRvbSBhbmQgY2hhdElkQXRvbVxuaW1wb3J0IHsgb3JnSWRBdG9tLCBmZWF0dXJlRmxhZ1NlcnZpY2VBdG9tIH0gZnJvbSBcInNyYy9hdG9tcy9vcmcvZ3JhcGhxbENvbmZpZ1wiOyAvLyBJbXBvcnQgbmV3IG9yZ0lkQXRvbSBhbmQgZmVhdHVyZUZsYWdTZXJ2aWNlQXRvbVxuXG5hc3luYyBmdW5jdGlvbiBlcnJvclJlc3BvbnNlQm9keShlcnJvcjogUmVzcG9uc2VFcnJvcikge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBlcnJvci5yZXNwb25zZS5qc29uKCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB0aHJvd1Nlc3Npb25SZXN0YXJ0UmVxdWlyZWRJZihlcnJvck1zZzogc3RyaW5nLCBlcnJvcjogdW5rbm93bikge1xuICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIFJlc3BvbnNlRXJyb3IpKSB7XG4gICAgTG9nZ2VyLmxvZ0luZm8oZXJyb3JNc2csIGVycm9yKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuXG4gIGNvbnN0IGVycm9yUmVzcG9uc2UgPSBhd2FpdCBlcnJvclJlc3BvbnNlQm9keShlcnJvcik7XG4gIGlmIChcbiAgICBlcnJvclJlc3BvbnNlPy5tZXNzYWdlPy50b0xvd2VyQ2FzZSgpID09PSBcInVuc3VwcG9ydGVkIHByb2R1Y3RcIiB8fCAvLyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gbmV3ZXIgdmVyc2lvbnMgb2YgdGhlIEFQSSByZXR1cm4gc3ViX2NvZGUgaW5zdGVhZCBvZiBtZXNzYWdlXG4gICAgZXJyb3JSZXNwb25zZT8uYXBwX2NvZGU/LnRvVXBwZXJDYXNlKCkgPT09IFwiUFJPRFVDVF9OT1RfRk9VTkRcIlxuICApIHtcbiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRQcm9kdWN0RXhjZXB0aW9uKCk7XG4gIH0gZWxzZSBpZiAoXG4gICAgZXJyb3JSZXNwb25zZT8uYXBwX2NvZGU/LnRvVXBwZXJDYXNlKCkgPT09IFwiUkVTVEFSVF9TRVNTSU9OXCIgfHxcbiAgICBlcnJvclJlc3BvbnNlPy5zdWJfY29kZT8udG9VcHBlckNhc2UoKSA9PT0gXCJOT1RfRk9VTkRcIiAvLyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gbmV3IEFQSSByZXNwb25zZXMgd2lsbCBjb250YWluIFwiYXBwX2NvZGVcIlxuICApIHtcbiAgICBMb2dnZXIubG9nSW5mbyhcbiAgICAgIFwiU2Vzc2lvbiBkb2VzIG5vdCBleGlzdC4gUmUtc3RhcnQgc2Vzc2lvblwiLFxuICAgICAgZXJyb3IsXG4gICAgICBlcnJvci5yZXNwb25zZSxcbiAgICAgIGVycm9yUmVzcG9uc2VcbiAgICApO1xuICAgIHRocm93IG5ldyBTZXNzaW9uUmVzdGFydFJlcXVpcmVkKCk7XG4gIH1cblxuICBMb2dnZXIubG9nSW5mbyhlcnJvck1zZywgZXJyb3IpO1xuICB0aHJvdyBlcnJvcjtcbn1cblxuY2xhc3MgQ29tbWVyY2VBcGlDbGllbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRBcGk6IERlZmF1bHRBcGk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjdXN0b21lclNlcnZpY2VBcGk6IEN1c3RvbWVyU2VydmljZUFwaTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGluZmVyZW5jZUFwaTogSW5mZXJlbmNlQXBpO1xuXG4gIHByaXZhdGUgc3RhdGljIGluc3RhbmNlOiBDb21tZXJjZUFwaUNsaWVudCB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIHN1Z2dlc3Rpb25zQWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gIHByaXZhdGUgcmVzcG9uc2VzQWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gIHByaXZhdGUgc3RhdGljIGdldEluc3RhbmNlID0gKCk6IENvbW1lcmNlQXBpQ2xpZW50ID0+IHtcbiAgICBpZiAoIUNvbW1lcmNlQXBpQ2xpZW50Lmluc3RhbmNlKSB7XG4gICAgICBDb21tZXJjZUFwaUNsaWVudC5pbnN0YW5jZSA9IG5ldyBDb21tZXJjZUFwaUNsaWVudCgpO1xuICAgIH1cblxuICAgIHJldHVybiBDb21tZXJjZUFwaUNsaWVudC5pbnN0YW5jZTtcbiAgfTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGJhc2VQYXRoPzogc3RyaW5nKSB7XG4gICAgY29uc3QgYXRvbVN0b3JlID0gZ2V0QXRvbVN0b3JlKCk7XG4gICAgY29uc3QgYmFzZVVybCA9IGF0b21TdG9yZS5nZXQoYmFzZVVybEF0b20pO1xuICAgIGNvbnN0IHBhdGggPSBiYXNlUGF0aCB8fCBiYXNlVXJsO1xuICAgIC8vIEFQSSBLZXkgaXMgbm93IGhhbmRsZWQgYXQgdGhlIEVudml2ZUNvbmZpZ1Byb3ZpZGVyIGxldmVsXG4gICAgY29uc3QgY29uZmlnOiBDb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oe1xuICAgICAgYmFzZVBhdGg6IHBhdGgsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLmRlZmF1bHRBcGkgPSBuZXcgRGVmYXVsdEFwaShjb25maWcpO1xuICAgIHRoaXMuaW5mZXJlbmNlQXBpID0gbmV3IEluZmVyZW5jZUFwaShjb25maWcpO1xuICAgIHRoaXMuY3VzdG9tZXJTZXJ2aWNlQXBpID0gbmV3IEN1c3RvbWVyU2VydmljZUFwaShjb25maWcpO1xuICB9XG5cbiAgc3RhdGljIHJlc29sdmVVcmwgPSBhc3luYyAodXJsOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBhdG9tU3RvcmUgPSBnZXRBdG9tU3RvcmUoKTtcbiAgICBjb25zdCBvcmdTaG9ydE5hbWUgPSBhdG9tU3RvcmUuZ2V0KG9yZ1Nob3J0TmFtZUF0b20pO1xuICAgIGNvbnN0IG9yZ0lkID0gYXRvbVN0b3JlLmdldChvcmdJZEF0b20pO1xuICAgIGNvbnN0IHVzZXJJZCA9IGF0b21TdG9yZS5nZXQodXNlcklkQXRvbSk7XG4gICAgY29uc3QgY2hhdElkID0gYXRvbVN0b3JlLmdldChjaGF0SWRBdG9tKTtcbiAgICBjb25zdCBzb3VyY2UgPSBhdG9tU3RvcmUuZ2V0KGNvbnRleHRTb3VyY2VBdG9tKTtcbiAgICBjb25zdCBlbnYgPSBhdG9tU3RvcmUuZ2V0KGVudkF0b20pO1xuXG4gICAgY29uc3QgZmVhdHVyZUZsYWdTZXJ2aWNlID0gYXRvbVN0b3JlLmdldChmZWF0dXJlRmxhZ1NlcnZpY2VBdG9tKTtcblxuICAgIGNvbnN0IGNvbnRleHQ6IENvbnRleHQgPSB7XG4gICAgICB1c2VyX2lkOiB1c2VySWQgPz8gXCJcIixcbiAgICAgIG9yZ19pZDogb3JnSWQgPz8gXCJcIixcbiAgICAgIG9yZ19zaG9ydF9uYW1lOiBvcmdTaG9ydE5hbWUgPz8gXCJcIixcbiAgICAgIGNoYXRfaWQ6IGNoYXRJZCA/PyBcIlwiLFxuICAgICAgc291cmNlOiBzb3VyY2UgPz8gQ29udGV4dFNvdXJjZUVudW0uQXBwLFxuICAgICAgZW52OiAoZW52IGFzIENvbnRleHRFbnZFbnVtKSA/PyBDb250ZXh0RW52RW51bS5EZXYsIC8vIENhc3QgZW52IHRvIENvbnRleHRFbnZFbnVtXG4gICAgfTtcblxuICAgIGNvbnN0IGZlYXR1cmVHYXRlcyA9XG4gICAgICBmZWF0dXJlRmxhZ1NlcnZpY2U/LmZlYXR1cmVGbGFnU2VydmljZT8uZ2V0RmVhdHVyZUZsYWdzKCkgfHwge307XG4gICAgY29uc3QgdXJsUmVzb2x2aW5nUmVxdWVzdCA9IHtcbiAgICAgIHVybCxcbiAgICAgIGNvbnRleHQsXG4gICAgICBmZWF0dXJlX2dhdGVzOiBmZWF0dXJlR2F0ZXMsXG4gICAgfTtcblxuICAgIGNvbnN0IHJhd1Jlc3BvbnNlID1cbiAgICAgIGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuaW5mZXJlbmNlQXBpLnYxVXJsUmVzb2x2aW5nUG9zdFJhdyh7XG4gICAgICAgIFVybFJlc29sdmluZ1JlcXVlc3Q6IHVybFJlc29sdmluZ1JlcXVlc3QsXG4gICAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlQm9keSA9IGF3YWl0IHJhd1Jlc3BvbnNlLnJhdy5qc29uKCk7XG5cbiAgICByZXR1cm4gcmVzcG9uc2VCb2R5O1xuICB9O1xuXG4gIHN0YXRpYyByZXBvcnRTZXNzaW9uID0gYXN5bmMgKFxuICAgIHJlcG9ydFJlcXVlc3Q6IFJlcG9ydFNlc3Npb25SZXF1ZXN0XG4gICk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuZGVmYXVsdEFwaS52MUNoYXRzUmVwb3J0U2Vzc2lvbklkUG9zdChcbiAgICAgIHtcbiAgICAgICAgUmVwb3J0U2Vzc2lvblJlcXVlc3Q6IHJlcG9ydFJlcXVlc3QsXG4gICAgICB9XG4gICAgKTtcbiAgfTtcblxuICBzdGF0aWMgZ2V0TmV4dFJlc3BvbnNlcyA9IGFzeW5jIChcbiAgICBwYXlsb2FkOiBOZXh0TWVzc2FnZVJlcXVlc3RcbiAgKTogUHJvbWlzZTxNZXNzYWdlW10+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPVxuICAgICAgICBhd2FpdCBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLmluZmVyZW5jZUFwaS52MU5leHRSZXNwb25zZXNQb3N0KHtcbiAgICAgICAgICBOZXh0TWVzc2FnZVJlcXVlc3Q6IG1lc3NhZ2VSZXF1ZXN0VG9Db21tZXJjZU1lc3NhZ2VSZXF1ZXN0KHBheWxvYWQpLFxuICAgICAgICB9KTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VzID0gcmVzcG9uc2VcbiAgICAgICAgLm1hcCgocmVzcCkgPT4gdmFsaWRhdGVSZXNwb25zZShyZXNwKSlcbiAgICAgICAgLm1hcCgocmVzcCkgPT4gbWVzc2FnZUZyb21SZXNwb25zZShyZXNwKSk7XG5cbiAgICAgIHJldHVybiBtZXNzYWdlcy5maWx0ZXIoKG0pOiBtIGlzIE1lc3NhZ2UgPT4gbSAhPSBudWxsKTtcbiAgICB9IGNhdGNoIChlcnI6IHVua25vd24pIHtcbiAgICAgIExvZ2dlci5sb2dJbmZvKFwiRmFpbGVkIHRvIGdldCBuZXh0IHJlc3BvbnNlc1wiLCBlcnIsIHtcbiAgICAgICAgcGF5bG9hZENvbnRleHQ6IHBheWxvYWQ/LmNvbnRleHQsXG4gICAgICAgIHVzZXJFdmVudHM6IHBheWxvYWQ/LnVzZXJFdmVudHMsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IHRocm93U2Vzc2lvblJlc3RhcnRSZXF1aXJlZElmKFwiRmFpbGVkIHRvIGdldCBuZXh0IHJlc3BvbnNlc1wiLCBlcnIpO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfTtcblxuICBzdGF0aWMgZ2V0TmV4dFJlc3BvbnNlU3RyZWFtaW5nID0gKFxuICAgIHBheWxvYWQ6IE5leHRNZXNzYWdlUmVxdWVzdFxuICApOiBBc3luY0dlbmVyYXRvcjxSZXNwb25zZSwgdm9pZCwgdW5rbm93bj4gPT4ge1xuICAgIGFzeW5jIGZ1bmN0aW9uKiBnZW5lcmF0ZShcbiAgICAgIGluZmVyZW5jZUFwaTogSW5mZXJlbmNlQXBpLFxuICAgICAgYWJvcnRDb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXJcbiAgICApIHtcbiAgICAgIC8vIG1ha2Ugc3VyZSBzdHJlYW1pbmcgaXMgZW5hYmxlZFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBpbmZlcmVuY2VBcGkudjFOZXh0UmVzcG9uc2VzUG9zdFJhdyhcbiAgICAgICAgICB7XG4gICAgICAgICAgICBOZXh0TWVzc2FnZVJlcXVlc3Q6IG1lc3NhZ2VSZXF1ZXN0VG9Db21tZXJjZU1lc3NhZ2VSZXF1ZXN0KHBheWxvYWQpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBzaWduYWw6IGFib3J0Q29udHJvbGxlci5zaWduYWwgfVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFJlYWQgdGhlIHJlc3BvbnNlIGFzIGEgc3RyZWFtIG9mIGRhdGFcbiAgICAgICAgaWYgKCFyZXNwb25zZS5yYXcuYm9keSkge1xuICAgICAgICAgIExvZ2dlci5sb2dFcnJvcihcbiAgICAgICAgICAgIFwiW3NwaWZmeS1haV0gTm8gYm9keSBpbiB0aGUgc3RyZWFtZWQgcmVzcG9uc2VcIixcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcmVzcG9uc2U6IHJlc3BvbnNlLnJhdyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLnJhdy5ib2R5LmdldFJlYWRlcigpO1xuICAgICAgICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKFwidXRmLThcIik7XG5cbiAgICAgICAgbGV0IHBhcnRpYWwgPSBcIlwiO1xuICAgICAgICAvLyBUT0RPIHRoaXMgZnVuY3Rpb24gaXMgcmVjcmVhdGVkIGV2ZXJ5IHRpbWUgbmV3IGRhdGEgY29tZXMgZnJvbSB0aGUgc3RyZWFtIC0gZGVmaW5lIGl0IG91dHNpZGUgb2YgdGhlIGdlbmVyYXRvclxuICAgICAgICBjb25zdCBzYWZlUGFyc2UgPSAobGluZTogc3RyaW5nKTogdW5rbm93biA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxpbmUpOyAvLyBQYXJzZSB0aGUgSlNPTiBzdHJpbmdcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIExvZ2dlci5sb2dFcnJvcihcIltzcGlmZnktYWldIEVycm9yIHBhcnNpbmcgc3RyZWFtZWQgbGluZVwiLCBlcnIsIHtcbiAgICAgICAgICAgICAgbGluZSxcbiAgICAgICAgICAgICAgcGFydGlhbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gc3dhbGxvdyB0aGUgZXJyb3IgYW5kIHNldCB0aGUgcGFydGlhbCB0byBvdXIgY3VycmVudCBjaHVua1xuICAgICAgICAgICAgcGFydGlhbCA9IGxpbmU7XG4gICAgICAgICAgICByZXR1cm4gcGFydGlhbDtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gVE9ETyB0aGlzIGZ1bmN0aW9uIGlzIHJlY3JlYXRlZCBldmVyeSB0aW1lIG5ldyBkYXRhIGNvbWVzIGZyb20gdGhlIHN0cmVhbSAtIGRlZmluZSBpdCBvdXRzaWRlIG9mIHRoZSBnZW5lcmF0b3JcbiAgICAgICAgY29uc3QgcHJvY2Vzc0NodW5rID0gKGNodW5rOiBzdHJpbmcpOiB1bmtub3duW10gPT4ge1xuICAgICAgICAgIC8vIG1lcmdlIHRoZSBwYXJ0aWFsIHdpdGggdGhlIGluY29taW5nIGNodW5rXG4gICAgICAgICAgY29uc3QgbGluZXMgPSBgJHtwYXJ0aWFsfSR7Y2h1bmt9YC5zcGxpdChcIlxcblwiKTtcblxuICAgICAgICAgIGNvbnN0IHBhcnNlZExpbmVzID0gbGluZXNcbiAgICAgICAgICAgIC5tYXAoKGxpbmUpID0+IGxpbmUucmVwbGFjZSgvXmRhdGE6IC8sIFwiXCIpLnRyaW0oKSkgLy8gUmVtb3ZlIHRoZSBcImRhdGE6IFwiIHByZWZpeFxuICAgICAgICAgICAgLmZpbHRlcigobGluZSkgPT4gbGluZSAhPT0gXCJcIiAmJiBsaW5lICE9PSBcIltET05FXVwiKSAvLyBSZW1vdmUgZW1wdHkgbGluZXMgYW5kIFwiW0RPTkVdXCJcbiAgICAgICAgICAgIC5tYXAoc2FmZVBhcnNlKVxuICAgICAgICAgICAgLmZpbHRlcigodikgPT4gdik7IC8vIGFuZCBmaWx0ZXIgb3V0IHRoZSB1bmRlZmluZWQgdmFsdWVzXG4gICAgICAgICAgcmV0dXJuIHBhcnNlZExpbmVzO1xuICAgICAgICB9O1xuXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWF3YWl0LWluLWxvb3BcbiAgICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuXG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE1hc3NhZ2UgYW5kIHBhcnNlIHRoZSBjaHVuayBvZiBkYXRhXG4gICAgICAgICAgY29uc3QgY2h1bmsgPSBkZWNvZGVyLmRlY29kZSh2YWx1ZSk7XG4gICAgICAgICAgY29uc3QgcGFyc2VkTGluZXMgPSBwcm9jZXNzQ2h1bmsoY2h1bmspO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBwYXJzZWRMaW5lIG9mIHBhcnNlZExpbmVzKSB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWRSZXNwb25zZSA9IHZhbGlkYXRlUmVzcG9uc2UocGFyc2VkTGluZSk7XG5cbiAgICAgICAgICAgIGlmICh2YWxpZGF0ZWRSZXNwb25zZSkge1xuICAgICAgICAgICAgICB5aWVsZCB2YWxpZGF0ZWRSZXNwb25zZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgIExvZ2dlci5sb2dFcnJvcihcbiAgICAgICAgICBcIltzcGlmZnktYWldIEZhaWxlZCB0byBnZXQgbmV4dCBzdHJlYW1pbmcgcmVzcG9uc2VzXCIsXG4gICAgICAgICAgZXJyb3IsXG4gICAgICAgICAge1xuICAgICAgICAgICAgcGF5bG9hZENvbnRleHQ6IHBheWxvYWQ/LmNvbnRleHQsXG4gICAgICAgICAgICB1c2VyRXZlbnRzOiBwYXlsb2FkPy51c2VyRXZlbnRzLFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgYXdhaXQgdGhyb3dTZXNzaW9uUmVzdGFydFJlcXVpcmVkSWYoXG4gICAgICAgICAgXCJGYWlsZWQgdG8gZ2V0IG5leHQgc3RyZWFtaW5nIHJlc3BvbnNlc1wiLFxuICAgICAgICAgIGVycm9yXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5yZXNwb25zZXNBYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLnJlc3BvbnNlc0Fib3J0Q29udHJvbGxlciA9XG4gICAgICBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICByZXR1cm4gZ2VuZXJhdGUoXG4gICAgICBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLmluZmVyZW5jZUFwaSxcbiAgICAgIENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkucmVzcG9uc2VzQWJvcnRDb250cm9sbGVyXG4gICAgKTtcbiAgfTtcblxuICBzdGF0aWMgZ2V0TmV4dFN1Z2dlc3Rpb25zID0gYXN5bmMgKFxuICAgIHBheWxvYWQ6IE5leHRNZXNzYWdlUmVxdWVzdFxuICApOiBQcm9taXNlPFN1Z2dlc3Rpb25bXT4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLnN1Z2dlc3Rpb25zQWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLnN1Z2dlc3Rpb25zQWJvcnRDb250cm9sbGVyID1cbiAgICAgICAgbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9XG4gICAgICAgIGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuaW5mZXJlbmNlQXBpLnYxTmV4dFN1Z2dlc3Rpb25zUG9zdChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBOZXh0TWVzc2FnZVJlcXVlc3Q6IG1lc3NhZ2VSZXF1ZXN0VG9Db21tZXJjZU1lc3NhZ2VSZXF1ZXN0KHBheWxvYWQpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2lnbmFsOlxuICAgICAgICAgICAgICBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLnN1Z2dlc3Rpb25zQWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zID0gcmVzcG9uc2VcbiAgICAgICAgLm1hcCgocmVzcCkgPT4gdmFsaWRhdGVTdWdnZXN0aW9uKHJlc3ApKVxuICAgICAgICAuZmlsdGVyKChzdWdnZXN0aW9uKTogc3VnZ2VzdGlvbiBpcyBTdWdnZXN0aW9uID0+IHN1Z2dlc3Rpb24gIT0gbnVsbCk7XG5cbiAgICAgIHJldHVybiBzdWdnZXN0aW9ucztcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgTG9nZ2VyLmxvZ0luZm8oXCJGYWlsZWQgdG8gZ2V0IHN1Z2dlc3Rpb25zXCIsIGVycm9yLCB7XG4gICAgICAgIHBheWxvYWRDb250ZXh0OiBwYXlsb2FkPy5jb250ZXh0LFxuICAgICAgICB1c2VyRXZlbnRzOiBwYXlsb2FkPy51c2VyRXZlbnRzLFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHRocm93U2Vzc2lvblJlc3RhcnRSZXF1aXJlZElmKFwiRmFpbGVkIHRvIGdldCBzdWdnZXN0aW9uc1wiLCBlcnJvcik7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBGZXRjaGVzIHRoZSBleGlzdGluZyBjaGF0IGRhdGEgZm9yIGEgZ2l2ZW4gc2Vzc2lvbiBhbmQgdHJhbnNmb3JtcyB0aGVtIHRvIHJlY29uc3RydWN0IHRoZSBjaGF0IGhpc3RvcnkuXG4gICAqXG4gICAqIEBwYXJhbSBvcmdJZCBUaGUgb3JnYW5pemF0aW9uIElkXG4gICAqIEBwYXJhbSBjaGF0SWQgVGhlIGV4aXN0aW5nIGNoYXQgSWRcbiAgICogQHBhcmFtIHVzZXJJZCBUaGUgdXNlciBJZFxuICAgKlxuICAgKiBAcmV0dXJucyBBIGxpc3Qgb2YgbWVzc2FnZXMgdGhhdCB3ZXJlIGV4Y2hhbmdlZCBpbiB0aGUgY2hhdCwgdGhyb3dzIGFuIGVycm9yIGlmIHRoZSBjaGF0IHNlc3Npb24gaGFzIGV4cGlyZWQuXG4gICAqL1xuICBzdGF0aWMgZ2V0UmVzcG9uc2VzID0gYXN5bmMgKFxuICAgIG9yZ0lkOiBzdHJpbmcsXG4gICAgY2hhdElkOiBzdHJpbmcsXG4gICAgdXNlcklkOiBzdHJpbmdcbiAgKTogUHJvbWlzZTx7XG4gICAgcmVzcG9uc2VzOiBSZXNwb25zZVtdW107XG4gICAgdXNlckV2ZW50czogVXNlckV2ZW50W107XG4gICAgc3VnZ2VzdGlvbnM6IFN1Z2dlc3Rpb25bXTtcbiAgICBtZXNzYWdlczogTWVzc2FnZVtdW107XG4gIH0+ID0+IHtcbiAgICBsZXQgZGF0YTogVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZSA9IHtcbiAgICAgIHJlc3BvbnNlczogW10sXG4gICAgICBzdWdnZXN0aW9uczogW10sXG4gICAgICB1c2VyX2V2ZW50czogW10sXG4gICAgfTtcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgb3JnX2lkOiBvcmdJZCxcbiAgICAgIGNoYXRfaWQ6IGNoYXRJZCxcbiAgICAgIHVzZXJfaWQ6IHVzZXJJZCxcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBkYXRhID1cbiAgICAgICAgYXdhaXQgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5kZWZhdWx0QXBpLnYxR2V0U2Vzc2lvbk1lc3NhZ2VzKFxuICAgICAgICAgIHJlcXVlc3RcbiAgICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgYXdhaXQgdGhyb3dTZXNzaW9uUmVzdGFydFJlcXVpcmVkSWYoXG4gICAgICAgIFwiRmFpbGVkIHRvIGdldCBjaGF0IHJlc3BvbnNlc1wiLFxuICAgICAgICBlcnJvclxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZXM6IFJlc3BvbnNlW11bXSA9IGRhdGE/LnJlc3BvbnNlcz8ubWFwKCh0dXJuKSA9PlxuICAgICAgdHVyblxuICAgICAgICAubWFwKChyZXNwb25zZSkgPT4gdmFsaWRhdGVSZXNwb25zZShyZXNwb25zZSkpXG4gICAgICAgIC5maWx0ZXIoKHJlc3BvbnNlKTogcmVzcG9uc2UgaXMgUmVzcG9uc2UgPT4gcmVzcG9uc2UgIT0gbnVsbClcbiAgICApO1xuXG4gICAgY29uc3Qgc3VnZ2VzdGlvbnM6IFN1Z2dlc3Rpb25bXSA9IGRhdGE/LnN1Z2dlc3Rpb25zXG4gICAgICAubWFwKChzdWdnZXN0aW9uKSA9PiB2YWxpZGF0ZVN1Z2dlc3Rpb24oc3VnZ2VzdGlvbikpXG4gICAgICAuZmlsdGVyKChzdWdnZXN0aW9uKTogc3VnZ2VzdGlvbiBpcyBTdWdnZXN0aW9uID0+IHN1Z2dlc3Rpb24gIT0gbnVsbCk7XG5cbiAgICBjb25zdCB1c2VyRXZlbnRzOiBVc2VyRXZlbnRbXSA9IGRhdGE/LnVzZXJfZXZlbnRzXG4gICAgICAubWFwKChldmVudCkgPT4gdmFsaWRhdGVVc2VyRXZlbnQoZXZlbnQpKVxuICAgICAgLmZpbHRlcigoZXZlbnQpOiBldmVudCBpcyBVc2VyRXZlbnQgPT4gZXZlbnQgIT0gbnVsbCk7XG5cbiAgICAvLyBpZiBhIGZvcm0gaGFzIGFscmVhZHkgYmVlbiBzdWJtaXR0ZWQsIGRvbid0IHNob3cgaXQgaW4gdGhlIGNoYXQgaGlzdG9yeVxuICAgIGNvbnN0IGZvcm1TdWJtaXR0ZWRVc2VyRXZlbnRzRm9ybUlkcyA9IHVzZXJFdmVudHNcbiAgICAgIC5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuRm9ybVN1Ym1pdHRlZClcbiAgICAgIC5tYXAoKGV2ZW50KSA9PiBldmVudC5hdHRyaWJ1dGVzLmZvcm1SZXNwb25zZUlkKTtcblxuICAgIGNvbnN0IGFzc2lzdGFudE1lc3NhZ2VzOiBNZXNzYWdlW11bXSA9IHJlc3BvbnNlc1xuICAgICAgLm1hcCgodHVybikgPT5cbiAgICAgICAgdHVyblxuICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAocmVzcG9uc2UpID0+XG4gICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UuY2F0ZWdvcnkgPT09IFJlc3BvbnNlQ2F0ZWdvcnkuRm9ybSAmJlxuICAgICAgICAgICAgICAgIGZvcm1TdWJtaXR0ZWRVc2VyRXZlbnRzRm9ybUlkcy5pbmNsdWRlcyhyZXNwb25zZS5pZClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAubWFwKChyZXNwb25zZSkgPT4gbWVzc2FnZUZyb21SZXNwb25zZShyZXNwb25zZSkpXG4gICAgICAgICAgLmZpbHRlcigobWVzc2FnZSk6IG1lc3NhZ2UgaXMgTWVzc2FnZSA9PiBtZXNzYWdlICE9IG51bGwpXG4gICAgICApXG4gICAgICAuZmlsdGVyKCh0dXJuKSA9PiB0dXJuLmxlbmd0aCA+IDApO1xuXG4gICAgY29uc3QgdXNlck1lc3NhZ2VzOiBNZXNzYWdlW11bXSA9IHVzZXJFdmVudHNcbiAgICAgIC5tYXAoKGV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBbVXNlckV2ZW50Q2F0ZWdvcnkuUXVlcnlUeXBlZCwgVXNlckV2ZW50Q2F0ZWdvcnkuU2VhcmNoXS5pbmNsdWRlcyhcbiAgICAgICAgICAgIGV2ZW50LmNhdGVnb3J5XG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gW21lc3NhZ2VGcm9tUXVlcnlFdmVudChldmVudCldO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5TdWdnZXN0aW9uQ2xpY2tlZCkge1xuICAgICAgICAgIHJldHVybiBbbWVzc2FnZUZyb21TdWdnZXN0aW9uRXZlbnQoZXZlbnQsIHN1Z2dlc3Rpb25zKV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LkZvcm1TdWJtaXR0ZWQpIHtcbiAgICAgICAgICBjb25zdCBmb3JtUmVzcG9uc2UgPSByZXNwb25zZXNcbiAgICAgICAgICAgIC5mbGF0KClcbiAgICAgICAgICAgIC5maW5kKFxuICAgICAgICAgICAgICAocmVzcG9uc2UpID0+XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UuaWQgPT09IGV2ZW50LmF0dHJpYnV0ZXMuZm9ybVJlc3BvbnNlSWQgJiZcbiAgICAgICAgICAgICAgICBldmVudC5hdHRyaWJ1dGVzLmZvcm1UeXBlICE9PSBGb3JtVHlwZS5Fc2NhbGF0aW9uXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKGZvcm1SZXNwb25zZSAmJiBmb3JtUmVzcG9uc2UuY2F0ZWdvcnkgPT09IFJlc3BvbnNlQ2F0ZWdvcnkuRm9ybSkge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgbWVzc2FnZUZyb21Gb3JtU3VibWl0dGVkRXZlbnQoZXZlbnQsIGZvcm1SZXNwb25zZS5hdHRyaWJ1dGVzKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKG1lc3NhZ2UpOiBtZXNzYWdlIGlzIE1lc3NhZ2VbXSA9PiBtZXNzYWdlLmxlbmd0aCA+IDApO1xuXG4gICAgLy8gU29ydCB0aGUgbWVzc2FnZXMgY2hyb25vbG9naWNhbGx5IHRvIHJlY29uc3RydWN0IHRoZSBjaGF0IGhpc3RvcnlcbiAgICBjb25zdCBzb3J0ZWRNZXNzYWdlcyA9IFsuLi5hc3Npc3RhbnRNZXNzYWdlcywgLi4udXNlck1lc3NhZ2VzXS5zb3J0KFxuICAgICAgKGEsIGIpID0+XG4gICAgICAgIG5ldyBEYXRlKGFbMF0uY3JlYXRlZEF0KS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShiWzBdLmNyZWF0ZWRBdCkuZ2V0VGltZSgpXG4gICAgKTtcblxuICAgIHJldHVybiB7IHJlc3BvbnNlcywgdXNlckV2ZW50cywgc3VnZ2VzdGlvbnMsIG1lc3NhZ2VzOiBzb3J0ZWRNZXNzYWdlcyB9O1xuICB9O1xuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcGF5bG9hZFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgc3RhdGljIGlzU3VwcG9ydGVkRXZlbnQgPSBhc3luYyAoXG4gICAgcGF5bG9hZDogU3VwcG9ydGVkRXZlbnRSZXF1ZXN0XG4gICk6IFByb21pc2U8U3VwcG9ydGVkRXZlbnQ+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmF3UmVzcG9uc2UgPVxuICAgICAgICBhd2FpdCBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLmluZmVyZW5jZUFwaS52MVN1cHBvcnRlZEV2ZW50UG9zdFJhdyhcbiAgICAgICAgICB7XG4gICAgICAgICAgICBTdXBwb3J0ZWRFdmVudFJlcXVlc3Q6XG4gICAgICAgICAgICAgIGNvcmVTdXBwb3J0ZWRFdmVudFJlcXVlc3RUb0FwaVJlcXVlc3QocGF5bG9hZCksXG4gICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAvLyBHZXQgdGhlIGFjdHVhbCBIVFRQIHJlc3BvbnNlIEpTT05cbiAgICAgIGNvbnN0IGh0dHBSZXNwb25zZVRleHQgPSBhd2FpdCByYXdSZXNwb25zZS5yYXcudGV4dCgpO1xuICAgICAgY29uc3QgaHR0cFJlc3BvbnNlSnNvbiA9IEpTT04ucGFyc2UoaHR0cFJlc3BvbnNlVGV4dCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmh0dHBSZXNwb25zZUpzb24sXG4gICAgICAgIG51bWJlck9mUmV2aWV3czogaHR0cFJlc3BvbnNlSnNvbi5udW1fb2ZfcmV2aWV3cyxcbiAgICAgICAgbWVyY2hhbnRfdGFnczogaHR0cFJlc3BvbnNlSnNvbi5tZXJjaGFudF90YWdzIHx8IFtdLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIExvZ2dlci5sb2dFcnJvcihcIkZhaWxlZCB0byBnZXQgcmVzcG9uc2UgZm9yIHYxU3VwcG9ydGVkRXZlbnRQb3N0XCIsIHtcbiAgICAgICAgZXJyLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdXBwb3J0ZWQ6IGZhbHNlLFxuICAgICAgICByZWFkeTogZmFsc2UsXG4gICAgICAgIGNhdGVnb3J5OiB1bmRlZmluZWQsXG4gICAgICAgIGNvbGxlY3Rpb25zOiBbXSxcbiAgICAgICAgbnVtYmVyT2ZSZXZpZXdzOiB1bmRlZmluZWQsXG4gICAgICAgIHRvcF9jYXRlZ29yeTogdW5kZWZpbmVkLFxuICAgICAgICBtZXJjaGFudF90YWdzOiBbXSxcbiAgICAgIH07XG4gICAgfVxuICB9O1xuXG4gIHN0YXRpYyBpZGVudGlmeVVzZXIgPSBhc3luYyAoXG4gICAgc3BpZmZ5VXNlcklkOiBzdHJpbmcsXG4gICAgbWVyY2hhbnRVc2VySWQ6IHN0cmluZyxcbiAgICB1YURldGFpbHM6IENsaWVudERldGFpbHNcbiAgKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuZGVmYXVsdEFwaS52MUFuYWx5dGljc0lkZW50aWZ5UG9zdCh7XG4gICAgICAgIEFuYWx5dGljc0lkZW50aWZ5UmVxdWVzdDoge1xuICAgICAgICAgIHVzZXJfaWQ6IHNwaWZmeVVzZXJJZCxcbiAgICAgICAgICBvc19uYW1lOiB1YURldGFpbHMub3MsXG4gICAgICAgICAgb3NfdmVyc2lvbjogdWFEZXRhaWxzLm9zVmVyc2lvbixcbiAgICAgICAgICBwbGF0Zm9ybTogdWFEZXRhaWxzLm9zLFxuICAgICAgICAgIGRldmljZV9pZDogdWFEZXRhaWxzLmRldmljZU1vZGVsLFxuICAgICAgICAgIGRldmljZV9icmFuZDogdWFEZXRhaWxzLmRldmljZUJyYW5kLFxuICAgICAgICAgIGRldmljZV9tYW51ZmFjdHVyZXI6IHVhRGV0YWlscy5kZXZpY2VNYW51ZmFjdHVyZXIsXG4gICAgICAgICAgZGV2aWNlX21vZGVsOiB1YURldGFpbHMuZGV2aWNlTW9kZWwsXG4gICAgICAgICAgdXNlcl9wcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjZHBfdXNlcl9pZDogbWVyY2hhbnRVc2VySWQsXG4gICAgICAgICAgICBicm93c2VyOiB1YURldGFpbHMuYnJvd3NlcixcbiAgICAgICAgICAgIGJyb3dzZXJfdmVyc2lvbjogdWFEZXRhaWxzLmJyb3dzZXJWZXJzaW9uLFxuICAgICAgICAgICAgdXNlcl9hZ2VudDogdWFEZXRhaWxzLnVzZXJBZ2VudCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBMb2dnZXIubG9nRXJyb3IoXCJGYWlsZWQgdG8gaWRlbnRpZnkgdXNlclwiLCBlcnIpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIHN0YXRpYyBtYXBDb250ZXh0U291cmNlVG9WMU9yZ0NvbmZpZ0dldFNvdXJjZSA9IChcbiAgICBzb3VyY2U6IENvbnRleHRTb3VyY2VFbnVtIHwgdW5kZWZpbmVkXG4gICk6IFYxT3JnQ29uZmlnR2V0U291cmNlRW51bSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgaWYgKHNvdXJjZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHN3aXRjaCAoc291cmNlKSB7XG4gICAgICBjYXNlIENvbnRleHRTb3VyY2VFbnVtLkZvcms6XG4gICAgICAgIHJldHVybiBWMU9yZ0NvbmZpZ0dldFNvdXJjZUVudW0uRm9yaztcbiAgICAgIGNhc2UgQ29udGV4dFNvdXJjZUVudW0uUGxheWdyb3VuZDpcbiAgICAgICAgcmV0dXJuIFYxT3JnQ29uZmlnR2V0U291cmNlRW51bS5QbGF5Z3JvdW5kO1xuICAgICAgY2FzZSBDb250ZXh0U291cmNlRW51bS5BcHA6XG4gICAgICAgIHJldHVybiBWMU9yZ0NvbmZpZ0dldFNvdXJjZUVudW0uQXBwO1xuICAgICAgY2FzZSBDb250ZXh0U291cmNlRW51bS5UZXN0OlxuICAgICAgICByZXR1cm4gVjFPcmdDb25maWdHZXRTb3VyY2VFbnVtLlRlc3Q7XG4gICAgICBjYXNlIENvbnRleHRTb3VyY2VFbnVtLkV2YWw6XG4gICAgICAgIHJldHVybiBWMU9yZ0NvbmZpZ0dldFNvdXJjZUVudW0uVGVzdDtcbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgaWYgbmV3IHZhbHVlcyBhcmUgYWRkZWQgdG8gQ29udGV4dFNvdXJjZUVudW0sIHdlIGNhdGNoIGl0XG4gICAgICAgIGNvbnN0IGV4aGF1c3RpdmVDaGVjazogbmV2ZXIgPSBzb3VyY2U7XG4gICAgICAgIHJldHVybiBleGhhdXN0aXZlQ2hlY2s7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHN0YXRpYyBnZXRPcmdDb25maWcgPSBhc3luYyAoXG4gICAgdXNlcl9pZDogc3RyaW5nXG4gICk6IFByb21pc2U8T3JnQ29uZmlnIHwgdW5kZWZpbmVkPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGF0b21TdG9yZSA9IGdldEF0b21TdG9yZSgpO1xuICAgICAgY29uc3QgcmVhY3RBcHBOYW1lID0gYXRvbVN0b3JlLmdldChyZWFjdEFwcE5hbWVBdG9tKTtcbiAgICAgIGNvbnN0IGNvbnRleHRTb3VyY2UgPSBhdG9tU3RvcmUuZ2V0KGNvbnRleHRTb3VyY2VBdG9tKTtcbiAgICAgIGNvbnN0IGZlYXR1cmVGbGFnU2VydmljZSA9IGF0b21TdG9yZS5nZXQoZmVhdHVyZUZsYWdTZXJ2aWNlQXRvbSk7IC8vIEdldCBmZWF0dXJlRmxhZ1NlcnZpY2VcbiAgICAgIGNvbnN0IHJlcXVlc3Q6IFYxT3JnQ29uZmlnR2V0UmVxdWVzdCA9IHtcbiAgICAgICAgbmFtZXNwYWNlOiByZWFjdEFwcE5hbWUsXG4gICAgICAgIHVzZXJfaWQsXG4gICAgICAgIHNvdXJjZTogdGhpcy5tYXBDb250ZXh0U291cmNlVG9WMU9yZ0NvbmZpZ0dldFNvdXJjZShjb250ZXh0U291cmNlKSxcbiAgICAgICAgaW5jbHVkZV9leHBlcmltZW50czogT2JqZWN0LnZhbHVlcyhQcm9kdWN0RXhwZXJpbWVudCksXG4gICAgICAgIGluY2x1ZGVfZmVhdHVyZV9nYXRlczogT2JqZWN0LmVudHJpZXMoXG4gICAgICAgICAgZmVhdHVyZUZsYWdTZXJ2aWNlPy5mZWF0dXJlRmxhZ1NlcnZpY2U/LmdldEZlYXR1cmVGbGFncygpIHx8IHt9XG4gICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKChbLCBpc0VuYWJsZWRdKSA9PiBpc0VuYWJsZWQpXG4gICAgICAgICAgLm1hcCgoW2ZlYXR1cmVHYXRlTmFtZV0pID0+IGZlYXR1cmVHYXRlTmFtZSksIC8vIFVzZSBmZWF0dXJlRmxhZ1NlcnZpY2VcbiAgICAgIH07XG4gICAgICBjb25zdCByZXNwb25zZSA9XG4gICAgICAgIGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuZGVmYXVsdEFwaS52MU9yZ0NvbmZpZ0dldChcbiAgICAgICAgICByZXF1ZXN0XG4gICAgICAgICk7XG5cbiAgICAgIHJldHVybiB2YWxpZGF0ZU9yZ0NvbmZpZ1Jlc3VsdHMocmVzcG9uc2UpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgTG9nZ2VyLmxvZ0Vycm9yKGBGYWlsZWQgdG8gZ2V0IG9yZyBjb25maWdgLCBlcnIsIHsgZXJyIH0pO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG5cbiAgc3RhdGljIGFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvbiA9IGFzeW5jIChcbiAgICBzcGlmZnlVc2VySWQ6IHN0cmluZyxcbiAgICBlbWFpbDogc3RyaW5nLFxuICAgIGN1c3RvbWVyU2VydmljZVByb3ZpZGVyOiBDdXN0b21lclNlcnZpY2VQcm92aWRlclxuICApID0+IHtcbiAgICBMb2dnZXIubG9nSW5mbyhcbiAgICAgIGBhZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb24gLSB1c2VyX2lkPSR7c3BpZmZ5VXNlcklkfSBlbWFpbD0ke2VtYWlsfSBjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyPSR7Y3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJ9YFxuICAgICk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuY3VzdG9tZXJTZXJ2aWNlQXBpLnYxQ3VzdHNlcnZpY2VBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25Qb3N0KFxuICAgICAgICB7XG4gICAgICAgICAgQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVxdWVzdDoge1xuICAgICAgICAgICAgc3BpZmZ5X3VzZXJfaWQ6IHNwaWZmeVVzZXJJZCxcbiAgICAgICAgICAgIGVtYWlsLFxuICAgICAgICAgICAgY3VzdG9tZXJfc2VydmljZV9wcm92aWRlcjogY3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIExvZ2dlci5sb2dFcnJvcihcIkZhaWxlZCB0byBhZGQgbm90ZSB0byBsYXRlc3QgY29udmVyc2F0aW9uXCIsIHsgZXJyIH0pO1xuICAgIH1cbiAgfTtcblxuICBzdGF0aWMgZ2V0Q3VzdG9tZXJTZXJ2aWNlQXBpID0gKCkgPT5cbiAgICBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLmN1c3RvbWVyU2VydmljZUFwaTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29tbWVyY2VBcGlDbGllbnQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBeURBLGVBQWUsa0JBQWtCLE9BQXNCO0FBQ3JELEtBQUk7QUFDRixTQUFPLE1BQU0sTUFBTSxTQUFTLE1BQU07U0FDNUI7QUFDTixTQUFPLEVBQUU7OztBQUliLGVBQWUsOEJBQThCLFVBQWtCLE9BQWdCO0FBQzdFLEtBQUks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
|
|
312
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVyY2UtYXBpLURFRmQ1SFVILmpzIiwibmFtZXMiOlsiY29uZmlnOiBDb25maWd1cmF0aW9uIiwiY29udGV4dDogQ29udGV4dCIsImVycjogdW5rbm93biIsImVycm9yOiB1bmtub3duIiwiZGF0YTogVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZSIsInJlc3BvbnNlczogUmVzcG9uc2VbXVtdIiwic3VnZ2VzdGlvbnM6IFN1Z2dlc3Rpb25bXSIsInVzZXJFdmVudHM6IFVzZXJFdmVudFtdIiwiYXNzaXN0YW50TWVzc2FnZXM6IE1lc3NhZ2VbXVtdIiwidXNlck1lc3NhZ2VzOiBNZXNzYWdlW11bXSIsInJlcXVlc3Q6IFYxT3JnQ29uZmlnR2V0UmVxdWVzdCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9hcHBsaWNhdGlvbi9jb21tZXJjZS1hcGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZ2dlciBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyXCI7XG5pbXBvcnQge1xuICBDb25maWd1cmF0aW9uLFxuICBDdXN0b21lclNlcnZpY2VBcGksXG4gIERlZmF1bHRBcGksXG4gIEluZmVyZW5jZUFwaSxcbiAgUmVwb3J0U2Vzc2lvblJlcXVlc3QsXG4gIFJlc3BvbnNlRXJyb3IsXG4gIFVzZXJFdmVudENhdGVnb3J5LFxuICBWMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlLFxuICBWMU9yZ0NvbmZpZ0dldFJlcXVlc3QsXG4gIENvbnRleHRTb3VyY2VFbnVtLFxuICBWMU9yZ0NvbmZpZ0dldFNvdXJjZUVudW0sXG4gIEN1c3RvbWVyU2VydmljZVByb3ZpZGVyLFxuICBSZXNwb25zZUNhdGVnb3J5LFxuICBGb3JtVHlwZSxcbn0gZnJvbSBcIkBzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudFwiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdWdnZXN0aW9uIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZVN1Z2dlc3Rpb25cIjtcbmltcG9ydCB7IHZhbGlkYXRlVXNlckV2ZW50IH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZVVzZXJFdmVudFwiO1xuaW1wb3J0IHtcbiAgbWVzc2FnZUZyb21RdWVyeUV2ZW50LFxuICBtZXNzYWdlRnJvbVJlc3BvbnNlLFxuICBtZXNzYWdlRnJvbVN1Z2dlc3Rpb25FdmVudCxcbn0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi91dGlsc1wiO1xuaW1wb3J0IHtcbiAgTWVzc2FnZSxcbiAgTmV4dE1lc3NhZ2VSZXF1ZXN0LFxuICBSZXNwb25zZSxcbiAgU3VnZ2VzdGlvbixcbiAgU3VwcG9ydGVkRXZlbnRSZXF1ZXN0LFxuICBVc2VyRXZlbnQsXG59IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzXCI7XG5pbXBvcnQgeyBtZXNzYWdlUmVxdWVzdFRvQ29tbWVyY2VNZXNzYWdlUmVxdWVzdCB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vdXRpbHMvbmV4dE1lc3NhZ2VSZXF1ZXN0VG9BcGlSZXF1ZXN0XCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVJlc3BvbnNlIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZVJlc3BvbnNlXCI7XG5pbXBvcnQgeyBjb3JlU3VwcG9ydGVkRXZlbnRSZXF1ZXN0VG9BcGlSZXF1ZXN0IH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi91dGlscy9zdXBwb3J0ZWRFdmVudFJlcXVlc3RUb0FwaVJlcXVlc3RcIjtcbmltcG9ydCB7IFNlc3Npb25SZXN0YXJ0UmVxdWlyZWQgfSBmcm9tIFwic3JjL3R5cGVzL2V4Y2VwdGlvbnMvc2Vzc2lvbkV4Y2VwdGlvbnNcIjtcbmltcG9ydCB7IFVuc3VwcG9ydGVkUHJvZHVjdEV4Y2VwdGlvbiB9IGZyb20gXCJzcmMvdHlwZXMvZXhjZXB0aW9ucy91bnN1cHBvcnRlZFByb2R1Y3RFeGNlcHRpb25zXCI7XG5pbXBvcnQgeyBDbGllbnREZXRhaWxzIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvY2xpZW50RGV0YWlsc1wiO1xuaW1wb3J0IHsgZ2V0QXRvbVN0b3JlIH0gZnJvbSBcInNyYy9hdG9tcy9hdG9tU3RvcmUvYXRvbVN0b3JlXCI7XG5pbXBvcnQgeyBQcm9kdWN0RXhwZXJpbWVudCB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzL3Byb2R1Y3RFeHBlcmltZW50XCI7XG5pbXBvcnQgeyBGZWF0dXJlR2F0ZXMgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVscy9mZWF0dXJlR2F0ZXNcIjtcbmltcG9ydCB7IHZhbGlkYXRlT3JnQ29uZmlnUmVzdWx0cyB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzL3ZhbGlkYXRvcnMvdmFsaWRhdGVPcmdDb25maWdSZXN1bHRzXCI7XG5pbXBvcnQgeyBPcmdDb25maWcgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvb3JnQ29uZmlnUmVzdWx0c1wiO1xuaW1wb3J0IHsgU3VwcG9ydGVkRXZlbnQgfSBmcm9tIFwic3JjL2F0b21zL2FwcC92YXJpYW50XCI7XG5pbXBvcnQgeyBtZXNzYWdlRnJvbUZvcm1TdWJtaXR0ZWRFdmVudCB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vdXRpbHMvbWVzc2FnZUZyb21Gb3JtU3VibWl0dGVkRXZlbnRcIjtcbmltcG9ydCB0eXBlIHsgQ29udGV4dCB9IGZyb20gXCJAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ29udGV4dFwiO1xuaW1wb3J0IHsgQ29udGV4dEVudkVudW0gfSBmcm9tIFwiQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50XCI7IC8vIEltcG9ydCBDb250ZXh0RW52RW51bVxuaW1wb3J0IHtcbiAgYmFzZVVybEF0b20sXG4gIHJlYWN0QXBwTmFtZUF0b20sXG4gIGNvbnRleHRTb3VyY2VBdG9tLFxuICBvcmdTaG9ydE5hbWVBdG9tLFxuICBlbnZBdG9tLCAvLyBJbXBvcnQgZW52QXRvbVxufSBmcm9tIFwic3JjL2F0b21zL2Vudml2ZS9lbnZpdmVDb25maWdcIjtcbmltcG9ydCB7IHVzZXJJZEF0b20sIGNoYXRJZEF0b20gfSBmcm9tIFwic3JjL2F0b21zL2FwcFwiOyAvLyBJbXBvcnQgdXNlcklkQXRvbSBhbmQgY2hhdElkQXRvbVxuaW1wb3J0IHsgb3JnSWRBdG9tLCBmZWF0dXJlRmxhZ1NlcnZpY2VBdG9tIH0gZnJvbSBcInNyYy9hdG9tcy9vcmcvZ3JhcGhxbENvbmZpZ1wiOyAvLyBJbXBvcnQgbmV3IG9yZ0lkQXRvbSBhbmQgZmVhdHVyZUZsYWdTZXJ2aWNlQXRvbVxuXG5hc3luYyBmdW5jdGlvbiBlcnJvclJlc3BvbnNlQm9keShlcnJvcjogUmVzcG9uc2VFcnJvcikge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBlcnJvci5yZXNwb25zZS5qc29uKCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB0aHJvd1Nlc3Npb25SZXN0YXJ0UmVxdWlyZWRJZihlcnJvck1zZzogc3RyaW5nLCBlcnJvcjogdW5rbm93bikge1xuICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIFJlc3BvbnNlRXJyb3IpKSB7XG4gICAgTG9nZ2VyLmxvZ0luZm8oZXJyb3JNc2csIGVycm9yKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuXG4gIGNvbnN0IGVycm9yUmVzcG9uc2UgPSBhd2FpdCBlcnJvclJlc3BvbnNlQm9keShlcnJvcik7XG4gIGlmIChcbiAgICBlcnJvclJlc3BvbnNlPy5tZXNzYWdlPy50b0xvd2VyQ2FzZSgpID09PSBcInVuc3VwcG9ydGVkIHByb2R1Y3RcIiB8fCAvLyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gbmV3ZXIgdmVyc2lvbnMgb2YgdGhlIEFQSSByZXR1cm4gc3ViX2NvZGUgaW5zdGVhZCBvZiBtZXNzYWdlXG4gICAgZXJyb3JSZXNwb25zZT8uYXBwX2NvZGU/LnRvVXBwZXJDYXNlKCkgPT09IFwiUFJPRFVDVF9OT1RfRk9VTkRcIlxuICApIHtcbiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRQcm9kdWN0RXhjZXB0aW9uKCk7XG4gIH0gZWxzZSBpZiAoXG4gICAgZXJyb3JSZXNwb25zZT8uYXBwX2NvZGU/LnRvVXBwZXJDYXNlKCkgPT09IFwiUkVTVEFSVF9TRVNTSU9OXCIgfHxcbiAgICBlcnJvclJlc3BvbnNlPy5zdWJfY29kZT8udG9VcHBlckNhc2UoKSA9PT0gXCJOT1RfRk9VTkRcIiAvLyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gbmV3IEFQSSByZXNwb25zZXMgd2lsbCBjb250YWluIFwiYXBwX2NvZGVcIlxuICApIHtcbiAgICBMb2dnZXIubG9nSW5mbyhcbiAgICAgIFwiU2Vzc2lvbiBkb2VzIG5vdCBleGlzdC4gUmUtc3RhcnQgc2Vzc2lvblwiLFxuICAgICAgZXJyb3IsXG4gICAgICBlcnJvci5yZXNwb25zZSxcbiAgICAgIGVycm9yUmVzcG9uc2VcbiAgICApO1xuICAgIHRocm93IG5ldyBTZXNzaW9uUmVzdGFydFJlcXVpcmVkKCk7XG4gIH1cblxuICBMb2dnZXIubG9nSW5mbyhlcnJvck1zZywgZXJyb3IpO1xuICB0aHJvdyBlcnJvcjtcbn1cblxuY2xhc3MgQ29tbWVyY2VBcGlDbGllbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRBcGk6IERlZmF1bHRBcGk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjdXN0b21lclNlcnZpY2VBcGk6IEN1c3RvbWVyU2VydmljZUFwaTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGluZmVyZW5jZUFwaTogSW5mZXJlbmNlQXBpO1xuXG4gIHByaXZhdGUgc3RhdGljIGluc3RhbmNlOiBDb21tZXJjZUFwaUNsaWVudCB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIHN1Z2dlc3Rpb25zQWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gIHByaXZhdGUgcmVzcG9uc2VzQWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gIHByaXZhdGUgc3RhdGljIGdldEluc3RhbmNlID0gKCk6IENvbW1lcmNlQXBpQ2xpZW50ID0+IHtcbiAgICBpZiAoIUNvbW1lcmNlQXBpQ2xpZW50Lmluc3RhbmNlKSB7XG4gICAgICBDb21tZXJjZUFwaUNsaWVudC5pbnN0YW5jZSA9IG5ldyBDb21tZXJjZUFwaUNsaWVudCgpO1xuICAgIH1cblxuICAgIHJldHVybiBDb21tZXJjZUFwaUNsaWVudC5pbnN0YW5jZTtcbiAgfTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGJhc2VQYXRoPzogc3RyaW5nKSB7XG4gICAgY29uc3QgYXRvbVN0b3JlID0gZ2V0QXRvbVN0b3JlKCk7XG4gICAgY29uc3QgYmFzZVVybCA9IGF0b21TdG9yZS5nZXQoYmFzZVVybEF0b20pO1xuICAgIGNvbnN0IHBhdGggPSBiYXNlUGF0aCB8fCBiYXNlVXJsO1xuICAgIC8vIEFQSSBLZXkgaXMgbm93IGhhbmRsZWQgYXQgdGhlIEVudml2ZUNvbmZpZ1Byb3ZpZGVyIGxldmVsXG4gICAgY29uc3QgY29uZmlnOiBDb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oe1xuICAgICAgYmFzZVBhdGg6IHBhdGgsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLmRlZmF1bHRBcGkgPSBuZXcgRGVmYXVsdEFwaShjb25maWcpO1xuICAgIHRoaXMuaW5mZXJlbmNlQXBpID0gbmV3IEluZmVyZW5jZUFwaShjb25maWcpO1xuICAgIHRoaXMuY3VzdG9tZXJTZXJ2aWNlQXBpID0gbmV3IEN1c3RvbWVyU2VydmljZUFwaShjb25maWcpO1xuICB9XG5cbiAgc3RhdGljIHJlc29sdmVVcmwgPSBhc3luYyAodXJsOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBhdG9tU3RvcmUgPSBnZXRBdG9tU3RvcmUoKTtcbiAgICBjb25zdCBvcmdTaG9ydE5hbWUgPSBhdG9tU3RvcmUuZ2V0KG9yZ1Nob3J0TmFtZUF0b20pO1xuICAgIGNvbnN0IG9yZ0lkID0gYXRvbVN0b3JlLmdldChvcmdJZEF0b20pO1xuICAgIGNvbnN0IHVzZXJJZCA9IGF0b21TdG9yZS5nZXQodXNlcklkQXRvbSk7XG4gICAgY29uc3QgY2hhdElkID0gYXRvbVN0b3JlLmdldChjaGF0SWRBdG9tKTtcbiAgICBjb25zdCBzb3VyY2UgPSBhdG9tU3RvcmUuZ2V0KGNvbnRleHRTb3VyY2VBdG9tKTtcbiAgICBjb25zdCBlbnYgPSBhdG9tU3RvcmUuZ2V0KGVudkF0b20pO1xuXG4gICAgY29uc3QgZmVhdHVyZUZsYWdTZXJ2aWNlID0gYXRvbVN0b3JlLmdldChmZWF0dXJlRmxhZ1NlcnZpY2VBdG9tKTtcblxuICAgIGNvbnN0IGNvbnRleHQ6IENvbnRleHQgPSB7XG4gICAgICB1c2VyX2lkOiB1c2VySWQgPz8gXCJcIixcbiAgICAgIG9yZ19pZDogb3JnSWQgPz8gXCJcIixcbiAgICAgIG9yZ19zaG9ydF9uYW1lOiBvcmdTaG9ydE5hbWUgPz8gXCJcIixcbiAgICAgIGNoYXRfaWQ6IGNoYXRJZCA/PyBcIlwiLFxuICAgICAgc291cmNlOiBzb3VyY2UgPz8gQ29udGV4dFNvdXJjZUVudW0uQXBwLFxuICAgICAgZW52OiAoZW52IGFzIENvbnRleHRFbnZFbnVtKSA/PyBDb250ZXh0RW52RW51bS5EZXYsIC8vIENhc3QgZW52IHRvIENvbnRleHRFbnZFbnVtXG4gICAgfTtcblxuICAgIGNvbnN0IGZlYXR1cmVHYXRlcyA9XG4gICAgICBmZWF0dXJlRmxhZ1NlcnZpY2U/LmZlYXR1cmVGbGFnU2VydmljZT8uZ2V0RmVhdHVyZUZsYWdzKCkgfHwge307XG4gICAgY29uc3QgdXJsUmVzb2x2aW5nUmVxdWVzdCA9IHtcbiAgICAgIHVybCxcbiAgICAgIGNvbnRleHQsXG4gICAgICBmZWF0dXJlX2dhdGVzOiBmZWF0dXJlR2F0ZXMsXG4gICAgfTtcblxuICAgIGNvbnN0IHJhd1Jlc3BvbnNlID1cbiAgICAgIGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuaW5mZXJlbmNlQXBpLnYxVXJsUmVzb2x2aW5nUG9zdFJhdyh7XG4gICAgICAgIFVybFJlc29sdmluZ1JlcXVlc3Q6IHVybFJlc29sdmluZ1JlcXVlc3QsXG4gICAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlQm9keSA9IGF3YWl0IHJhd1Jlc3BvbnNlLnJhdy5qc29uKCk7XG5cbiAgICByZXR1cm4gcmVzcG9uc2VCb2R5O1xuICB9O1xuXG4gIHN0YXRpYyByZXBvcnRTZXNzaW9uID0gYXN5bmMgKFxuICAgIHJlcG9ydFJlcXVlc3Q6IFJlcG9ydFNlc3Npb25SZXF1ZXN0XG4gICk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuZGVmYXVsdEFwaS52MUNoYXRzUmVwb3J0U2Vzc2lvbklkUG9zdChcbiAgICAgIHtcbiAgICAgICAgUmVwb3J0U2Vzc2lvblJlcXVlc3Q6IHJlcG9ydFJlcXVlc3QsXG4gICAgICB9XG4gICAgKTtcbiAgfTtcblxuICBzdGF0aWMgZ2V0TmV4dFJlc3BvbnNlcyA9IGFzeW5jIChcbiAgICBwYXlsb2FkOiBOZXh0TWVzc2FnZVJlcXVlc3RcbiAgKTogUHJvbWlzZTxNZXNzYWdlW10+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPVxuICAgICAgICBhd2FpdCBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLmluZmVyZW5jZUFwaS52MU5leHRSZXNwb25zZXNQb3N0KHtcbiAgICAgICAgICBOZXh0TWVzc2FnZVJlcXVlc3Q6IG1lc3NhZ2VSZXF1ZXN0VG9Db21tZXJjZU1lc3NhZ2VSZXF1ZXN0KHBheWxvYWQpLFxuICAgICAgICB9KTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VzID0gcmVzcG9uc2VcbiAgICAgICAgLm1hcCgocmVzcCkgPT4gdmFsaWRhdGVSZXNwb25zZShyZXNwKSlcbiAgICAgICAgLm1hcCgocmVzcCkgPT4gbWVzc2FnZUZyb21SZXNwb25zZShyZXNwKSk7XG5cbiAgICAgIHJldHVybiBtZXNzYWdlcy5maWx0ZXIoKG0pOiBtIGlzIE1lc3NhZ2UgPT4gbSAhPSBudWxsKTtcbiAgICB9IGNhdGNoIChlcnI6IHVua25vd24pIHtcbiAgICAgIExvZ2dlci5sb2dJbmZvKFwiRmFpbGVkIHRvIGdldCBuZXh0IHJlc3BvbnNlc1wiLCBlcnIsIHtcbiAgICAgICAgcGF5bG9hZENvbnRleHQ6IHBheWxvYWQ/LmNvbnRleHQsXG4gICAgICAgIHVzZXJFdmVudHM6IHBheWxvYWQ/LnVzZXJFdmVudHMsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IHRocm93U2Vzc2lvblJlc3RhcnRSZXF1aXJlZElmKFwiRmFpbGVkIHRvIGdldCBuZXh0IHJlc3BvbnNlc1wiLCBlcnIpO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfTtcblxuICBzdGF0aWMgZ2V0TmV4dFJlc3BvbnNlU3RyZWFtaW5nID0gKFxuICAgIHBheWxvYWQ6IE5leHRNZXNzYWdlUmVxdWVzdFxuICApOiBBc3luY0dlbmVyYXRvcjxSZXNwb25zZSwgdm9pZCwgdW5rbm93bj4gPT4ge1xuICAgIGFzeW5jIGZ1bmN0aW9uKiBnZW5lcmF0ZShcbiAgICAgIGluZmVyZW5jZUFwaTogSW5mZXJlbmNlQXBpLFxuICAgICAgYWJvcnRDb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXJcbiAgICApIHtcbiAgICAgIC8vIG1ha2Ugc3VyZSBzdHJlYW1pbmcgaXMgZW5hYmxlZFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBpbmZlcmVuY2VBcGkudjFOZXh0UmVzcG9uc2VzUG9zdFJhdyhcbiAgICAgICAgICB7XG4gICAgICAgICAgICBOZXh0TWVzc2FnZVJlcXVlc3Q6IG1lc3NhZ2VSZXF1ZXN0VG9Db21tZXJjZU1lc3NhZ2VSZXF1ZXN0KHBheWxvYWQpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBzaWduYWw6IGFib3J0Q29udHJvbGxlci5zaWduYWwgfVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFJlYWQgdGhlIHJlc3BvbnNlIGFzIGEgc3RyZWFtIG9mIGRhdGFcbiAgICAgICAgaWYgKCFyZXNwb25zZS5yYXcuYm9keSkge1xuICAgICAgICAgIExvZ2dlci5sb2dFcnJvcihcbiAgICAgICAgICAgIFwiW3NwaWZmeS1haV0gTm8gYm9keSBpbiB0aGUgc3RyZWFtZWQgcmVzcG9uc2VcIixcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcmVzcG9uc2U6IHJlc3BvbnNlLnJhdyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLnJhdy5ib2R5LmdldFJlYWRlcigpO1xuICAgICAgICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKFwidXRmLThcIik7XG5cbiAgICAgICAgbGV0IHBhcnRpYWwgPSBcIlwiO1xuICAgICAgICAvLyBUT0RPIHRoaXMgZnVuY3Rpb24gaXMgcmVjcmVhdGVkIGV2ZXJ5IHRpbWUgbmV3IGRhdGEgY29tZXMgZnJvbSB0aGUgc3RyZWFtIC0gZGVmaW5lIGl0IG91dHNpZGUgb2YgdGhlIGdlbmVyYXRvclxuICAgICAgICBjb25zdCBzYWZlUGFyc2UgPSAobGluZTogc3RyaW5nKTogdW5rbm93biA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxpbmUpOyAvLyBQYXJzZSB0aGUgSlNPTiBzdHJpbmdcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIExvZ2dlci5sb2dFcnJvcihcIltzcGlmZnktYWldIEVycm9yIHBhcnNpbmcgc3RyZWFtZWQgbGluZVwiLCBlcnIsIHtcbiAgICAgICAgICAgICAgbGluZSxcbiAgICAgICAgICAgICAgcGFydGlhbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gc3dhbGxvdyB0aGUgZXJyb3IgYW5kIHNldCB0aGUgcGFydGlhbCB0byBvdXIgY3VycmVudCBjaHVua1xuICAgICAgICAgICAgcGFydGlhbCA9IGxpbmU7XG4gICAgICAgICAgICByZXR1cm4gcGFydGlhbDtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gVE9ETyB0aGlzIGZ1bmN0aW9uIGlzIHJlY3JlYXRlZCBldmVyeSB0aW1lIG5ldyBkYXRhIGNvbWVzIGZyb20gdGhlIHN0cmVhbSAtIGRlZmluZSBpdCBvdXRzaWRlIG9mIHRoZSBnZW5lcmF0b3JcbiAgICAgICAgY29uc3QgcHJvY2Vzc0NodW5rID0gKGNodW5rOiBzdHJpbmcpOiB1bmtub3duW10gPT4ge1xuICAgICAgICAgIC8vIG1lcmdlIHRoZSBwYXJ0aWFsIHdpdGggdGhlIGluY29taW5nIGNodW5rXG4gICAgICAgICAgY29uc3QgbGluZXMgPSBgJHtwYXJ0aWFsfSR7Y2h1bmt9YC5zcGxpdChcIlxcblwiKTtcblxuICAgICAgICAgIGNvbnN0IHBhcnNlZExpbmVzID0gbGluZXNcbiAgICAgICAgICAgIC5tYXAoKGxpbmUpID0+IGxpbmUucmVwbGFjZSgvXmRhdGE6IC8sIFwiXCIpLnRyaW0oKSkgLy8gUmVtb3ZlIHRoZSBcImRhdGE6IFwiIHByZWZpeFxuICAgICAgICAgICAgLmZpbHRlcigobGluZSkgPT4gbGluZSAhPT0gXCJcIiAmJiBsaW5lICE9PSBcIltET05FXVwiKSAvLyBSZW1vdmUgZW1wdHkgbGluZXMgYW5kIFwiW0RPTkVdXCJcbiAgICAgICAgICAgIC5tYXAoc2FmZVBhcnNlKVxuICAgICAgICAgICAgLmZpbHRlcigodikgPT4gdik7IC8vIGFuZCBmaWx0ZXIgb3V0IHRoZSB1bmRlZmluZWQgdmFsdWVzXG4gICAgICAgICAgcmV0dXJuIHBhcnNlZExpbmVzO1xuICAgICAgICB9O1xuXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWF3YWl0LWluLWxvb3BcbiAgICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuXG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE1hc3NhZ2UgYW5kIHBhcnNlIHRoZSBjaHVuayBvZiBkYXRhXG4gICAgICAgICAgY29uc3QgY2h1bmsgPSBkZWNvZGVyLmRlY29kZSh2YWx1ZSk7XG4gICAgICAgICAgY29uc3QgcGFyc2VkTGluZXMgPSBwcm9jZXNzQ2h1bmsoY2h1bmspO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBwYXJzZWRMaW5lIG9mIHBhcnNlZExpbmVzKSB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWRSZXNwb25zZSA9IHZhbGlkYXRlUmVzcG9uc2UocGFyc2VkTGluZSk7XG5cbiAgICAgICAgICAgIGlmICh2YWxpZGF0ZWRSZXNwb25zZSkge1xuICAgICAgICAgICAgICB5aWVsZCB2YWxpZGF0ZWRSZXNwb25zZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgIExvZ2dlci5sb2dFcnJvcihcbiAgICAgICAgICBcIltzcGlmZnktYWldIEZhaWxlZCB0byBnZXQgbmV4dCBzdHJlYW1pbmcgcmVzcG9uc2VzXCIsXG4gICAgICAgICAgZXJyb3IsXG4gICAgICAgICAge1xuICAgICAgICAgICAgcGF5bG9hZENvbnRleHQ6IHBheWxvYWQ/LmNvbnRleHQsXG4gICAgICAgICAgICB1c2VyRXZlbnRzOiBwYXlsb2FkPy51c2VyRXZlbnRzLFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgYXdhaXQgdGhyb3dTZXNzaW9uUmVzdGFydFJlcXVpcmVkSWYoXG4gICAgICAgICAgXCJGYWlsZWQgdG8gZ2V0IG5leHQgc3RyZWFtaW5nIHJlc3BvbnNlc1wiLFxuICAgICAgICAgIGVycm9yXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5yZXNwb25zZXNBYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLnJlc3BvbnNlc0Fib3J0Q29udHJvbGxlciA9XG4gICAgICBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICByZXR1cm4gZ2VuZXJhdGUoXG4gICAgICBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLmluZmVyZW5jZUFwaSxcbiAgICAgIENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkucmVzcG9uc2VzQWJvcnRDb250cm9sbGVyXG4gICAgKTtcbiAgfTtcblxuICBzdGF0aWMgZ2V0TmV4dFN1Z2dlc3Rpb25zID0gYXN5bmMgKFxuICAgIHBheWxvYWQ6IE5leHRNZXNzYWdlUmVxdWVzdFxuICApOiBQcm9taXNlPFN1Z2dlc3Rpb25bXT4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLnN1Z2dlc3Rpb25zQWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLnN1Z2dlc3Rpb25zQWJvcnRDb250cm9sbGVyID1cbiAgICAgICAgbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9XG4gICAgICAgIGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuaW5mZXJlbmNlQXBpLnYxTmV4dFN1Z2dlc3Rpb25zUG9zdChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBOZXh0TWVzc2FnZVJlcXVlc3Q6IG1lc3NhZ2VSZXF1ZXN0VG9Db21tZXJjZU1lc3NhZ2VSZXF1ZXN0KHBheWxvYWQpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2lnbmFsOlxuICAgICAgICAgICAgICBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLnN1Z2dlc3Rpb25zQWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zID0gcmVzcG9uc2VcbiAgICAgICAgLm1hcCgocmVzcCkgPT4gdmFsaWRhdGVTdWdnZXN0aW9uKHJlc3ApKVxuICAgICAgICAuZmlsdGVyKChzdWdnZXN0aW9uKTogc3VnZ2VzdGlvbiBpcyBTdWdnZXN0aW9uID0+IHN1Z2dlc3Rpb24gIT0gbnVsbCk7XG5cbiAgICAgIHJldHVybiBzdWdnZXN0aW9ucztcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgTG9nZ2VyLmxvZ0luZm8oXCJGYWlsZWQgdG8gZ2V0IHN1Z2dlc3Rpb25zXCIsIGVycm9yLCB7XG4gICAgICAgIHBheWxvYWRDb250ZXh0OiBwYXlsb2FkPy5jb250ZXh0LFxuICAgICAgICB1c2VyRXZlbnRzOiBwYXlsb2FkPy51c2VyRXZlbnRzLFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHRocm93U2Vzc2lvblJlc3RhcnRSZXF1aXJlZElmKFwiRmFpbGVkIHRvIGdldCBzdWdnZXN0aW9uc1wiLCBlcnJvcik7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBGZXRjaGVzIHRoZSBleGlzdGluZyBjaGF0IGRhdGEgZm9yIGEgZ2l2ZW4gc2Vzc2lvbiBhbmQgdHJhbnNmb3JtcyB0aGVtIHRvIHJlY29uc3RydWN0IHRoZSBjaGF0IGhpc3RvcnkuXG4gICAqXG4gICAqIEBwYXJhbSBvcmdJZCBUaGUgb3JnYW5pemF0aW9uIElkXG4gICAqIEBwYXJhbSBjaGF0SWQgVGhlIGV4aXN0aW5nIGNoYXQgSWRcbiAgICogQHBhcmFtIHVzZXJJZCBUaGUgdXNlciBJZFxuICAgKlxuICAgKiBAcmV0dXJucyBBIGxpc3Qgb2YgbWVzc2FnZXMgdGhhdCB3ZXJlIGV4Y2hhbmdlZCBpbiB0aGUgY2hhdCwgdGhyb3dzIGFuIGVycm9yIGlmIHRoZSBjaGF0IHNlc3Npb24gaGFzIGV4cGlyZWQuXG4gICAqL1xuICBzdGF0aWMgZ2V0UmVzcG9uc2VzID0gYXN5bmMgKFxuICAgIG9yZ0lkOiBzdHJpbmcsXG4gICAgY2hhdElkOiBzdHJpbmcsXG4gICAgdXNlcklkOiBzdHJpbmdcbiAgKTogUHJvbWlzZTx7XG4gICAgcmVzcG9uc2VzOiBSZXNwb25zZVtdW107XG4gICAgdXNlckV2ZW50czogVXNlckV2ZW50W107XG4gICAgc3VnZ2VzdGlvbnM6IFN1Z2dlc3Rpb25bXTtcbiAgICBtZXNzYWdlczogTWVzc2FnZVtdW107XG4gIH0+ID0+IHtcbiAgICBsZXQgZGF0YTogVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZSA9IHtcbiAgICAgIHJlc3BvbnNlczogW10sXG4gICAgICBzdWdnZXN0aW9uczogW10sXG4gICAgICB1c2VyX2V2ZW50czogW10sXG4gICAgfTtcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgb3JnX2lkOiBvcmdJZCxcbiAgICAgIGNoYXRfaWQ6IGNoYXRJZCxcbiAgICAgIHVzZXJfaWQ6IHVzZXJJZCxcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBkYXRhID1cbiAgICAgICAgYXdhaXQgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5kZWZhdWx0QXBpLnYxR2V0U2Vzc2lvbk1lc3NhZ2VzKFxuICAgICAgICAgIHJlcXVlc3RcbiAgICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgYXdhaXQgdGhyb3dTZXNzaW9uUmVzdGFydFJlcXVpcmVkSWYoXG4gICAgICAgIFwiRmFpbGVkIHRvIGdldCBjaGF0IHJlc3BvbnNlc1wiLFxuICAgICAgICBlcnJvclxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZXM6IFJlc3BvbnNlW11bXSA9IGRhdGE/LnJlc3BvbnNlcz8ubWFwKCh0dXJuKSA9PlxuICAgICAgdHVyblxuICAgICAgICAubWFwKChyZXNwb25zZSkgPT4gdmFsaWRhdGVSZXNwb25zZShyZXNwb25zZSkpXG4gICAgICAgIC5maWx0ZXIoKHJlc3BvbnNlKTogcmVzcG9uc2UgaXMgUmVzcG9uc2UgPT4gcmVzcG9uc2UgIT0gbnVsbClcbiAgICApO1xuXG4gICAgY29uc3Qgc3VnZ2VzdGlvbnM6IFN1Z2dlc3Rpb25bXSA9IGRhdGE/LnN1Z2dlc3Rpb25zXG4gICAgICAubWFwKChzdWdnZXN0aW9uKSA9PiB2YWxpZGF0ZVN1Z2dlc3Rpb24oc3VnZ2VzdGlvbikpXG4gICAgICAuZmlsdGVyKChzdWdnZXN0aW9uKTogc3VnZ2VzdGlvbiBpcyBTdWdnZXN0aW9uID0+IHN1Z2dlc3Rpb24gIT0gbnVsbCk7XG5cbiAgICBjb25zdCB1c2VyRXZlbnRzOiBVc2VyRXZlbnRbXSA9IGRhdGE/LnVzZXJfZXZlbnRzXG4gICAgICAubWFwKChldmVudCkgPT4gdmFsaWRhdGVVc2VyRXZlbnQoZXZlbnQpKVxuICAgICAgLmZpbHRlcigoZXZlbnQpOiBldmVudCBpcyBVc2VyRXZlbnQgPT4gZXZlbnQgIT0gbnVsbCk7XG5cbiAgICAvLyBpZiBhIGZvcm0gaGFzIGFscmVhZHkgYmVlbiBzdWJtaXR0ZWQsIGRvbid0IHNob3cgaXQgaW4gdGhlIGNoYXQgaGlzdG9yeVxuICAgIGNvbnN0IGZvcm1TdWJtaXR0ZWRVc2VyRXZlbnRzRm9ybUlkcyA9IHVzZXJFdmVudHNcbiAgICAgIC5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuRm9ybVN1Ym1pdHRlZClcbiAgICAgIC5tYXAoKGV2ZW50KSA9PiBldmVudC5hdHRyaWJ1dGVzLmZvcm1SZXNwb25zZUlkKTtcblxuICAgIGNvbnN0IGFzc2lzdGFudE1lc3NhZ2VzOiBNZXNzYWdlW11bXSA9IHJlc3BvbnNlc1xuICAgICAgLm1hcCgodHVybikgPT5cbiAgICAgICAgdHVyblxuICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAocmVzcG9uc2UpID0+XG4gICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UuY2F0ZWdvcnkgPT09IFJlc3BvbnNlQ2F0ZWdvcnkuRm9ybSAmJlxuICAgICAgICAgICAgICAgIGZvcm1TdWJtaXR0ZWRVc2VyRXZlbnRzRm9ybUlkcy5pbmNsdWRlcyhyZXNwb25zZS5pZClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAubWFwKChyZXNwb25zZSkgPT4gbWVzc2FnZUZyb21SZXNwb25zZShyZXNwb25zZSkpXG4gICAgICAgICAgLmZpbHRlcigobWVzc2FnZSk6IG1lc3NhZ2UgaXMgTWVzc2FnZSA9PiBtZXNzYWdlICE9IG51bGwpXG4gICAgICApXG4gICAgICAuZmlsdGVyKCh0dXJuKSA9PiB0dXJuLmxlbmd0aCA+IDApO1xuXG4gICAgY29uc3QgdXNlck1lc3NhZ2VzOiBNZXNzYWdlW11bXSA9IHVzZXJFdmVudHNcbiAgICAgIC5tYXAoKGV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBbVXNlckV2ZW50Q2F0ZWdvcnkuUXVlcnlUeXBlZCwgVXNlckV2ZW50Q2F0ZWdvcnkuU2VhcmNoXS5pbmNsdWRlcyhcbiAgICAgICAgICAgIGV2ZW50LmNhdGVnb3J5XG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gW21lc3NhZ2VGcm9tUXVlcnlFdmVudChldmVudCldO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5TdWdnZXN0aW9uQ2xpY2tlZCkge1xuICAgICAgICAgIHJldHVybiBbbWVzc2FnZUZyb21TdWdnZXN0aW9uRXZlbnQoZXZlbnQsIHN1Z2dlc3Rpb25zKV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LkZvcm1TdWJtaXR0ZWQpIHtcbiAgICAgICAgICBjb25zdCBmb3JtUmVzcG9uc2UgPSByZXNwb25zZXNcbiAgICAgICAgICAgIC5mbGF0KClcbiAgICAgICAgICAgIC5maW5kKFxuICAgICAgICAgICAgICAocmVzcG9uc2UpID0+XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UuaWQgPT09IGV2ZW50LmF0dHJpYnV0ZXMuZm9ybVJlc3BvbnNlSWQgJiZcbiAgICAgICAgICAgICAgICBldmVudC5hdHRyaWJ1dGVzLmZvcm1UeXBlICE9PSBGb3JtVHlwZS5Fc2NhbGF0aW9uXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKGZvcm1SZXNwb25zZSAmJiBmb3JtUmVzcG9uc2UuY2F0ZWdvcnkgPT09IFJlc3BvbnNlQ2F0ZWdvcnkuRm9ybSkge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgbWVzc2FnZUZyb21Gb3JtU3VibWl0dGVkRXZlbnQoZXZlbnQsIGZvcm1SZXNwb25zZS5hdHRyaWJ1dGVzKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKG1lc3NhZ2UpOiBtZXNzYWdlIGlzIE1lc3NhZ2VbXSA9PiBtZXNzYWdlLmxlbmd0aCA+IDApO1xuXG4gICAgLy8gU29ydCB0aGUgbWVzc2FnZXMgY2hyb25vbG9naWNhbGx5IHRvIHJlY29uc3RydWN0IHRoZSBjaGF0IGhpc3RvcnlcbiAgICBjb25zdCBzb3J0ZWRNZXNzYWdlcyA9IFsuLi5hc3Npc3RhbnRNZXNzYWdlcywgLi4udXNlck1lc3NhZ2VzXS5zb3J0KFxuICAgICAgKGEsIGIpID0+XG4gICAgICAgIG5ldyBEYXRlKGFbMF0uY3JlYXRlZEF0KS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShiWzBdLmNyZWF0ZWRBdCkuZ2V0VGltZSgpXG4gICAgKTtcblxuICAgIHJldHVybiB7IHJlc3BvbnNlcywgdXNlckV2ZW50cywgc3VnZ2VzdGlvbnMsIG1lc3NhZ2VzOiBzb3J0ZWRNZXNzYWdlcyB9O1xuICB9O1xuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcGF5bG9hZFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgc3RhdGljIGlzU3VwcG9ydGVkRXZlbnQgPSBhc3luYyAoXG4gICAgcGF5bG9hZDogU3VwcG9ydGVkRXZlbnRSZXF1ZXN0XG4gICk6IFByb21pc2U8U3VwcG9ydGVkRXZlbnQ+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmF3UmVzcG9uc2UgPVxuICAgICAgICBhd2FpdCBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLmluZmVyZW5jZUFwaS52MVN1cHBvcnRlZEV2ZW50UG9zdFJhdyhcbiAgICAgICAgICB7XG4gICAgICAgICAgICBTdXBwb3J0ZWRFdmVudFJlcXVlc3Q6XG4gICAgICAgICAgICAgIGNvcmVTdXBwb3J0ZWRFdmVudFJlcXVlc3RUb0FwaVJlcXVlc3QocGF5bG9hZCksXG4gICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAvLyBHZXQgdGhlIGFjdHVhbCBIVFRQIHJlc3BvbnNlIEpTT05cbiAgICAgIGNvbnN0IGh0dHBSZXNwb25zZVRleHQgPSBhd2FpdCByYXdSZXNwb25zZS5yYXcudGV4dCgpO1xuICAgICAgY29uc3QgaHR0cFJlc3BvbnNlSnNvbiA9IEpTT04ucGFyc2UoaHR0cFJlc3BvbnNlVGV4dCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmh0dHBSZXNwb25zZUpzb24sXG4gICAgICAgIG51bWJlck9mUmV2aWV3czogaHR0cFJlc3BvbnNlSnNvbi5udW1fb2ZfcmV2aWV3cyxcbiAgICAgICAgbWVyY2hhbnRfdGFnczogaHR0cFJlc3BvbnNlSnNvbi5tZXJjaGFudF90YWdzIHx8IFtdLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIExvZ2dlci5sb2dFcnJvcihcIkZhaWxlZCB0byBnZXQgcmVzcG9uc2UgZm9yIHYxU3VwcG9ydGVkRXZlbnRQb3N0XCIsIHtcbiAgICAgICAgZXJyLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdXBwb3J0ZWQ6IGZhbHNlLFxuICAgICAgICByZWFkeTogZmFsc2UsXG4gICAgICAgIGNhdGVnb3J5OiB1bmRlZmluZWQsXG4gICAgICAgIGNvbGxlY3Rpb25zOiBbXSxcbiAgICAgICAgbnVtYmVyT2ZSZXZpZXdzOiB1bmRlZmluZWQsXG4gICAgICAgIHRvcF9jYXRlZ29yeTogdW5kZWZpbmVkLFxuICAgICAgICBtZXJjaGFudF90YWdzOiBbXSxcbiAgICAgIH07XG4gICAgfVxuICB9O1xuXG4gIHN0YXRpYyBpZGVudGlmeVVzZXIgPSBhc3luYyAoXG4gICAgc3BpZmZ5VXNlcklkOiBzdHJpbmcsXG4gICAgbWVyY2hhbnRVc2VySWQ6IHN0cmluZyxcbiAgICB1YURldGFpbHM6IENsaWVudERldGFpbHNcbiAgKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuZGVmYXVsdEFwaS52MUFuYWx5dGljc0lkZW50aWZ5UG9zdCh7XG4gICAgICAgIEFuYWx5dGljc0lkZW50aWZ5UmVxdWVzdDoge1xuICAgICAgICAgIHVzZXJfaWQ6IHNwaWZmeVVzZXJJZCxcbiAgICAgICAgICBvc19uYW1lOiB1YURldGFpbHMub3MsXG4gICAgICAgICAgb3NfdmVyc2lvbjogdWFEZXRhaWxzLm9zVmVyc2lvbixcbiAgICAgICAgICBwbGF0Zm9ybTogdWFEZXRhaWxzLm9zLFxuICAgICAgICAgIGRldmljZV9pZDogdWFEZXRhaWxzLmRldmljZU1vZGVsLFxuICAgICAgICAgIGRldmljZV9icmFuZDogdWFEZXRhaWxzLmRldmljZUJyYW5kLFxuICAgICAgICAgIGRldmljZV9tYW51ZmFjdHVyZXI6IHVhRGV0YWlscy5kZXZpY2VNYW51ZmFjdHVyZXIsXG4gICAgICAgICAgZGV2aWNlX21vZGVsOiB1YURldGFpbHMuZGV2aWNlTW9kZWwsXG4gICAgICAgICAgdXNlcl9wcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjZHBfdXNlcl9pZDogbWVyY2hhbnRVc2VySWQsXG4gICAgICAgICAgICBicm93c2VyOiB1YURldGFpbHMuYnJvd3NlcixcbiAgICAgICAgICAgIGJyb3dzZXJfdmVyc2lvbjogdWFEZXRhaWxzLmJyb3dzZXJWZXJzaW9uLFxuICAgICAgICAgICAgdXNlcl9hZ2VudDogdWFEZXRhaWxzLnVzZXJBZ2VudCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBMb2dnZXIubG9nRXJyb3IoXCJGYWlsZWQgdG8gaWRlbnRpZnkgdXNlclwiLCBlcnIpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIHN0YXRpYyBtYXBDb250ZXh0U291cmNlVG9WMU9yZ0NvbmZpZ0dldFNvdXJjZSA9IChcbiAgICBzb3VyY2U6IENvbnRleHRTb3VyY2VFbnVtIHwgdW5kZWZpbmVkXG4gICk6IFYxT3JnQ29uZmlnR2V0U291cmNlRW51bSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgaWYgKHNvdXJjZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHN3aXRjaCAoc291cmNlKSB7XG4gICAgICBjYXNlIENvbnRleHRTb3VyY2VFbnVtLkZvcms6XG4gICAgICAgIHJldHVybiBWMU9yZ0NvbmZpZ0dldFNvdXJjZUVudW0uRm9yaztcbiAgICAgIGNhc2UgQ29udGV4dFNvdXJjZUVudW0uUGxheWdyb3VuZDpcbiAgICAgICAgcmV0dXJuIFYxT3JnQ29uZmlnR2V0U291cmNlRW51bS5QbGF5Z3JvdW5kO1xuICAgICAgY2FzZSBDb250ZXh0U291cmNlRW51bS5BcHA6XG4gICAgICAgIHJldHVybiBWMU9yZ0NvbmZpZ0dldFNvdXJjZUVudW0uQXBwO1xuICAgICAgY2FzZSBDb250ZXh0U291cmNlRW51bS5UZXN0OlxuICAgICAgICByZXR1cm4gVjFPcmdDb25maWdHZXRTb3VyY2VFbnVtLlRlc3Q7XG4gICAgICBjYXNlIENvbnRleHRTb3VyY2VFbnVtLkV2YWw6XG4gICAgICAgIHJldHVybiBWMU9yZ0NvbmZpZ0dldFNvdXJjZUVudW0uVGVzdDtcbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgaWYgbmV3IHZhbHVlcyBhcmUgYWRkZWQgdG8gQ29udGV4dFNvdXJjZUVudW0sIHdlIGNhdGNoIGl0XG4gICAgICAgIGNvbnN0IGV4aGF1c3RpdmVDaGVjazogbmV2ZXIgPSBzb3VyY2U7XG4gICAgICAgIHJldHVybiBleGhhdXN0aXZlQ2hlY2s7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHN0YXRpYyBnZXRPcmdDb25maWcgPSBhc3luYyAoXG4gICAgdXNlcl9pZDogc3RyaW5nXG4gICk6IFByb21pc2U8T3JnQ29uZmlnIHwgdW5kZWZpbmVkPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGF0b21TdG9yZSA9IGdldEF0b21TdG9yZSgpO1xuICAgICAgY29uc3QgcmVhY3RBcHBOYW1lID0gYXRvbVN0b3JlLmdldChyZWFjdEFwcE5hbWVBdG9tKTtcbiAgICAgIGNvbnN0IGNvbnRleHRTb3VyY2UgPSBhdG9tU3RvcmUuZ2V0KGNvbnRleHRTb3VyY2VBdG9tKTtcbiAgICAgIGNvbnN0IGZlYXR1cmVGbGFnU2VydmljZSA9IGF0b21TdG9yZS5nZXQoZmVhdHVyZUZsYWdTZXJ2aWNlQXRvbSk7IC8vIEdldCBmZWF0dXJlRmxhZ1NlcnZpY2VcbiAgICAgIGNvbnN0IHJlcXVlc3Q6IFYxT3JnQ29uZmlnR2V0UmVxdWVzdCA9IHtcbiAgICAgICAgbmFtZXNwYWNlOiByZWFjdEFwcE5hbWUsXG4gICAgICAgIHVzZXJfaWQsXG4gICAgICAgIHNvdXJjZTogdGhpcy5tYXBDb250ZXh0U291cmNlVG9WMU9yZ0NvbmZpZ0dldFNvdXJjZShjb250ZXh0U291cmNlKSxcbiAgICAgICAgaW5jbHVkZV9leHBlcmltZW50czogT2JqZWN0LnZhbHVlcyhQcm9kdWN0RXhwZXJpbWVudCksXG4gICAgICAgIGluY2x1ZGVfZmVhdHVyZV9nYXRlczogT2JqZWN0LmVudHJpZXMoXG4gICAgICAgICAgZmVhdHVyZUZsYWdTZXJ2aWNlPy5mZWF0dXJlRmxhZ1NlcnZpY2U/LmdldEZlYXR1cmVGbGFncygpIHx8IHt9XG4gICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKChbLCBpc0VuYWJsZWRdKSA9PiBpc0VuYWJsZWQpXG4gICAgICAgICAgLm1hcCgoW2ZlYXR1cmVHYXRlTmFtZV0pID0+IGZlYXR1cmVHYXRlTmFtZSksIC8vIFVzZSBmZWF0dXJlRmxhZ1NlcnZpY2VcbiAgICAgIH07XG4gICAgICBjb25zdCByZXNwb25zZSA9XG4gICAgICAgIGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuZGVmYXVsdEFwaS52MU9yZ0NvbmZpZ0dldChcbiAgICAgICAgICByZXF1ZXN0XG4gICAgICAgICk7XG5cbiAgICAgIHJldHVybiB2YWxpZGF0ZU9yZ0NvbmZpZ1Jlc3VsdHMocmVzcG9uc2UpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgTG9nZ2VyLmxvZ0Vycm9yKGBGYWlsZWQgdG8gZ2V0IG9yZyBjb25maWdgLCBlcnIsIHsgZXJyIH0pO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG5cbiAgc3RhdGljIGFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvbiA9IGFzeW5jIChcbiAgICBzcGlmZnlVc2VySWQ6IHN0cmluZyxcbiAgICBlbWFpbDogc3RyaW5nLFxuICAgIGN1c3RvbWVyU2VydmljZVByb3ZpZGVyOiBDdXN0b21lclNlcnZpY2VQcm92aWRlclxuICApID0+IHtcbiAgICBMb2dnZXIubG9nSW5mbyhcbiAgICAgIGBhZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb24gLSB1c2VyX2lkPSR7c3BpZmZ5VXNlcklkfSBlbWFpbD0ke2VtYWlsfSBjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyPSR7Y3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXJ9YFxuICAgICk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuY3VzdG9tZXJTZXJ2aWNlQXBpLnYxQ3VzdHNlcnZpY2VBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25Qb3N0KFxuICAgICAgICB7XG4gICAgICAgICAgQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVxdWVzdDoge1xuICAgICAgICAgICAgc3BpZmZ5X3VzZXJfaWQ6IHNwaWZmeVVzZXJJZCxcbiAgICAgICAgICAgIGVtYWlsLFxuICAgICAgICAgICAgY3VzdG9tZXJfc2VydmljZV9wcm92aWRlcjogY3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIExvZ2dlci5sb2dFcnJvcihcIkZhaWxlZCB0byBhZGQgbm90ZSB0byBsYXRlc3QgY29udmVyc2F0aW9uXCIsIHsgZXJyIH0pO1xuICAgIH1cbiAgfTtcblxuICBzdGF0aWMgZ2V0Q3VzdG9tZXJTZXJ2aWNlQXBpID0gKCkgPT5cbiAgICBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLmN1c3RvbWVyU2VydmljZUFwaTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29tbWVyY2VBcGlDbGllbnQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBeURBLGVBQWUsa0JBQWtCLE9BQXNCO0FBQ3JELEtBQUk7QUFDRixTQUFPLE1BQU0sTUFBTSxTQUFTLE1BQU07U0FDNUI7QUFDTixTQUFPLEVBQUU7OztBQUliLGVBQWUsOEJBQThCLFVBQWtCLE9BQWdCO0FBQzdFLEtBQUks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
|