@arena-im/react-sdk-auth 1.14.0 → 1.14.1
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/config/index.d.ts +1 -0
- package/config/index.d.ts.map +1 -1
- package/config/runtime-environment.d.ts +4 -0
- package/config/runtime-environment.d.ts.map +1 -0
- package/context/config-provider.d.ts.map +1 -1
- package/index.d.ts +1 -1
- package/index.esm.js +2 -2
- package/index.umd.js +2 -2
- package/package.json +1 -1
- package/utils/authenticated-request.d.ts.map +1 -1
package/config/index.d.ts
CHANGED
|
@@ -8,4 +8,5 @@ export interface Config {
|
|
|
8
8
|
}
|
|
9
9
|
export type Environment = 'development' | 'production';
|
|
10
10
|
export declare const getConfig: (environment: Environment) => Config;
|
|
11
|
+
export { setRuntimeEnvironment, getRuntimeEnvironment, } from './runtime-environment';
|
|
11
12
|
//# sourceMappingURL=index.d.ts.map
|
package/config/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,aAAa,GAAG,YAAY,CAAC;IAC1C,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,MAAM,WAAW,GAAG,aAAa,GAAG,YAAY,CAAC;AAEvD,eAAO,MAAM,SAAS,GAAI,aAAa,WAAW,KAAG,MAyBpD,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,aAAa,GAAG,YAAY,CAAC;IAC1C,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,MAAM,WAAW,GAAG,aAAa,GAAG,YAAY,CAAC;AAEvD,eAAO,MAAM,SAAS,GAAI,aAAa,WAAW,KAAG,MAyBpD,CAAC;AAEF,OAAO,EACL,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-environment.d.ts","sourceRoot":"","sources":["../../src/config/runtime-environment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAItC,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAEpE;AAED,wBAAgB,qBAAqB,IAAI,WAAW,CAEnD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-provider.d.ts","sourceRoot":"","sources":["../../src/context/config-provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6B,SAAS,
|
|
1
|
+
{"version":3,"file":"config-provider.d.ts","sourceRoot":"","sources":["../../src/context/config-provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6B,SAAS,EAAa,MAAM,OAAO,CAAC;AACxE,OAAO,EAAa,WAAW,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAG3D,UAAU,iBAAiB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,WAAW,CAAC;CAC1B;AAID,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,eAAO,MAAM,cAAc,GAAI,4BAG5B,mBAAmB,4CAYrB,CAAC;AAEF,eAAO,MAAM,SAAS,yBAMrB,CAAC"}
|
package/index.d.ts
CHANGED
|
@@ -250,4 +250,4 @@ declare function authenticatedRequest(method: string, url: string, options?: Req
|
|
|
250
250
|
|
|
251
251
|
export { AnalyticsEvent, AnalyticsWidgetType, AuthCookie, AuthProvider, TokenType, authenticatedRequest, useAuthDialog, usePublicProfile, useRefreshToken, useRefreshedTokenLoaded, useToken, useTokenEventListener, useTokenStore, useTokenValue, useTokens, useUpdateProfile, useUser, useUserActions, useUserStore, useUserWithProfile };
|
|
252
252
|
export type { IdentityProps, RudderContext, TokenPair, TokensMap, TrackOptions, TrackProps };
|
|
253
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZXMiOlsiLi4vc3JjL3NlcnZpY2VzL2F1dGgvdHlwZXMudHMiLCIuLi9zcmMvdHlwZXMvYW5hbHl0aWNzLnRzIiwiLi4vc3JjL2NvbnRleHQvYXV0aC1kaWFsb2ctcHJvdmlkZXIudHN4IiwiLi4vc3JjL2NvbnRleHQvaW5kZXgudHN4IiwiLi4vc3JjL3R5cGVzL3Rva2VuLnRzIiwiLi4vc3JjL3N0b3Jlcy90b2tlbi1zdG9yZS50cyIsIi4uL3NyYy9zZXJ2aWNlcy9wcm9maWxlL3R5cGVzLnRzIiwiLi4vc3JjL2NvbmZpZy9pbmRleC50cyIsIi4uL3NyYy9zdG9yZXMvdXNlci1zdG9yZS50cyIsIi4uL3NyYy9ob29rcy91c2UtdG9rZW5zLnRzIiwiLi4vc3JjL2hvb2tzL3VzZS11c2VyLnRzIiwiLi4vc3JjL2hvb2tzL3VzZS10b2tlbi1ldmVudC1saXN0ZW5lci50cyIsIi4uL3NyYy91dGlscy9hdXRoZW50aWNhdGVkLXJlcXVlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBFeGNoYW5nZVRva2Vuc1Jlc3BvbnNlIHtcbiAgYWNjZXNzX3Rva2VuOiBzdHJpbmc7XG4gIGV4cGlyZXNJbjogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJQcm9wcyB7XG4gIHVpZDogc3RyaW5nO1xuICBlbWFpbDogc3RyaW5nO1xuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xuICBwaG90b1VSTD86IHN0cmluZztcbiAgaGFuZGxlPzogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBTc29Vc2VyUHJvcHMge1xuICBzdWI6IHN0cmluZztcbiAgZW1haWw6IHN0cmluZztcbiAgZGlzcGxheU5hbWU6IHN0cmluZztcbiAgcGhvdG9VUkw/OiBzdHJpbmc7XG4gIGhhbmRsZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTc29WMkV4Y2hhbmdlUmVzcG9uc2Uge1xuICB0b2tlbjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25JblJlc3BvbnNlIHtcbiAgZGF0YToge1xuICAgIHVzZXI6IFVzZXJQcm9wcztcbiAgICB0b2tlbjogc3RyaW5nO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpcmViYXNlVXNlciB7XG4gIG5hbWU6IHN0cmluZztcbiAgcGljdHVyZTogc3RyaW5nO1xuICBvcmlnaW5hbEVtYWlsOiBzdHJpbmc7XG4gIHNhZmVEaXNwbGF5TmFtZTogc3RyaW5nO1xuICBzYWZlUGhvdG9VUkw6IHN0cmluZztcbiAgaW5pdGlhbGl6ZWQ6IGJvb2xlYW47XG4gIGxlZ2FjeUlEOiBzdHJpbmc7XG4gIGhhbmRsZTogc3RyaW5nO1xuICBpc3M6IHN0cmluZztcbiAgYXVkOiBzdHJpbmc7XG4gIGF1dGhfdGltZTogbnVtYmVyO1xuICB1c2VyX2lkOiBzdHJpbmc7XG4gIHN1Yjogc3RyaW5nO1xuICBpYXQ6IG51bWJlcjtcbiAgZXhwOiBudW1iZXI7XG4gIGVtYWlsOiBzdHJpbmc7XG4gIGVtYWlsX3ZlcmlmaWVkOiBib29sZWFuO1xuICBmaXJlYmFzZToge1xuICAgIGlkZW50aXRpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPjtcbiAgICBzaWduX2luX3Byb3ZpZGVyOiBzdHJpbmc7XG4gIH07XG59XG4iLCJ0eXBlIE51bGxhYmxlPFQ+ID0gVCB8IG51bGw7XG5cbmV4cG9ydCBlbnVtIEFuYWx5dGljc1dpZGdldFR5cGUge1xuICBBdmF0YXJQcm9maWxlID0gJ2F2YXRhci1wcm9maWxlJyxcbiAgQXZhdGFyQ2hhdCA9ICdhdmF0YXItY2hhdCcsXG4gIENvbW1lbnRzID0gJ2NvbW1lbnRzJyxcbiAgR2xvYmFsUHJvZmlsZSA9ICdnbG9iYWwtcHJvZmlsZScsXG4gIEdyb3VwQ2hhdCA9ICdncm91cC1jaGF0JyxcbiAgUG9sbHMgPSAncG9sbHMnLFxuICBVbml2ZXJzYWxTbmlwcGV0ID0gJ3VuaXZlcnNhbC1zbmlwcGV0Jyxcbn1cblxuZXhwb3J0IHR5cGUgVHJhY2tPcHRpb25zID0ge1xuICB3aWRnZXRJZDogc3RyaW5nIHwgbnVsbDtcbiAgd2lkZ2V0VHlwZTogQW5hbHl0aWNzV2lkZ2V0VHlwZTtcbiAgc2l0ZUlkOiBzdHJpbmc7XG4gIHJzV3JpdGVLZXk6IHN0cmluZztcbiAgcnNEYXRhUGxhbmVVcmw6IHN0cmluZztcbiAgdHJpZ2dlcjogc3RyaW5nO1xufTtcblxuZXhwb3J0IGVudW0gQW5hbHl0aWNzRXZlbnQge1xuICBBdXRoZW50aWNhdGlvbkNvbXBsZXRlZCA9ICdBdXRoZW50aWNhdGlvbiBDb21wbGV0ZWQnLFxuICBBdXRoZW50aWNhdGlvblN0YXJ0ZWQgPSAnQXV0aGVudGljYXRpb24gU3RhcnRlZCcsXG4gIEF1dGhlbnRpY2F0aW9uVmlld2VkID0gJ0F1dGhlbnRpY2F0aW9uIFZpZXdlZCcsXG59XG5cbmV4cG9ydCB0eXBlIFRyYWNrUHJvcHMgPSBOdWxsYWJsZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm9wcyB7XG4gIGFub255bW91c0lkPzogc3RyaW5nO1xuICB1c2VySWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVkZGVyQ29udGV4dCB7XG4gIGNoYW5uZWw6ICd3ZWInO1xuICBhbm9ueW1vdXNJZD86IHN0cmluZztcbiAgbG9jYWxlPzogc3RyaW5nO1xuICB1c2VyQWdlbnQ/OiBzdHJpbmc7XG4gIHRpbWV6b25lPzogc3RyaW5nO1xuICBvcz86IHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uPzogc3RyaW5nIH07XG4gIHBhZ2U/OiB7XG4gICAgcGF0aD86IHN0cmluZztcbiAgICByZWZlcnJlcj86IHN0cmluZztcbiAgICByZWZlcnJpbmdfZG9tYWluPzogc3RyaW5nO1xuICAgIHNlYXJjaD86IHN0cmluZztcbiAgICB0aXRsZT86IHN0cmluZztcbiAgICB1cmw/OiBzdHJpbmc7XG4gICAgaW5pdGlhbF9yZWZlcnJlcj86IHN0cmluZztcbiAgICBpbml0aWFsX3JlZmVycmluZ19kb21haW4/OiBzdHJpbmc7XG4gIH07XG4gIHNjcmVlbj86IHtcbiAgICBkZW5zaXR5PzogbnVtYmVyO1xuICAgIGhlaWdodD86IG51bWJlcjtcbiAgICB3aWR0aD86IG51bWJlcjtcbiAgICBpbm5lckhlaWdodD86IG51bWJlcjtcbiAgICBpbm5lcldpZHRoPzogbnVtYmVyO1xuICB9O1xuICBjYW1wYWlnbj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG4iLCJpbXBvcnQgeyBjcmVhdGVDb250ZXh0LCB1c2VDb250ZXh0LCB1c2VTdGF0ZSwgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgVXNlclByb3BzIH0gZnJvbSAnLi4vc2VydmljZXMvYXV0aC90eXBlcyc7XG5pbXBvcnQgeyBUcmFja09wdGlvbnMgfSBmcm9tICcuLi90eXBlcy9hbmFseXRpY3MnO1xuXG5pbnRlcmZhY2UgQXV0aERpYWxvZ0NvbnRleHRUeXBlIHtcbiAgaXNPcGVuOiBib29sZWFuO1xuICBhcHBOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGFwcERlc2NyaXB0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGxhbmd1YWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHRyYWNrT3B0aW9uczogVHJhY2tPcHRpb25zIHwgdW5kZWZpbmVkO1xuICBvbkF1dGhDb21wbGV0ZWQ6ICgodXNlcjogVXNlclByb3BzKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgb3BlbkRpYWxvZzogKG9wdGlvbnM6IE9wZW5EaWFsb2dPcHRpb25zKSA9PiB2b2lkO1xuICBjbG9zZURpYWxvZzogKCkgPT4gdm9pZDtcbiAgb25PcGVuQ2hhbmdlOiAob3BlbjogYm9vbGVhbikgPT4gdm9pZDtcbn1cblxuY29uc3QgQXV0aERpYWxvZ0NvbnRleHQgPSBjcmVhdGVDb250ZXh0PEF1dGhEaWFsb2dDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4oXG4gIHVuZGVmaW5lZFxuKTtcblxudHlwZSBPcGVuRGlhbG9nT3B0aW9ucyA9IHtcbiAgdHJhY2tPcHRpb25zOiBUcmFja09wdGlvbnM7XG4gIGFwcE5hbWU/OiBzdHJpbmc7XG4gIGxhbmd1YWdlPzogc3RyaW5nO1xuICBhcHBEZXNjcmlwdGlvbj86IHN0cmluZztcbiAgb25BdXRoQ29tcGxldGVkPzogKCkgPT4gKHVzZXI6IFVzZXJQcm9wcykgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCBjb25zdCBBdXRoRGlhbG9nUHJvdmlkZXIgPSAoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuOiBSZWFjdE5vZGUgfSkgPT4ge1xuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbYXBwTmFtZSwgc2V0QXBwTmFtZV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIGNvbnN0IFthcHBEZXNjcmlwdGlvbiwgc2V0QXBwRGVzY3JpcHRpb25dID0gdXNlU3RhdGU8c3RyaW5nIHwgdW5kZWZpbmVkPihcbiAgICB1bmRlZmluZWRcbiAgKTtcbiAgY29uc3QgW29uQXV0aENvbXBsZXRlZCwgc2V0T25BdXRoQ29tcGxldGVkXSA9IHVzZVN0YXRlPFxuICAgICgodXNlcjogVXNlclByb3BzKSA9PiB2b2lkKSB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIGNvbnN0IFt0cmFja09wdGlvbnMsIHNldFRyYWNrT3B0aW9uc10gPSB1c2VTdGF0ZTxUcmFja09wdGlvbnMgfCB1bmRlZmluZWQ+KFxuICAgIHVuZGVmaW5lZFxuICApO1xuICBjb25zdCBbbGFuZ3VhZ2UsIHNldExhbmd1YWdlXSA9IHVzZVN0YXRlPHN0cmluZyB8IHVuZGVmaW5lZD4oXG4gICAgdW5kZWZpbmVkXG4gICk7XG4gIGNvbnN0IG9wZW5EaWFsb2cgPSAoe1xuICAgIHRyYWNrT3B0aW9ucyxcbiAgICBhcHBOYW1lLFxuICAgIGxhbmd1YWdlLFxuICAgIGFwcERlc2NyaXB0aW9uLFxuICAgIG9uQXV0aENvbXBsZXRlZCxcbiAgfTogT3BlbkRpYWxvZ09wdGlvbnMpID0+IHtcbiAgICBzZXRJc09wZW4odHJ1ZSk7XG4gICAgc2V0VHJhY2tPcHRpb25zKHRyYWNrT3B0aW9ucyk7XG4gICAgc2V0QXBwTmFtZShhcHBOYW1lKTtcbiAgICBzZXRMYW5ndWFnZShsYW5ndWFnZSk7XG4gICAgc2V0QXBwRGVzY3JpcHRpb24oYXBwRGVzY3JpcHRpb24pO1xuICAgIHNldE9uQXV0aENvbXBsZXRlZChvbkF1dGhDb21wbGV0ZWQpO1xuICB9O1xuXG4gIGNvbnN0IGNsb3NlRGlhbG9nID0gKCkgPT4gc2V0SXNPcGVuKGZhbHNlKTtcbiAgY29uc3Qgb25PcGVuQ2hhbmdlID0gKG9wZW46IGJvb2xlYW4pID0+IHNldElzT3BlbihvcGVuKTtcblxuICByZXR1cm4gKFxuICAgIDxBdXRoRGlhbG9nQ29udGV4dC5Qcm92aWRlclxuICAgICAgdmFsdWU9e3tcbiAgICAgICAgaXNPcGVuLFxuICAgICAgICBhcHBOYW1lLFxuICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgYXBwRGVzY3JpcHRpb24sXG4gICAgICAgIHRyYWNrT3B0aW9ucyxcbiAgICAgICAgb25BdXRoQ29tcGxldGVkLFxuICAgICAgICBvcGVuRGlhbG9nLFxuICAgICAgICBjbG9zZURpYWxvZyxcbiAgICAgICAgb25PcGVuQ2hhbmdlLFxuICAgICAgfX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9BdXRoRGlhbG9nQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VBdXRoRGlhbG9nID0gKCkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChBdXRoRGlhbG9nQ29udGV4dCk7XG4gIGlmICghY29udGV4dCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlQXV0aERpYWxvZyBtdXN0IGJlIHVzZWQgd2l0aGluIGFuIEF1dGhEaWFsb2dQcm92aWRlcicpO1xuICB9XG4gIHJldHVybiBjb250ZXh0O1xufTtcbiIsImltcG9ydCB7IEF1dGhEaWFsb2dQcm92aWRlciB9IGZyb20gJy4vYXV0aC1kaWFsb2ctcHJvdmlkZXInO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIgfSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO1xuaW1wb3J0IHsgVXNlclByb3ZpZGVyIH0gZnJvbSAnLi91c2VyLXByb3ZpZGVyJztcbmltcG9ydCB7IENvbmZpZ1Byb3ZpZGVyIH0gZnJvbSAnLi9jb25maWctcHJvdmlkZXInO1xuaW1wb3J0IEF1dGhEaWFsb2cgZnJvbSAnLi4vZGlhbG9nJztcbmltcG9ydCB7IEFub255bW91c1Rva2VuUHJvdmlkZXIgfSBmcm9tICcuL2Fub255bW91cy10b2tlbi1wcm92aWRlcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBBdXRoUHJvdmlkZXIoe1xuICBjaGlsZHJlbixcbiAgcXVlcnlDbGllbnQsXG4gIGVudmlyb25tZW50LFxufToge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICBxdWVyeUNsaWVudD86IFF1ZXJ5Q2xpZW50O1xuICBlbnZpcm9ubWVudD86ICdwcm9kdWN0aW9uJyB8ICdkZXZlbG9wbWVudCc7XG59KSB7XG4gIHF1ZXJ5Q2xpZW50ID0gcXVlcnlDbGllbnQgfHwgbmV3IFF1ZXJ5Q2xpZW50KCk7XG5cbiAgcmV0dXJuIChcbiAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgIDxDb25maWdQcm92aWRlciBlbnZpcm9ubWVudD17ZW52aXJvbm1lbnR9PlxuICAgICAgICA8VXNlclByb3ZpZGVyPlxuICAgICAgICAgIDxBdXRoRGlhbG9nUHJvdmlkZXI+XG4gICAgICAgICAgICA8QW5vbnltb3VzVG9rZW5Qcm92aWRlcj5cbiAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICA8QXV0aERpYWxvZyAvPlxuICAgICAgICAgICAgPC9Bbm9ueW1vdXNUb2tlblByb3ZpZGVyPlxuICAgICAgICAgIDwvQXV0aERpYWxvZ1Byb3ZpZGVyPlxuICAgICAgICA8L1VzZXJQcm92aWRlcj5cbiAgICAgIDwvQ29uZmlnUHJvdmlkZXI+XG4gICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgeyB1c2VBdXRoRGlhbG9nIH0gZnJvbSAnLi9hdXRoLWRpYWxvZy1wcm92aWRlcic7XG4iLCJleHBvcnQgZW51bSBUb2tlblR5cGUge1xuICBBTk9OWU1PVVMgPSAnYW5vbnltb3VzJyxcbiAgR1VFU1QgPSAnZ3Vlc3QnLFxuICBQVUJMSUMgPSAncHVibGljJyxcbiAgQ1VTVE9NID0gJ2N1c3RvbScsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5QYWlyIHtcbiAgaWRUb2tlbjogc3RyaW5nIHwgbnVsbDtcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IHR5cGUgVG9rZW5zTWFwID0gUmVjb3JkPFRva2VuVHlwZSwgVG9rZW5QYWlyPjtcblxuZXhwb3J0IGVudW0gQXV0aENvb2tpZSB7XG4gIFBVQkxJQ19JRF9UT0tFTiA9ICdhcmVuYS1hdXRoLXB1YmxpYy1pZC10b2tlbicsXG4gIFBVQkxJQ19SRUZSRVNIX1RPS0VOID0gJ2FyZW5hLWF1dGgtcHVibGljLXJlZnJlc2gtdG9rZW4nLFxuICBBTk9OWU1PVVNfSURfVE9LRU4gPSAnYXJlbmEtYXV0aC1hbm9ueW1vdXMtaWQtdG9rZW4nLFxuICBHVUVTVF9JRF9UT0tFTiA9ICdhcmVuYS1hdXRoLWd1ZXN0LWlkLXRva2VuJyxcbiAgQ1VTVE9NX0lEX1RPS0VOID0gJ2FyZW5hLWF1dGgtY3VzdG9tLWlkLXRva2VuJyxcbiAgQ1VTVE9NX1VTRVIgPSAnYXJlbmEtYXV0aC1jdXN0b20tdXNlcicsXG59XG4iLCJpbXBvcnQgeyBjcmVhdGUgfSBmcm9tICd6dXN0YW5kJztcbmltcG9ydCB7IHN1YnNjcmliZVdpdGhTZWxlY3RvciB9IGZyb20gJ3p1c3RhbmQvbWlkZGxld2FyZSc7XG5pbXBvcnQgQ29va2llcyBmcm9tICdqcy1jb29raWUnO1xuaW1wb3J0IHsgQXV0aENvb2tpZSwgVG9rZW5zTWFwLCBUb2tlblR5cGUgfSBmcm9tICcuLi90eXBlcy90b2tlbic7XG5pbXBvcnQgeyBkaXNwYXRjaFRva2VuVXBkYXRlZEV2ZW50IH0gZnJvbSAnLi4vdXRpbHMvZG9tLWV2ZW50cyc7XG5cbmludGVyZmFjZSBUb2tlblN0b3JlIHtcbiAgdG9rZW5zOiBUb2tlbnNNYXA7XG4gIGdldFRva2VuOiAodHlwZTogVG9rZW5UeXBlKSA9PiBzdHJpbmcgfCBudWxsO1xuICBnZXRNb3N0UHJpdmlsZWdlZFRva2VuOiAoXG4gICAgb3B0aW9ucz86IEFycmF5PFRva2VuVHlwZT5cbiAgKSA9PiB7IHR5cGU6IFRva2VuVHlwZTsgaWRUb2tlbjogc3RyaW5nIH0gfCBudWxsO1xuICBnZXRSZWZyZXNoVG9rZW46ICh0eXBlOiBUb2tlblR5cGUpID0+IHN0cmluZyB8IG51bGw7XG4gIHVwZGF0ZVB1YmxpY1Rva2VuczogKFxuICAgIGlkVG9rZW46IHN0cmluZyxcbiAgICByZWZyZXNoVG9rZW46IHN0cmluZyxcbiAgICBzb3VyY2U/OiBzdHJpbmdcbiAgKSA9PiB2b2lkO1xuICB1cGRhdGVBbm9ueW1vdXNUb2tlbjogKGlkVG9rZW46IHN0cmluZywgc291cmNlPzogc3RyaW5nKSA9PiB2b2lkO1xuICB1cGRhdGVHdWVzdFRva2VuczogKGlkVG9rZW46IHN0cmluZywgc291cmNlPzogc3RyaW5nKSA9PiB2b2lkO1xuICB1cGRhdGVDdXN0b21Ub2tlbjogKGlkVG9rZW46IHN0cmluZywgc291cmNlPzogc3RyaW5nKSA9PiB2b2lkO1xuICBjbGVhclRva2VuczogKHNvdXJjZT86IHN0cmluZykgPT4gdm9pZDtcbiAgY2xlYXJQdWJsaWNUb2tlbnM6IChzb3VyY2U/OiBzdHJpbmcpID0+IHZvaWQ7XG4gIGNsZWFyQW5vbnltb3VzVG9rZW5zOiAoc291cmNlPzogc3RyaW5nKSA9PiB2b2lkO1xuICBjbGVhckd1ZXN0VG9rZW5zOiAoc291cmNlPzogc3RyaW5nKSA9PiB2b2lkO1xuICBjbGVhckN1c3RvbVRva2VuczogKHNvdXJjZT86IHN0cmluZykgPT4gdm9pZDtcbiAgc2lsZW50VXBkYXRlUHVibGljVG9rZW5zOiAoaWRUb2tlbjogc3RyaW5nLCByZWZyZXNoVG9rZW46IHN0cmluZykgPT4gdm9pZDtcbiAgc2lsZW50VXBkYXRlQW5vbnltb3VzVG9rZW46IChpZFRva2VuOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHNpbGVudFVwZGF0ZUd1ZXN0VG9rZW5zOiAoaWRUb2tlbjogc3RyaW5nKSA9PiB2b2lkO1xuICBzaWxlbnRVcGRhdGVDdXN0b21Ub2tlbjogKGlkVG9rZW46IHN0cmluZykgPT4gdm9pZDtcbiAgc2lsZW50Q2xlYXJQdWJsaWNUb2tlbnM6ICgpID0+IHZvaWQ7XG4gIHNpbGVudENsZWFyQW5vbnltb3VzVG9rZW5zOiAoKSA9PiB2b2lkO1xuICBzaWxlbnRDbGVhckd1ZXN0VG9rZW5zOiAoKSA9PiB2b2lkO1xuICBzaWxlbnRDbGVhckN1c3RvbVRva2VuczogKCkgPT4gdm9pZDtcbn1cblxuY29uc3QgZGVmYXVsdFRva2VuczogVG9rZW5zTWFwID0ge1xuICBwdWJsaWM6IHtcbiAgICBpZFRva2VuOiBDb29raWVzLmdldChBdXRoQ29va2llLlBVQkxJQ19JRF9UT0tFTikgfHwgbnVsbCxcbiAgICByZWZyZXNoVG9rZW46IENvb2tpZXMuZ2V0KEF1dGhDb29raWUuUFVCTElDX1JFRlJFU0hfVE9LRU4pIHx8IG51bGwsXG4gIH0sXG4gIGFub255bW91czoge1xuICAgIGlkVG9rZW46IENvb2tpZXMuZ2V0KEF1dGhDb29raWUuQU5PTllNT1VTX0lEX1RPS0VOKSB8fCBudWxsLFxuICB9LFxuICBndWVzdDoge1xuICAgIGlkVG9rZW46IENvb2tpZXMuZ2V0KEF1dGhDb29raWUuR1VFU1RfSURfVE9LRU4pIHx8IG51bGwsXG4gIH0sXG4gIGN1c3RvbToge1xuICAgIGlkVG9rZW46IENvb2tpZXMuZ2V0KEF1dGhDb29raWUuQ1VTVE9NX0lEX1RPS0VOKSB8fCBudWxsLFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IHVzZVRva2VuU3RvcmUgPSBjcmVhdGU8VG9rZW5TdG9yZT4oKShcbiAgc3Vic2NyaWJlV2l0aFNlbGVjdG9yKChzZXQsIGdldCkgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZVB1YmxpY1Rva2Vuc0hlbHBlciA9IChcbiAgICAgIGlkVG9rZW46IHN0cmluZyxcbiAgICAgIHJlZnJlc2hUb2tlbjogc3RyaW5nLFxuICAgICAgZGlzcGF0Y2hFdmVudDogYm9vbGVhbiA9IHRydWUsXG4gICAgICBzb3VyY2U/OiBzdHJpbmdcbiAgICApID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgaWRUb2tlbiA9PT0gZ2V0KCkudG9rZW5zLnB1YmxpYy5pZFRva2VuICYmXG4gICAgICAgIHJlZnJlc2hUb2tlbiA9PT0gZ2V0KCkudG9rZW5zLnB1YmxpYy5yZWZyZXNoVG9rZW5cbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNldChzdGF0ZSA9PiAoe1xuICAgICAgICB0b2tlbnM6IHtcbiAgICAgICAgICAuLi5zdGF0ZS50b2tlbnMsXG4gICAgICAgICAgcHVibGljOiB7XG4gICAgICAgICAgICBpZFRva2VuLFxuICAgICAgICAgICAgcmVmcmVzaFRva2VuLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSk7XG5cbiAgICAgIENvb2tpZXMuc2V0KEF1dGhDb29raWUuUFVCTElDX0lEX1RPS0VOLCBpZFRva2VuLCB7XG4gICAgICAgIGV4cGlyZXM6IDEgLyAyNCxcbiAgICAgIH0pO1xuXG4gICAgICBDb29raWVzLnNldChBdXRoQ29va2llLlBVQkxJQ19SRUZSRVNIX1RPS0VOLCByZWZyZXNoVG9rZW4sIHtcbiAgICAgICAgZXhwaXJlczogMzAsXG4gICAgICB9KTtcblxuICAgICAgaWYgKGRpc3BhdGNoRXZlbnQpIHtcbiAgICAgICAgZGlzcGF0Y2hUb2tlblVwZGF0ZWRFdmVudChUb2tlblR5cGUuUFVCTElDLCB7XG4gICAgICAgICAgaWRUb2tlbixcbiAgICAgICAgICByZWZyZXNoVG9rZW4sXG4gICAgICAgICAgc291cmNlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgdXBkYXRlQW5vbnltb3VzVG9rZW5IZWxwZXIgPSAoXG4gICAgICBpZFRva2VuOiBzdHJpbmcsXG4gICAgICBkaXNwYXRjaEV2ZW50OiBib29sZWFuID0gdHJ1ZSxcbiAgICAgIHNvdXJjZT86IHN0cmluZ1xuICAgICkgPT4ge1xuICAgICAgaWYgKGlkVG9rZW4gPT09IGdldCgpLnRva2Vucy5hbm9ueW1vdXMuaWRUb2tlbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNldChzdGF0ZSA9PiAoe1xuICAgICAgICB0b2tlbnM6IHtcbiAgICAgICAgICAuLi5zdGF0ZS50b2tlbnMsXG4gICAgICAgICAgYW5vbnltb3VzOiB7XG4gICAgICAgICAgICBpZFRva2VuLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSk7XG5cbiAgICAgIENvb2tpZXMuc2V0KEF1dGhDb29raWUuQU5PTllNT1VTX0lEX1RPS0VOLCBpZFRva2VuLCB7XG4gICAgICAgIGV4cGlyZXM6IDEgLyAyNCxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZGlzcGF0Y2hFdmVudCkge1xuICAgICAgICBkaXNwYXRjaFRva2VuVXBkYXRlZEV2ZW50KFRva2VuVHlwZS5BTk9OWU1PVVMsIHsgaWRUb2tlbiwgc291cmNlIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCB1cGRhdGVHdWVzdFRva2Vuc0hlbHBlciA9IChcbiAgICAgIGlkVG9rZW46IHN0cmluZyxcbiAgICAgIGRpc3BhdGNoRXZlbnQ6IGJvb2xlYW4gPSB0cnVlLFxuICAgICAgc291cmNlPzogc3RyaW5nXG4gICAgKSA9PiB7XG4gICAgICBpZiAoaWRUb2tlbiA9PT0gZ2V0KCkudG9rZW5zLmd1ZXN0LmlkVG9rZW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzZXQoc3RhdGUgPT4gKHtcbiAgICAgICAgdG9rZW5zOiB7XG4gICAgICAgICAgLi4uc3RhdGUudG9rZW5zLFxuICAgICAgICAgIGd1ZXN0OiB7XG4gICAgICAgICAgICBpZFRva2VuLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSk7XG5cbiAgICAgIENvb2tpZXMuc2V0KEF1dGhDb29raWUuR1VFU1RfSURfVE9LRU4sIGlkVG9rZW4sIHtcbiAgICAgICAgZXhwaXJlczogMSAvIDI0LFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChkaXNwYXRjaEV2ZW50KSB7XG4gICAgICAgIGRpc3BhdGNoVG9rZW5VcGRhdGVkRXZlbnQoVG9rZW5UeXBlLkdVRVNULCB7IGlkVG9rZW4sIHNvdXJjZSB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgdXBkYXRlQ3VzdG9tVG9rZW5IZWxwZXIgPSAoXG4gICAgICBpZFRva2VuOiBzdHJpbmcsXG4gICAgICBkaXNwYXRjaEV2ZW50OiBib29sZWFuID0gdHJ1ZSxcbiAgICAgIHNvdXJjZT86IHN0cmluZ1xuICAgICkgPT4ge1xuICAgICAgaWYgKGlkVG9rZW4gPT09IGdldCgpLnRva2Vucy5jdXN0b20uaWRUb2tlbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNldChzdGF0ZSA9PiAoe1xuICAgICAgICB0b2tlbnM6IHtcbiAgICAgICAgICAuLi5zdGF0ZS50b2tlbnMsXG4gICAgICAgICAgY3VzdG9tOiB7IGlkVG9rZW4gfSxcbiAgICAgICAgfSxcbiAgICAgIH0pKTtcblxuICAgICAgQ29va2llcy5zZXQoQXV0aENvb2tpZS5DVVNUT01fSURfVE9LRU4sIGlkVG9rZW4pO1xuXG4gICAgICBpZiAoZGlzcGF0Y2hFdmVudCkge1xuICAgICAgICBkaXNwYXRjaFRva2VuVXBkYXRlZEV2ZW50KFRva2VuVHlwZS5DVVNUT00sIHsgaWRUb2tlbiwgc291cmNlIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBjbGVhclB1YmxpY1Rva2Vuc0hlbHBlciA9IChcbiAgICAgIGRpc3BhdGNoRXZlbnQ6IGJvb2xlYW4gPSB0cnVlLFxuICAgICAgc291cmNlPzogc3RyaW5nXG4gICAgKSA9PiB7XG4gICAgICBDb29raWVzLnJlbW92ZShBdXRoQ29va2llLlBVQkxJQ19JRF9UT0tFTik7XG4gICAgICBDb29raWVzLnJlbW92ZShBdXRoQ29va2llLlBVQkxJQ19SRUZSRVNIX1RPS0VOKTtcblxuICAgICAgc2V0KHN0YXRlID0+ICh7XG4gICAgICAgIHRva2Vuczoge1xuICAgICAgICAgIC4uLnN0YXRlLnRva2VucyxcbiAgICAgICAgICBwdWJsaWM6IHsgaWRUb2tlbjogbnVsbCwgcmVmcmVzaFRva2VuOiBudWxsIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSk7XG5cbiAgICAgIGlmIChkaXNwYXRjaEV2ZW50KSB7XG4gICAgICAgIGRpc3BhdGNoVG9rZW5VcGRhdGVkRXZlbnQoVG9rZW5UeXBlLlBVQkxJQywgeyBpZFRva2VuOiBudWxsLCBzb3VyY2UgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNsZWFyQW5vbnltb3VzVG9rZW5zSGVscGVyID0gKFxuICAgICAgZGlzcGF0Y2hFdmVudDogYm9vbGVhbiA9IHRydWUsXG4gICAgICBzb3VyY2U/OiBzdHJpbmdcbiAgICApID0+IHtcbiAgICAgIENvb2tpZXMucmVtb3ZlKEF1dGhDb29raWUuQU5PTllNT1VTX0lEX1RPS0VOKTtcblxuICAgICAgc2V0KHN0YXRlID0+ICh7XG4gICAgICAgIHRva2Vuczoge1xuICAgICAgICAgIC4uLnN0YXRlLnRva2VucyxcbiAgICAgICAgICBhbm9ueW1vdXM6IHsgaWRUb2tlbjogbnVsbCB9LFxuICAgICAgICB9LFxuICAgICAgfSkpO1xuXG4gICAgICBpZiAoZGlzcGF0Y2hFdmVudCkge1xuICAgICAgICBkaXNwYXRjaFRva2VuVXBkYXRlZEV2ZW50KFRva2VuVHlwZS5BTk9OWU1PVVMsIHtcbiAgICAgICAgICBpZFRva2VuOiBudWxsLFxuICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNsZWFyR3Vlc3RUb2tlbnNIZWxwZXIgPSAoXG4gICAgICBkaXNwYXRjaEV2ZW50OiBib29sZWFuID0gdHJ1ZSxcbiAgICAgIHNvdXJjZT86IHN0cmluZ1xuICAgICkgPT4ge1xuICAgICAgQ29va2llcy5yZW1vdmUoQXV0aENvb2tpZS5HVUVTVF9JRF9UT0tFTik7XG5cbiAgICAgIHNldChzdGF0ZSA9PiAoe1xuICAgICAgICB0b2tlbnM6IHtcbiAgICAgICAgICAuLi5zdGF0ZS50b2tlbnMsXG4gICAgICAgICAgZ3Vlc3Q6IHsgaWRUb2tlbjogbnVsbCB9LFxuICAgICAgICB9LFxuICAgICAgfSkpO1xuXG4gICAgICBpZiAoZGlzcGF0Y2hFdmVudCkge1xuICAgICAgICBkaXNwYXRjaFRva2VuVXBkYXRlZEV2ZW50KFRva2VuVHlwZS5HVUVTVCwgeyBpZFRva2VuOiBudWxsLCBzb3VyY2UgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNsZWFyQ3VzdG9tVG9rZW5zSGVscGVyID0gKFxuICAgICAgZGlzcGF0Y2hFdmVudDogYm9vbGVhbiA9IHRydWUsXG4gICAgICBzb3VyY2U/OiBzdHJpbmdcbiAgICApID0+IHtcbiAgICAgIENvb2tpZXMucmVtb3ZlKEF1dGhDb29raWUuQ1VTVE9NX0lEX1RPS0VOKTtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKEF1dGhDb29raWUuQ1VTVE9NX0lEX1RPS0VOKTtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKEF1dGhDb29raWUuQ1VTVE9NX1VTRVIpO1xuXG4gICAgICBzZXQoc3RhdGUgPT4gKHtcbiAgICAgICAgdG9rZW5zOiB7XG4gICAgICAgICAgLi4uc3RhdGUudG9rZW5zLFxuICAgICAgICAgIGN1c3RvbTogeyBpZFRva2VuOiBudWxsIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSk7XG5cbiAgICAgIGlmIChkaXNwYXRjaEV2ZW50KSB7XG4gICAgICAgIGRpc3BhdGNoVG9rZW5VcGRhdGVkRXZlbnQoVG9rZW5UeXBlLkNVU1RPTSwgeyBpZFRva2VuOiBudWxsLCBzb3VyY2UgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICB0b2tlbnM6IGRlZmF1bHRUb2tlbnMsXG5cbiAgICAgIGdldFRva2VuOiAodHlwZTogVG9rZW5UeXBlKSA9PiB7XG4gICAgICAgIHJldHVybiBnZXQoKS50b2tlbnNbdHlwZV0/LmlkVG9rZW4gfHwgbnVsbDtcbiAgICAgIH0sXG5cbiAgICAgIGdldE1vc3RQcml2aWxlZ2VkVG9rZW46IChcbiAgICAgICAgb3B0aW9ucyA9IFtUb2tlblR5cGUuUFVCTElDLCBUb2tlblR5cGUuR1VFU1QsIFRva2VuVHlwZS5BTk9OWU1PVVNdXG4gICAgICApID0+IHtcbiAgICAgICAgaWYgKGdldCgpLnRva2Vucy5jdXN0b20uaWRUb2tlbiAmJiBvcHRpb25zLmluY2x1ZGVzKFRva2VuVHlwZS5DVVNUT00pKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuVHlwZS5DVVNUT00sXG4gICAgICAgICAgICBpZFRva2VuOiBnZXQoKS50b2tlbnMuY3VzdG9tLmlkVG9rZW4hLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdldCgpLnRva2Vucy5wdWJsaWMuaWRUb2tlbiAmJiBvcHRpb25zLmluY2x1ZGVzKFRva2VuVHlwZS5QVUJMSUMpKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuVHlwZS5QVUJMSUMsXG4gICAgICAgICAgICBpZFRva2VuOiBnZXQoKS50b2tlbnMucHVibGljLmlkVG9rZW4hLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdldCgpLnRva2Vucy5ndWVzdC5pZFRva2VuICYmIG9wdGlvbnMuaW5jbHVkZXMoVG9rZW5UeXBlLkdVRVNUKSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBUb2tlblR5cGUuR1VFU1QsXG4gICAgICAgICAgICBpZFRva2VuOiBnZXQoKS50b2tlbnMuZ3Vlc3QuaWRUb2tlbiEsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgZ2V0KCkudG9rZW5zLmFub255bW91cy5pZFRva2VuICYmXG4gICAgICAgICAgb3B0aW9ucy5pbmNsdWRlcyhUb2tlblR5cGUuQU5PTllNT1VTKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogVG9rZW5UeXBlLkFOT05ZTU9VUyxcbiAgICAgICAgICAgIGlkVG9rZW46IGdldCgpLnRva2Vucy5hbm9ueW1vdXMuaWRUb2tlbiEsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0sXG5cbiAgICAgIGdldFJlZnJlc2hUb2tlbjogKHR5cGU6IFRva2VuVHlwZSkgPT4ge1xuICAgICAgICByZXR1cm4gZ2V0KCkudG9rZW5zW3R5cGVdPy5yZWZyZXNoVG9rZW4gfHwgbnVsbDtcbiAgICAgIH0sXG5cbiAgICAgIHVwZGF0ZVB1YmxpY1Rva2VuczogKFxuICAgICAgICBpZFRva2VuOiBzdHJpbmcsXG4gICAgICAgIHJlZnJlc2hUb2tlbjogc3RyaW5nLFxuICAgICAgICBzb3VyY2U/OiBzdHJpbmdcbiAgICAgICkgPT4ge1xuICAgICAgICB1cGRhdGVQdWJsaWNUb2tlbnNIZWxwZXIoaWRUb2tlbiwgcmVmcmVzaFRva2VuLCB0cnVlLCBzb3VyY2UpO1xuICAgICAgfSxcblxuICAgICAgdXBkYXRlQW5vbnltb3VzVG9rZW46IChpZFRva2VuOiBzdHJpbmcsIHNvdXJjZT86IHN0cmluZykgPT4ge1xuICAgICAgICB1cGRhdGVBbm9ueW1vdXNUb2tlbkhlbHBlcihpZFRva2VuLCB0cnVlLCBzb3VyY2UpO1xuICAgICAgfSxcblxuICAgICAgdXBkYXRlR3Vlc3RUb2tlbnM6IChpZFRva2VuOiBzdHJpbmcsIHNvdXJjZT86IHN0cmluZykgPT4ge1xuICAgICAgICB1cGRhdGVHdWVzdFRva2Vuc0hlbHBlcihpZFRva2VuLCB0cnVlLCBzb3VyY2UpO1xuICAgICAgfSxcblxuICAgICAgdXBkYXRlQ3VzdG9tVG9rZW46IChpZFRva2VuOiBzdHJpbmcsIHNvdXJjZT86IHN0cmluZykgPT4ge1xuICAgICAgICB1cGRhdGVDdXN0b21Ub2tlbkhlbHBlcihpZFRva2VuLCB0cnVlLCBzb3VyY2UpO1xuICAgICAgfSxcblxuICAgICAgY2xlYXJUb2tlbnM6IChzb3VyY2U/OiBzdHJpbmcpID0+IHtcbiAgICAgICAgY2xlYXJQdWJsaWNUb2tlbnNIZWxwZXIodHJ1ZSwgc291cmNlKTtcbiAgICAgICAgY2xlYXJBbm9ueW1vdXNUb2tlbnNIZWxwZXIodHJ1ZSwgc291cmNlKTtcbiAgICAgICAgY2xlYXJHdWVzdFRva2Vuc0hlbHBlcih0cnVlLCBzb3VyY2UpO1xuICAgICAgICBjbGVhckN1c3RvbVRva2Vuc0hlbHBlcih0cnVlLCBzb3VyY2UpO1xuICAgICAgfSxcblxuICAgICAgY2xlYXJQdWJsaWNUb2tlbnM6IChzb3VyY2U/OiBzdHJpbmcpID0+IHtcbiAgICAgICAgY2xlYXJQdWJsaWNUb2tlbnNIZWxwZXIodHJ1ZSwgc291cmNlKTtcbiAgICAgIH0sXG5cbiAgICAgIGNsZWFyQW5vbnltb3VzVG9rZW5zOiAoc291cmNlPzogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNsZWFyQW5vbnltb3VzVG9rZW5zSGVscGVyKHRydWUsIHNvdXJjZSk7XG4gICAgICB9LFxuXG4gICAgICBjbGVhckd1ZXN0VG9rZW5zOiAoc291cmNlPzogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNsZWFyR3Vlc3RUb2tlbnNIZWxwZXIodHJ1ZSwgc291cmNlKTtcbiAgICAgIH0sXG5cbiAgICAgIGNsZWFyQ3VzdG9tVG9rZW5zOiAoc291cmNlPzogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNsZWFyQ3VzdG9tVG9rZW5zSGVscGVyKHRydWUsIHNvdXJjZSk7XG4gICAgICB9LFxuXG4gICAgICBzaWxlbnRVcGRhdGVQdWJsaWNUb2tlbnM6IChpZFRva2VuOiBzdHJpbmcsIHJlZnJlc2hUb2tlbjogc3RyaW5nKSA9PiB7XG4gICAgICAgIHVwZGF0ZVB1YmxpY1Rva2Vuc0hlbHBlcihpZFRva2VuLCByZWZyZXNoVG9rZW4sIGZhbHNlKTtcbiAgICAgIH0sXG5cbiAgICAgIHNpbGVudFVwZGF0ZUFub255bW91c1Rva2VuOiAoaWRUb2tlbjogc3RyaW5nKSA9PiB7XG4gICAgICAgIHVwZGF0ZUFub255bW91c1Rva2VuSGVscGVyKGlkVG9rZW4sIGZhbHNlKTtcbiAgICAgIH0sXG5cbiAgICAgIHNpbGVudFVwZGF0ZUd1ZXN0VG9rZW5zOiAoaWRUb2tlbjogc3RyaW5nKSA9PiB7XG4gICAgICAgIHVwZGF0ZUd1ZXN0VG9rZW5zSGVscGVyKGlkVG9rZW4sIGZhbHNlKTtcbiAgICAgIH0sXG5cbiAgICAgIHNpbGVudFVwZGF0ZUN1c3RvbVRva2VuOiAoaWRUb2tlbjogc3RyaW5nKSA9PiB7XG4gICAgICAgIHVwZGF0ZUN1c3RvbVRva2VuSGVscGVyKGlkVG9rZW4sIGZhbHNlKTtcbiAgICAgIH0sXG5cbiAgICAgIHNpbGVudENsZWFyUHVibGljVG9rZW5zOiAoKSA9PiB7XG4gICAgICAgIGNsZWFyUHVibGljVG9rZW5zSGVscGVyKGZhbHNlKTtcbiAgICAgIH0sXG5cbiAgICAgIHNpbGVudENsZWFyQW5vbnltb3VzVG9rZW5zOiAoKSA9PiB7XG4gICAgICAgIGNsZWFyQW5vbnltb3VzVG9rZW5zSGVscGVyKGZhbHNlKTtcbiAgICAgIH0sXG5cbiAgICAgIHNpbGVudENsZWFyR3Vlc3RUb2tlbnM6ICgpID0+IHtcbiAgICAgICAgY2xlYXJHdWVzdFRva2Vuc0hlbHBlcihmYWxzZSk7XG4gICAgICB9LFxuXG4gICAgICBzaWxlbnRDbGVhckN1c3RvbVRva2VuczogKCkgPT4ge1xuICAgICAgICBjbGVhckN1c3RvbVRva2Vuc0hlbHBlcihmYWxzZSk7XG4gICAgICB9LFxuICAgIH07XG4gIH0pXG4pO1xuIiwiZXhwb3J0IGludGVyZmFjZSBQdWJsaWNQcm9maWxlIHtcbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gIGhhbmRsZT86IHN0cmluZztcbiAgYmlvPzogc3RyaW5nO1xuICBtZXRhZGF0YT86IHtcbiAgICBjb21tZW50Q291bnRCeVNpdGU/OiB7XG4gICAgICBbc2l0ZUlkOiBzdHJpbmddOiBudW1iZXI7XG4gICAgfTtcbiAgICBjb21tZW50UmVhY3Rpb25Db3VudEJ5U2l0ZT86IHtcbiAgICAgIFtzaXRlSWQ6IHN0cmluZ106IG51bWJlcjtcbiAgICB9O1xuICAgIG92ZXJhbGxDb21tZW50Q291bnQ/OiBudW1iZXI7XG4gICAgb3ZlcmFsbENvbW1lbnRSZWFjdGlvbkNvdW50PzogbnVtYmVyO1xuICB9O1xuICBwaG90b1VSTD86IHN0cmluZztcbn1cbiIsImV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnIHtcbiAgcHJvZmlsZVNlcnZpY2VVcmw6IHN0cmluZztcbiAgaWRlbnRpdHlTZXJ2aWNlVXJsOiBzdHJpbmc7XG4gIHJlZnJlc2hUb2tlbkFwaUtleTogc3RyaW5nO1xuICBhdXRoSWZyYW1lVXJsOiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiAnZGV2ZWxvcG1lbnQnIHwgJ3Byb2R1Y3Rpb24nO1xuICBkZWJ1ZzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgRW52aXJvbm1lbnQgPSAnZGV2ZWxvcG1lbnQnIHwgJ3Byb2R1Y3Rpb24nO1xuXG5leHBvcnQgY29uc3QgZ2V0Q29uZmlnID0gKGVudmlyb25tZW50OiBFbnZpcm9ubWVudCk6IENvbmZpZyA9PiB7XG4gIGNvbnN0IGlzRGV2ID0gZW52aXJvbm1lbnQgPT09ICdkZXZlbG9wbWVudCc7XG5cbiAgcmV0dXJuIHtcbiAgICBwcm9maWxlU2VydmljZVVybDogaXNEZXZcbiAgICAgID8gcHJvY2Vzcy5lbnYuUFJPRklMRV9TRVJWSUNFX1VSTF9ERVYgfHxcbiAgICAgICAgJ2h0dHBzOi8vcHJvZmlsZS1zZXJ2aWNlLWRldi5hcmVuYS5pbSdcbiAgICAgIDogcHJvY2Vzcy5lbnYuUFJPRklMRV9TRVJWSUNFX1VSTF9QUkQgfHxcbiAgICAgICAgJ2h0dHBzOi8vcHJvZmlsZS1zZXJ2aWNlLXByZC5hcmVuYS5pbScsXG4gICAgaWRlbnRpdHlTZXJ2aWNlVXJsOiBpc0RldlxuICAgICAgPyBwcm9jZXNzLmVudi5JREVOVElUWV9TRVJWSUNFX1VSTF9ERVYgfHxcbiAgICAgICAgJ2h0dHBzOi8vdG9rZW4tc2VydmljZS1kZXYuYXJlbmEuaW0nXG4gICAgICA6IHByb2Nlc3MuZW52LklERU5USVRZX1NFUlZJQ0VfVVJMX1BSRCB8fFxuICAgICAgICAnaHR0cHM6Ly90b2tlbi1zZXJ2aWNlLXByZC5hcmVuYS5pbScsXG4gICAgcmVmcmVzaFRva2VuQXBpS2V5OiBpc0RldlxuICAgICAgPyBwcm9jZXNzLmVudi5GSVJFQkFTRV9QVUJMSUNfQVBJX0tFWV9ERVYgfHxcbiAgICAgICAgJ0FJemFTeUNKaFdGQ0szaWNzOWtKMmVTZ1FEN2tXSFVzT3NKeVBkaydcbiAgICAgIDogcHJvY2Vzcy5lbnYuRklSRUJBU0VfUFVCTElDX0FQSV9LRVlfUFJEIHx8XG4gICAgICAgICdBSXphU3lELTl0U3JRV243M1MwcW02QnFFSDUtMTJIcThMMGVUc1EnLFxuICAgIGF1dGhJZnJhbWVVcmw6IGlzRGV2XG4gICAgICA/IHByb2Nlc3MuZW52LkFVVEhfSUZSQU1FX1VSTF9ERVYgfHwgJ2h0dHBzOi8vYXV0aDIuZGV2LmFyZW5hLmltJ1xuICAgICAgOiBwcm9jZXNzLmVudi5BVVRIX0lGUkFNRV9VUkxfUFJEIHx8ICdodHRwczovL2F1dGgyLmFyZW5hLmltJyxcbiAgICBlbnZpcm9ubWVudCxcbiAgICBkZWJ1ZzogZW52aXJvbm1lbnQgPT09ICdkZXZlbG9wbWVudCcsXG4gIH07XG59O1xuIiwiaW1wb3J0IHsgY3JlYXRlIH0gZnJvbSAnenVzdGFuZCc7XG5pbXBvcnQgeyBzdWJzY3JpYmVXaXRoU2VsZWN0b3IgfSBmcm9tICd6dXN0YW5kL21pZGRsZXdhcmUnO1xuaW1wb3J0IENvb2tpZXMgZnJvbSAnanMtY29va2llJztcbmltcG9ydCB7XG4gIFVzZXJQcm9wcyxcbiAgRmlyZWJhc2VVc2VyLFxuICBTc29Vc2VyUHJvcHMsXG4gIFNzb1YyRXhjaGFuZ2VSZXNwb25zZSxcbn0gZnJvbSAnLi4vc2VydmljZXMvYXV0aC90eXBlcyc7XG5pbXBvcnQgeyBqd3REZWNvZGUgfSBmcm9tICdqd3QtZGVjb2RlJztcbmltcG9ydCB7IHR5cGUgUHVibGljUHJvZmlsZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Byb2ZpbGUvdHlwZXMnO1xuaW1wb3J0IHsgdXNlVG9rZW5TdG9yZSB9IGZyb20gJy4vdG9rZW4tc3RvcmUnO1xuaW1wb3J0IHsgQXV0aENvb2tpZSB9IGZyb20gJy4uL3R5cGVzL3Rva2VuJztcbmltcG9ydCB7IHJlcXVlc3QgfSBmcm9tICcuLi91dGlscy9yZXF1ZXN0JztcbmltcG9ydCB7IEVudmlyb25tZW50LCBnZXRDb25maWcgfSBmcm9tICcuLi9jb25maWcnO1xuXG5pbnRlcmZhY2UgVXNlclN0b3JlIHtcbiAgdXNlcjogVXNlclByb3BzIHwgbnVsbDtcbiAgcHVibGljUHJvZmlsZTogUHVibGljUHJvZmlsZSB8IG51bGw7XG4gIHJlZnJlc2hlZFRva2VuTG9hZGVkOiBib29sZWFuO1xuICBzZXRVc2VyOiAodXNlcjogVXNlclByb3BzIHwgbnVsbCkgPT4gdm9pZDtcbiAgc2V0UHVibGljUHJvZmlsZTogKHB1YmxpY1Byb2ZpbGU6IFB1YmxpY1Byb2ZpbGUgfCBudWxsKSA9PiB2b2lkO1xuICBsb2dvdXQ6ICgpID0+IHZvaWQ7XG4gIHJlZnJlc2hQdWJsaWNUb2tlbnM6IChjb25maWc6IHtcbiAgICByZWZyZXNoVG9rZW5BcGlLZXk6IHN0cmluZztcbiAgfSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgc2V0VXNlckJ5VG9rZW5JZDogKGlkVG9rZW46IHN0cmluZykgPT4gdm9pZDtcbiAgbG9hZFN0b3JlZFVzZXI6IChjb25maWc/OiB7IHJlZnJlc2hUb2tlbkFwaUtleTogc3RyaW5nIH0pID0+IFByb21pc2U8dm9pZD47XG4gIHNzb1YyRXhjaGFuZ2U6IChcbiAgICBzc29Tb3VyY2VJRDogc3RyaW5nLFxuICAgIGp3dDogc3RyaW5nLFxuICAgIGVudj86IEVudmlyb25tZW50XG4gICkgPT4gUHJvbWlzZTxTc29WMkV4Y2hhbmdlUmVzcG9uc2U+O1xufVxuXG5leHBvcnQgY29uc3QgdXNlVXNlclN0b3JlID0gY3JlYXRlPFVzZXJTdG9yZT4oKShcbiAgc3Vic2NyaWJlV2l0aFNlbGVjdG9yKChzZXQsIGdldCkgPT4gKHtcbiAgICB1c2VyOiBudWxsLFxuICAgIHB1YmxpY1Byb2ZpbGU6IG51bGwsXG4gICAgcmVmcmVzaGVkVG9rZW5Mb2FkZWQ6IGZhbHNlLFxuXG4gICAgc2V0VXNlcjogKHVzZXI6IFVzZXJQcm9wcyB8IG51bGwpID0+IHtcbiAgICAgIHNldCh7IHVzZXIgfSk7XG4gICAgfSxcblxuICAgIHNldFB1YmxpY1Byb2ZpbGU6IChwdWJsaWNQcm9maWxlOiBQdWJsaWNQcm9maWxlIHwgbnVsbCkgPT4ge1xuICAgICAgc2V0KHsgcHVibGljUHJvZmlsZSB9KTtcbiAgICB9LFxuXG4gICAgc2V0VXNlckJ5VG9rZW5JZDogKGlkVG9rZW46IHN0cmluZykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdXNlciA9IGp3dERlY29kZTxGaXJlYmFzZVVzZXI+KGlkVG9rZW4pO1xuICAgICAgICBjb25zdCB1c2VyUHJvcHM6IFVzZXJQcm9wcyA9IHtcbiAgICAgICAgICB1aWQ6IHVzZXIudXNlcl9pZCxcbiAgICAgICAgICBkaXNwbGF5TmFtZTogdXNlci5zYWZlRGlzcGxheU5hbWUsXG4gICAgICAgICAgZW1haWw6IHVzZXIuZW1haWwsXG4gICAgICAgICAgcGhvdG9VUkw6IHVzZXIuc2FmZVBob3RvVVJMLFxuICAgICAgICAgIGhhbmRsZTogdXNlci5oYW5kbGUsXG4gICAgICAgIH07XG4gICAgICAgIHNldCh7IHVzZXI6IHVzZXJQcm9wcyB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBsb2dvdXQ6ICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHRva2VuU3RvcmUgPSB1c2VUb2tlblN0b3JlLmdldFN0YXRlKCk7XG4gICAgICAgIHRva2VuU3RvcmUuY2xlYXJQdWJsaWNUb2tlbnMoKTtcbiAgICAgICAgdG9rZW5TdG9yZS5jbGVhckN1c3RvbVRva2VucygpO1xuICAgICAgICBzZXQoeyB1c2VyOiBudWxsIH0pO1xuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnYXJlbmEtY29tbWVudHMtbG9nb3V0JykpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlZnJlc2hQdWJsaWNUb2tlbnM6IGFzeW5jIChjb25maWc6IHsgcmVmcmVzaFRva2VuQXBpS2V5OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVmcmVzaFRva2VuID0gQ29va2llcy5nZXQoQXV0aENvb2tpZS5QVUJMSUNfUkVGUkVTSF9UT0tFTik7XG5cbiAgICAgICAgaWYgKCFyZWZyZXNoVG9rZW4pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHJlZnJlc2ggdG9rZW4gZm91bmQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHByZWZpeCA9ICdodHRwczovL3NlY3VyZXRva2VuLmdvb2dsZWFwaXMuY29tL3YxL3Rva2VuP2tleT0nO1xuICAgICAgICBjb25zdCBhcGlLZXkgPSBjb25maWcucmVmcmVzaFRva2VuQXBpS2V5O1xuICAgICAgICBjb25zdCB1cmwgPSBgJHtwcmVmaXh9JHthcGlLZXl9YDtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgICAgICAgIHJlZnJlc2hfdG9rZW46IHJlZnJlc2hUb2tlbixcbiAgICAgICAgICAgIGdyYW50X3R5cGU6ICdyZWZyZXNoX3Rva2VuJyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG5cbiAgICAgICAgY29uc3QgeyBzZXRVc2VyQnlUb2tlbklkIH0gPSBnZXQoKTtcbiAgICAgICAgc2V0VXNlckJ5VG9rZW5JZChkYXRhLmlkX3Rva2VuKTtcblxuICAgICAgICBjb25zdCB0b2tlblN0b3JlID0gdXNlVG9rZW5TdG9yZS5nZXRTdGF0ZSgpO1xuICAgICAgICB0b2tlblN0b3JlLnVwZGF0ZVB1YmxpY1Rva2VucyhkYXRhLmlkX3Rva2VuLCBkYXRhLnJlZnJlc2hfdG9rZW4pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIGNvbnN0IHsgbG9nb3V0IH0gPSBnZXQoKTtcbiAgICAgICAgbG9nb3V0KCk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGxvYWRTdG9yZWRVc2VyOiBhc3luYyAoY29uZmlnPzogeyByZWZyZXNoVG9rZW5BcGlLZXk6IHN0cmluZyB9KSA9PiB7XG4gICAgICBjb25zdCBwdWJsaWNJZFRva2VuID0gQ29va2llcy5nZXQoQXV0aENvb2tpZS5QVUJMSUNfSURfVE9LRU4pO1xuICAgICAgY29uc3QgcHVibGljUmVmcmVzaFRva2VuID0gQ29va2llcy5nZXQoQXV0aENvb2tpZS5QVUJMSUNfUkVGUkVTSF9UT0tFTik7XG4gICAgICBjb25zdCBjdXN0b21JZFRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oQXV0aENvb2tpZS5DVVNUT01fSURfVE9LRU4pO1xuICAgICAgY29uc3QgY3VzdG9tVXNlciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKEF1dGhDb29raWUuQ1VTVE9NX1VTRVIpO1xuXG4gICAgICBpZiAoISFjdXN0b21JZFRva2VuICYmICEhY3VzdG9tVXNlcikge1xuICAgICAgICBjb25zdCBwYXJzZWRVc2VyID0gSlNPTi5wYXJzZShjdXN0b21Vc2VyKTtcblxuICAgICAgICBzZXQoeyB1c2VyOiBwYXJzZWRVc2VyIH0pO1xuXG4gICAgICAgIGNvbnN0IHRva2VuU3RvcmUgPSB1c2VUb2tlblN0b3JlLmdldFN0YXRlKCk7XG4gICAgICAgIHRva2VuU3RvcmUudXBkYXRlQ3VzdG9tVG9rZW4oY3VzdG9tSWRUb2tlbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocHVibGljSWRUb2tlbikge1xuICAgICAgICAgIGNvbnN0IHsgc2V0VXNlckJ5VG9rZW5JZCB9ID0gZ2V0KCk7XG4gICAgICAgICAgc2V0VXNlckJ5VG9rZW5JZChwdWJsaWNJZFRva2VuKTtcbiAgICAgICAgfSBlbHNlIGlmIChwdWJsaWNSZWZyZXNoVG9rZW4gJiYgY29uZmlnKSB7XG4gICAgICAgICAgY29uc3QgeyByZWZyZXNoUHVibGljVG9rZW5zIH0gPSBnZXQoKTtcbiAgICAgICAgICBhd2FpdCByZWZyZXNoUHVibGljVG9rZW5zKGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2V0KHsgcmVmcmVzaGVkVG9rZW5Mb2FkZWQ6IHRydWUgfSk7XG4gICAgfSxcblxuICAgIHNzb1YyRXhjaGFuZ2U6IGFzeW5jIChcbiAgICAgIHNzb1NvdXJjZUlEOiBzdHJpbmcsXG4gICAgICBqd3Q6IHN0cmluZyxcbiAgICAgIGVudj86IEVudmlyb25tZW50XG4gICAgKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoZW52ID8/ICdwcm9kdWN0aW9uJyk7XG4gICAgICAgIGNvbnN0IHByb2ZpbGVVcmwgPSBjb25maWcucHJvZmlsZVNlcnZpY2VVcmw7XG5cbiAgICAgICAgY29uc3QgdXJsID0gYCR7cHJvZmlsZVVybH0vc3NvL3NvdXJjZXMvJHtzc29Tb3VyY2VJRH0vdXNlcmA7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlOiBTc29WMkV4Y2hhbmdlUmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0KCdQT1NUJywgdXJsLCB7XG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBzaWduZWRVc2VyRGF0YTogand0IH0pLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICBjb25zdCBkZWNvZGVkVXNlciA9IGp3dERlY29kZTxTc29Vc2VyUHJvcHM+KHJlc3BvbnNlLnRva2VuKTtcblxuICAgICAgICAgIGNvbnN0IHsgc2V0VXNlciwgc2V0UHVibGljUHJvZmlsZSB9ID0gZ2V0KCk7XG5cbiAgICAgICAgICBzZXRVc2VyKHtcbiAgICAgICAgICAgIHVpZDogZGVjb2RlZFVzZXI/LnN1YixcbiAgICAgICAgICAgIGVtYWlsOiBkZWNvZGVkVXNlcj8uZW1haWwsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogZGVjb2RlZFVzZXI/LmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgcGhvdG9VUkw6IGRlY29kZWRVc2VyPy5waG90b1VSTCxcbiAgICAgICAgICAgIGhhbmRsZTogZGVjb2RlZFVzZXI/LmhhbmRsZSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHNldFB1YmxpY1Byb2ZpbGUoe1xuICAgICAgICAgICAgZGlzcGxheU5hbWU6IGRlY29kZWRVc2VyPy5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgIHBob3RvVVJMOiBkZWNvZGVkVXNlcj8ucGhvdG9VUkwsXG4gICAgICAgICAgICBoYW5kbGU6IGRlY29kZWRVc2VyPy5oYW5kbGUsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCB0b2tlblN0b3JlID0gdXNlVG9rZW5TdG9yZS5nZXRTdGF0ZSgpO1xuICAgICAgICAgIHRva2VuU3RvcmUudXBkYXRlQ3VzdG9tVG9rZW4ocmVzcG9uc2UudG9rZW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignU1NPIFYyIEV4Y2hhbmdlIGZhaWxlZDonLCBlcnJvcik7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0sXG4gIH0pKVxuKTtcbiIsImltcG9ydCB7IHVzZVRva2VuU3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvdG9rZW4tc3RvcmUnO1xuaW1wb3J0IHsgdXNlVG9rZW5FdmVudExpc3RlbmVyIH0gZnJvbSAnLi91c2UtdG9rZW4tZXZlbnQtbGlzdGVuZXInO1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlVG9rZW5zKCkge1xuICBjb25zdCBnZXRUb2tlbiA9IHVzZVRva2VuU3RvcmUoc3RhdGUgPT4gc3RhdGUuZ2V0VG9rZW4pO1xuICBjb25zdCBnZXRNb3N0UHJpdmlsZWdlZFRva2VuID0gdXNlVG9rZW5TdG9yZShcbiAgICBzdGF0ZSA9PiBzdGF0ZS5nZXRNb3N0UHJpdmlsZWdlZFRva2VuXG4gICk7XG4gIGNvbnN0IGdldFJlZnJlc2hUb2tlbiA9IHVzZVRva2VuU3RvcmUoc3RhdGUgPT4gc3RhdGUuZ2V0UmVmcmVzaFRva2VuKTtcbiAgY29uc3QgdXBkYXRlUHVibGljVG9rZW5zID0gdXNlVG9rZW5TdG9yZShzdGF0ZSA9PiBzdGF0ZS51cGRhdGVQdWJsaWNUb2tlbnMpO1xuICBjb25zdCB1cGRhdGVBbm9ueW1vdXNUb2tlbiA9IHVzZVRva2VuU3RvcmUoXG4gICAgc3RhdGUgPT4gc3RhdGUudXBkYXRlQW5vbnltb3VzVG9rZW5cbiAgKTtcbiAgY29uc3QgdXBkYXRlR3Vlc3RUb2tlbnMgPSB1c2VUb2tlblN0b3JlKHN0YXRlID0+IHN0YXRlLnVwZGF0ZUd1ZXN0VG9rZW5zKTtcbiAgY29uc3QgdXBkYXRlQ3VzdG9tVG9rZW4gPSB1c2VUb2tlblN0b3JlKHN0YXRlID0+IHN0YXRlLnVwZGF0ZUN1c3RvbVRva2VuKTtcbiAgY29uc3QgY2xlYXJUb2tlbnMgPSB1c2VUb2tlblN0b3JlKHN0YXRlID0+IHN0YXRlLmNsZWFyVG9rZW5zKTtcbiAgY29uc3QgY2xlYXJQdWJsaWNUb2tlbnMgPSB1c2VUb2tlblN0b3JlKHN0YXRlID0+IHN0YXRlLmNsZWFyUHVibGljVG9rZW5zKTtcbiAgY29uc3QgY2xlYXJDdXN0b21Ub2tlbnMgPSB1c2VUb2tlblN0b3JlKHN0YXRlID0+IHN0YXRlLmNsZWFyQ3VzdG9tVG9rZW5zKTtcblxuICBjb25zdCB7IGV2ZW50U291cmNlIH0gPSB1c2VUb2tlbkV2ZW50TGlzdGVuZXIoKTtcblxuICByZXR1cm4ge1xuICAgIGdldFRva2VuLFxuICAgIGdldE1vc3RQcml2aWxlZ2VkVG9rZW4sXG4gICAgZ2V0UmVmcmVzaFRva2VuLFxuICAgIHVwZGF0ZVB1YmxpY1Rva2VuczogKGlkVG9rZW46IHN0cmluZywgcmVmcmVzaFRva2VuOiBzdHJpbmcpID0+XG4gICAgICB1cGRhdGVQdWJsaWNUb2tlbnMoaWRUb2tlbiwgcmVmcmVzaFRva2VuLCBldmVudFNvdXJjZSksXG4gICAgdXBkYXRlQW5vbnltb3VzVG9rZW46IChpZFRva2VuOiBzdHJpbmcpID0+XG4gICAgICB1cGRhdGVBbm9ueW1vdXNUb2tlbihpZFRva2VuLCBldmVudFNvdXJjZSksXG4gICAgdXBkYXRlR3Vlc3RUb2tlbnM6IChpZFRva2VuOiBzdHJpbmcpID0+XG4gICAgICB1cGRhdGVHdWVzdFRva2VucyhpZFRva2VuLCBldmVudFNvdXJjZSksXG4gICAgdXBkYXRlQ3VzdG9tVG9rZW46IChpZFRva2VuOiBzdHJpbmcpID0+XG4gICAgICB1cGRhdGVDdXN0b21Ub2tlbihpZFRva2VuLCBldmVudFNvdXJjZSksXG4gICAgY2xlYXJUb2tlbnM6ICgpID0+IGNsZWFyVG9rZW5zKGV2ZW50U291cmNlKSxcbiAgICBjbGVhclB1YmxpY1Rva2VuczogKCkgPT4gY2xlYXJQdWJsaWNUb2tlbnMoZXZlbnRTb3VyY2UpLFxuICAgIGNsZWFyQ3VzdG9tVG9rZW5zOiAoKSA9PiBjbGVhckN1c3RvbVRva2VucyhldmVudFNvdXJjZSksXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VUb2tlbih0eXBlOiAnYW5vbnltb3VzJyB8ICdndWVzdCcgfCAncHVibGljJyB8ICdjdXN0b20nKSB7XG4gIHJldHVybiB1c2VUb2tlblN0b3JlKHN0YXRlID0+IHN0YXRlLnRva2Vuc1t0eXBlXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VUb2tlblZhbHVlKFxuICB0eXBlOiAnYW5vbnltb3VzJyB8ICdndWVzdCcgfCAncHVibGljJyB8ICdjdXN0b20nXG4pIHtcbiAgcmV0dXJuIHVzZVRva2VuU3RvcmUoc3RhdGUgPT4gc3RhdGUudG9rZW5zW3R5cGVdPy5pZFRva2VuKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJlZnJlc2hUb2tlbih0eXBlOiAnYW5vbnltb3VzJyB8ICdndWVzdCcgfCAncHVibGljJykge1xuICByZXR1cm4gdXNlVG9rZW5TdG9yZShzdGF0ZSA9PiBzdGF0ZS50b2tlbnNbdHlwZV0/LnJlZnJlc2hUb2tlbik7XG59XG4iLCJpbXBvcnQgeyB1c2VQcm9maWxlU2VydmljZXMgfSBmcm9tICcuLi9zZXJ2aWNlcy9wcm9maWxlL3VzZS1wcm9maWxlLXNlcnZpY2VzJztcbmltcG9ydCB7IHVzZVVzZXJTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy91c2VyLXN0b3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVVzZXIoKSB7XG4gIHJldHVybiB1c2VVc2VyU3RvcmUoc3RhdGUgPT4gc3RhdGUudXNlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VQdWJsaWNQcm9maWxlKCkge1xuICByZXR1cm4gdXNlVXNlclN0b3JlKHN0YXRlID0+IHN0YXRlLnB1YmxpY1Byb2ZpbGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmVmcmVzaGVkVG9rZW5Mb2FkZWQoKSB7XG4gIHJldHVybiB1c2VVc2VyU3RvcmUoc3RhdGUgPT4gc3RhdGUucmVmcmVzaGVkVG9rZW5Mb2FkZWQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlVXNlckFjdGlvbnMoKSB7XG4gIGNvbnN0IHNldFVzZXIgPSB1c2VVc2VyU3RvcmUoc3RhdGUgPT4gc3RhdGUuc2V0VXNlcik7XG4gIGNvbnN0IHNldFB1YmxpY1Byb2ZpbGUgPSB1c2VVc2VyU3RvcmUoc3RhdGUgPT4gc3RhdGUuc2V0UHVibGljUHJvZmlsZSk7XG4gIGNvbnN0IGxvZ291dCA9IHVzZVVzZXJTdG9yZShzdGF0ZSA9PiBzdGF0ZS5sb2dvdXQpO1xuICBjb25zdCByZWZyZXNoUHVibGljVG9rZW5zID0gdXNlVXNlclN0b3JlKHN0YXRlID0+IHN0YXRlLnJlZnJlc2hQdWJsaWNUb2tlbnMpO1xuICBjb25zdCBzZXRVc2VyQnlUb2tlbklkID0gdXNlVXNlclN0b3JlKHN0YXRlID0+IHN0YXRlLnNldFVzZXJCeVRva2VuSWQpO1xuICBjb25zdCBsb2FkU3RvcmVkVXNlciA9IHVzZVVzZXJTdG9yZShzdGF0ZSA9PiBzdGF0ZS5sb2FkU3RvcmVkVXNlcik7XG4gIGNvbnN0IHNzb1YyRXhjaGFuZ2UgPSB1c2VVc2VyU3RvcmUoc3RhdGUgPT4gc3RhdGUuc3NvVjJFeGNoYW5nZSk7XG4gIFxuXG4gIHJldHVybiB7XG4gICAgc2V0VXNlcixcbiAgICBzZXRQdWJsaWNQcm9maWxlLFxuICAgIGxvZ291dCxcbiAgICByZWZyZXNoUHVibGljVG9rZW5zLFxuICAgIHNldFVzZXJCeVRva2VuSWQsXG4gICAgbG9hZFN0b3JlZFVzZXIsXG4gICAgc3NvVjJFeGNoYW5nZSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVVwZGF0ZVByb2ZpbGUoKSB7XG4gIGNvbnN0IHsgdXBkYXRlUHVibGljUHJvZmlsZSB9ID0gdXNlUHJvZmlsZVNlcnZpY2VzKCk7XG4gIHJldHVybiB7XG4gICAgdXBkYXRlUHVibGljUHJvZmlsZSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVVzZXJXaXRoUHJvZmlsZSgpIHtcbiAgY29uc3QgdXNlciA9IHVzZVVzZXJTdG9yZShzdGF0ZSA9PiBzdGF0ZS51c2VyKTtcbiAgY29uc3QgcHVibGljUHJvZmlsZSA9IHVzZVVzZXJTdG9yZShzdGF0ZSA9PiBzdGF0ZS5wdWJsaWNQcm9maWxlKTtcbiAgY29uc3QgcmVmcmVzaGVkVG9rZW5Mb2FkZWQgPSB1c2VVc2VyU3RvcmUoXG4gICAgc3RhdGUgPT4gc3RhdGUucmVmcmVzaGVkVG9rZW5Mb2FkZWRcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIHVzZXIsXG4gICAgcHVibGljUHJvZmlsZSxcbiAgICByZWZyZXNoZWRUb2tlbkxvYWRlZCxcbiAgfTtcbn1cblxuIiwiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBUb2tlblR5cGUgfSBmcm9tICcuLi90eXBlcy90b2tlbic7XG5pbXBvcnQgeyB1c2VUb2tlblN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL3Rva2VuLXN0b3JlJztcbmltcG9ydCB7IFRPS0VOX1VQREFURURfRVZFTlQgfSBmcm9tICcuLi91dGlscy9kb20tZXZlbnRzJztcblxuaW50ZXJmYWNlIFRva2VuVXBkYXRlRXZlbnQge1xuICBkZXRhaWw6IHtcbiAgICBpZFRva2VuOiBzdHJpbmcgfCBudWxsO1xuICAgIHJlZnJlc2hUb2tlbj86IHN0cmluZyB8IG51bGw7XG4gICAgdHlwZTogVG9rZW5UeXBlO1xuICAgIHNvdXJjZT86IHN0cmluZztcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVRva2VuRXZlbnRMaXN0ZW5lcigpIHtcbiAgY29uc3QgdXBkYXRlUHVibGljVG9rZW5zID0gdXNlVG9rZW5TdG9yZShcbiAgICBzdGF0ZSA9PiBzdGF0ZS5zaWxlbnRVcGRhdGVQdWJsaWNUb2tlbnNcbiAgKTtcbiAgY29uc3QgdXBkYXRlQW5vbnltb3VzVG9rZW4gPSB1c2VUb2tlblN0b3JlKFxuICAgIHN0YXRlID0+IHN0YXRlLnNpbGVudFVwZGF0ZUFub255bW91c1Rva2VuXG4gICk7XG4gIGNvbnN0IHVwZGF0ZUd1ZXN0VG9rZW5zID0gdXNlVG9rZW5TdG9yZShcbiAgICBzdGF0ZSA9PiBzdGF0ZS5zaWxlbnRVcGRhdGVHdWVzdFRva2Vuc1xuICApO1xuICBjb25zdCB1cGRhdGVDdXN0b21Ub2tlbiA9IHVzZVRva2VuU3RvcmUoXG4gICAgc3RhdGUgPT4gc3RhdGUuc2lsZW50VXBkYXRlQ3VzdG9tVG9rZW5cbiAgKTtcbiAgY29uc3QgY2xlYXJUb2tlbnMgPSB1c2VUb2tlblN0b3JlKHN0YXRlID0+IHN0YXRlLmNsZWFyVG9rZW5zKTtcbiAgY29uc3QgY2xlYXJQdWJsaWNUb2tlbnMgPSB1c2VUb2tlblN0b3JlKFxuICAgIHN0YXRlID0+IHN0YXRlLnNpbGVudENsZWFyUHVibGljVG9rZW5zXG4gICk7XG4gIGNvbnN0IGNsZWFyQW5vbnltb3VzVG9rZW5zID0gdXNlVG9rZW5TdG9yZShcbiAgICBzdGF0ZSA9PiBzdGF0ZS5zaWxlbnRDbGVhckFub255bW91c1Rva2Vuc1xuICApO1xuICBjb25zdCBjbGVhckd1ZXN0VG9rZW5zID0gdXNlVG9rZW5TdG9yZShzdGF0ZSA9PiBzdGF0ZS5zaWxlbnRDbGVhckd1ZXN0VG9rZW5zKTtcbiAgY29uc3QgY2xlYXJDdXN0b21Ub2tlbnMgPSB1c2VUb2tlblN0b3JlKFxuICAgIHN0YXRlID0+IHN0YXRlLnNpbGVudENsZWFyQ3VzdG9tVG9rZW5zXG4gICk7XG5cbiAgY29uc3QgZXZlbnRTb3VyY2VSZWYgPSB1c2VSZWY8c3RyaW5nPihcbiAgICBgd2lkZ2V0LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDkpfWBcbiAgKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVRva2VuVXBkYXRlID0gKFxuICAgICAgZXZlbnQ6IEN1c3RvbUV2ZW50PFRva2VuVXBkYXRlRXZlbnRbJ2RldGFpbCddPlxuICAgICkgPT4ge1xuICAgICAgY29uc3QgeyBpZFRva2VuLCByZWZyZXNoVG9rZW4sIHR5cGUsIHNvdXJjZSB9ID0gZXZlbnQuZGV0YWlsO1xuXG4gICAgICBpZiAoc291cmNlID09PSBldmVudFNvdXJjZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgVG9rZW5UeXBlLlBVQkxJQzpcbiAgICAgICAgICBpZiAoaWRUb2tlbikge1xuICAgICAgICAgICAgaWYgKCFyZWZyZXNoVG9rZW4pIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZWZyZXNoIHRva2VuIGlzIHJlcXVpcmVkIGZvciBwdWJsaWMgdG9rZW5zJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1cGRhdGVQdWJsaWNUb2tlbnMoaWRUb2tlbiwgcmVmcmVzaFRva2VuKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xlYXJQdWJsaWNUb2tlbnMoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBUb2tlblR5cGUuQU5PTllNT1VTOlxuICAgICAgICAgIGlmIChpZFRva2VuKSB7XG4gICAgICAgICAgICB1cGRhdGVBbm9ueW1vdXNUb2tlbihpZFRva2VuKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xlYXJBbm9ueW1vdXNUb2tlbnMoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBUb2tlblR5cGUuR1VFU1Q6XG4gICAgICAgICAgaWYgKGlkVG9rZW4pIHtcbiAgICAgICAgICAgIHVwZGF0ZUd1ZXN0VG9rZW5zKGlkVG9rZW4pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjbGVhckd1ZXN0VG9rZW5zKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgVG9rZW5UeXBlLkNVU1RPTTpcbiAgICAgICAgICBpZiAoaWRUb2tlbikge1xuICAgICAgICAgICAgdXBkYXRlQ3VzdG9tVG9rZW4oaWRUb2tlbik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsZWFyQ3VzdG9tVG9rZW5zKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgVE9LRU5fVVBEQVRFRF9FVkVOVCxcbiAgICAgIGhhbmRsZVRva2VuVXBkYXRlIGFzIEV2ZW50TGlzdGVuZXJcbiAgICApO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgICAgIFRPS0VOX1VQREFURURfRVZFTlQsXG4gICAgICAgIGhhbmRsZVRva2VuVXBkYXRlIGFzIEV2ZW50TGlzdGVuZXJcbiAgICAgICk7XG4gICAgfTtcbiAgfSwgW1xuICAgIHVwZGF0ZVB1YmxpY1Rva2VucyxcbiAgICB1cGRhdGVBbm9ueW1vdXNUb2tlbixcbiAgICB1cGRhdGVHdWVzdFRva2VucyxcbiAgICB1cGRhdGVDdXN0b21Ub2tlbixcbiAgICBjbGVhclRva2VucyxcbiAgICBjbGVhclB1YmxpY1Rva2VucyxcbiAgICBjbGVhckFub255bW91c1Rva2VucyxcbiAgICBjbGVhckd1ZXN0VG9rZW5zLFxuICAgIGNsZWFyQ3VzdG9tVG9rZW5zLFxuICBdKTtcblxuICByZXR1cm4ge1xuICAgIGV2ZW50U291cmNlOiBldmVudFNvdXJjZVJlZi5jdXJyZW50LFxuICB9O1xufVxuIiwiaW1wb3J0IENvb2tpZXMgZnJvbSAnanMtY29va2llJztcbmltcG9ydCB7IEF1dGhDb29raWUgfSBmcm9tICcuLi90eXBlcy90b2tlbic7XG5pbXBvcnQgeyB1c2VVc2VyU3RvcmUgfSBmcm9tICcuLi9zdG9yZXMnO1xuaW1wb3J0IHsgZ2V0Q29uZmlnIH0gZnJvbSAnLi4vY29uZmlnJztcblxuZnVuY3Rpb24gZ2V0UmVmcmVzaFRva2VuQXBpS2V5KCk6IHN0cmluZyB7XG4gIGNvbnN0IGVudmlyb25tZW50ID1cbiAgICB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJvY2Vzcy5lbnY/Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbidcbiAgICAgID8gJ3Byb2R1Y3Rpb24nXG4gICAgICA6ICdkZXZlbG9wbWVudCc7XG4gIHJldHVybiBnZXRDb25maWcoZW52aXJvbm1lbnQpLnJlZnJlc2hUb2tlbkFwaUtleTtcbn1cblxuY29uc3QgZGVmYXVsdEhlYWRlcnMgPSB7XG4gICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG59O1xuXG5sZXQgcmVmcmVzaFByb21pc2U6IFByb21pc2U8dm9pZD4gfCBudWxsID0gbnVsbDtcblxuYXN5bmMgZnVuY3Rpb24gZW5zdXJlUmVmcmVzaFRva2VuKCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAocmVmcmVzaFByb21pc2UpIHtcbiAgICByZXR1cm4gcmVmcmVzaFByb21pc2U7XG4gIH1cblxuICBjb25zdCB1c2VyU3RvcmUgPSB1c2VVc2VyU3RvcmUuZ2V0U3RhdGUoKTtcbiAgcmVmcmVzaFByb21pc2UgPSB1c2VyU3RvcmVcbiAgICAucmVmcmVzaFB1YmxpY1Rva2Vucyh7XG4gICAgICByZWZyZXNoVG9rZW5BcGlLZXk6IGdldFJlZnJlc2hUb2tlbkFwaUtleSgpLFxuICAgIH0pXG4gICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgcmVmcmVzaFByb21pc2UgPSBudWxsO1xuICAgIH0pO1xuXG4gIHJldHVybiByZWZyZXNoUHJvbWlzZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gYXV0aGVudGljYXRlZEZldGNoKFxuICBtZXRob2Q6IHN0cmluZyxcbiAgdXJsOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlcXVlc3RJbml0ID0ge31cbik6IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgY29uc3QgdG9rZW4gPSBDb29raWVzLmdldChBdXRoQ29va2llLlBVQkxJQ19JRF9UT0tFTik7XG5cbiAgaWYgKCF0b2tlbikge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gYXV0aGVudGljYXRpb24gdG9rZW4gZm91bmQnKTtcbiAgfVxuXG4gIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgLi4uZGVmYXVsdEhlYWRlcnMsXG4gICAgLi4ub3B0aW9ucy5oZWFkZXJzLFxuICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICB9O1xuXG4gIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAuLi5vcHRpb25zLFxuICAgIG1ldGhvZCxcbiAgICBoZWFkZXJzLFxuICB9O1xuXG4gIHJldHVybiBmZXRjaCh1cmwsIHBhcmFtcyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhcnNlUmVzcG9uc2UocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTx1bmtub3duPiB7XG4gIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpO1xuICBpZiAoIWNvbnRlbnRUeXBlIHx8ICFjb250ZW50VHlwZS5pbmNsdWRlcygnYXBwbGljYXRpb24vanNvbicpKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgY29uc3QgdGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgaWYgKCF0ZXh0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHRleHQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoeyBlcnJvciB9KTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgSlNPTiByZXNwb25zZSBmcm9tIHNlcnZlcicpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRocm93T25FcnJvclJlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSwgdGV4dDogc3RyaW5nKTogbmV2ZXIge1xuICBsZXQgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHRleHQpO1xuICAgIGVycm9yTWVzc2FnZSA9IHBhcnNlZD8uZXJyb3JzPy5bMF0gfHwgdGV4dCB8fCAnSW50ZXJuYWwgc2VydmVyIGVycm9yJztcbiAgfSBjYXRjaCB7XG4gICAgZXJyb3JNZXNzYWdlID0gdGV4dCB8fCAnSW50ZXJuYWwgc2VydmVyIGVycm9yJztcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXV0aGVudGljYXRlZFJlcXVlc3QoXG4gIG1ldGhvZDogc3RyaW5nLFxuICB1cmw6IHN0cmluZyxcbiAgb3B0aW9uczogUmVxdWVzdEluaXQgPSB7fVxuKTogUHJvbWlzZTx1bmtub3duPiB7XG4gIGFzeW5jIGZ1bmN0aW9uIGF0dGVtcHQoKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhdXRoZW50aWNhdGVkRmV0Y2gobWV0aG9kLCB1cmwsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICByZXR1cm4gcGFyc2VSZXNwb25zZShyZXNwb25zZSk7XG4gICAgfVxuXG4gICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICBpZiAoIXRleHQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHByb2Nlc3MgcmVxdWVzdCAtICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xuICAgIH1cblxuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMSkge1xuICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKCdVbmF1dGhvcml6ZWQnKSBhcyBFcnJvciAmIHsgc3RhdHVzPzogbnVtYmVyIH07XG4gICAgICBlcnIuc3RhdHVzID0gNDAxO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIHRocm93T25FcnJvclJlc3BvbnNlKHJlc3BvbnNlLCB0ZXh0KTtcbiAgfVxuXG4gIGNvbnN0IGhhc1Rva2VuID0gQ29va2llcy5nZXQoQXV0aENvb2tpZS5QVUJMSUNfSURfVE9LRU4pO1xuXG4gIGlmICghaGFzVG9rZW4pIHtcbiAgICBjb25zdCByZWZyZXNoVG9rZW4gPSBDb29raWVzLmdldChBdXRoQ29va2llLlBVQkxJQ19SRUZSRVNIX1RPS0VOKTtcbiAgICBpZiAocmVmcmVzaFRva2VuKSB7XG4gICAgICBhd2FpdCBlbnN1cmVSZWZyZXNoVG9rZW4oKTtcbiAgICAgIHJldHVybiBhd2FpdCBhdHRlbXB0KCk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignTm8gYXV0aGVudGljYXRpb24gdG9rZW4gZm91bmQnKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGF0dGVtcHQoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zdCBpczQwMSA9XG4gICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmXG4gICAgICAnc3RhdHVzJyBpbiBlcnJvciAmJlxuICAgICAgKGVycm9yIGFzIEVycm9yICYgeyBzdGF0dXM/OiBudW1iZXIgfSkuc3RhdHVzID09PSA0MDE7XG5cbiAgICBpZiAoIWlzNDAxKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG5cbiAgICBjb25zdCByZWZyZXNoVG9rZW4gPSBDb29raWVzLmdldChBdXRoQ29va2llLlBVQkxJQ19SRUZSRVNIX1RPS0VOKTtcbiAgICBpZiAoIXJlZnJlc2hUb2tlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmF1dGhvcml6ZWQnKTtcbiAgICB9XG5cbiAgICBhd2FpdCBlbnN1cmVSZWZyZXNoVG9rZW4oKTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgYXR0ZW1wdCgpO1xuICAgIH0gY2F0Y2ggKHJldHJ5RXJyb3IpIHtcbiAgICAgIGNvbnN0IHJldHJ5SXM0MDEgPVxuICAgICAgICByZXRyeUVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiZcbiAgICAgICAgJ3N0YXR1cycgaW4gcmV0cnlFcnJvciAmJlxuICAgICAgICAocmV0cnlFcnJvciBhcyBFcnJvciAmIHsgc3RhdHVzPzogbnVtYmVyIH0pLnN0YXR1cyA9PT0gNDAxO1xuXG4gICAgICBpZiAocmV0cnlJczQwMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYXV0aG9yaXplZCcpO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyByZXRyeUVycm9yO1xuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFJTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVFPO0FBQ1A7QUFDQTs7QUNwQkE7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ0E7QUFDUDtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJTzs7QUN2QkE7QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUNMTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNPO0FBQ0E7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUE87O0FDTFA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0JPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCTztBQUNQO0FBQ0E7O0FDRk87OzsifQ==
|
|
253
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZXMiOlsiLi4vc3JjL3NlcnZpY2VzL2F1dGgvdHlwZXMudHMiLCIuLi9zcmMvdHlwZXMvYW5hbHl0aWNzLnRzIiwiLi4vc3JjL2NvbnRleHQvYXV0aC1kaWFsb2ctcHJvdmlkZXIudHN4IiwiLi4vc3JjL2NvbnRleHQvaW5kZXgudHN4IiwiLi4vc3JjL3R5cGVzL3Rva2VuLnRzIiwiLi4vc3JjL3N0b3Jlcy90b2tlbi1zdG9yZS50cyIsIi4uL3NyYy9zZXJ2aWNlcy9wcm9maWxlL3R5cGVzLnRzIiwiLi4vc3JjL2NvbmZpZy9pbmRleC50cyIsIi4uL3NyYy9zdG9yZXMvdXNlci1zdG9yZS50cyIsIi4uL3NyYy9ob29rcy91c2UtdG9rZW5zLnRzIiwiLi4vc3JjL2hvb2tzL3VzZS11c2VyLnRzIiwiLi4vc3JjL2hvb2tzL3VzZS10b2tlbi1ldmVudC1saXN0ZW5lci50cyIsIi4uL3NyYy91dGlscy9hdXRoZW50aWNhdGVkLXJlcXVlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBFeGNoYW5nZVRva2Vuc1Jlc3BvbnNlIHtcbiAgYWNjZXNzX3Rva2VuOiBzdHJpbmc7XG4gIGV4cGlyZXNJbjogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJQcm9wcyB7XG4gIHVpZDogc3RyaW5nO1xuICBlbWFpbDogc3RyaW5nO1xuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xuICBwaG90b1VSTD86IHN0cmluZztcbiAgaGFuZGxlPzogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBTc29Vc2VyUHJvcHMge1xuICBzdWI6IHN0cmluZztcbiAgZW1haWw6IHN0cmluZztcbiAgZGlzcGxheU5hbWU6IHN0cmluZztcbiAgcGhvdG9VUkw/OiBzdHJpbmc7XG4gIGhhbmRsZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTc29WMkV4Y2hhbmdlUmVzcG9uc2Uge1xuICB0b2tlbjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25JblJlc3BvbnNlIHtcbiAgZGF0YToge1xuICAgIHVzZXI6IFVzZXJQcm9wcztcbiAgICB0b2tlbjogc3RyaW5nO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpcmViYXNlVXNlciB7XG4gIG5hbWU6IHN0cmluZztcbiAgcGljdHVyZTogc3RyaW5nO1xuICBvcmlnaW5hbEVtYWlsOiBzdHJpbmc7XG4gIHNhZmVEaXNwbGF5TmFtZTogc3RyaW5nO1xuICBzYWZlUGhvdG9VUkw6IHN0cmluZztcbiAgaW5pdGlhbGl6ZWQ6IGJvb2xlYW47XG4gIGxlZ2FjeUlEOiBzdHJpbmc7XG4gIGhhbmRsZTogc3RyaW5nO1xuICBpc3M6IHN0cmluZztcbiAgYXVkOiBzdHJpbmc7XG4gIGF1dGhfdGltZTogbnVtYmVyO1xuICB1c2VyX2lkOiBzdHJpbmc7XG4gIHN1Yjogc3RyaW5nO1xuICBpYXQ6IG51bWJlcjtcbiAgZXhwOiBudW1iZXI7XG4gIGVtYWlsOiBzdHJpbmc7XG4gIGVtYWlsX3ZlcmlmaWVkOiBib29sZWFuO1xuICBmaXJlYmFzZToge1xuICAgIGlkZW50aXRpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPjtcbiAgICBzaWduX2luX3Byb3ZpZGVyOiBzdHJpbmc7XG4gIH07XG59XG4iLCJ0eXBlIE51bGxhYmxlPFQ+ID0gVCB8IG51bGw7XG5cbmV4cG9ydCBlbnVtIEFuYWx5dGljc1dpZGdldFR5cGUge1xuICBBdmF0YXJQcm9maWxlID0gJ2F2YXRhci1wcm9maWxlJyxcbiAgQXZhdGFyQ2hhdCA9ICdhdmF0YXItY2hhdCcsXG4gIENvbW1lbnRzID0gJ2NvbW1lbnRzJyxcbiAgR2xvYmFsUHJvZmlsZSA9ICdnbG9iYWwtcHJvZmlsZScsXG4gIEdyb3VwQ2hhdCA9ICdncm91cC1jaGF0JyxcbiAgUG9sbHMgPSAncG9sbHMnLFxuICBVbml2ZXJzYWxTbmlwcGV0ID0gJ3VuaXZlcnNhbC1zbmlwcGV0Jyxcbn1cblxuZXhwb3J0IHR5cGUgVHJhY2tPcHRpb25zID0ge1xuICB3aWRnZXRJZDogc3RyaW5nIHwgbnVsbDtcbiAgd2lkZ2V0VHlwZTogQW5hbHl0aWNzV2lkZ2V0VHlwZTtcbiAgc2l0ZUlkOiBzdHJpbmc7XG4gIHJzV3JpdGVLZXk6IHN0cmluZztcbiAgcnNEYXRhUGxhbmVVcmw6IHN0cmluZztcbiAgdHJpZ2dlcjogc3RyaW5nO1xufTtcblxuZXhwb3J0IGVudW0gQW5hbHl0aWNzRXZlbnQge1xuICBBdXRoZW50aWNhdGlvbkNvbXBsZXRlZCA9ICdBdXRoZW50aWNhdGlvbiBDb21wbGV0ZWQnLFxuICBBdXRoZW50aWNhdGlvblN0YXJ0ZWQgPSAnQXV0aGVudGljYXRpb24gU3RhcnRlZCcsXG4gIEF1dGhlbnRpY2F0aW9uVmlld2VkID0gJ0F1dGhlbnRpY2F0aW9uIFZpZXdlZCcsXG59XG5cbmV4cG9ydCB0eXBlIFRyYWNrUHJvcHMgPSBOdWxsYWJsZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm9wcyB7XG4gIGFub255bW91c0lkPzogc3RyaW5nO1xuICB1c2VySWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVkZGVyQ29udGV4dCB7XG4gIGNoYW5uZWw6ICd3ZWInO1xuICBhbm9ueW1vdXNJZD86IHN0cmluZztcbiAgbG9jYWxlPzogc3RyaW5nO1xuICB1c2VyQWdlbnQ/OiBzdHJpbmc7XG4gIHRpbWV6b25lPzogc3RyaW5nO1xuICBvcz86IHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uPzogc3RyaW5nIH07XG4gIHBhZ2U/OiB7XG4gICAgcGF0aD86IHN0cmluZztcbiAgICByZWZlcnJlcj86IHN0cmluZztcbiAgICByZWZlcnJpbmdfZG9tYWluPzogc3RyaW5nO1xuICAgIHNlYXJjaD86IHN0cmluZztcbiAgICB0aXRsZT86IHN0cmluZztcbiAgICB1cmw/OiBzdHJpbmc7XG4gICAgaW5pdGlhbF9yZWZlcnJlcj86IHN0cmluZztcbiAgICBpbml0aWFsX3JlZmVycmluZ19kb21haW4/OiBzdHJpbmc7XG4gIH07XG4gIHNjcmVlbj86IHtcbiAgICBkZW5zaXR5PzogbnVtYmVyO1xuICAgIGhlaWdodD86IG51bWJlcjtcbiAgICB3aWR0aD86IG51bWJlcjtcbiAgICBpbm5lckhlaWdodD86IG51bWJlcjtcbiAgICBpbm5lcldpZHRoPzogbnVtYmVyO1xuICB9O1xuICBjYW1wYWlnbj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG4iLCJpbXBvcnQgeyBjcmVhdGVDb250ZXh0LCB1c2VDb250ZXh0LCB1c2VTdGF0ZSwgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgVXNlclByb3BzIH0gZnJvbSAnLi4vc2VydmljZXMvYXV0aC90eXBlcyc7XG5pbXBvcnQgeyBUcmFja09wdGlvbnMgfSBmcm9tICcuLi90eXBlcy9hbmFseXRpY3MnO1xuXG5pbnRlcmZhY2UgQXV0aERpYWxvZ0NvbnRleHRUeXBlIHtcbiAgaXNPcGVuOiBib29sZWFuO1xuICBhcHBOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGFwcERlc2NyaXB0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGxhbmd1YWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHRyYWNrT3B0aW9uczogVHJhY2tPcHRpb25zIHwgdW5kZWZpbmVkO1xuICBvbkF1dGhDb21wbGV0ZWQ6ICgodXNlcjogVXNlclByb3BzKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgb3BlbkRpYWxvZzogKG9wdGlvbnM6IE9wZW5EaWFsb2dPcHRpb25zKSA9PiB2b2lkO1xuICBjbG9zZURpYWxvZzogKCkgPT4gdm9pZDtcbiAgb25PcGVuQ2hhbmdlOiAob3BlbjogYm9vbGVhbikgPT4gdm9pZDtcbn1cblxuY29uc3QgQXV0aERpYWxvZ0NvbnRleHQgPSBjcmVhdGVDb250ZXh0PEF1dGhEaWFsb2dDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4oXG4gIHVuZGVmaW5lZFxuKTtcblxudHlwZSBPcGVuRGlhbG9nT3B0aW9ucyA9IHtcbiAgdHJhY2tPcHRpb25zOiBUcmFja09wdGlvbnM7XG4gIGFwcE5hbWU/OiBzdHJpbmc7XG4gIGxhbmd1YWdlPzogc3RyaW5nO1xuICBhcHBEZXNjcmlwdGlvbj86IHN0cmluZztcbiAgb25BdXRoQ29tcGxldGVkPzogKCkgPT4gKHVzZXI6IFVzZXJQcm9wcykgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCBjb25zdCBBdXRoRGlhbG9nUHJvdmlkZXIgPSAoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuOiBSZWFjdE5vZGUgfSkgPT4ge1xuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbYXBwTmFtZSwgc2V0QXBwTmFtZV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIGNvbnN0IFthcHBEZXNjcmlwdGlvbiwgc2V0QXBwRGVzY3JpcHRpb25dID0gdXNlU3RhdGU8c3RyaW5nIHwgdW5kZWZpbmVkPihcbiAgICB1bmRlZmluZWRcbiAgKTtcbiAgY29uc3QgW29uQXV0aENvbXBsZXRlZCwgc2V0T25BdXRoQ29tcGxldGVkXSA9IHVzZVN0YXRlPFxuICAgICgodXNlcjogVXNlclByb3BzKSA9PiB2b2lkKSB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIGNvbnN0IFt0cmFja09wdGlvbnMsIHNldFRyYWNrT3B0aW9uc10gPSB1c2VTdGF0ZTxUcmFja09wdGlvbnMgfCB1bmRlZmluZWQ+KFxuICAgIHVuZGVmaW5lZFxuICApO1xuICBjb25zdCBbbGFuZ3VhZ2UsIHNldExhbmd1YWdlXSA9IHVzZVN0YXRlPHN0cmluZyB8IHVuZGVmaW5lZD4oXG4gICAgdW5kZWZpbmVkXG4gICk7XG4gIGNvbnN0IG9wZW5EaWFsb2cgPSAoe1xuICAgIHRyYWNrT3B0aW9ucyxcbiAgICBhcHBOYW1lLFxuICAgIGxhbmd1YWdlLFxuICAgIGFwcERlc2NyaXB0aW9uLFxuICAgIG9uQXV0aENvbXBsZXRlZCxcbiAgfTogT3BlbkRpYWxvZ09wdGlvbnMpID0+IHtcbiAgICBzZXRJc09wZW4odHJ1ZSk7XG4gICAgc2V0VHJhY2tPcHRpb25zKHRyYWNrT3B0aW9ucyk7XG4gICAgc2V0QXBwTmFtZShhcHBOYW1lKTtcbiAgICBzZXRMYW5ndWFnZShsYW5ndWFnZSk7XG4gICAgc2V0QXBwRGVzY3JpcHRpb24oYXBwRGVzY3JpcHRpb24pO1xuICAgIHNldE9uQXV0aENvbXBsZXRlZChvbkF1dGhDb21wbGV0ZWQpO1xuICB9O1xuXG4gIGNvbnN0IGNsb3NlRGlhbG9nID0gKCkgPT4gc2V0SXNPcGVuKGZhbHNlKTtcbiAgY29uc3Qgb25PcGVuQ2hhbmdlID0gKG9wZW46IGJvb2xlYW4pID0+IHNldElzT3BlbihvcGVuKTtcblxuICByZXR1cm4gKFxuICAgIDxBdXRoRGlhbG9nQ29udGV4dC5Qcm92aWRlclxuICAgICAgdmFsdWU9e3tcbiAgICAgICAgaXNPcGVuLFxuICAgICAgICBhcHBOYW1lLFxuICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgYXBwRGVzY3JpcHRpb24sXG4gICAgICAgIHRyYWNrT3B0aW9ucyxcbiAgICAgICAgb25BdXRoQ29tcGxldGVkLFxuICAgICAgICBvcGVuRGlhbG9nLFxuICAgICAgICBjbG9zZURpYWxvZyxcbiAgICAgICAgb25PcGVuQ2hhbmdlLFxuICAgICAgfX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9BdXRoRGlhbG9nQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VBdXRoRGlhbG9nID0gKCkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChBdXRoRGlhbG9nQ29udGV4dCk7XG4gIGlmICghY29udGV4dCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlQXV0aERpYWxvZyBtdXN0IGJlIHVzZWQgd2l0aGluIGFuIEF1dGhEaWFsb2dQcm92aWRlcicpO1xuICB9XG4gIHJldHVybiBjb250ZXh0O1xufTtcbiIsImltcG9ydCB7IEF1dGhEaWFsb2dQcm92aWRlciB9IGZyb20gJy4vYXV0aC1kaWFsb2ctcHJvdmlkZXInO1xuaW1wb3J0IHsgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIgfSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO1xuaW1wb3J0IHsgVXNlclByb3ZpZGVyIH0gZnJvbSAnLi91c2VyLXByb3ZpZGVyJztcbmltcG9ydCB7IENvbmZpZ1Byb3ZpZGVyIH0gZnJvbSAnLi9jb25maWctcHJvdmlkZXInO1xuaW1wb3J0IEF1dGhEaWFsb2cgZnJvbSAnLi4vZGlhbG9nJztcbmltcG9ydCB7IEFub255bW91c1Rva2VuUHJvdmlkZXIgfSBmcm9tICcuL2Fub255bW91cy10b2tlbi1wcm92aWRlcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBBdXRoUHJvdmlkZXIoe1xuICBjaGlsZHJlbixcbiAgcXVlcnlDbGllbnQsXG4gIGVudmlyb25tZW50LFxufToge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICBxdWVyeUNsaWVudD86IFF1ZXJ5Q2xpZW50O1xuICBlbnZpcm9ubWVudD86ICdwcm9kdWN0aW9uJyB8ICdkZXZlbG9wbWVudCc7XG59KSB7XG4gIHF1ZXJ5Q2xpZW50ID0gcXVlcnlDbGllbnQgfHwgbmV3IFF1ZXJ5Q2xpZW50KCk7XG5cbiAgcmV0dXJuIChcbiAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgIDxDb25maWdQcm92aWRlciBlbnZpcm9ubWVudD17ZW52aXJvbm1lbnR9PlxuICAgICAgICA8VXNlclByb3ZpZGVyPlxuICAgICAgICAgIDxBdXRoRGlhbG9nUHJvdmlkZXI+XG4gICAgICAgICAgICA8QW5vbnltb3VzVG9rZW5Qcm92aWRlcj5cbiAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICA8QXV0aERpYWxvZyAvPlxuICAgICAgICAgICAgPC9Bbm9ueW1vdXNUb2tlblByb3ZpZGVyPlxuICAgICAgICAgIDwvQXV0aERpYWxvZ1Byb3ZpZGVyPlxuICAgICAgICA8L1VzZXJQcm92aWRlcj5cbiAgICAgIDwvQ29uZmlnUHJvdmlkZXI+XG4gICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgeyB1c2VBdXRoRGlhbG9nIH0gZnJvbSAnLi9hdXRoLWRpYWxvZy1wcm92aWRlcic7XG4iLCJleHBvcnQgZW51bSBUb2tlblR5cGUge1xuICBBTk9OWU1PVVMgPSAnYW5vbnltb3VzJyxcbiAgR1VFU1QgPSAnZ3Vlc3QnLFxuICBQVUJMSUMgPSAncHVibGljJyxcbiAgQ1VTVE9NID0gJ2N1c3RvbScsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5QYWlyIHtcbiAgaWRUb2tlbjogc3RyaW5nIHwgbnVsbDtcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IHR5cGUgVG9rZW5zTWFwID0gUmVjb3JkPFRva2VuVHlwZSwgVG9rZW5QYWlyPjtcblxuZXhwb3J0IGVudW0gQXV0aENvb2tpZSB7XG4gIFBVQkxJQ19JRF9UT0tFTiA9ICdhcmVuYS1hdXRoLXB1YmxpYy1pZC10b2tlbicsXG4gIFBVQkxJQ19SRUZSRVNIX1RPS0VOID0gJ2FyZW5hLWF1dGgtcHVibGljLXJlZnJlc2gtdG9rZW4nLFxuICBBTk9OWU1PVVNfSURfVE9LRU4gPSAnYXJlbmEtYXV0aC1hbm9ueW1vdXMtaWQtdG9rZW4nLFxuICBHVUVTVF9JRF9UT0tFTiA9ICdhcmVuYS1hdXRoLWd1ZXN0LWlkLXRva2VuJyxcbiAgQ1VTVE9NX0lEX1RPS0VOID0gJ2FyZW5hLWF1dGgtY3VzdG9tLWlkLXRva2VuJyxcbiAgQ1VTVE9NX1VTRVIgPSAnYXJlbmEtYXV0aC1jdXN0b20tdXNlcicsXG59XG4iLCJpbXBvcnQgeyBjcmVhdGUgfSBmcm9tICd6dXN0YW5kJztcbmltcG9ydCB7IHN1YnNjcmliZVdpdGhTZWxlY3RvciB9IGZyb20gJ3p1c3RhbmQvbWlkZGxld2FyZSc7XG5pbXBvcnQgQ29va2llcyBmcm9tICdqcy1jb29raWUnO1xuaW1wb3J0IHsgQXV0aENvb2tpZSwgVG9rZW5zTWFwLCBUb2tlblR5cGUgfSBmcm9tICcuLi90eXBlcy90b2tlbic7XG5pbXBvcnQgeyBkaXNwYXRjaFRva2VuVXBkYXRlZEV2ZW50IH0gZnJvbSAnLi4vdXRpbHMvZG9tLWV2ZW50cyc7XG5cbmludGVyZmFjZSBUb2tlblN0b3JlIHtcbiAgdG9rZW5zOiBUb2tlbnNNYXA7XG4gIGdldFRva2VuOiAodHlwZTogVG9rZW5UeXBlKSA9PiBzdHJpbmcgfCBudWxsO1xuICBnZXRNb3N0UHJpdmlsZWdlZFRva2VuOiAoXG4gICAgb3B0aW9ucz86IEFycmF5PFRva2VuVHlwZT5cbiAgKSA9PiB7IHR5cGU6IFRva2VuVHlwZTsgaWRUb2tlbjogc3RyaW5nIH0gfCBudWxsO1xuICBnZXRSZWZyZXNoVG9rZW46ICh0eXBlOiBUb2tlblR5cGUpID0+IHN0cmluZyB8IG51bGw7XG4gIHVwZGF0ZVB1YmxpY1Rva2VuczogKFxuICAgIGlkVG9rZW46IHN0cmluZyxcbiAgICByZWZyZXNoVG9rZW46IHN0cmluZyxcbiAgICBzb3VyY2U/OiBzdHJpbmdcbiAgKSA9PiB2b2lkO1xuICB1cGRhdGVBbm9ueW1vdXNUb2tlbjogKGlkVG9rZW46IHN0cmluZywgc291cmNlPzogc3RyaW5nKSA9PiB2b2lkO1xuICB1cGRhdGVHdWVzdFRva2VuczogKGlkVG9rZW46IHN0cmluZywgc291cmNlPzogc3RyaW5nKSA9PiB2b2lkO1xuICB1cGRhdGVDdXN0b21Ub2tlbjogKGlkVG9rZW46IHN0cmluZywgc291cmNlPzogc3RyaW5nKSA9PiB2b2lkO1xuICBjbGVhclRva2VuczogKHNvdXJjZT86IHN0cmluZykgPT4gdm9pZDtcbiAgY2xlYXJQdWJsaWNUb2tlbnM6IChzb3VyY2U/OiBzdHJpbmcpID0+IHZvaWQ7XG4gIGNsZWFyQW5vbnltb3VzVG9rZW5zOiAoc291cmNlPzogc3RyaW5nKSA9PiB2b2lkO1xuICBjbGVhckd1ZXN0VG9rZW5zOiAoc291cmNlPzogc3RyaW5nKSA9PiB2b2lkO1xuICBjbGVhckN1c3RvbVRva2VuczogKHNvdXJjZT86IHN0cmluZykgPT4gdm9pZDtcbiAgc2lsZW50VXBkYXRlUHVibGljVG9rZW5zOiAoaWRUb2tlbjogc3RyaW5nLCByZWZyZXNoVG9rZW46IHN0cmluZykgPT4gdm9pZDtcbiAgc2lsZW50VXBkYXRlQW5vbnltb3VzVG9rZW46IChpZFRva2VuOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHNpbGVudFVwZGF0ZUd1ZXN0VG9rZW5zOiAoaWRUb2tlbjogc3RyaW5nKSA9PiB2b2lkO1xuICBzaWxlbnRVcGRhdGVDdXN0b21Ub2tlbjogKGlkVG9rZW46IHN0cmluZykgPT4gdm9pZDtcbiAgc2lsZW50Q2xlYXJQdWJsaWNUb2tlbnM6ICgpID0+IHZvaWQ7XG4gIHNpbGVudENsZWFyQW5vbnltb3VzVG9rZW5zOiAoKSA9PiB2b2lkO1xuICBzaWxlbnRDbGVhckd1ZXN0VG9rZW5zOiAoKSA9PiB2b2lkO1xuICBzaWxlbnRDbGVhckN1c3RvbVRva2VuczogKCkgPT4gdm9pZDtcbn1cblxuY29uc3QgZGVmYXVsdFRva2VuczogVG9rZW5zTWFwID0ge1xuICBwdWJsaWM6IHtcbiAgICBpZFRva2VuOiBDb29raWVzLmdldChBdXRoQ29va2llLlBVQkxJQ19JRF9UT0tFTikgfHwgbnVsbCxcbiAgICByZWZyZXNoVG9rZW46IENvb2tpZXMuZ2V0KEF1dGhDb29raWUuUFVCTElDX1JFRlJFU0hfVE9LRU4pIHx8IG51bGwsXG4gIH0sXG4gIGFub255bW91czoge1xuICAgIGlkVG9rZW46IENvb2tpZXMuZ2V0KEF1dGhDb29raWUuQU5PTllNT1VTX0lEX1RPS0VOKSB8fCBudWxsLFxuICB9LFxuICBndWVzdDoge1xuICAgIGlkVG9rZW46IENvb2tpZXMuZ2V0KEF1dGhDb29raWUuR1VFU1RfSURfVE9LRU4pIHx8IG51bGwsXG4gIH0sXG4gIGN1c3RvbToge1xuICAgIGlkVG9rZW46IENvb2tpZXMuZ2V0KEF1dGhDb29raWUuQ1VTVE9NX0lEX1RPS0VOKSB8fCBudWxsLFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IHVzZVRva2VuU3RvcmUgPSBjcmVhdGU8VG9rZW5TdG9yZT4oKShcbiAgc3Vic2NyaWJlV2l0aFNlbGVjdG9yKChzZXQsIGdldCkgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZVB1YmxpY1Rva2Vuc0hlbHBlciA9IChcbiAgICAgIGlkVG9rZW46IHN0cmluZyxcbiAgICAgIHJlZnJlc2hUb2tlbjogc3RyaW5nLFxuICAgICAgZGlzcGF0Y2hFdmVudDogYm9vbGVhbiA9IHRydWUsXG4gICAgICBzb3VyY2U/OiBzdHJpbmdcbiAgICApID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgaWRUb2tlbiA9PT0gZ2V0KCkudG9rZW5zLnB1YmxpYy5pZFRva2VuICYmXG4gICAgICAgIHJlZnJlc2hUb2tlbiA9PT0gZ2V0KCkudG9rZW5zLnB1YmxpYy5yZWZyZXNoVG9rZW5cbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNldChzdGF0ZSA9PiAoe1xuICAgICAgICB0b2tlbnM6IHtcbiAgICAgICAgICAuLi5zdGF0ZS50b2tlbnMsXG4gICAgICAgICAgcHVibGljOiB7XG4gICAgICAgICAgICBpZFRva2VuLFxuICAgICAgICAgICAgcmVmcmVzaFRva2VuLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSk7XG5cbiAgICAgIENvb2tpZXMuc2V0KEF1dGhDb29raWUuUFVCTElDX0lEX1RPS0VOLCBpZFRva2VuLCB7XG4gICAgICAgIGV4cGlyZXM6IDEgLyAyNCxcbiAgICAgIH0pO1xuXG4gICAgICBDb29raWVzLnNldChBdXRoQ29va2llLlBVQkxJQ19SRUZSRVNIX1RPS0VOLCByZWZyZXNoVG9rZW4sIHtcbiAgICAgICAgZXhwaXJlczogMzAsXG4gICAgICB9KTtcblxuICAgICAgaWYgKGRpc3BhdGNoRXZlbnQpIHtcbiAgICAgICAgZGlzcGF0Y2hUb2tlblVwZGF0ZWRFdmVudChUb2tlblR5cGUuUFVCTElDLCB7XG4gICAgICAgICAgaWRUb2tlbixcbiAgICAgICAgICByZWZyZXNoVG9rZW4sXG4gICAgICAgICAgc291cmNlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgdXBkYXRlQW5vbnltb3VzVG9rZW5IZWxwZXIgPSAoXG4gICAgICBpZFRva2VuOiBzdHJpbmcsXG4gICAgICBkaXNwYXRjaEV2ZW50OiBib29sZWFuID0gdHJ1ZSxcbiAgICAgIHNvdXJjZT86IHN0cmluZ1xuICAgICkgPT4ge1xuICAgICAgaWYgKGlkVG9rZW4gPT09IGdldCgpLnRva2Vucy5hbm9ueW1vdXMuaWRUb2tlbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNldChzdGF0ZSA9PiAoe1xuICAgICAgICB0b2tlbnM6IHtcbiAgICAgICAgICAuLi5zdGF0ZS50b2tlbnMsXG4gICAgICAgICAgYW5vbnltb3VzOiB7XG4gICAgICAgICAgICBpZFRva2VuLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSk7XG5cbiAgICAgIENvb2tpZXMuc2V0KEF1dGhDb29raWUuQU5PTllNT1VTX0lEX1RPS0VOLCBpZFRva2VuLCB7XG4gICAgICAgIGV4cGlyZXM6IDEgLyAyNCxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZGlzcGF0Y2hFdmVudCkge1xuICAgICAgICBkaXNwYXRjaFRva2VuVXBkYXRlZEV2ZW50KFRva2VuVHlwZS5BTk9OWU1PVVMsIHsgaWRUb2tlbiwgc291cmNlIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCB1cGRhdGVHdWVzdFRva2Vuc0hlbHBlciA9IChcbiAgICAgIGlkVG9rZW46IHN0cmluZyxcbiAgICAgIGRpc3BhdGNoRXZlbnQ6IGJvb2xlYW4gPSB0cnVlLFxuICAgICAgc291cmNlPzogc3RyaW5nXG4gICAgKSA9PiB7XG4gICAgICBpZiAoaWRUb2tlbiA9PT0gZ2V0KCkudG9rZW5zLmd1ZXN0LmlkVG9rZW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzZXQoc3RhdGUgPT4gKHtcbiAgICAgICAgdG9rZW5zOiB7XG4gICAgICAgICAgLi4uc3RhdGUudG9rZW5zLFxuICAgICAgICAgIGd1ZXN0OiB7XG4gICAgICAgICAgICBpZFRva2VuLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSk7XG5cbiAgICAgIENvb2tpZXMuc2V0KEF1dGhDb29raWUuR1VFU1RfSURfVE9LRU4sIGlkVG9rZW4sIHtcbiAgICAgICAgZXhwaXJlczogMSAvIDI0LFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChkaXNwYXRjaEV2ZW50KSB7XG4gICAgICAgIGRpc3BhdGNoVG9rZW5VcGRhdGVkRXZlbnQoVG9rZW5UeXBlLkdVRVNULCB7IGlkVG9rZW4sIHNvdXJjZSB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgdXBkYXRlQ3VzdG9tVG9rZW5IZWxwZXIgPSAoXG4gICAgICBpZFRva2VuOiBzdHJpbmcsXG4gICAgICBkaXNwYXRjaEV2ZW50OiBib29sZWFuID0gdHJ1ZSxcbiAgICAgIHNvdXJjZT86IHN0cmluZ1xuICAgICkgPT4ge1xuICAgICAgaWYgKGlkVG9rZW4gPT09IGdldCgpLnRva2Vucy5jdXN0b20uaWRUb2tlbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNldChzdGF0ZSA9PiAoe1xuICAgICAgICB0b2tlbnM6IHtcbiAgICAgICAgICAuLi5zdGF0ZS50b2tlbnMsXG4gICAgICAgICAgY3VzdG9tOiB7IGlkVG9rZW4gfSxcbiAgICAgICAgfSxcbiAgICAgIH0pKTtcblxuICAgICAgQ29va2llcy5zZXQoQXV0aENvb2tpZS5DVVNUT01fSURfVE9LRU4sIGlkVG9rZW4pO1xuXG4gICAgICBpZiAoZGlzcGF0Y2hFdmVudCkge1xuICAgICAgICBkaXNwYXRjaFRva2VuVXBkYXRlZEV2ZW50KFRva2VuVHlwZS5DVVNUT00sIHsgaWRUb2tlbiwgc291cmNlIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBjbGVhclB1YmxpY1Rva2Vuc0hlbHBlciA9IChcbiAgICAgIGRpc3BhdGNoRXZlbnQ6IGJvb2xlYW4gPSB0cnVlLFxuICAgICAgc291cmNlPzogc3RyaW5nXG4gICAgKSA9PiB7XG4gICAgICBDb29raWVzLnJlbW92ZShBdXRoQ29va2llLlBVQkxJQ19JRF9UT0tFTik7XG4gICAgICBDb29raWVzLnJlbW92ZShBdXRoQ29va2llLlBVQkxJQ19SRUZSRVNIX1RPS0VOKTtcblxuICAgICAgc2V0KHN0YXRlID0+ICh7XG4gICAgICAgIHRva2Vuczoge1xuICAgICAgICAgIC4uLnN0YXRlLnRva2VucyxcbiAgICAgICAgICBwdWJsaWM6IHsgaWRUb2tlbjogbnVsbCwgcmVmcmVzaFRva2VuOiBudWxsIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSk7XG5cbiAgICAgIGlmIChkaXNwYXRjaEV2ZW50KSB7XG4gICAgICAgIGRpc3BhdGNoVG9rZW5VcGRhdGVkRXZlbnQoVG9rZW5UeXBlLlBVQkxJQywgeyBpZFRva2VuOiBudWxsLCBzb3VyY2UgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNsZWFyQW5vbnltb3VzVG9rZW5zSGVscGVyID0gKFxuICAgICAgZGlzcGF0Y2hFdmVudDogYm9vbGVhbiA9IHRydWUsXG4gICAgICBzb3VyY2U/OiBzdHJpbmdcbiAgICApID0+IHtcbiAgICAgIENvb2tpZXMucmVtb3ZlKEF1dGhDb29raWUuQU5PTllNT1VTX0lEX1RPS0VOKTtcblxuICAgICAgc2V0KHN0YXRlID0+ICh7XG4gICAgICAgIHRva2Vuczoge1xuICAgICAgICAgIC4uLnN0YXRlLnRva2VucyxcbiAgICAgICAgICBhbm9ueW1vdXM6IHsgaWRUb2tlbjogbnVsbCB9LFxuICAgICAgICB9LFxuICAgICAgfSkpO1xuXG4gICAgICBpZiAoZGlzcGF0Y2hFdmVudCkge1xuICAgICAgICBkaXNwYXRjaFRva2VuVXBkYXRlZEV2ZW50KFRva2VuVHlwZS5BTk9OWU1PVVMsIHtcbiAgICAgICAgICBpZFRva2VuOiBudWxsLFxuICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNsZWFyR3Vlc3RUb2tlbnNIZWxwZXIgPSAoXG4gICAgICBkaXNwYXRjaEV2ZW50OiBib29sZWFuID0gdHJ1ZSxcbiAgICAgIHNvdXJjZT86IHN0cmluZ1xuICAgICkgPT4ge1xuICAgICAgQ29va2llcy5yZW1vdmUoQXV0aENvb2tpZS5HVUVTVF9JRF9UT0tFTik7XG5cbiAgICAgIHNldChzdGF0ZSA9PiAoe1xuICAgICAgICB0b2tlbnM6IHtcbiAgICAgICAgICAuLi5zdGF0ZS50b2tlbnMsXG4gICAgICAgICAgZ3Vlc3Q6IHsgaWRUb2tlbjogbnVsbCB9LFxuICAgICAgICB9LFxuICAgICAgfSkpO1xuXG4gICAgICBpZiAoZGlzcGF0Y2hFdmVudCkge1xuICAgICAgICBkaXNwYXRjaFRva2VuVXBkYXRlZEV2ZW50KFRva2VuVHlwZS5HVUVTVCwgeyBpZFRva2VuOiBudWxsLCBzb3VyY2UgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNsZWFyQ3VzdG9tVG9rZW5zSGVscGVyID0gKFxuICAgICAgZGlzcGF0Y2hFdmVudDogYm9vbGVhbiA9IHRydWUsXG4gICAgICBzb3VyY2U/OiBzdHJpbmdcbiAgICApID0+IHtcbiAgICAgIENvb2tpZXMucmVtb3ZlKEF1dGhDb29raWUuQ1VTVE9NX0lEX1RPS0VOKTtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKEF1dGhDb29raWUuQ1VTVE9NX0lEX1RPS0VOKTtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKEF1dGhDb29raWUuQ1VTVE9NX1VTRVIpO1xuXG4gICAgICBzZXQoc3RhdGUgPT4gKHtcbiAgICAgICAgdG9rZW5zOiB7XG4gICAgICAgICAgLi4uc3RhdGUudG9rZW5zLFxuICAgICAgICAgIGN1c3RvbTogeyBpZFRva2VuOiBudWxsIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSk7XG5cbiAgICAgIGlmIChkaXNwYXRjaEV2ZW50KSB7XG4gICAgICAgIGRpc3BhdGNoVG9rZW5VcGRhdGVkRXZlbnQoVG9rZW5UeXBlLkNVU1RPTSwgeyBpZFRva2VuOiBudWxsLCBzb3VyY2UgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICB0b2tlbnM6IGRlZmF1bHRUb2tlbnMsXG5cbiAgICAgIGdldFRva2VuOiAodHlwZTogVG9rZW5UeXBlKSA9PiB7XG4gICAgICAgIHJldHVybiBnZXQoKS50b2tlbnNbdHlwZV0/LmlkVG9rZW4gfHwgbnVsbDtcbiAgICAgIH0sXG5cbiAgICAgIGdldE1vc3RQcml2aWxlZ2VkVG9rZW46IChcbiAgICAgICAgb3B0aW9ucyA9IFtUb2tlblR5cGUuUFVCTElDLCBUb2tlblR5cGUuR1VFU1QsIFRva2VuVHlwZS5BTk9OWU1PVVNdXG4gICAgICApID0+IHtcbiAgICAgICAgaWYgKGdldCgpLnRva2Vucy5jdXN0b20uaWRUb2tlbiAmJiBvcHRpb25zLmluY2x1ZGVzKFRva2VuVHlwZS5DVVNUT00pKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuVHlwZS5DVVNUT00sXG4gICAgICAgICAgICBpZFRva2VuOiBnZXQoKS50b2tlbnMuY3VzdG9tLmlkVG9rZW4hLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdldCgpLnRva2Vucy5wdWJsaWMuaWRUb2tlbiAmJiBvcHRpb25zLmluY2x1ZGVzKFRva2VuVHlwZS5QVUJMSUMpKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuVHlwZS5QVUJMSUMsXG4gICAgICAgICAgICBpZFRva2VuOiBnZXQoKS50b2tlbnMucHVibGljLmlkVG9rZW4hLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdldCgpLnRva2Vucy5ndWVzdC5pZFRva2VuICYmIG9wdGlvbnMuaW5jbHVkZXMoVG9rZW5UeXBlLkdVRVNUKSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBUb2tlblR5cGUuR1VFU1QsXG4gICAgICAgICAgICBpZFRva2VuOiBnZXQoKS50b2tlbnMuZ3Vlc3QuaWRUb2tlbiEsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgZ2V0KCkudG9rZW5zLmFub255bW91cy5pZFRva2VuICYmXG4gICAgICAgICAgb3B0aW9ucy5pbmNsdWRlcyhUb2tlblR5cGUuQU5PTllNT1VTKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogVG9rZW5UeXBlLkFOT05ZTU9VUyxcbiAgICAgICAgICAgIGlkVG9rZW46IGdldCgpLnRva2Vucy5hbm9ueW1vdXMuaWRUb2tlbiEsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0sXG5cbiAgICAgIGdldFJlZnJlc2hUb2tlbjogKHR5cGU6IFRva2VuVHlwZSkgPT4ge1xuICAgICAgICByZXR1cm4gZ2V0KCkudG9rZW5zW3R5cGVdPy5yZWZyZXNoVG9rZW4gfHwgbnVsbDtcbiAgICAgIH0sXG5cbiAgICAgIHVwZGF0ZVB1YmxpY1Rva2VuczogKFxuICAgICAgICBpZFRva2VuOiBzdHJpbmcsXG4gICAgICAgIHJlZnJlc2hUb2tlbjogc3RyaW5nLFxuICAgICAgICBzb3VyY2U/OiBzdHJpbmdcbiAgICAgICkgPT4ge1xuICAgICAgICB1cGRhdGVQdWJsaWNUb2tlbnNIZWxwZXIoaWRUb2tlbiwgcmVmcmVzaFRva2VuLCB0cnVlLCBzb3VyY2UpO1xuICAgICAgfSxcblxuICAgICAgdXBkYXRlQW5vbnltb3VzVG9rZW46IChpZFRva2VuOiBzdHJpbmcsIHNvdXJjZT86IHN0cmluZykgPT4ge1xuICAgICAgICB1cGRhdGVBbm9ueW1vdXNUb2tlbkhlbHBlcihpZFRva2VuLCB0cnVlLCBzb3VyY2UpO1xuICAgICAgfSxcblxuICAgICAgdXBkYXRlR3Vlc3RUb2tlbnM6IChpZFRva2VuOiBzdHJpbmcsIHNvdXJjZT86IHN0cmluZykgPT4ge1xuICAgICAgICB1cGRhdGVHdWVzdFRva2Vuc0hlbHBlcihpZFRva2VuLCB0cnVlLCBzb3VyY2UpO1xuICAgICAgfSxcblxuICAgICAgdXBkYXRlQ3VzdG9tVG9rZW46IChpZFRva2VuOiBzdHJpbmcsIHNvdXJjZT86IHN0cmluZykgPT4ge1xuICAgICAgICB1cGRhdGVDdXN0b21Ub2tlbkhlbHBlcihpZFRva2VuLCB0cnVlLCBzb3VyY2UpO1xuICAgICAgfSxcblxuICAgICAgY2xlYXJUb2tlbnM6IChzb3VyY2U/OiBzdHJpbmcpID0+IHtcbiAgICAgICAgY2xlYXJQdWJsaWNUb2tlbnNIZWxwZXIodHJ1ZSwgc291cmNlKTtcbiAgICAgICAgY2xlYXJBbm9ueW1vdXNUb2tlbnNIZWxwZXIodHJ1ZSwgc291cmNlKTtcbiAgICAgICAgY2xlYXJHdWVzdFRva2Vuc0hlbHBlcih0cnVlLCBzb3VyY2UpO1xuICAgICAgICBjbGVhckN1c3RvbVRva2Vuc0hlbHBlcih0cnVlLCBzb3VyY2UpO1xuICAgICAgfSxcblxuICAgICAgY2xlYXJQdWJsaWNUb2tlbnM6IChzb3VyY2U/OiBzdHJpbmcpID0+IHtcbiAgICAgICAgY2xlYXJQdWJsaWNUb2tlbnNIZWxwZXIodHJ1ZSwgc291cmNlKTtcbiAgICAgIH0sXG5cbiAgICAgIGNsZWFyQW5vbnltb3VzVG9rZW5zOiAoc291cmNlPzogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNsZWFyQW5vbnltb3VzVG9rZW5zSGVscGVyKHRydWUsIHNvdXJjZSk7XG4gICAgICB9LFxuXG4gICAgICBjbGVhckd1ZXN0VG9rZW5zOiAoc291cmNlPzogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNsZWFyR3Vlc3RUb2tlbnNIZWxwZXIodHJ1ZSwgc291cmNlKTtcbiAgICAgIH0sXG5cbiAgICAgIGNsZWFyQ3VzdG9tVG9rZW5zOiAoc291cmNlPzogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNsZWFyQ3VzdG9tVG9rZW5zSGVscGVyKHRydWUsIHNvdXJjZSk7XG4gICAgICB9LFxuXG4gICAgICBzaWxlbnRVcGRhdGVQdWJsaWNUb2tlbnM6IChpZFRva2VuOiBzdHJpbmcsIHJlZnJlc2hUb2tlbjogc3RyaW5nKSA9PiB7XG4gICAgICAgIHVwZGF0ZVB1YmxpY1Rva2Vuc0hlbHBlcihpZFRva2VuLCByZWZyZXNoVG9rZW4sIGZhbHNlKTtcbiAgICAgIH0sXG5cbiAgICAgIHNpbGVudFVwZGF0ZUFub255bW91c1Rva2VuOiAoaWRUb2tlbjogc3RyaW5nKSA9PiB7XG4gICAgICAgIHVwZGF0ZUFub255bW91c1Rva2VuSGVscGVyKGlkVG9rZW4sIGZhbHNlKTtcbiAgICAgIH0sXG5cbiAgICAgIHNpbGVudFVwZGF0ZUd1ZXN0VG9rZW5zOiAoaWRUb2tlbjogc3RyaW5nKSA9PiB7XG4gICAgICAgIHVwZGF0ZUd1ZXN0VG9rZW5zSGVscGVyKGlkVG9rZW4sIGZhbHNlKTtcbiAgICAgIH0sXG5cbiAgICAgIHNpbGVudFVwZGF0ZUN1c3RvbVRva2VuOiAoaWRUb2tlbjogc3RyaW5nKSA9PiB7XG4gICAgICAgIHVwZGF0ZUN1c3RvbVRva2VuSGVscGVyKGlkVG9rZW4sIGZhbHNlKTtcbiAgICAgIH0sXG5cbiAgICAgIHNpbGVudENsZWFyUHVibGljVG9rZW5zOiAoKSA9PiB7XG4gICAgICAgIGNsZWFyUHVibGljVG9rZW5zSGVscGVyKGZhbHNlKTtcbiAgICAgIH0sXG5cbiAgICAgIHNpbGVudENsZWFyQW5vbnltb3VzVG9rZW5zOiAoKSA9PiB7XG4gICAgICAgIGNsZWFyQW5vbnltb3VzVG9rZW5zSGVscGVyKGZhbHNlKTtcbiAgICAgIH0sXG5cbiAgICAgIHNpbGVudENsZWFyR3Vlc3RUb2tlbnM6ICgpID0+IHtcbiAgICAgICAgY2xlYXJHdWVzdFRva2Vuc0hlbHBlcihmYWxzZSk7XG4gICAgICB9LFxuXG4gICAgICBzaWxlbnRDbGVhckN1c3RvbVRva2VuczogKCkgPT4ge1xuICAgICAgICBjbGVhckN1c3RvbVRva2Vuc0hlbHBlcihmYWxzZSk7XG4gICAgICB9LFxuICAgIH07XG4gIH0pXG4pO1xuIiwiZXhwb3J0IGludGVyZmFjZSBQdWJsaWNQcm9maWxlIHtcbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gIGhhbmRsZT86IHN0cmluZztcbiAgYmlvPzogc3RyaW5nO1xuICBtZXRhZGF0YT86IHtcbiAgICBjb21tZW50Q291bnRCeVNpdGU/OiB7XG4gICAgICBbc2l0ZUlkOiBzdHJpbmddOiBudW1iZXI7XG4gICAgfTtcbiAgICBjb21tZW50UmVhY3Rpb25Db3VudEJ5U2l0ZT86IHtcbiAgICAgIFtzaXRlSWQ6IHN0cmluZ106IG51bWJlcjtcbiAgICB9O1xuICAgIG92ZXJhbGxDb21tZW50Q291bnQ/OiBudW1iZXI7XG4gICAgb3ZlcmFsbENvbW1lbnRSZWFjdGlvbkNvdW50PzogbnVtYmVyO1xuICB9O1xuICBwaG90b1VSTD86IHN0cmluZztcbn1cbiIsImV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnIHtcbiAgcHJvZmlsZVNlcnZpY2VVcmw6IHN0cmluZztcbiAgaWRlbnRpdHlTZXJ2aWNlVXJsOiBzdHJpbmc7XG4gIHJlZnJlc2hUb2tlbkFwaUtleTogc3RyaW5nO1xuICBhdXRoSWZyYW1lVXJsOiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiAnZGV2ZWxvcG1lbnQnIHwgJ3Byb2R1Y3Rpb24nO1xuICBkZWJ1ZzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgRW52aXJvbm1lbnQgPSAnZGV2ZWxvcG1lbnQnIHwgJ3Byb2R1Y3Rpb24nO1xuXG5leHBvcnQgY29uc3QgZ2V0Q29uZmlnID0gKGVudmlyb25tZW50OiBFbnZpcm9ubWVudCk6IENvbmZpZyA9PiB7XG4gIGNvbnN0IGlzRGV2ID0gZW52aXJvbm1lbnQgPT09ICdkZXZlbG9wbWVudCc7XG5cbiAgcmV0dXJuIHtcbiAgICBwcm9maWxlU2VydmljZVVybDogaXNEZXZcbiAgICAgID8gcHJvY2Vzcy5lbnYuUFJPRklMRV9TRVJWSUNFX1VSTF9ERVYgfHxcbiAgICAgICAgJ2h0dHBzOi8vcHJvZmlsZS1zZXJ2aWNlLWRldi5hcmVuYS5pbSdcbiAgICAgIDogcHJvY2Vzcy5lbnYuUFJPRklMRV9TRVJWSUNFX1VSTF9QUkQgfHxcbiAgICAgICAgJ2h0dHBzOi8vcHJvZmlsZS1zZXJ2aWNlLXByZC5hcmVuYS5pbScsXG4gICAgaWRlbnRpdHlTZXJ2aWNlVXJsOiBpc0RldlxuICAgICAgPyBwcm9jZXNzLmVudi5JREVOVElUWV9TRVJWSUNFX1VSTF9ERVYgfHxcbiAgICAgICAgJ2h0dHBzOi8vdG9rZW4tc2VydmljZS1kZXYuYXJlbmEuaW0nXG4gICAgICA6IHByb2Nlc3MuZW52LklERU5USVRZX1NFUlZJQ0VfVVJMX1BSRCB8fFxuICAgICAgICAnaHR0cHM6Ly90b2tlbi1zZXJ2aWNlLXByZC5hcmVuYS5pbScsXG4gICAgcmVmcmVzaFRva2VuQXBpS2V5OiBpc0RldlxuICAgICAgPyBwcm9jZXNzLmVudi5GSVJFQkFTRV9QVUJMSUNfQVBJX0tFWV9ERVYgfHxcbiAgICAgICAgJ0FJemFTeUNKaFdGQ0szaWNzOWtKMmVTZ1FEN2tXSFVzT3NKeVBkaydcbiAgICAgIDogcHJvY2Vzcy5lbnYuRklSRUJBU0VfUFVCTElDX0FQSV9LRVlfUFJEIHx8XG4gICAgICAgICdBSXphU3lELTl0U3JRV243M1MwcW02QnFFSDUtMTJIcThMMGVUc1EnLFxuICAgIGF1dGhJZnJhbWVVcmw6IGlzRGV2XG4gICAgICA/IHByb2Nlc3MuZW52LkFVVEhfSUZSQU1FX1VSTF9ERVYgfHwgJ2h0dHBzOi8vYXV0aDIuZGV2LmFyZW5hLmltJ1xuICAgICAgOiBwcm9jZXNzLmVudi5BVVRIX0lGUkFNRV9VUkxfUFJEIHx8ICdodHRwczovL2F1dGgyLmFyZW5hLmltJyxcbiAgICBlbnZpcm9ubWVudCxcbiAgICBkZWJ1ZzogZW52aXJvbm1lbnQgPT09ICdkZXZlbG9wbWVudCcsXG4gIH07XG59O1xuXG5leHBvcnQge1xuICBzZXRSdW50aW1lRW52aXJvbm1lbnQsXG4gIGdldFJ1bnRpbWVFbnZpcm9ubWVudCxcbn0gZnJvbSAnLi9ydW50aW1lLWVudmlyb25tZW50JztcbiIsImltcG9ydCB7IGNyZWF0ZSB9IGZyb20gJ3p1c3RhbmQnO1xuaW1wb3J0IHsgc3Vic2NyaWJlV2l0aFNlbGVjdG9yIH0gZnJvbSAnenVzdGFuZC9taWRkbGV3YXJlJztcbmltcG9ydCBDb29raWVzIGZyb20gJ2pzLWNvb2tpZSc7XG5pbXBvcnQge1xuICBVc2VyUHJvcHMsXG4gIEZpcmViYXNlVXNlcixcbiAgU3NvVXNlclByb3BzLFxuICBTc29WMkV4Y2hhbmdlUmVzcG9uc2UsXG59IGZyb20gJy4uL3NlcnZpY2VzL2F1dGgvdHlwZXMnO1xuaW1wb3J0IHsgand0RGVjb2RlIH0gZnJvbSAnand0LWRlY29kZSc7XG5pbXBvcnQgeyB0eXBlIFB1YmxpY1Byb2ZpbGUgfSBmcm9tICcuLi9zZXJ2aWNlcy9wcm9maWxlL3R5cGVzJztcbmltcG9ydCB7IHVzZVRva2VuU3RvcmUgfSBmcm9tICcuL3Rva2VuLXN0b3JlJztcbmltcG9ydCB7IEF1dGhDb29raWUgfSBmcm9tICcuLi90eXBlcy90b2tlbic7XG5pbXBvcnQgeyByZXF1ZXN0IH0gZnJvbSAnLi4vdXRpbHMvcmVxdWVzdCc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCwgZ2V0Q29uZmlnIH0gZnJvbSAnLi4vY29uZmlnJztcblxuaW50ZXJmYWNlIFVzZXJTdG9yZSB7XG4gIHVzZXI6IFVzZXJQcm9wcyB8IG51bGw7XG4gIHB1YmxpY1Byb2ZpbGU6IFB1YmxpY1Byb2ZpbGUgfCBudWxsO1xuICByZWZyZXNoZWRUb2tlbkxvYWRlZDogYm9vbGVhbjtcbiAgc2V0VXNlcjogKHVzZXI6IFVzZXJQcm9wcyB8IG51bGwpID0+IHZvaWQ7XG4gIHNldFB1YmxpY1Byb2ZpbGU6IChwdWJsaWNQcm9maWxlOiBQdWJsaWNQcm9maWxlIHwgbnVsbCkgPT4gdm9pZDtcbiAgbG9nb3V0OiAoKSA9PiB2b2lkO1xuICByZWZyZXNoUHVibGljVG9rZW5zOiAoY29uZmlnOiB7XG4gICAgcmVmcmVzaFRva2VuQXBpS2V5OiBzdHJpbmc7XG4gIH0pID0+IFByb21pc2U8dm9pZD47XG4gIHNldFVzZXJCeVRva2VuSWQ6IChpZFRva2VuOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGxvYWRTdG9yZWRVc2VyOiAoY29uZmlnPzogeyByZWZyZXNoVG9rZW5BcGlLZXk6IHN0cmluZyB9KSA9PiBQcm9taXNlPHZvaWQ+O1xuICBzc29WMkV4Y2hhbmdlOiAoXG4gICAgc3NvU291cmNlSUQ6IHN0cmluZyxcbiAgICBqd3Q6IHN0cmluZyxcbiAgICBlbnY/OiBFbnZpcm9ubWVudFxuICApID0+IFByb21pc2U8U3NvVjJFeGNoYW5nZVJlc3BvbnNlPjtcbn1cblxuZXhwb3J0IGNvbnN0IHVzZVVzZXJTdG9yZSA9IGNyZWF0ZTxVc2VyU3RvcmU+KCkoXG4gIHN1YnNjcmliZVdpdGhTZWxlY3Rvcigoc2V0LCBnZXQpID0+ICh7XG4gICAgdXNlcjogbnVsbCxcbiAgICBwdWJsaWNQcm9maWxlOiBudWxsLFxuICAgIHJlZnJlc2hlZFRva2VuTG9hZGVkOiBmYWxzZSxcblxuICAgIHNldFVzZXI6ICh1c2VyOiBVc2VyUHJvcHMgfCBudWxsKSA9PiB7XG4gICAgICBzZXQoeyB1c2VyIH0pO1xuICAgIH0sXG5cbiAgICBzZXRQdWJsaWNQcm9maWxlOiAocHVibGljUHJvZmlsZTogUHVibGljUHJvZmlsZSB8IG51bGwpID0+IHtcbiAgICAgIHNldCh7IHB1YmxpY1Byb2ZpbGUgfSk7XG4gICAgfSxcblxuICAgIHNldFVzZXJCeVRva2VuSWQ6IChpZFRva2VuOiBzdHJpbmcpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHVzZXIgPSBqd3REZWNvZGU8RmlyZWJhc2VVc2VyPihpZFRva2VuKTtcbiAgICAgICAgY29uc3QgdXNlclByb3BzOiBVc2VyUHJvcHMgPSB7XG4gICAgICAgICAgdWlkOiB1c2VyLnVzZXJfaWQsXG4gICAgICAgICAgZGlzcGxheU5hbWU6IHVzZXIuc2FmZURpc3BsYXlOYW1lLFxuICAgICAgICAgIGVtYWlsOiB1c2VyLmVtYWlsLFxuICAgICAgICAgIHBob3RvVVJMOiB1c2VyLnNhZmVQaG90b1VSTCxcbiAgICAgICAgICBoYW5kbGU6IHVzZXIuaGFuZGxlLFxuICAgICAgICB9O1xuICAgICAgICBzZXQoeyB1c2VyOiB1c2VyUHJvcHMgfSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbG9nb3V0OiAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB0b2tlblN0b3JlID0gdXNlVG9rZW5TdG9yZS5nZXRTdGF0ZSgpO1xuICAgICAgICB0b2tlblN0b3JlLmNsZWFyUHVibGljVG9rZW5zKCk7XG4gICAgICAgIHRva2VuU3RvcmUuY2xlYXJDdXN0b21Ub2tlbnMoKTtcbiAgICAgICAgc2V0KHsgdXNlcjogbnVsbCB9KTtcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2FyZW5hLWNvbW1lbnRzLWxvZ291dCcpKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICByZWZyZXNoUHVibGljVG9rZW5zOiBhc3luYyAoY29uZmlnOiB7IHJlZnJlc2hUb2tlbkFwaUtleTogc3RyaW5nIH0pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlZnJlc2hUb2tlbiA9IENvb2tpZXMuZ2V0KEF1dGhDb29raWUuUFVCTElDX1JFRlJFU0hfVE9LRU4pO1xuXG4gICAgICAgIGlmICghcmVmcmVzaFRva2VuKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyByZWZyZXNoIHRva2VuIGZvdW5kJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcmVmaXggPSAnaHR0cHM6Ly9zZWN1cmV0b2tlbi5nb29nbGVhcGlzLmNvbS92MS90b2tlbj9rZXk9JztcbiAgICAgICAgY29uc3QgYXBpS2V5ID0gY29uZmlnLnJlZnJlc2hUb2tlbkFwaUtleTtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7cHJlZml4fSR7YXBpS2V5fWA7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgICAgICByZWZyZXNoX3Rva2VuOiByZWZyZXNoVG9rZW4sXG4gICAgICAgICAgICBncmFudF90eXBlOiAncmVmcmVzaF90b2tlbicsXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuXG4gICAgICAgIGNvbnN0IHsgc2V0VXNlckJ5VG9rZW5JZCB9ID0gZ2V0KCk7XG4gICAgICAgIHNldFVzZXJCeVRva2VuSWQoZGF0YS5pZF90b2tlbik7XG5cbiAgICAgICAgY29uc3QgdG9rZW5TdG9yZSA9IHVzZVRva2VuU3RvcmUuZ2V0U3RhdGUoKTtcbiAgICAgICAgdG9rZW5TdG9yZS51cGRhdGVQdWJsaWNUb2tlbnMoZGF0YS5pZF90b2tlbiwgZGF0YS5yZWZyZXNoX3Rva2VuKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICBjb25zdCB7IGxvZ291dCB9ID0gZ2V0KCk7XG4gICAgICAgIGxvZ291dCgpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBsb2FkU3RvcmVkVXNlcjogYXN5bmMgKGNvbmZpZz86IHsgcmVmcmVzaFRva2VuQXBpS2V5OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgY29uc3QgcHVibGljSWRUb2tlbiA9IENvb2tpZXMuZ2V0KEF1dGhDb29raWUuUFVCTElDX0lEX1RPS0VOKTtcbiAgICAgIGNvbnN0IHB1YmxpY1JlZnJlc2hUb2tlbiA9IENvb2tpZXMuZ2V0KEF1dGhDb29raWUuUFVCTElDX1JFRlJFU0hfVE9LRU4pO1xuICAgICAgY29uc3QgY3VzdG9tSWRUb2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKEF1dGhDb29raWUuQ1VTVE9NX0lEX1RPS0VOKTtcbiAgICAgIGNvbnN0IGN1c3RvbVVzZXIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShBdXRoQ29va2llLkNVU1RPTV9VU0VSKTtcblxuICAgICAgaWYgKCEhY3VzdG9tSWRUb2tlbiAmJiAhIWN1c3RvbVVzZXIpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVXNlciA9IEpTT04ucGFyc2UoY3VzdG9tVXNlcik7XG5cbiAgICAgICAgc2V0KHsgdXNlcjogcGFyc2VkVXNlciB9KTtcblxuICAgICAgICBjb25zdCB0b2tlblN0b3JlID0gdXNlVG9rZW5TdG9yZS5nZXRTdGF0ZSgpO1xuICAgICAgICB0b2tlblN0b3JlLnVwZGF0ZUN1c3RvbVRva2VuKGN1c3RvbUlkVG9rZW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHB1YmxpY0lkVG9rZW4pIHtcbiAgICAgICAgICBjb25zdCB7IHNldFVzZXJCeVRva2VuSWQgfSA9IGdldCgpO1xuICAgICAgICAgIHNldFVzZXJCeVRva2VuSWQocHVibGljSWRUb2tlbik7XG4gICAgICAgIH0gZWxzZSBpZiAocHVibGljUmVmcmVzaFRva2VuICYmIGNvbmZpZykge1xuICAgICAgICAgIGNvbnN0IHsgcmVmcmVzaFB1YmxpY1Rva2VucyB9ID0gZ2V0KCk7XG4gICAgICAgICAgYXdhaXQgcmVmcmVzaFB1YmxpY1Rva2Vucyhjb25maWcpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNldCh7IHJlZnJlc2hlZFRva2VuTG9hZGVkOiB0cnVlIH0pO1xuICAgIH0sXG5cbiAgICBzc29WMkV4Y2hhbmdlOiBhc3luYyAoXG4gICAgICBzc29Tb3VyY2VJRDogc3RyaW5nLFxuICAgICAgand0OiBzdHJpbmcsXG4gICAgICBlbnY/OiBFbnZpcm9ubWVudFxuICAgICkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKGVudiA/PyAncHJvZHVjdGlvbicpO1xuICAgICAgICBjb25zdCBwcm9maWxlVXJsID0gY29uZmlnLnByb2ZpbGVTZXJ2aWNlVXJsO1xuXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3Byb2ZpbGVVcmx9L3Nzby9zb3VyY2VzLyR7c3NvU291cmNlSUR9L3VzZXJgO1xuICAgICAgICBjb25zdCByZXNwb25zZTogU3NvVjJFeGNoYW5nZVJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdCgnUE9TVCcsIHVybCwge1xuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgc2lnbmVkVXNlckRhdGE6IGp3dCB9KSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgY29uc3QgZGVjb2RlZFVzZXIgPSBqd3REZWNvZGU8U3NvVXNlclByb3BzPihyZXNwb25zZS50b2tlbik7XG5cbiAgICAgICAgICBjb25zdCB7IHNldFVzZXIsIHNldFB1YmxpY1Byb2ZpbGUgfSA9IGdldCgpO1xuXG4gICAgICAgICAgc2V0VXNlcih7XG4gICAgICAgICAgICB1aWQ6IGRlY29kZWRVc2VyPy5zdWIsXG4gICAgICAgICAgICBlbWFpbDogZGVjb2RlZFVzZXI/LmVtYWlsLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6IGRlY29kZWRVc2VyPy5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgIHBob3RvVVJMOiBkZWNvZGVkVXNlcj8ucGhvdG9VUkwsXG4gICAgICAgICAgICBoYW5kbGU6IGRlY29kZWRVc2VyPy5oYW5kbGUsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBzZXRQdWJsaWNQcm9maWxlKHtcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBkZWNvZGVkVXNlcj8uZGlzcGxheU5hbWUsXG4gICAgICAgICAgICBwaG90b1VSTDogZGVjb2RlZFVzZXI/LnBob3RvVVJMLFxuICAgICAgICAgICAgaGFuZGxlOiBkZWNvZGVkVXNlcj8uaGFuZGxlLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3QgdG9rZW5TdG9yZSA9IHVzZVRva2VuU3RvcmUuZ2V0U3RhdGUoKTtcbiAgICAgICAgICB0b2tlblN0b3JlLnVwZGF0ZUN1c3RvbVRva2VuKHJlc3BvbnNlLnRva2VuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NTTyBWMiBFeGNoYW5nZSBmYWlsZWQ6JywgZXJyb3IpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9LFxuICB9KSlcbik7XG4iLCJpbXBvcnQgeyB1c2VUb2tlblN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzL3Rva2VuLXN0b3JlJztcbmltcG9ydCB7IHVzZVRva2VuRXZlbnRMaXN0ZW5lciB9IGZyb20gJy4vdXNlLXRva2VuLWV2ZW50LWxpc3RlbmVyJztcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVRva2VucygpIHtcbiAgY29uc3QgZ2V0VG9rZW4gPSB1c2VUb2tlblN0b3JlKHN0YXRlID0+IHN0YXRlLmdldFRva2VuKTtcbiAgY29uc3QgZ2V0TW9zdFByaXZpbGVnZWRUb2tlbiA9IHVzZVRva2VuU3RvcmUoXG4gICAgc3RhdGUgPT4gc3RhdGUuZ2V0TW9zdFByaXZpbGVnZWRUb2tlblxuICApO1xuICBjb25zdCBnZXRSZWZyZXNoVG9rZW4gPSB1c2VUb2tlblN0b3JlKHN0YXRlID0+IHN0YXRlLmdldFJlZnJlc2hUb2tlbik7XG4gIGNvbnN0IHVwZGF0ZVB1YmxpY1Rva2VucyA9IHVzZVRva2VuU3RvcmUoc3RhdGUgPT4gc3RhdGUudXBkYXRlUHVibGljVG9rZW5zKTtcbiAgY29uc3QgdXBkYXRlQW5vbnltb3VzVG9rZW4gPSB1c2VUb2tlblN0b3JlKFxuICAgIHN0YXRlID0+IHN0YXRlLnVwZGF0ZUFub255bW91c1Rva2VuXG4gICk7XG4gIGNvbnN0IHVwZGF0ZUd1ZXN0VG9rZW5zID0gdXNlVG9rZW5TdG9yZShzdGF0ZSA9PiBzdGF0ZS51cGRhdGVHdWVzdFRva2Vucyk7XG4gIGNvbnN0IHVwZGF0ZUN1c3RvbVRva2VuID0gdXNlVG9rZW5TdG9yZShzdGF0ZSA9PiBzdGF0ZS51cGRhdGVDdXN0b21Ub2tlbik7XG4gIGNvbnN0IGNsZWFyVG9rZW5zID0gdXNlVG9rZW5TdG9yZShzdGF0ZSA9PiBzdGF0ZS5jbGVhclRva2Vucyk7XG4gIGNvbnN0IGNsZWFyUHVibGljVG9rZW5zID0gdXNlVG9rZW5TdG9yZShzdGF0ZSA9PiBzdGF0ZS5jbGVhclB1YmxpY1Rva2Vucyk7XG4gIGNvbnN0IGNsZWFyQ3VzdG9tVG9rZW5zID0gdXNlVG9rZW5TdG9yZShzdGF0ZSA9PiBzdGF0ZS5jbGVhckN1c3RvbVRva2Vucyk7XG5cbiAgY29uc3QgeyBldmVudFNvdXJjZSB9ID0gdXNlVG9rZW5FdmVudExpc3RlbmVyKCk7XG5cbiAgcmV0dXJuIHtcbiAgICBnZXRUb2tlbixcbiAgICBnZXRNb3N0UHJpdmlsZWdlZFRva2VuLFxuICAgIGdldFJlZnJlc2hUb2tlbixcbiAgICB1cGRhdGVQdWJsaWNUb2tlbnM6IChpZFRva2VuOiBzdHJpbmcsIHJlZnJlc2hUb2tlbjogc3RyaW5nKSA9PlxuICAgICAgdXBkYXRlUHVibGljVG9rZW5zKGlkVG9rZW4sIHJlZnJlc2hUb2tlbiwgZXZlbnRTb3VyY2UpLFxuICAgIHVwZGF0ZUFub255bW91c1Rva2VuOiAoaWRUb2tlbjogc3RyaW5nKSA9PlxuICAgICAgdXBkYXRlQW5vbnltb3VzVG9rZW4oaWRUb2tlbiwgZXZlbnRTb3VyY2UpLFxuICAgIHVwZGF0ZUd1ZXN0VG9rZW5zOiAoaWRUb2tlbjogc3RyaW5nKSA9PlxuICAgICAgdXBkYXRlR3Vlc3RUb2tlbnMoaWRUb2tlbiwgZXZlbnRTb3VyY2UpLFxuICAgIHVwZGF0ZUN1c3RvbVRva2VuOiAoaWRUb2tlbjogc3RyaW5nKSA9PlxuICAgICAgdXBkYXRlQ3VzdG9tVG9rZW4oaWRUb2tlbiwgZXZlbnRTb3VyY2UpLFxuICAgIGNsZWFyVG9rZW5zOiAoKSA9PiBjbGVhclRva2VucyhldmVudFNvdXJjZSksXG4gICAgY2xlYXJQdWJsaWNUb2tlbnM6ICgpID0+IGNsZWFyUHVibGljVG9rZW5zKGV2ZW50U291cmNlKSxcbiAgICBjbGVhckN1c3RvbVRva2VuczogKCkgPT4gY2xlYXJDdXN0b21Ub2tlbnMoZXZlbnRTb3VyY2UpLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlVG9rZW4odHlwZTogJ2Fub255bW91cycgfCAnZ3Vlc3QnIHwgJ3B1YmxpYycgfCAnY3VzdG9tJykge1xuICByZXR1cm4gdXNlVG9rZW5TdG9yZShzdGF0ZSA9PiBzdGF0ZS50b2tlbnNbdHlwZV0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlVG9rZW5WYWx1ZShcbiAgdHlwZTogJ2Fub255bW91cycgfCAnZ3Vlc3QnIHwgJ3B1YmxpYycgfCAnY3VzdG9tJ1xuKSB7XG4gIHJldHVybiB1c2VUb2tlblN0b3JlKHN0YXRlID0+IHN0YXRlLnRva2Vuc1t0eXBlXT8uaWRUb2tlbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZWZyZXNoVG9rZW4odHlwZTogJ2Fub255bW91cycgfCAnZ3Vlc3QnIHwgJ3B1YmxpYycpIHtcbiAgcmV0dXJuIHVzZVRva2VuU3RvcmUoc3RhdGUgPT4gc3RhdGUudG9rZW5zW3R5cGVdPy5yZWZyZXNoVG9rZW4pO1xufVxuIiwiaW1wb3J0IHsgdXNlUHJvZmlsZVNlcnZpY2VzIH0gZnJvbSAnLi4vc2VydmljZXMvcHJvZmlsZS91c2UtcHJvZmlsZS1zZXJ2aWNlcyc7XG5pbXBvcnQgeyB1c2VVc2VyU3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvdXNlci1zdG9yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VVc2VyKCkge1xuICByZXR1cm4gdXNlVXNlclN0b3JlKHN0YXRlID0+IHN0YXRlLnVzZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUHVibGljUHJvZmlsZSgpIHtcbiAgcmV0dXJuIHVzZVVzZXJTdG9yZShzdGF0ZSA9PiBzdGF0ZS5wdWJsaWNQcm9maWxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJlZnJlc2hlZFRva2VuTG9hZGVkKCkge1xuICByZXR1cm4gdXNlVXNlclN0b3JlKHN0YXRlID0+IHN0YXRlLnJlZnJlc2hlZFRva2VuTG9hZGVkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVVzZXJBY3Rpb25zKCkge1xuICBjb25zdCBzZXRVc2VyID0gdXNlVXNlclN0b3JlKHN0YXRlID0+IHN0YXRlLnNldFVzZXIpO1xuICBjb25zdCBzZXRQdWJsaWNQcm9maWxlID0gdXNlVXNlclN0b3JlKHN0YXRlID0+IHN0YXRlLnNldFB1YmxpY1Byb2ZpbGUpO1xuICBjb25zdCBsb2dvdXQgPSB1c2VVc2VyU3RvcmUoc3RhdGUgPT4gc3RhdGUubG9nb3V0KTtcbiAgY29uc3QgcmVmcmVzaFB1YmxpY1Rva2VucyA9IHVzZVVzZXJTdG9yZShzdGF0ZSA9PiBzdGF0ZS5yZWZyZXNoUHVibGljVG9rZW5zKTtcbiAgY29uc3Qgc2V0VXNlckJ5VG9rZW5JZCA9IHVzZVVzZXJTdG9yZShzdGF0ZSA9PiBzdGF0ZS5zZXRVc2VyQnlUb2tlbklkKTtcbiAgY29uc3QgbG9hZFN0b3JlZFVzZXIgPSB1c2VVc2VyU3RvcmUoc3RhdGUgPT4gc3RhdGUubG9hZFN0b3JlZFVzZXIpO1xuICBjb25zdCBzc29WMkV4Y2hhbmdlID0gdXNlVXNlclN0b3JlKHN0YXRlID0+IHN0YXRlLnNzb1YyRXhjaGFuZ2UpO1xuICBcblxuICByZXR1cm4ge1xuICAgIHNldFVzZXIsXG4gICAgc2V0UHVibGljUHJvZmlsZSxcbiAgICBsb2dvdXQsXG4gICAgcmVmcmVzaFB1YmxpY1Rva2VucyxcbiAgICBzZXRVc2VyQnlUb2tlbklkLFxuICAgIGxvYWRTdG9yZWRVc2VyLFxuICAgIHNzb1YyRXhjaGFuZ2UsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VVcGRhdGVQcm9maWxlKCkge1xuICBjb25zdCB7IHVwZGF0ZVB1YmxpY1Byb2ZpbGUgfSA9IHVzZVByb2ZpbGVTZXJ2aWNlcygpO1xuICByZXR1cm4ge1xuICAgIHVwZGF0ZVB1YmxpY1Byb2ZpbGUsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VVc2VyV2l0aFByb2ZpbGUoKSB7XG4gIGNvbnN0IHVzZXIgPSB1c2VVc2VyU3RvcmUoc3RhdGUgPT4gc3RhdGUudXNlcik7XG4gIGNvbnN0IHB1YmxpY1Byb2ZpbGUgPSB1c2VVc2VyU3RvcmUoc3RhdGUgPT4gc3RhdGUucHVibGljUHJvZmlsZSk7XG4gIGNvbnN0IHJlZnJlc2hlZFRva2VuTG9hZGVkID0gdXNlVXNlclN0b3JlKFxuICAgIHN0YXRlID0+IHN0YXRlLnJlZnJlc2hlZFRva2VuTG9hZGVkXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICB1c2VyLFxuICAgIHB1YmxpY1Byb2ZpbGUsXG4gICAgcmVmcmVzaGVkVG9rZW5Mb2FkZWQsXG4gIH07XG59XG5cbiIsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgVG9rZW5UeXBlIH0gZnJvbSAnLi4vdHlwZXMvdG9rZW4nO1xuaW1wb3J0IHsgdXNlVG9rZW5TdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy90b2tlbi1zdG9yZSc7XG5pbXBvcnQgeyBUT0tFTl9VUERBVEVEX0VWRU5UIH0gZnJvbSAnLi4vdXRpbHMvZG9tLWV2ZW50cyc7XG5cbmludGVyZmFjZSBUb2tlblVwZGF0ZUV2ZW50IHtcbiAgZGV0YWlsOiB7XG4gICAgaWRUb2tlbjogc3RyaW5nIHwgbnVsbDtcbiAgICByZWZyZXNoVG9rZW4/OiBzdHJpbmcgfCBudWxsO1xuICAgIHR5cGU6IFRva2VuVHlwZTtcbiAgICBzb3VyY2U/OiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VUb2tlbkV2ZW50TGlzdGVuZXIoKSB7XG4gIGNvbnN0IHVwZGF0ZVB1YmxpY1Rva2VucyA9IHVzZVRva2VuU3RvcmUoXG4gICAgc3RhdGUgPT4gc3RhdGUuc2lsZW50VXBkYXRlUHVibGljVG9rZW5zXG4gICk7XG4gIGNvbnN0IHVwZGF0ZUFub255bW91c1Rva2VuID0gdXNlVG9rZW5TdG9yZShcbiAgICBzdGF0ZSA9PiBzdGF0ZS5zaWxlbnRVcGRhdGVBbm9ueW1vdXNUb2tlblxuICApO1xuICBjb25zdCB1cGRhdGVHdWVzdFRva2VucyA9IHVzZVRva2VuU3RvcmUoXG4gICAgc3RhdGUgPT4gc3RhdGUuc2lsZW50VXBkYXRlR3Vlc3RUb2tlbnNcbiAgKTtcbiAgY29uc3QgdXBkYXRlQ3VzdG9tVG9rZW4gPSB1c2VUb2tlblN0b3JlKFxuICAgIHN0YXRlID0+IHN0YXRlLnNpbGVudFVwZGF0ZUN1c3RvbVRva2VuXG4gICk7XG4gIGNvbnN0IGNsZWFyVG9rZW5zID0gdXNlVG9rZW5TdG9yZShzdGF0ZSA9PiBzdGF0ZS5jbGVhclRva2Vucyk7XG4gIGNvbnN0IGNsZWFyUHVibGljVG9rZW5zID0gdXNlVG9rZW5TdG9yZShcbiAgICBzdGF0ZSA9PiBzdGF0ZS5zaWxlbnRDbGVhclB1YmxpY1Rva2Vuc1xuICApO1xuICBjb25zdCBjbGVhckFub255bW91c1Rva2VucyA9IHVzZVRva2VuU3RvcmUoXG4gICAgc3RhdGUgPT4gc3RhdGUuc2lsZW50Q2xlYXJBbm9ueW1vdXNUb2tlbnNcbiAgKTtcbiAgY29uc3QgY2xlYXJHdWVzdFRva2VucyA9IHVzZVRva2VuU3RvcmUoc3RhdGUgPT4gc3RhdGUuc2lsZW50Q2xlYXJHdWVzdFRva2Vucyk7XG4gIGNvbnN0IGNsZWFyQ3VzdG9tVG9rZW5zID0gdXNlVG9rZW5TdG9yZShcbiAgICBzdGF0ZSA9PiBzdGF0ZS5zaWxlbnRDbGVhckN1c3RvbVRva2Vuc1xuICApO1xuXG4gIGNvbnN0IGV2ZW50U291cmNlUmVmID0gdXNlUmVmPHN0cmluZz4oXG4gICAgYHdpZGdldC0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCA5KX1gXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVUb2tlblVwZGF0ZSA9IChcbiAgICAgIGV2ZW50OiBDdXN0b21FdmVudDxUb2tlblVwZGF0ZUV2ZW50WydkZXRhaWwnXT5cbiAgICApID0+IHtcbiAgICAgIGNvbnN0IHsgaWRUb2tlbiwgcmVmcmVzaFRva2VuLCB0eXBlLCBzb3VyY2UgfSA9IGV2ZW50LmRldGFpbDtcblxuICAgICAgaWYgKHNvdXJjZSA9PT0gZXZlbnRTb3VyY2VSZWYuY3VycmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFRva2VuVHlwZS5QVUJMSUM6XG4gICAgICAgICAgaWYgKGlkVG9rZW4pIHtcbiAgICAgICAgICAgIGlmICghcmVmcmVzaFRva2VuKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVmcmVzaCB0b2tlbiBpcyByZXF1aXJlZCBmb3IgcHVibGljIHRva2VucycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdXBkYXRlUHVibGljVG9rZW5zKGlkVG9rZW4sIHJlZnJlc2hUb2tlbik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsZWFyUHVibGljVG9rZW5zKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgVG9rZW5UeXBlLkFOT05ZTU9VUzpcbiAgICAgICAgICBpZiAoaWRUb2tlbikge1xuICAgICAgICAgICAgdXBkYXRlQW5vbnltb3VzVG9rZW4oaWRUb2tlbik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsZWFyQW5vbnltb3VzVG9rZW5zKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgVG9rZW5UeXBlLkdVRVNUOlxuICAgICAgICAgIGlmIChpZFRva2VuKSB7XG4gICAgICAgICAgICB1cGRhdGVHdWVzdFRva2VucyhpZFRva2VuKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xlYXJHdWVzdFRva2VucygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFRva2VuVHlwZS5DVVNUT006XG4gICAgICAgICAgaWYgKGlkVG9rZW4pIHtcbiAgICAgICAgICAgIHVwZGF0ZUN1c3RvbVRva2VuKGlkVG9rZW4pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjbGVhckN1c3RvbVRva2VucygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgIFRPS0VOX1VQREFURURfRVZFTlQsXG4gICAgICBoYW5kbGVUb2tlblVwZGF0ZSBhcyBFdmVudExpc3RlbmVyXG4gICAgKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgICBUT0tFTl9VUERBVEVEX0VWRU5ULFxuICAgICAgICBoYW5kbGVUb2tlblVwZGF0ZSBhcyBFdmVudExpc3RlbmVyXG4gICAgICApO1xuICAgIH07XG4gIH0sIFtcbiAgICB1cGRhdGVQdWJsaWNUb2tlbnMsXG4gICAgdXBkYXRlQW5vbnltb3VzVG9rZW4sXG4gICAgdXBkYXRlR3Vlc3RUb2tlbnMsXG4gICAgdXBkYXRlQ3VzdG9tVG9rZW4sXG4gICAgY2xlYXJUb2tlbnMsXG4gICAgY2xlYXJQdWJsaWNUb2tlbnMsXG4gICAgY2xlYXJBbm9ueW1vdXNUb2tlbnMsXG4gICAgY2xlYXJHdWVzdFRva2VucyxcbiAgICBjbGVhckN1c3RvbVRva2VucyxcbiAgXSk7XG5cbiAgcmV0dXJuIHtcbiAgICBldmVudFNvdXJjZTogZXZlbnRTb3VyY2VSZWYuY3VycmVudCxcbiAgfTtcbn1cbiIsImltcG9ydCBDb29raWVzIGZyb20gJ2pzLWNvb2tpZSc7XG5pbXBvcnQgeyBBdXRoQ29va2llIH0gZnJvbSAnLi4vdHlwZXMvdG9rZW4nO1xuaW1wb3J0IHsgdXNlVXNlclN0b3JlIH0gZnJvbSAnLi4vc3RvcmVzJztcbmltcG9ydCB7IGdldENvbmZpZyB9IGZyb20gJy4uL2NvbmZpZyc7XG5pbXBvcnQgeyBnZXRSdW50aW1lRW52aXJvbm1lbnQgfSBmcm9tICcuLi9jb25maWcvcnVudGltZS1lbnZpcm9ubWVudCc7XG5cbmZ1bmN0aW9uIGdldFJlZnJlc2hUb2tlbkFwaUtleSgpOiBzdHJpbmcge1xuICBjb25zdCBlbnZpcm9ubWVudCA9IGdldFJ1bnRpbWVFbnZpcm9ubWVudCgpO1xuICByZXR1cm4gZ2V0Q29uZmlnKGVudmlyb25tZW50KS5yZWZyZXNoVG9rZW5BcGlLZXk7XG59XG5cbmNvbnN0IGRlZmF1bHRIZWFkZXJzID0ge1xuICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxufTtcblxubGV0IHJlZnJlc2hQcm9taXNlOiBQcm9taXNlPHZvaWQ+IHwgbnVsbCA9IG51bGw7XG5cbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZVJlZnJlc2hUb2tlbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKHJlZnJlc2hQcm9taXNlKSB7XG4gICAgcmV0dXJuIHJlZnJlc2hQcm9taXNlO1xuICB9XG5cbiAgY29uc3QgdXNlclN0b3JlID0gdXNlVXNlclN0b3JlLmdldFN0YXRlKCk7XG4gIHJlZnJlc2hQcm9taXNlID0gdXNlclN0b3JlXG4gICAgLnJlZnJlc2hQdWJsaWNUb2tlbnMoe1xuICAgICAgcmVmcmVzaFRva2VuQXBpS2V5OiBnZXRSZWZyZXNoVG9rZW5BcGlLZXkoKSxcbiAgICB9KVxuICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgIHJlZnJlc2hQcm9taXNlID0gbnVsbDtcbiAgICB9KTtcblxuICByZXR1cm4gcmVmcmVzaFByb21pc2U7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGF1dGhlbnRpY2F0ZWRGZXRjaChcbiAgbWV0aG9kOiBzdHJpbmcsXG4gIHVybDogc3RyaW5nLFxuICBvcHRpb25zOiBSZXF1ZXN0SW5pdCA9IHt9XG4pOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gIGNvbnN0IHRva2VuID0gQ29va2llcy5nZXQoQXV0aENvb2tpZS5QVUJMSUNfSURfVE9LRU4pO1xuXG4gIGlmICghdG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGF1dGhlbnRpY2F0aW9uIHRva2VuIGZvdW5kJyk7XG4gIH1cblxuICBjb25zdCBoZWFkZXJzID0ge1xuICAgIC4uLmRlZmF1bHRIZWFkZXJzLFxuICAgIC4uLm9wdGlvbnMuaGVhZGVycyxcbiAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgfTtcblxuICBjb25zdCBwYXJhbXMgPSB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBtZXRob2QsXG4gICAgaGVhZGVycyxcbiAgfTtcblxuICByZXR1cm4gZmV0Y2godXJsLCBwYXJhbXMpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwYXJzZVJlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8dW5rbm93bj4ge1xuICBjb25zdCBjb250ZW50VHlwZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKTtcbiAgaWYgKCFjb250ZW50VHlwZSB8fCAhY29udGVudFR5cGUuaW5jbHVkZXMoJ2FwcGxpY2F0aW9uL2pzb24nKSkge1xuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIGNvbnN0IHRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gIGlmICghdGV4dCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZSh0ZXh0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKHsgZXJyb3IgfSk7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEpTT04gcmVzcG9uc2UgZnJvbSBzZXJ2ZXInKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd09uRXJyb3JSZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UsIHRleHQ6IHN0cmluZyk6IG5ldmVyIHtcbiAgbGV0IGVycm9yTWVzc2FnZTogc3RyaW5nO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZSh0ZXh0KTtcbiAgICBlcnJvck1lc3NhZ2UgPSBwYXJzZWQ/LmVycm9ycz8uWzBdIHx8IHRleHQgfHwgJ0ludGVybmFsIHNlcnZlciBlcnJvcic7XG4gIH0gY2F0Y2gge1xuICAgIGVycm9yTWVzc2FnZSA9IHRleHQgfHwgJ0ludGVybmFsIHNlcnZlciBlcnJvcic7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGF1dGhlbnRpY2F0ZWRSZXF1ZXN0KFxuICBtZXRob2Q6IHN0cmluZyxcbiAgdXJsOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlcXVlc3RJbml0ID0ge31cbik6IFByb21pc2U8dW5rbm93bj4ge1xuICBhc3luYyBmdW5jdGlvbiBhdHRlbXB0KCk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXV0aGVudGljYXRlZEZldGNoKG1ldGhvZCwgdXJsLCBvcHRpb25zKTtcblxuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgcmV0dXJuIHBhcnNlUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgIH1cblxuICAgIGNvbnN0IHRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgaWYgKCF0ZXh0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBwcm9jZXNzIHJlcXVlc3QgLSAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDEpIHtcbiAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcignVW5hdXRob3JpemVkJykgYXMgRXJyb3IgJiB7IHN0YXR1cz86IG51bWJlciB9O1xuICAgICAgZXJyLnN0YXR1cyA9IDQwMTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG5cbiAgICB0aHJvd09uRXJyb3JSZXNwb25zZShyZXNwb25zZSwgdGV4dCk7XG4gIH1cblxuICBjb25zdCBoYXNUb2tlbiA9IENvb2tpZXMuZ2V0KEF1dGhDb29raWUuUFVCTElDX0lEX1RPS0VOKTtcblxuICBpZiAoIWhhc1Rva2VuKSB7XG4gICAgY29uc3QgcmVmcmVzaFRva2VuID0gQ29va2llcy5nZXQoQXV0aENvb2tpZS5QVUJMSUNfUkVGUkVTSF9UT0tFTik7XG4gICAgaWYgKHJlZnJlc2hUb2tlbikge1xuICAgICAgYXdhaXQgZW5zdXJlUmVmcmVzaFRva2VuKCk7XG4gICAgICByZXR1cm4gYXdhaXQgYXR0ZW1wdCgpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGF1dGhlbnRpY2F0aW9uIHRva2VuIGZvdW5kJyk7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBhdHRlbXB0KCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgaXM0MDEgPVxuICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJlxuICAgICAgJ3N0YXR1cycgaW4gZXJyb3IgJiZcbiAgICAgIChlcnJvciBhcyBFcnJvciAmIHsgc3RhdHVzPzogbnVtYmVyIH0pLnN0YXR1cyA9PT0gNDAxO1xuXG4gICAgaWYgKCFpczQwMSkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgY29uc3QgcmVmcmVzaFRva2VuID0gQ29va2llcy5nZXQoQXV0aENvb2tpZS5QVUJMSUNfUkVGUkVTSF9UT0tFTik7XG4gICAgaWYgKCFyZWZyZXNoVG9rZW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5hdXRob3JpemVkJyk7XG4gICAgfVxuXG4gICAgYXdhaXQgZW5zdXJlUmVmcmVzaFRva2VuKCk7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGF0dGVtcHQoKTtcbiAgICB9IGNhdGNoIChyZXRyeUVycm9yKSB7XG4gICAgICBjb25zdCByZXRyeUlzNDAxID1cbiAgICAgICAgcmV0cnlFcnJvciBpbnN0YW5jZW9mIEVycm9yICYmXG4gICAgICAgICdzdGF0dXMnIGluIHJldHJ5RXJyb3IgJiZcbiAgICAgICAgKHJldHJ5RXJyb3IgYXMgRXJyb3IgJiB7IHN0YXR1cz86IG51bWJlciB9KS5zdGF0dXMgPT09IDQwMTtcblxuICAgICAgaWYgKHJldHJ5SXM0MDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmF1dGhvcml6ZWQnKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgcmV0cnlFcnJvcjtcbiAgICB9XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBSU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFRTztBQUNQO0FBQ0E7O0FDcEJBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNBO0FBQ1A7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSU87O0FDdkJBO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FDTE87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDTztBQUNBO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BPOztBQ0xQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNCTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUN2Qk87QUFDUDtBQUNBOztBQ0ZPOzs7In0=
|