@workflow/builders 5.0.0-beta.40 → 5.0.0-beta.41
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/README.md +26 -0
- package/dist/base-builder.d.ts.map +1 -1
- package/dist/base-builder.js +4 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/optional-ws-native.d.ts +30 -0
- package/dist/optional-ws-native.d.ts.map +1 -0
- package/dist/optional-ws-native.js +33 -0
- package/dist/swc-esbuild-plugin.d.ts +16 -0
- package/dist/swc-esbuild-plugin.d.ts.map +1 -1
- package/dist/swc-esbuild-plugin.js +9 -1
- package/dist/swc-esbuild-plugin.test.js +106 -1
- package/dist/types.d.ts +12 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -9,11 +9,12 @@ export { clearModuleSpecifierCache, getImportPath, type ImportPathResult, type M
|
|
|
9
9
|
export { createNodeModuleErrorPlugin } from './node-module-esbuild-plugin.js';
|
|
10
10
|
export { WORKFLOW_OPTIONAL_OTEL_API_MODULE } from './optional-otel-api.js';
|
|
11
11
|
export { WORKFLOW_OPTIONAL_TYPESCRIPT_ALIAS } from './optional-typescript-alias.js';
|
|
12
|
+
export { WORKFLOW_OPTIONAL_WS_NATIVE_MODULES } from './optional-ws-native.js';
|
|
12
13
|
export { createPseudoPackagePlugin, PSEUDO_PACKAGES, } from './pseudo-package-esbuild-plugin.js';
|
|
13
14
|
export { NORMALIZE_REQUEST_CODE } from './request-converter.js';
|
|
14
15
|
export { analyzeSerdeCompliance, extractClassEntries, type SerdeCheckResult, type SerdeClassCheckResult, } from './serde-checker.js';
|
|
15
16
|
export { StandaloneBuilder } from './standalone.js';
|
|
16
|
-
export { createSwcPlugin } from './swc-esbuild-plugin.js';
|
|
17
|
+
export { createSwcPlugin, type WorkflowAfterTransformHook, type WorkflowTransformResult, } from './swc-esbuild-plugin.js';
|
|
17
18
|
export { detectWorkflowPatterns, generatedWorkflowPathPattern, isGeneratedWorkflowFile, shouldTransformFile, turbopackContentPattern, useStepPattern, useWorkflowPattern, type WorkflowPatternMatch, workflowSerdeImportPattern, workflowSerdeSymbolPattern, } from './transform-utils.js';
|
|
18
19
|
export type { AstroConfig, BuildTarget, NextConfig, StandaloneConfig, SvelteKitConfig, VercelBuildOutputConfig, WorkflowConfig, } from './types.js';
|
|
19
20
|
export { isValidBuildTarget, validBuildTargets } from './types.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EACL,uBAAuB,EACvB,KAAK,gBAAgB,EACrB,KAAK,8BAA8B,EACnC,+BAA+B,EAC/B,6CAA6C,EAC7C,4BAA4B,EAC5B,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mCAAmC,EACnC,0BAA0B,EAC1B,uBAAuB,EACvB,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,2BAA2B,EAC3B,cAAc,GACf,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,yBAAyB,EACzB,aAAa,EACb,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,iCAAiC,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,kCAAkC,EAAE,MAAM,gCAAgC,CAAC;AACpF,OAAO,EACL,yBAAyB,EACzB,eAAe,GAChB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,GAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EACL,uBAAuB,EACvB,KAAK,gBAAgB,EACrB,KAAK,8BAA8B,EACnC,+BAA+B,EAC/B,6CAA6C,EAC7C,4BAA4B,EAC5B,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mCAAmC,EACnC,0BAA0B,EAC1B,uBAAuB,EACvB,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,2BAA2B,EAC3B,cAAc,GACf,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,yBAAyB,EACzB,aAAa,EACb,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,iCAAiC,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,kCAAkC,EAAE,MAAM,gCAAgC,CAAC;AACpF,OAAO,EAAE,mCAAmC,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EACL,yBAAyB,EACzB,eAAe,GAChB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,GAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EACL,eAAe,EACf,KAAK,0BAA0B,EAC/B,KAAK,uBAAuB,GAC7B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,sBAAsB,EACtB,4BAA4B,EAC5B,uBAAuB,EACvB,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,EACd,kBAAkB,EAClB,KAAK,oBAAoB,EACzB,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,WAAW,EACX,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,uBAAuB,EACvB,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,gCAAgC,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -8,13 +8,14 @@ export { clearModuleSpecifierCache, getImportPath, resolveModuleSpecifier, } fro
|
|
|
8
8
|
export { createNodeModuleErrorPlugin } from './node-module-esbuild-plugin.js';
|
|
9
9
|
export { WORKFLOW_OPTIONAL_OTEL_API_MODULE } from './optional-otel-api.js';
|
|
10
10
|
export { WORKFLOW_OPTIONAL_TYPESCRIPT_ALIAS } from './optional-typescript-alias.js';
|
|
11
|
+
export { WORKFLOW_OPTIONAL_WS_NATIVE_MODULES } from './optional-ws-native.js';
|
|
11
12
|
export { createPseudoPackagePlugin, PSEUDO_PACKAGES, } from './pseudo-package-esbuild-plugin.js';
|
|
12
13
|
export { NORMALIZE_REQUEST_CODE } from './request-converter.js';
|
|
13
14
|
export { analyzeSerdeCompliance, extractClassEntries, } from './serde-checker.js';
|
|
14
15
|
export { StandaloneBuilder } from './standalone.js';
|
|
15
|
-
export { createSwcPlugin } from './swc-esbuild-plugin.js';
|
|
16
|
+
export { createSwcPlugin, } from './swc-esbuild-plugin.js';
|
|
16
17
|
export { detectWorkflowPatterns, generatedWorkflowPathPattern, isGeneratedWorkflowFile, shouldTransformFile, turbopackContentPattern, useStepPattern, useWorkflowPattern, workflowSerdeImportPattern, workflowSerdeSymbolPattern, } from './transform-utils.js';
|
|
17
18
|
export { isValidBuildTarget, validBuildTargets } from './types.js';
|
|
18
19
|
export { VercelBuildOutputAPIBuilder } from './vercel-build-output-api.js';
|
|
19
20
|
export { resolveWorkflowAliasRelativePath } from './workflow-alias.js';
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3BELE9BQU8sRUFDTCx1QkFBdUIsRUFHdkIsK0JBQStCLEVBQy9CLDZDQUE2QyxFQUM3Qyw0QkFBNEIsRUFDNUIsa0JBQWtCLEdBQ25CLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUNMLG1DQUFtQyxFQUNuQywwQkFBMEIsRUFDMUIsdUJBQXVCLEVBQ3ZCLDBCQUEwQixFQUMxQixzQkFBc0IsR0FDdkIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLGNBQWMsR0FDZixNQUFNLHNDQUFzQyxDQUFDO0FBQzlDLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsYUFBYSxFQUdiLHNCQUFzQixHQUN2QixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlFLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsZUFBZSxHQUNoQixNQUFNLG9DQUFvQyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hFLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsbUJBQW1CLEdBR3BCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUNMLGVBQWUsR0FHaEIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLDRCQUE0QixFQUM1Qix1QkFBdUIsRUFDdkIsbUJBQW1CLEVBQ25CLHVCQUF1QixFQUN2QixjQUFjLEVBQ2Qsa0JBQWtCLEVBRWxCLDBCQUEwQixFQUMxQiwwQkFBMEIsR0FDM0IsTUFBTSxzQkFBc0IsQ0FBQztBQVU5QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbkUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0scUJBQXFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSB7IFdvcmtmbG93TWFuaWZlc3QgfSBmcm9tICcuL2FwcGx5LXN3Yy10cmFuc2Zvcm0uanMnO1xuZXhwb3J0IHsgYXBwbHlTd2NUcmFuc2Zvcm0gfSBmcm9tICcuL2FwcGx5LXN3Yy10cmFuc2Zvcm0uanMnO1xuZXhwb3J0IHsgQmFzZUJ1aWxkZXIgfSBmcm9tICcuL2Jhc2UtYnVpbGRlci5qcyc7XG5leHBvcnQgeyBjcmVhdGVCdWlsZFF1ZXVlIH0gZnJvbSAnLi9idWlsZC1xdWV1ZS5qcyc7XG5leHBvcnQge1xuICBjcmVhdGVCYXNlQnVpbGRlckNvbmZpZyxcbiAgdHlwZSBEZWNvcmF0b3JPcHRpb25zLFxuICB0eXBlIERlY29yYXRvck9wdGlvbnNXaXRoQ29uZmlnUGF0aCxcbiAgZ2V0RGVjb3JhdG9yT3B0aW9uc0ZvckRpcmVjdG9yeSxcbiAgZ2V0RGVjb3JhdG9yT3B0aW9uc0ZvckRpcmVjdG9yeVdpdGhDb25maWdQYXRoLFxuICByZXNvbHZlQ29uZmlndXJlZFByb2plY3RSb290LFxuICByZXNvbHZlUHJvamVjdFJvb3QsXG59IGZyb20gJy4vY29uZmlnLWhlbHBlcnMuanMnO1xuZXhwb3J0IHtcbiAgY3JlYXRlV29ya2Zsb3dFbnRyeXBvaW50T3B0aW9uc0NvZGUsXG4gIGNyZWF0ZVdvcmtmbG93UXVldWVUcmlnZ2VyLFxuICBnZXRXb3JrZmxvd1F1ZXVlVHJpZ2dlcixcbiAgaXNTZXF1ZW50aWFsUmVwbGF5c0VuYWJsZWQsXG4gIFdPUktGTE9XX1FVRVVFX1RSSUdHRVIsXG59IGZyb20gJy4vY29uc3RhbnRzLmpzJztcbmV4cG9ydCB7XG4gIGNyZWF0ZURpc2NvdmVyRW50cmllc1BsdWdpbixcbiAgcGFyZW50SGFzQ2hpbGQsXG59IGZyb20gJy4vZGlzY292ZXItZW50cmllcy1lc2J1aWxkLXBsdWdpbi5qcyc7XG5leHBvcnQge1xuICBjbGVhck1vZHVsZVNwZWNpZmllckNhY2hlLFxuICBnZXRJbXBvcnRQYXRoLFxuICB0eXBlIEltcG9ydFBhdGhSZXN1bHQsXG4gIHR5cGUgTW9kdWxlU3BlY2lmaWVyUmVzdWx0LFxuICByZXNvbHZlTW9kdWxlU3BlY2lmaWVyLFxufSBmcm9tICcuL21vZHVsZS1zcGVjaWZpZXIuanMnO1xuZXhwb3J0IHsgY3JlYXRlTm9kZU1vZHVsZUVycm9yUGx1Z2luIH0gZnJvbSAnLi9ub2RlLW1vZHVsZS1lc2J1aWxkLXBsdWdpbi5qcyc7XG5leHBvcnQgeyBXT1JLRkxPV19PUFRJT05BTF9PVEVMX0FQSV9NT0RVTEUgfSBmcm9tICcuL29wdGlvbmFsLW90ZWwtYXBpLmpzJztcbmV4cG9ydCB7IFdPUktGTE9XX09QVElPTkFMX1RZUEVTQ1JJUFRfQUxJQVMgfSBmcm9tICcuL29wdGlvbmFsLXR5cGVzY3JpcHQtYWxpYXMuanMnO1xuZXhwb3J0IHsgV09SS0ZMT1dfT1BUSU9OQUxfV1NfTkFUSVZFX01PRFVMRVMgfSBmcm9tICcuL29wdGlvbmFsLXdzLW5hdGl2ZS5qcyc7XG5leHBvcnQge1xuICBjcmVhdGVQc2V1ZG9QYWNrYWdlUGx1Z2luLFxuICBQU0VVRE9fUEFDS0FHRVMsXG59IGZyb20gJy4vcHNldWRvLXBhY2thZ2UtZXNidWlsZC1wbHVnaW4uanMnO1xuZXhwb3J0IHsgTk9STUFMSVpFX1JFUVVFU1RfQ09ERSB9IGZyb20gJy4vcmVxdWVzdC1jb252ZXJ0ZXIuanMnO1xuZXhwb3J0IHtcbiAgYW5hbHl6ZVNlcmRlQ29tcGxpYW5jZSxcbiAgZXh0cmFjdENsYXNzRW50cmllcyxcbiAgdHlwZSBTZXJkZUNoZWNrUmVzdWx0LFxuICB0eXBlIFNlcmRlQ2xhc3NDaGVja1Jlc3VsdCxcbn0gZnJvbSAnLi9zZXJkZS1jaGVja2VyLmpzJztcbmV4cG9ydCB7IFN0YW5kYWxvbmVCdWlsZGVyIH0gZnJvbSAnLi9zdGFuZGFsb25lLmpzJztcbmV4cG9ydCB7XG4gIGNyZWF0ZVN3Y1BsdWdpbixcbiAgdHlwZSBXb3JrZmxvd0FmdGVyVHJhbnNmb3JtSG9vayxcbiAgdHlwZSBXb3JrZmxvd1RyYW5zZm9ybVJlc3VsdCxcbn0gZnJvbSAnLi9zd2MtZXNidWlsZC1wbHVnaW4uanMnO1xuZXhwb3J0IHtcbiAgZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyxcbiAgZ2VuZXJhdGVkV29ya2Zsb3dQYXRoUGF0dGVybixcbiAgaXNHZW5lcmF0ZWRXb3JrZmxvd0ZpbGUsXG4gIHNob3VsZFRyYW5zZm9ybUZpbGUsXG4gIHR1cmJvcGFja0NvbnRlbnRQYXR0ZXJuLFxuICB1c2VTdGVwUGF0dGVybixcbiAgdXNlV29ya2Zsb3dQYXR0ZXJuLFxuICB0eXBlIFdvcmtmbG93UGF0dGVybk1hdGNoLFxuICB3b3JrZmxvd1NlcmRlSW1wb3J0UGF0dGVybixcbiAgd29ya2Zsb3dTZXJkZVN5bWJvbFBhdHRlcm4sXG59IGZyb20gJy4vdHJhbnNmb3JtLXV0aWxzLmpzJztcbmV4cG9ydCB0eXBlIHtcbiAgQXN0cm9Db25maWcsXG4gIEJ1aWxkVGFyZ2V0LFxuICBOZXh0Q29uZmlnLFxuICBTdGFuZGFsb25lQ29uZmlnLFxuICBTdmVsdGVLaXRDb25maWcsXG4gIFZlcmNlbEJ1aWxkT3V0cHV0Q29uZmlnLFxuICBXb3JrZmxvd0NvbmZpZyxcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5leHBvcnQgeyBpc1ZhbGlkQnVpbGRUYXJnZXQsIHZhbGlkQnVpbGRUYXJnZXRzIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5leHBvcnQgeyBWZXJjZWxCdWlsZE91dHB1dEFQSUJ1aWxkZXIgfSBmcm9tICcuL3ZlcmNlbC1idWlsZC1vdXRwdXQtYXBpLmpzJztcbmV4cG9ydCB7IHJlc29sdmVXb3JrZmxvd0FsaWFzUmVsYXRpdmVQYXRoIH0gZnJvbSAnLi93b3JrZmxvdy1hbGlhcy5qcyc7XG4iXX0=
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `bufferutil` and `utf-8-validate` are optional native accelerators for the
|
|
3
|
+
* `ws` package, which `@workflow/world-vercel` uses for its WebSocket events
|
|
4
|
+
* transport. Neither is installed by default: `ws` requires each one inside a
|
|
5
|
+
* try/catch and falls back to a pure-JS implementation when the require throws.
|
|
6
|
+
*
|
|
7
|
+
* Marking them external keeps that fallback reachable. Two bundlers take it away
|
|
8
|
+
* without changing the build's outcome, so the damage only shows up at runtime,
|
|
9
|
+
* on the first frame big enough to reach the native masker (`ws` uses pure JS
|
|
10
|
+
* below 48 bytes — small-payload smoke tests pass; CBOR event frames don't):
|
|
11
|
+
*
|
|
12
|
+
* - **webpack** bundles the JS wrapper without its native `.node` binding.
|
|
13
|
+
* - **Vite** resolves the absent peer to its own `optional-peer-dep` stub, so
|
|
14
|
+
* `ws`'s require *succeeds* and the try/catch never fires.
|
|
15
|
+
*
|
|
16
|
+
* Both end at `bufferUtil.mask is not a function`. Rollup-family setups are not
|
|
17
|
+
* known to break: nothing substitutes a stub, and nitro traces and externalizes
|
|
18
|
+
* `ws` in a production build, so the require stays a real one that fails and the
|
|
19
|
+
* fallback engages. Externalizing there buys determinism against a change in
|
|
20
|
+
* externals policy, not a fix for a known break. (Turbopack already externalizes
|
|
21
|
+
* Node packages.)
|
|
22
|
+
*
|
|
23
|
+
* Externalized unconditionally, unlike `WORKFLOW_OPTIONAL_OTEL_API_MODULE`,
|
|
24
|
+
* which is only externalized when it can't be resolved. The OTEL API has to
|
|
25
|
+
* load for tracing to work, so a self-contained output must bundle it when
|
|
26
|
+
* present; these accelerators must specifically *not* load, so a failed runtime
|
|
27
|
+
* require is the designed path and a half-bundled native module is not.
|
|
28
|
+
*/
|
|
29
|
+
export declare const WORKFLOW_OPTIONAL_WS_NATIVE_MODULES: readonly ["bufferutil", "utf-8-validate"];
|
|
30
|
+
//# sourceMappingURL=optional-ws-native.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optional-ws-native.d.ts","sourceRoot":"","sources":["../src/optional-ws-native.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,mCAAmC,2CAGtC,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `bufferutil` and `utf-8-validate` are optional native accelerators for the
|
|
3
|
+
* `ws` package, which `@workflow/world-vercel` uses for its WebSocket events
|
|
4
|
+
* transport. Neither is installed by default: `ws` requires each one inside a
|
|
5
|
+
* try/catch and falls back to a pure-JS implementation when the require throws.
|
|
6
|
+
*
|
|
7
|
+
* Marking them external keeps that fallback reachable. Two bundlers take it away
|
|
8
|
+
* without changing the build's outcome, so the damage only shows up at runtime,
|
|
9
|
+
* on the first frame big enough to reach the native masker (`ws` uses pure JS
|
|
10
|
+
* below 48 bytes — small-payload smoke tests pass; CBOR event frames don't):
|
|
11
|
+
*
|
|
12
|
+
* - **webpack** bundles the JS wrapper without its native `.node` binding.
|
|
13
|
+
* - **Vite** resolves the absent peer to its own `optional-peer-dep` stub, so
|
|
14
|
+
* `ws`'s require *succeeds* and the try/catch never fires.
|
|
15
|
+
*
|
|
16
|
+
* Both end at `bufferUtil.mask is not a function`. Rollup-family setups are not
|
|
17
|
+
* known to break: nothing substitutes a stub, and nitro traces and externalizes
|
|
18
|
+
* `ws` in a production build, so the require stays a real one that fails and the
|
|
19
|
+
* fallback engages. Externalizing there buys determinism against a change in
|
|
20
|
+
* externals policy, not a fix for a known break. (Turbopack already externalizes
|
|
21
|
+
* Node packages.)
|
|
22
|
+
*
|
|
23
|
+
* Externalized unconditionally, unlike `WORKFLOW_OPTIONAL_OTEL_API_MODULE`,
|
|
24
|
+
* which is only externalized when it can't be resolved. The OTEL API has to
|
|
25
|
+
* load for tracing to work, so a self-contained output must bundle it when
|
|
26
|
+
* present; these accelerators must specifically *not* load, so a failed runtime
|
|
27
|
+
* require is the designed path and a half-bundled native module is not.
|
|
28
|
+
*/
|
|
29
|
+
export const WORKFLOW_OPTIONAL_WS_NATIVE_MODULES = [
|
|
30
|
+
'bufferutil',
|
|
31
|
+
'utf-8-validate',
|
|
32
|
+
];
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9uYWwtd3MtbmF0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL29wdGlvbmFsLXdzLW5hdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUNBQW1DLEdBQUc7SUFDakQsWUFBWTtJQUNaLGdCQUFnQjtDQUNSLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGBidWZmZXJ1dGlsYCBhbmQgYHV0Zi04LXZhbGlkYXRlYCBhcmUgb3B0aW9uYWwgbmF0aXZlIGFjY2VsZXJhdG9ycyBmb3IgdGhlXG4gKiBgd3NgIHBhY2thZ2UsIHdoaWNoIGBAd29ya2Zsb3cvd29ybGQtdmVyY2VsYCB1c2VzIGZvciBpdHMgV2ViU29ja2V0IGV2ZW50c1xuICogdHJhbnNwb3J0LiBOZWl0aGVyIGlzIGluc3RhbGxlZCBieSBkZWZhdWx0OiBgd3NgIHJlcXVpcmVzIGVhY2ggb25lIGluc2lkZSBhXG4gKiB0cnkvY2F0Y2ggYW5kIGZhbGxzIGJhY2sgdG8gYSBwdXJlLUpTIGltcGxlbWVudGF0aW9uIHdoZW4gdGhlIHJlcXVpcmUgdGhyb3dzLlxuICpcbiAqIE1hcmtpbmcgdGhlbSBleHRlcm5hbCBrZWVwcyB0aGF0IGZhbGxiYWNrIHJlYWNoYWJsZS4gVHdvIGJ1bmRsZXJzIHRha2UgaXQgYXdheVxuICogd2l0aG91dCBjaGFuZ2luZyB0aGUgYnVpbGQncyBvdXRjb21lLCBzbyB0aGUgZGFtYWdlIG9ubHkgc2hvd3MgdXAgYXQgcnVudGltZSxcbiAqIG9uIHRoZSBmaXJzdCBmcmFtZSBiaWcgZW5vdWdoIHRvIHJlYWNoIHRoZSBuYXRpdmUgbWFza2VyIChgd3NgIHVzZXMgcHVyZSBKU1xuICogYmVsb3cgNDggYnl0ZXMg4oCUIHNtYWxsLXBheWxvYWQgc21va2UgdGVzdHMgcGFzczsgQ0JPUiBldmVudCBmcmFtZXMgZG9uJ3QpOlxuICpcbiAqIC0gKip3ZWJwYWNrKiogYnVuZGxlcyB0aGUgSlMgd3JhcHBlciB3aXRob3V0IGl0cyBuYXRpdmUgYC5ub2RlYCBiaW5kaW5nLlxuICogLSAqKlZpdGUqKiByZXNvbHZlcyB0aGUgYWJzZW50IHBlZXIgdG8gaXRzIG93biBgb3B0aW9uYWwtcGVlci1kZXBgIHN0dWIsIHNvXG4gKiAgIGB3c2AncyByZXF1aXJlICpzdWNjZWVkcyogYW5kIHRoZSB0cnkvY2F0Y2ggbmV2ZXIgZmlyZXMuXG4gKlxuICogQm90aCBlbmQgYXQgYGJ1ZmZlclV0aWwubWFzayBpcyBub3QgYSBmdW5jdGlvbmAuIFJvbGx1cC1mYW1pbHkgc2V0dXBzIGFyZSBub3RcbiAqIGtub3duIHRvIGJyZWFrOiBub3RoaW5nIHN1YnN0aXR1dGVzIGEgc3R1YiwgYW5kIG5pdHJvIHRyYWNlcyBhbmQgZXh0ZXJuYWxpemVzXG4gKiBgd3NgIGluIGEgcHJvZHVjdGlvbiBidWlsZCwgc28gdGhlIHJlcXVpcmUgc3RheXMgYSByZWFsIG9uZSB0aGF0IGZhaWxzIGFuZCB0aGVcbiAqIGZhbGxiYWNrIGVuZ2FnZXMuIEV4dGVybmFsaXppbmcgdGhlcmUgYnV5cyBkZXRlcm1pbmlzbSBhZ2FpbnN0IGEgY2hhbmdlIGluXG4gKiBleHRlcm5hbHMgcG9saWN5LCBub3QgYSBmaXggZm9yIGEga25vd24gYnJlYWsuIChUdXJib3BhY2sgYWxyZWFkeSBleHRlcm5hbGl6ZXNcbiAqIE5vZGUgcGFja2FnZXMuKVxuICpcbiAqIEV4dGVybmFsaXplZCB1bmNvbmRpdGlvbmFsbHksIHVubGlrZSBgV09SS0ZMT1dfT1BUSU9OQUxfT1RFTF9BUElfTU9EVUxFYCxcbiAqIHdoaWNoIGlzIG9ubHkgZXh0ZXJuYWxpemVkIHdoZW4gaXQgY2FuJ3QgYmUgcmVzb2x2ZWQuIFRoZSBPVEVMIEFQSSBoYXMgdG9cbiAqIGxvYWQgZm9yIHRyYWNpbmcgdG8gd29yaywgc28gYSBzZWxmLWNvbnRhaW5lZCBvdXRwdXQgbXVzdCBidW5kbGUgaXQgd2hlblxuICogcHJlc2VudDsgdGhlc2UgYWNjZWxlcmF0b3JzIG11c3Qgc3BlY2lmaWNhbGx5ICpub3QqIGxvYWQsIHNvIGEgZmFpbGVkIHJ1bnRpbWVcbiAqIHJlcXVpcmUgaXMgdGhlIGRlc2lnbmVkIHBhdGggYW5kIGEgaGFsZi1idW5kbGVkIG5hdGl2ZSBtb2R1bGUgaXMgbm90LlxuICovXG5leHBvcnQgY29uc3QgV09SS0ZMT1dfT1BUSU9OQUxfV1NfTkFUSVZFX01PRFVMRVMgPSBbXG4gICdidWZmZXJ1dGlsJyxcbiAgJ3V0Zi04LXZhbGlkYXRlJyxcbl0gYXMgY29uc3Q7XG4iXX0=
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import type { Plugin } from 'esbuild';
|
|
2
2
|
import { type WorkflowManifest } from './apply-swc-transform.js';
|
|
3
|
+
export interface WorkflowTransformResult {
|
|
4
|
+
readonly mode: 'step' | 'workflow';
|
|
5
|
+
readonly filename: string;
|
|
6
|
+
readonly absolutePath: string;
|
|
7
|
+
readonly source: string;
|
|
8
|
+
readonly code: string;
|
|
9
|
+
readonly workflowManifest: WorkflowManifest;
|
|
10
|
+
}
|
|
11
|
+
export type WorkflowAfterTransformHook = (result: WorkflowTransformResult) => void | Promise<void>;
|
|
3
12
|
export interface SwcPluginOptions {
|
|
4
13
|
mode: 'step' | 'workflow';
|
|
5
14
|
entriesToBundle?: string[];
|
|
@@ -7,6 +16,13 @@ export interface SwcPluginOptions {
|
|
|
7
16
|
projectRoot?: string;
|
|
8
17
|
moduleSpecifierRoot?: string;
|
|
9
18
|
workflowManifest?: WorkflowManifest;
|
|
19
|
+
/**
|
|
20
|
+
* Optional observer invoked after a transform's manifest entries have been
|
|
21
|
+
* accepted. A file may be observed multiple times across modes, bundles, and
|
|
22
|
+
* watch rebuilds. The observer is awaited, cannot replace the generated code,
|
|
23
|
+
* and aborts the build if it throws.
|
|
24
|
+
*/
|
|
25
|
+
onAfterTransform?: WorkflowAfterTransformHook;
|
|
10
26
|
/**
|
|
11
27
|
* Rewrite TypeScript extensions (.ts, .tsx, .mts, .cts) to their JS
|
|
12
28
|
* equivalents (.js, .mjs, .cjs) in externalized import paths.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swc-esbuild-plugin.d.ts","sourceRoot":"","sources":["../src/swc-esbuild-plugin.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,0BAA0B,CAAC;AAQlC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC;;;;;;;;;;OAUG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;;;OAOG;IACH,qCAAqC,CAAC,EAAE,OAAO,CAAC;IAChD;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAkHD,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"swc-esbuild-plugin.d.ts","sourceRoot":"","sources":["../src/swc-esbuild-plugin.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,0BAA0B,CAAC;AAQlC,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;CAC7C;AAED,MAAM,MAAM,0BAA0B,GAAG,CACvC,MAAM,EAAE,uBAAuB,KAC5B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,0BAA0B,CAAC;IAC9C;;;;;;;;;;OAUG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;;;OAOG;IACH,qCAAqC,CAAC,EAAE,OAAO,CAAC;IAChD;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAkHD,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CA6XjE"}
|
|
@@ -350,6 +350,14 @@ export function createSwcPlugin(options) {
|
|
|
350
350
|
options.workflowManifest = {};
|
|
351
351
|
}
|
|
352
352
|
mergeWorkflowManifest(options.workflowManifest, workflowManifest, stepIdsForCurrentBuild, workflowIdsForCurrentBuild);
|
|
353
|
+
await options.onAfterTransform?.({
|
|
354
|
+
mode: options.mode,
|
|
355
|
+
filename: relativeFilepath,
|
|
356
|
+
absolutePath: args.path,
|
|
357
|
+
source: normalizedSource,
|
|
358
|
+
code: transformedCode,
|
|
359
|
+
workflowManifest,
|
|
360
|
+
});
|
|
353
361
|
return {
|
|
354
362
|
contents: transformedCode,
|
|
355
363
|
loader,
|
|
@@ -377,4 +385,4 @@ function isProjectLocalFile(filePath, projectRoot) {
|
|
|
377
385
|
}
|
|
378
386
|
return (resolveModuleSpecifier(filePath, projectRoot).moduleSpecifier === undefined);
|
|
379
387
|
}
|
|
380
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3djLWVzYnVpbGQtcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N3Yy1lc2J1aWxkLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RELE9BQU8sbUJBQW1CLE1BQU0sa0JBQWtCLENBQUM7QUFFbkQsT0FBTyxFQUNMLGlCQUFpQixHQUVsQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsY0FBYyxHQUNmLE1BQU0sc0NBQXNDLENBQUM7QUFDOUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUEwQ3ZFLE1BQU0sb0JBQW9CLEdBQUc7SUFDM0IsY0FBYyxFQUFFLFVBQVU7SUFDMUIsT0FBTyxFQUFFLENBQUMsY0FBYyxDQUFDO0lBQ3pCLGFBQWEsRUFBRSxDQUFDLFNBQVMsQ0FBQztJQUMxQixhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUM7SUFDMUIsY0FBYyxFQUFFLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQztJQUNuQyxnQkFBZ0IsRUFBRSxDQUFDLGNBQWMsQ0FBQztJQUNsQyxVQUFVLEVBQUU7UUFDVixLQUFLO1FBQ0wsTUFBTTtRQUNOLE1BQU07UUFDTixNQUFNO1FBQ04sTUFBTTtRQUNOLE1BQU07UUFDTixLQUFLO1FBQ0wsTUFBTTtRQUNOLE9BQU87UUFDUCxPQUFPO0tBQ1I7SUFDRCxpQkFBaUIsRUFBRSxLQUFLO0lBQ3hCLFFBQVEsRUFBRSxJQUFJO0lBQ2Qs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LENBQUM7SUFDZixDQUFDO0lBRUQsT0FBTyxDQUNMLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQyxlQUFlLEtBQUssU0FBUyxDQUM1RSxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlYWRGaWxlIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyByZWxhdGl2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBwcm9taXNpZnkgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IHsgV29ya2Zsb3dCdWlsZEVycm9yIH0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5pbXBvcnQgZW5oYW5jZWRSZXNvbHZlT3JpZyBmcm9tICdlbmhhbmNlZC1yZXNvbHZlJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAnZXNidWlsZCc7XG5pbXBvcnQge1xuICBhcHBseVN3Y1RyYW5zZm9ybSxcbiAgdHlwZSBXb3JrZmxvd01hbmlmZXN0LFxufSBmcm9tICcuL2FwcGx5LXN3Yy10cmFuc2Zvcm0uanMnO1xuaW1wb3J0IHtcbiAganNUc1JlZ2V4LFxuICBwYXJlbnRIYXNDaGlsZCxcbn0gZnJvbSAnLi9kaXNjb3Zlci1lbnRyaWVzLWVzYnVpbGQtcGx1Z2luLmpzJztcbmltcG9ydCB7IHJlc29sdmVNb2R1bGVTcGVjaWZpZXIgfSBmcm9tICcuL21vZHVsZS1zcGVjaWZpZXIuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZVdvcmtmbG93QWxpYXNSZWxhdGl2ZVBhdGggfSBmcm9tICcuL3dvcmtmbG93LWFsaWFzLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBTd2NQbHVnaW5PcHRpb25zIHtcbiAgbW9kZTogJ3N0ZXAnIHwgJ3dvcmtmbG93JztcbiAgZW50cmllc1RvQnVuZGxlPzogc3RyaW5nW107XG4gIG91dGRpcj86IHN0cmluZztcbiAgcHJvamVjdFJvb3Q/OiBzdHJpbmc7XG4gIG1vZHVsZVNwZWNpZmllclJvb3Q/OiBzdHJpbmc7XG4gIHdvcmtmbG93TWFuaWZlc3Q/OiBXb3JrZmxvd01hbmlmZXN0O1xuICAvKipcbiAgICogUmV3cml0ZSBUeXBlU2NyaXB0IGV4dGVuc2lvbnMgKC50cywgLnRzeCwgLm10cywgLmN0cykgdG8gdGhlaXIgSlNcbiAgICogZXF1aXZhbGVudHMgKC5qcywgLm1qcywgLmNqcykgaW4gZXh0ZXJuYWxpemVkIGltcG9ydCBwYXRocy5cbiAgICpcbiAgICogRW5hYmxlIHRoaXMgd2hlbiB0aGUgb3V0cHV0IGJ1bmRsZSBpcyBjb25zdW1lZCBkaXJlY3RseSBieSBOb2RlJ3MgbmF0aXZlXG4gICAqIEVTTSBsb2FkZXIgKGUuZy4gdml0ZXN0KSwgd2hpY2ggY2Fubm90IHJlc29sdmUgLnRzIGV4dGVuc2lvbnMuXG4gICAqXG4gICAqIExlYXZlIGRpc2FibGVkIChkZWZhdWx0KSB3aGVuIGEgZG93bnN0cmVhbSBidW5kbGVyICh3ZWJwYWNrLCBWaXRlLCBldGMuKVxuICAgKiBoYW5kbGVzIHJlc29sdXRpb24g4oCUIHRob3NlIHRvb2xzIHJlc29sdmUgLnRzIG5hdGl2ZWx5IGFuZCByZXdyaXRpbmdcbiAgICogYnJlYWtzIHRoZW0gYmVjYXVzZSB0aGUgLmpzIGZpbGUgZG9lc24ndCBleGlzdCBvbiBkaXNrLlxuICAgKi9cbiAgcmV3cml0ZVRzRXh0ZW5zaW9ucz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBCdW5kbGUgcHJvamVjdC1sb2NhbCBmaWxlcyB0aGF0IGFyZSB0cmFuc2l0aXZlbHkgaW1wb3J0ZWQgYnkgc3RlcCBlbnRyaWVzLlxuICAgKlxuICAgKiBLZWVwIHRoaXMgZGlzYWJsZWQgd2hlbiBhIGRvd25zdHJlYW0gYnVuZGxlciBjb25zdW1lcyB0aGUgZ2VuZXJhdGVkIHN0ZXBcbiAgICogYnVuZGxlIGJlY2F1c2UgdGhhdCBidW5kbGVyIGNhbiByZXNvbHZlIHRoZSBleHRlcm5hbGl6ZWQgbG9jYWwgaW1wb3J0cy5cbiAgICogRW5hYmxlIGl0IGZvciBkaXJlY3QgcnVudGltZSBsb2FkaW5nLCB3aGVyZSBOb2RlIGltcG9ydHMgdGhlIGdlbmVyYXRlZCBzdGVwXG4gICAqIGJ1bmRsZSBmcm9tIGRpc2sgd2l0aG91dCBhIGxhdGVyIGJ1bmRsaW5nIHBhc3MuXG4gICAqL1xuICBidW5kbGVUcmFuc2l0aXZlTG9jYWxTdGVwRGVwZW5kZW5jaWVzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEFic29sdXRlIGZpbGUgcGF0aHMgb2YgZGlzY292ZXJlZCB3b3JrZmxvdy9zdGVwL3NlcmRlIGVudHJpZXMgd2hvc2VcbiAgICogaW1wb3J0cyBtdXN0IGJlIHRyZWF0ZWQgYXMgc2lkZS1lZmZlY3RmdWwuXG4gICAqXG4gICAqIFRoZSBTV0MgY29tcGlsZXIgdHJhbnNmb3JtIGluamVjdHMgcmVnaXN0cmF0aW9uIGNhbGxzICh3b3JrZmxvdyBJRHMsXG4gICAqIHN0ZXAgSURzLCBjbGFzcyBzZXJpYWxpemF0aW9uLCBldGMuKSBpbnRvIHRoZXNlIGZpbGVzLiBXaXRob3V0IHRoaXNcbiAgICogb3ZlcnJpZGUsIGVzYnVpbGQgaG9ub3VycyBgXCJzaWRlRWZmZWN0c1wiOiBmYWxzZWAgZnJvbSB0aGUgcGFja2FnZSdzXG4gICAqIGBwYWNrYWdlLmpzb25gIGFuZCBzaWxlbnRseSBkcm9wcyBiYXJlIGltcG9ydHMgb2YgdGhlc2UgbW9kdWxlcy5cbiAgICovXG4gIHNpZGVFZmZlY3RFbnRyaWVzPzogc3RyaW5nW107XG59XG5cbmNvbnN0IE5PREVfUkVTT0xWRV9PUFRJT05TID0ge1xuICBkZXBlbmRlbmN5VHlwZTogJ2NvbW1vbmpzJyxcbiAgbW9kdWxlczogWydub2RlX21vZHVsZXMnXSxcbiAgZXhwb3J0c0ZpZWxkczogWydleHBvcnRzJ10sXG4gIGltcG9ydHNGaWVsZHM6IFsnaW1wb3J0cyddLFxuICBjb25kaXRpb25OYW1lczogWydub2RlJywgJ3JlcXVpcmUnXSxcbiAgZGVzY3JpcHRpb25GaWxlczogWydwYWNrYWdlLmpzb24nXSxcbiAgZXh0ZW5zaW9uczogW1xuICAgICcudHMnLFxuICAgICcudHN4JyxcbiAgICAnLm10cycsXG4gICAgJy5jdHMnLFxuICAgICcuY2pzJyxcbiAgICAnLm1qcycsXG4gICAgJy5qcycsXG4gICAgJy5qc3gnLFxuICAgICcuanNvbicsXG4gICAgJy5ub2RlJyxcbiAgXSxcbiAgZW5mb3JjZUV4dGVuc2lvbnM6IGZhbHNlLFxuICBzeW1saW5rczogdHJ1ZSxcbiAgbWFpbkZpZWxkczogWydtYWluJ10sXG4gIG1haW5GaWxlczogWydpbmRleCddLFxuICByb290czogW10sXG4gIGZ1bGx5U3BlY2lmaWVkOiBmYWxzZSxcbiAgcHJlZmVyUmVsYXRpdmU6IGZhbHNlLFxuICBwcmVmZXJBYnNvbHV0ZTogZmFsc2UsXG4gIHJlc3RyaWN0aW9uczogW10sXG59O1xuXG5jb25zdCBOT0RFX0VTTV9SRVNPTFZFX09QVElPTlMgPSB7XG4gIC4uLk5PREVfUkVTT0xWRV9PUFRJT05TLFxuICBkZXBlbmRlbmN5VHlwZTogJ2VzbScsXG4gIGNvbmRpdGlvbk5hbWVzOiBbJ25vZGUnLCAnaW1wb3J0J10sXG59O1xuXG5mdW5jdGlvbiBub3JtYWxpemVQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBwYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbn1cblxudHlwZSBJZExvY2F0aW9uID0ge1xuICBmaWxlUGF0aDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBmb3JtYXRJZExvY2F0aW9uKGxvY2F0aW9uOiBJZExvY2F0aW9uKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke2xvY2F0aW9uLmZpbGVQYXRofSMke2xvY2F0aW9uLm5hbWV9YDtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0VW5pcXVlTWFuaWZlc3RJZHMoXG4gIGVudHJpZXNCeUZpbGU6IFdvcmtmbG93TWFuaWZlc3RbJ3N0ZXBzJ10gfCBXb3JrZmxvd01hbmlmZXN0Wyd3b3JrZmxvd3MnXSxcbiAgaWRzOiBNYXA8c3RyaW5nLCBJZExvY2F0aW9uPixcbiAgZ2V0SWQ6IChkYXRhOiB7IHN0ZXBJZDogc3RyaW5nIH0gfCB7IHdvcmtmbG93SWQ6IHN0cmluZyB9KSA9PiBzdHJpbmcsXG4gIGxhYmVsOiAnc3RlcCcgfCAnd29ya2Zsb3cnXG4pOiB2b2lkIHtcbiAgY29uc3QgZW50cmllc0J5RmlsZUxpc3QgPSBPYmplY3QuZW50cmllcyhlbnRyaWVzQnlGaWxlIHx8IHt9KSBhcyBBcnJheTxcbiAgICBbc3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB7IHN0ZXBJZDogc3RyaW5nIH0gfCB7IHdvcmtmbG93SWQ6IHN0cmluZyB9Pl1cbiAgPjtcbiAgZm9yIChjb25zdCBbZmlsZVBhdGgsIGVudHJpZXNdIG9mIGVudHJpZXNCeUZpbGVMaXN0KSB7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgZGF0YV0gb2YgT2JqZWN0LmVudHJpZXMoZW50cmllcykpIHtcbiAgICAgIGNvbnN0IGlkID0gZ2V0SWQoZGF0YSk7XG4gICAgICBjb25zdCBleGlzdGluZyA9IGlkcy5nZXQoaWQpO1xuICAgICAgY29uc3QgY3VycmVudCA9IHsgZmlsZVBhdGgsIG5hbWUgfTtcbiAgICAgIGlmIChcbiAgICAgICAgZXhpc3RpbmcgJiZcbiAgICAgICAgKGV4aXN0aW5nLmZpbGVQYXRoICE9PSBjdXJyZW50LmZpbGVQYXRoIHx8XG4gICAgICAgICAgZXhpc3RpbmcubmFtZSAhPT0gY3VycmVudC5uYW1lKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGlkTmFtZSA9IGxhYmVsID09PSAnc3RlcCcgPyAnd29ya2Zsb3cgc3RlcCBJRCcgOiAnd29ya2Zsb3cgSUQnO1xuICAgICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBgJHtsYWJlbH0gZnVuY3Rpb25gO1xuICAgICAgICBjb25zdCBjYXBpdGFsaXplZExhYmVsID0gbGFiZWwgPT09ICdzdGVwJyA/ICdTdGVwJyA6ICdXb3JrZmxvdyc7XG4gICAgICAgIHRocm93IG5ldyBXb3JrZmxvd0J1aWxkRXJyb3IoXG4gICAgICAgICAgYER1cGxpY2F0ZSAke2lkTmFtZX0gXCIke2lkfVwiIGdlbmVyYXRlZCBmb3IgJHtmb3JtYXRJZExvY2F0aW9uKGV4aXN0aW5nKX0gYW5kICR7Zm9ybWF0SWRMb2NhdGlvbihjdXJyZW50KX0uYCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBoaW50OlxuICAgICAgICAgICAgICBgJHtjYXBpdGFsaXplZExhYmVsfSBJRHMgbXVzdCBiZSB1bmlxdWUgYWNyb3NzIGEgYnVpbGQuIGAgK1xuICAgICAgICAgICAgICBgSWYgeW91IG93biBvbmUgb2YgdGhlIGNvbGxpZGluZyBmaWxlcywgcmVuYW1lIHRoZSAke2Z1bmN0aW9uTmFtZX0gb3IgZXhwb3J0IGAgK1xuICAgICAgICAgICAgICBgdGhlIHBhY2thZ2UgZmlsZSB0aHJvdWdoIGEgdW5pcXVlIHBhY2thZ2Ugc3VicGF0aC4gSWYgdGhlIGNvbGxpc2lvbiBpcyBpbiBhIGAgK1xuICAgICAgICAgICAgICBgdHJhbnNpdGl2ZSBkZXBlbmRlbmN5IHlvdSBkb24ndCBjb250cm9sLCBmaWxlIGFuIGlzc3VlIHdpdGggdGhlIHVwc3RyZWFtIGAgK1xuICAgICAgICAgICAgICBgcGFja2FnZSBvciBwaW4gdG8gYSBub24tY29sbGlkaW5nIHZlcnNpb24uYCxcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZHMuc2V0KGlkLCBjdXJyZW50KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbWVyZ2VXb3JrZmxvd01hbmlmZXN0KFxuICB0YXJnZXQ6IFdvcmtmbG93TWFuaWZlc3QsXG4gIGluY29taW5nOiBXb3JrZmxvd01hbmlmZXN0LFxuICBzdGVwSWRzOiBNYXA8c3RyaW5nLCBJZExvY2F0aW9uPixcbiAgd29ya2Zsb3dJZHM6IE1hcDxzdHJpbmcsIElkTG9jYXRpb24+XG4pOiB2b2lkIHtcbiAgYXNzZXJ0VW5pcXVlTWFuaWZlc3RJZHMoXG4gICAgaW5jb21pbmcuc3RlcHMsXG4gICAgc3RlcElkcyxcbiAgICAoZGF0YSkgPT4gKGRhdGEgYXMgeyBzdGVwSWQ6IHN0cmluZyB9KS5zdGVwSWQsXG4gICAgJ3N0ZXAnXG4gICk7XG4gIGFzc2VydFVuaXF1ZU1hbmlmZXN0SWRzKFxuICAgIGluY29taW5nLndvcmtmbG93cyxcbiAgICB3b3JrZmxvd0lkcyxcbiAgICAoZGF0YSkgPT4gKGRhdGEgYXMgeyB3b3JrZmxvd0lkOiBzdHJpbmcgfSkud29ya2Zsb3dJZCxcbiAgICAnd29ya2Zsb3cnXG4gICk7XG5cbiAgdGFyZ2V0LndvcmtmbG93cyA9IE9iamVjdC5hc3NpZ24odGFyZ2V0LndvcmtmbG93cyB8fCB7fSwgaW5jb21pbmcud29ya2Zsb3dzKTtcbiAgdGFyZ2V0LnN0ZXBzID0gT2JqZWN0LmFzc2lnbih0YXJnZXQuc3RlcHMgfHwge30sIGluY29taW5nLnN0ZXBzKTtcbiAgdGFyZ2V0LmNsYXNzZXMgPSBPYmplY3QuYXNzaWduKHRhcmdldC5jbGFzc2VzIHx8IHt9LCBpbmNvbWluZy5jbGFzc2VzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN3Y1BsdWdpbihvcHRpb25zOiBTd2NQbHVnaW5PcHRpb25zKTogUGx1Z2luIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnc3djLXdvcmtmbG93LXBsdWdpbicsXG4gICAgc2V0dXAoYnVpbGQpIHtcbiAgICAgIGxldCBzdGVwSWRzRm9yQ3VycmVudEJ1aWxkID0gbmV3IE1hcDxzdHJpbmcsIElkTG9jYXRpb24+KCk7XG4gICAgICBsZXQgd29ya2Zsb3dJZHNGb3JDdXJyZW50QnVpbGQgPSBuZXcgTWFwPHN0cmluZywgSWRMb2NhdGlvbj4oKTtcblxuICAgICAgYnVpbGQub25TdGFydCgoKSA9PiB7XG4gICAgICAgIHN0ZXBJZHNGb3JDdXJyZW50QnVpbGQgPSBuZXcgTWFwKCk7XG4gICAgICAgIHdvcmtmbG93SWRzRm9yQ3VycmVudEJ1aWxkID0gbmV3IE1hcCgpO1xuICAgICAgICBpZiAob3B0aW9ucy53b3JrZmxvd01hbmlmZXN0KSB7XG4gICAgICAgICAgZGVsZXRlIG9wdGlvbnMud29ya2Zsb3dNYW5pZmVzdC5zdGVwcztcbiAgICAgICAgICBkZWxldGUgb3B0aW9ucy53b3JrZmxvd01hbmlmZXN0LndvcmtmbG93cztcbiAgICAgICAgICBkZWxldGUgb3B0aW9ucy53b3JrZmxvd01hbmlmZXN0LmNsYXNzZXM7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBldmVyeXRoaW5nIGlzIGV4dGVybmFsIHVubGVzcyBleHBsaWNpdGx5IGNvbmZpZ3VyZWRcbiAgICAgIC8vIHRvIGJlIGJ1bmRsZWRcbiAgICAgIGNvbnN0IGNqc1Jlc29sdmVyID0gcHJvbWlzaWZ5KFxuICAgICAgICBlbmhhbmNlZFJlc29sdmVPcmlnLmNyZWF0ZShOT0RFX1JFU09MVkVfT1BUSU9OUylcbiAgICAgICk7XG4gICAgICBjb25zdCBlc21SZXNvbHZlciA9IHByb21pc2lmeShcbiAgICAgICAgZW5oYW5jZWRSZXNvbHZlT3JpZy5jcmVhdGUoTk9ERV9FU01fUkVTT0xWRV9PUFRJT05TKVxuICAgICAgKTtcblxuICAgICAgY29uc3QgZW5oYW5jZWRSZXNvbHZlID0gYXN5bmMgKGNvbnRleHQ6IHN0cmluZywgcGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IGVzbVJlc29sdmVyKGNvbnRleHQsIHBhdGgpO1xuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgcmV0dXJuIGNqc1Jlc29sdmVyKGNvbnRleHQsIHBhdGgpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICAvLyBQcmUtY29tcHV0ZSB0aGUgbm9ybWFsaXplZCBzaWRlLWVmZmVjdCBlbnRyaWVzIHNldCBmb3IgTygxKSBsb29rdXBzLlxuICAgICAgY29uc3Qgbm9ybWFsaXplZFNpZGVFZmZlY3RFbnRyaWVzID0gbmV3IFNldChcbiAgICAgICAgb3B0aW9ucy5zaWRlRWZmZWN0RW50cmllcz8ubWFwKChlKSA9PiBlLnJlcGxhY2UoL1xcXFwvZywgJy8nKSlcbiAgICAgICk7XG5cbiAgICAgIGJ1aWxkLm9uUmVzb2x2ZSh7IGZpbHRlcjogLy4qLyB9LCBhc3luYyAoYXJncykgPT4ge1xuICAgICAgICBpZiAoYXJncy5wbHVnaW5EYXRhPy5za2lwU3djUGx1Z2luKSByZXR1cm4gbnVsbDtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgIW9wdGlvbnMuZW50cmllc1RvQnVuZGxlICYmXG4gICAgICAgICAgbm9ybWFsaXplZFNpZGVFZmZlY3RFbnRyaWVzLnNpemUgPT09IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXaGVuIG9ubHkgc2lkZUVmZmVjdEVudHJpZXMgaXMgc2V0IChubyBlbnRyaWVzVG9CdW5kbGUpLCB3ZSBvbmx5XG4gICAgICAgIC8vIG5lZWQgdG8gb3ZlcnJpZGUgc2lkZUVmZmVjdHMgZm9yIHRvcC1sZXZlbCBiYXJlIGltcG9ydHMg4oCUIHR5cGljYWxseVxuICAgICAgICAvLyBmcm9tIHRoZSB2aXJ0dWFsIGVudHJ5LiBTa2lwIHJlc29sdXRpb24gZm9yIHRyYW5zaXRpdmUgaW1wb3J0c1xuICAgICAgICAvLyAoZHluYW1pYyBpbXBvcnRzLCByZXF1aXJlcywgZXRjLikgdG8gYXZvaWQgdW5uZWNlc3Nhcnkgb3ZlcmhlYWQuXG4gICAgICAgIGlmICghb3B0aW9ucy5lbnRyaWVzVG9CdW5kbGUgJiYgYXJncy5raW5kICE9PSAnaW1wb3J0LXN0YXRlbWVudCcpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc3BlY2lmaWVyID0gYXJncy5wYXRoO1xuICAgICAgICAgIGNvbnN0IHNwZWNpZmllcklzUGF0aCA9XG4gICAgICAgICAgICBzcGVjaWZpZXIuc3RhcnRzV2l0aCgnLicpIHx8IHNwZWNpZmllci5zdGFydHNXaXRoKCcvJyk7XG5cbiAgICAgICAgICBsZXQgcmVzb2x2ZWRQYXRoOiBzdHJpbmcgfCBmYWxzZSB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAvLyBQYXRoLXN0eWxlIHNwZWNpZmllcnMgKC4vZm9vLCAuLi9mb28sIC9hYnMvcGF0aCkgZXh0ZXJuYWxpemUgYXNcbiAgICAgICAgICAvLyByZWxhdGl2ZSBwYXRocyBmcm9tIGBvdXRkaXJgLiBCYXJlIHNwZWNpZmllcnMgKG5wbSBwYWNrYWdlcylcbiAgICAgICAgICAvLyBleHRlcm5hbGl6ZSBhcy1pcyBzbyBOb2RlIGNhbiByZXNvbHZlIHRoZW0gYXQgcnVudGltZS5cbiAgICAgICAgICBjb25zdCBzaG91bGRNYWtlUmVsYXRpdmUgPSBzcGVjaWZpZXJJc1BhdGg7XG5cbiAgICAgICAgICBpZiAoc3BlY2lmaWVySXNQYXRoKSB7XG4gICAgICAgICAgICByZXNvbHZlZFBhdGggPSBhd2FpdCBlbmhhbmNlZFJlc29sdmUoYXJncy5yZXNvbHZlRGlyLCBzcGVjaWZpZXIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBSZXNvbHZlIGZyb20gcHJvamVjdCByb290IHNvIG5lc3RlZCBkZXBzIGFyZW4ndCBleHRlcm5hbGl6ZWRcbiAgICAgICAgICAgIHJlc29sdmVkUGF0aCA9IGF3YWl0IGVuaGFuY2VkUmVzb2x2ZShcbiAgICAgICAgICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuYWJzV29ya2luZ0RpciB8fCBwcm9jZXNzLmN3ZCgpLFxuICAgICAgICAgICAgICBzcGVjaWZpZXJcbiAgICAgICAgICAgICkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTsgLy8gc3dhbGxvdyBzbyBlc2J1aWxkIGZhbGxiYWNrIGJlbG93IGNhbiB0cnlcblxuICAgICAgICAgICAgLy8gRmFsbCBiYWNrIHRvIGVzYnVpbGQgZm9yIGFsaWFzZXMvdHNjb25maWcgcGF0aHMuXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gSWYgdGhlIHNwZWNpZmllciByZXNvbHZlcyB0byBhIHByb2plY3QtbG9jYWwgZmlsZSB2aWEgYW5cbiAgICAgICAgICAgIC8vIGFsaWFzL3BhdGggbWFwcGluZyAoZS5nLiB0c2NvbmZpZyBgcGF0aHNgLCBlc2J1aWxkIGBhbGlhc2AsXG4gICAgICAgICAgICAvLyBzZWxmLXJlZmVyZW5jaW5nIHBhY2thZ2UgbmFtZXMgbGlrZSBgQG15LXBrZy9saWIvZm9vYCksIHdlXG4gICAgICAgICAgICAvLyBidW5kbGUgaXQgaW5saW5lIHJhdGhlciB0aGFuIGV4dGVybmFsaXppbmcuXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gRXh0ZXJuYWxpemluZyBzdWNoIGZpbGVzIGlzIHVuc2FmZTogd2UnZCBlbWl0IGEgcmVsYXRpdmVcbiAgICAgICAgICAgIC8vIGltcG9ydCB0byB0aGUgb3JpZ2luYWwgc291cmNlIG9uIGRpc2ssIGJ1dCB0aGF0IHNvdXJjZSBjYW5cbiAgICAgICAgICAgIC8vIGNvbnRhaW4gZnVydGhlciBhbGlhcyBpbXBvcnRzLiBBdCBydW50aW1lLCBOb2RlJ3MgRVNNIGxvYWRlclxuICAgICAgICAgICAgLy8gZG9lc24ndCBrbm93IGFib3V0IHRzY29uZmlnIHBhdGhzIG9yIGJ1aWxkLXRpbWUgYWxpYXNlcywgc29cbiAgICAgICAgICAgIC8vIHRob3NlIHRyYW5zaXRpdmUgaW1wb3J0cyB0aHJvdyBgRVJSX01PRFVMRV9OT1RfRk9VTkRgIC9cbiAgICAgICAgICAgIC8vIGBQYWNrYWdlIHN1YnBhdGggLi4uIGlzIG5vdCBkZWZpbmVkIGJ5IFwiZXhwb3J0c1wiYC5cbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAvLyBCdW5kbGluZyBpbmxpbmUgZW5zdXJlcyBhbGlhcy1iYXNlZCBpbXBvcnRzIGFyZSByZXNvbHZlZCBhdFxuICAgICAgICAgICAgLy8gYnVpbGQgdGltZSAod2hlcmUgdGhlIGFsaWFzIG1hcCBpcyBrbm93bikgYW5kIHRoZSBydW50aW1lXG4gICAgICAgICAgICAvLyBuZXZlciBzZWVzIGFuIHVucmVzb2x2YWJsZSBzcGVjaWZpZXIuXG4gICAgICAgICAgICBpZiAoIXJlc29sdmVkUGF0aCkge1xuICAgICAgICAgICAgICBjb25zdCBlc2J1aWxkUmVzdWx0ID0gYXdhaXQgYnVpbGQucmVzb2x2ZShzcGVjaWZpZXIsIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlRGlyOiBhcmdzLnJlc29sdmVEaXIsXG4gICAgICAgICAgICAgICAga2luZDogYXJncy5raW5kLFxuICAgICAgICAgICAgICAgIHBsdWdpbkRhdGE6IHsgc2tpcFN3Y1BsdWdpbjogdHJ1ZSB9LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY29uc3QgZGlkUmVzb2x2ZSA9XG4gICAgICAgICAgICAgICAgISFlc2J1aWxkUmVzdWx0LnBhdGggJiYgIWVzYnVpbGRSZXN1bHQuZXJyb3JzLmxlbmd0aDtcbiAgICAgICAgICAgICAgY29uc3QgaXNQcm9qZWN0TG9jYWxGaWxlID1cbiAgICAgICAgICAgICAgICBkaWRSZXNvbHZlICYmXG4gICAgICAgICAgICAgICAgIWVzYnVpbGRSZXN1bHQuZXh0ZXJuYWwgJiZcbiAgICAgICAgICAgICAgICAhZXNidWlsZFJlc3VsdC5wYXRoXG4gICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXC9nLCAnLycpXG4gICAgICAgICAgICAgICAgICAuaW5jbHVkZXMoJy9ub2RlX21vZHVsZXMvJyk7XG4gICAgICAgICAgICAgIGlmIChpc1Byb2plY3RMb2NhbEZpbGUpIHtcbiAgICAgICAgICAgICAgICAvLyBMZXQgZXNidWlsZCBidW5kbGUgdGhpcyBhbGlhc2VkIHByb2plY3QtbG9jYWwgZmlsZSBpbmxpbmVcbiAgICAgICAgICAgICAgICAvLyAocmV0dXJuIG51bGwgdG8gZGVmZXIgdG8gZXNidWlsZCdzIG5vcm1hbCBwaXBlbGluZSkuIFRoZVxuICAgICAgICAgICAgICAgIC8vIFNXQyBgb25Mb2FkYCBoYW5kbGVyIHdpbGwgc3RpbGwgcHJvY2VzcyBpdC5cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBvcHRpb25zLmVudHJpZXNUb0J1bmRsZSAmJlxuICAgICAgICAgICAgICAgIGVzYnVpbGRSZXN1bHQucGF0aD8uZW5kc1dpdGgoJy5ub2RlJylcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGV4dGVybmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgcGF0aDogc3BlY2lmaWVyLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXJlc29sdmVkUGF0aCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgICAvLyBOb3JtYWxpemUgdG8gZm9yd2FyZCBzbGFzaGVzIGZvciBjcm9zcy1wbGF0Zm9ybSBjb21wYXJpc29uXG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZVBhdGgocmVzb2x2ZWRQYXRoKTtcbiAgICAgICAgICBjb25zdCB3b3JraW5nRGlyID1cbiAgICAgICAgICAgIGJ1aWxkLmluaXRpYWxPcHRpb25zLmFic1dvcmtpbmdEaXIgfHwgcHJvY2Vzcy5jd2QoKTtcbiAgICAgICAgICBjb25zdCBwcm9qZWN0Um9vdCA9IG9wdGlvbnMucHJvamVjdFJvb3QgfHwgd29ya2luZ0RpcjtcbiAgICAgICAgICBjb25zdCBtb2R1bGVTcGVjaWZpZXJSb290ID1cbiAgICAgICAgICAgIG9wdGlvbnMubW9kdWxlU3BlY2lmaWVyUm9vdCB8fCBwcm9qZWN0Um9vdDtcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG9wdGlvbnMuZW50cmllc1RvQnVuZGxlICYmXG4gICAgICAgICAgICBub3JtYWxpemVkUmVzb2x2ZWRQYXRoLmVuZHNXaXRoKCcubm9kZScpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBleHRlcm5hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgcGF0aDogc3BlY2lmaWVyLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGlzIG1vZHVsZSBpcyBhIGRpc2NvdmVyZWQgZW50cnkgd2hvc2UgU1dDLXRyYW5zZm9ybWVkXG4gICAgICAgICAgLy8gY29kZSBjb250YWlucyBzaWRlIGVmZmVjdHMgKHdvcmtmbG93L3N0ZXAvY2xhc3MgcmVnaXN0cmF0aW9uKS5cbiAgICAgICAgICAvLyBPdmVycmlkZSB0aGUgcGFja2FnZS5qc29uIFwic2lkZUVmZmVjdHNcIjogZmFsc2Ugc28gZXNidWlsZCBkb2VzIG5vdFxuICAgICAgICAgIC8vIGRyb3AgYmFyZSBpbXBvcnRzIG9mIHRoZXNlIG1vZHVsZXMuXG4gICAgICAgICAgY29uc3QgaGFzU2lkZUVmZmVjdHMgPSBub3JtYWxpemVkU2lkZUVmZmVjdEVudHJpZXMuaGFzKFxuICAgICAgICAgICAgbm9ybWFsaXplZFJlc29sdmVkUGF0aFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAob3B0aW9ucy5lbnRyaWVzVG9CdW5kbGUpIHtcbiAgICAgICAgICAgIGxldCBzaG91bGRCdW5kbGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZW50cnlUb0J1bmRsZSBvZiBvcHRpb25zLmVudHJpZXNUb0J1bmRsZSkge1xuICAgICAgICAgICAgICBjb25zdCBub3JtYWxpemVkRW50cnkgPSBlbnRyeVRvQnVuZGxlLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcblxuICAgICAgICAgICAgICBpZiAobm9ybWFsaXplZFJlc29sdmVkUGF0aCA9PT0gbm9ybWFsaXplZEVudHJ5KSB7XG4gICAgICAgICAgICAgICAgc2hvdWxkQnVuZGxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIGlmIHRoZSBjdXJyZW50IGVudHJ5IGltcG9ydHMgYSBjaGlsZCB0aGF0IG5lZWRzXG4gICAgICAgICAgICAgIC8vIHRvIGJlIGJ1bmRsZWQgdGhlbiBpdCBuZWVkcyB0byBhbHNvIGJlIGJ1bmRsZWQgc29cbiAgICAgICAgICAgICAgLy8gdGhhdCB0aGUgY2hpbGQgY2FuIGhhdmUgb3VyIHRyYW5zZm9ybSBhcHBsaWVkXG4gICAgICAgICAgICAgIGlmIChwYXJlbnRIYXNDaGlsZChub3JtYWxpemVkUmVzb2x2ZWRQYXRoLCBub3JtYWxpemVkRW50cnkpKSB7XG4gICAgICAgICAgICAgICAgc2hvdWxkQnVuZGxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIEJ1bmRsZSBwcm9qZWN0LWxvY2FsIHNvdXJjZSBmaWxlcyB0aGF0IGFyZSBpbXBvcnRlZCBieSBhXG4gICAgICAgICAgICAgIC8vIHN0ZXAvc2VyZGUgZW50cnkgc28gZGlyZWN0IHJ1bnRpbWUgbG9hZGVycyBkbyBub3Qgc2VlIHJhdyBUU1xuICAgICAgICAgICAgICAvLyBleHRlbnNpb25sZXNzIGltcG9ydHMuIEtlZXAgcGFja2FnZSBkZXBlbmRlbmNpZXMgZXh0ZXJuYWxcbiAgICAgICAgICAgICAgLy8gdW5sZXNzIHRoZXkgYXJlIHRoZW1zZWx2ZXMgaW4gZW50cmllc1RvQnVuZGxlIG9yIGFyZSBwYXJlbnRzXG4gICAgICAgICAgICAgIC8vIG9mIGEgZGlzY292ZXJlZCB3b3JrZmxvdy9zdGVwL3NlcmRlIGZpbGUgdmlhIHRoZSBjaGVjayBhYm92ZS5cbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG9wdGlvbnMuYnVuZGxlVHJhbnNpdGl2ZUxvY2FsU3RlcERlcGVuZGVuY2llcyAmJlxuICAgICAgICAgICAgICAgIGlzUHJvamVjdExvY2FsRmlsZShcbiAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRSZXNvbHZlZFBhdGgsXG4gICAgICAgICAgICAgICAgICBtb2R1bGVTcGVjaWZpZXJSb290XG4gICAgICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgICAgIHBhcmVudEhhc0NoaWxkKG5vcm1hbGl6ZWRFbnRyeSwgbm9ybWFsaXplZFJlc29sdmVkUGF0aClcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgc2hvdWxkQnVuZGxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2hvdWxkQnVuZGxlKSB7XG4gICAgICAgICAgICAgIC8vIExldCBlc2J1aWxkIGJ1bmRsZSB0aGlzIGVudHJ5LCBidXQgb3ZlcnJpZGUgc2lkZUVmZmVjdHMgaWYgbmVlZGVkLlxuICAgICAgICAgICAgICAvLyBXZSBtdXN0IHJldHVybiB0aGUgcmVzb2x2ZWQgYHBhdGhgIGFsb25nc2lkZSBgc2lkZUVmZmVjdHNgIGJlY2F1c2VcbiAgICAgICAgICAgICAgLy8gcmV0dXJuaW5nIG9ubHkgYHsgc2lkZUVmZmVjdHM6IHRydWUgfWAgd2l0aG91dCBhIHBhdGggY2F1c2VzIGVzYnVpbGRcbiAgICAgICAgICAgICAgLy8gdG8gZmFsbCB0aHJvdWdoIHRvIGl0cyBvd24gcmVzb2x2ZXIsIHdoaWNoIHJlLXJlYWRzIHRoZSBwYWNrYWdlLmpzb25cbiAgICAgICAgICAgICAgLy8gYW5kIGFwcGxpZXMgYFwic2lkZUVmZmVjdHNcIjogZmFsc2VgIGZyb20gdGhlcmUuXG4gICAgICAgICAgICAgIHJldHVybiBoYXNTaWRlRWZmZWN0c1xuICAgICAgICAgICAgICAgID8geyBwYXRoOiByZXNvbHZlZFBhdGgsIHNpZGVFZmZlY3RzOiB0cnVlIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBleHRlcm5hbFBhdGg6IHN0cmluZztcbiAgICAgICAgICAgIGlmIChzaG91bGRNYWtlUmVsYXRpdmUpIHtcbiAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgcmVzb2x2ZWQgZmlsZSBsaXZlcyBpbnNpZGUgbm9kZV9tb2R1bGVzLCBsZXRcbiAgICAgICAgICAgICAgLy8gZXNidWlsZCBidW5kbGUgaXQgcmF0aGVyIHRoYW4gZXh0ZXJuYWxpemluZyB3aXRoIGEgZGVlcGx5XG4gICAgICAgICAgICAgIC8vIG5lc3RlZCByZWxhdGl2ZSBwYXRoLiBEb3duc3RyZWFtIGJ1bmRsZXJzIChSb2xsdXAvVml0ZSlcbiAgICAgICAgICAgICAgLy8gY2FuJ3QgcmV3cml0ZSBvcGFxdWUgYF9fcmVxdWlyZSgpYCBjYWxscyBpbiBDSlMgc2hpbXMsIHNvXG4gICAgICAgICAgICAgIC8vIHJlbGF0aXZlIHBhdGhzIGNvbXB1dGVkIGZvciBgb3V0ZGlyYCBicmVhayBvbmNlIHRoZSBvdXRwdXRcbiAgICAgICAgICAgICAgLy8gaXMgcmVidW5kbGVkIHRvIGEgZGlmZmVyZW50IGRpcmVjdG9yeS5cbiAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRSZXNvbHZlZFBhdGguaW5jbHVkZXMoJy9ub2RlX21vZHVsZXMvJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsgLy8gbGV0IGVzYnVpbGQgYnVuZGxlIGl0XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBleHRlcm5hbFBhdGggPSByZWxhdGl2ZShcbiAgICAgICAgICAgICAgICBvcHRpb25zLm91dGRpciB8fCBwcm9jZXNzLmN3ZCgpLFxuICAgICAgICAgICAgICAgIHJlc29sdmVkUGF0aFxuICAgICAgICAgICAgICApLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcblxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5yZXdyaXRlVHNFeHRlbnNpb25zKSB7XG4gICAgICAgICAgICAgICAgLy8gUmV3cml0ZSBUeXBlU2NyaXB0IGV4dGVuc2lvbnMgdG8gdGhlaXIgSlMgZXF1aXZhbGVudHMgc28gdGhlXG4gICAgICAgICAgICAgICAgLy8gZXh0ZXJuYWxpemVkIGltcG9ydCBpcyBsb2FkYWJsZSBieSBOb2RlJ3MgbmF0aXZlIEVTTSBsb2FkZXIuXG4gICAgICAgICAgICAgICAgZXh0ZXJuYWxQYXRoID0gZXh0ZXJuYWxQYXRoXG4gICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFwudHN4PyQvLCAnLmpzJylcbiAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXC5tdHMkLywgJy5tanMnKVxuICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcLmN0cyQvLCAnLmNqcycpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBleHRlcm5hbFBhdGggPSBzcGVjaWZpZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGV4dGVybmFsOiB0cnVlLFxuICAgICAgICAgICAgICBwYXRoOiBleHRlcm5hbFBhdGgsXG4gICAgICAgICAgICAgIHNpZGVFZmZlY3RzOiBoYXNTaWRlRWZmZWN0cyB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE5vIGVudHJpZXNUb0J1bmRsZSDigJQgb25seSBvdmVycmlkZSBzaWRlRWZmZWN0cyB3aGVuIG5lZWRlZC5cbiAgICAgICAgICAvLyBXZSBtdXN0IHJldHVybiB0aGUgcmVzb2x2ZWQgYHBhdGhgIGFsb25nc2lkZSBgc2lkZUVmZmVjdHNgIGJlY2F1c2VcbiAgICAgICAgICAvLyByZXR1cm5pbmcgb25seSBgeyBzaWRlRWZmZWN0czogdHJ1ZSB9YCB3aXRob3V0IGEgcGF0aCBjYXVzZXMgZXNidWlsZFxuICAgICAgICAgIC8vIHRvIGZhbGwgdGhyb3VnaCB0byBpdHMgb3duIHJlc29sdmVyLCB3aGljaCByZS1yZWFkcyB0aGUgcGFja2FnZS5qc29uXG4gICAgICAgICAgLy8gYW5kIGFwcGxpZXMgYFwic2lkZUVmZmVjdHNcIjogZmFsc2VgIGZyb20gdGhlcmUuXG4gICAgICAgICAgcmV0dXJuIGhhc1NpZGVFZmZlY3RzXG4gICAgICAgICAgICA/IHsgcGF0aDogcmVzb2x2ZWRQYXRoLCBzaWRlRWZmZWN0czogdHJ1ZSB9XG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEhhbmRsZSBUeXBlU2NyaXB0IGFuZCBKYXZhU2NyaXB0IGZpbGVzXG4gICAgICBidWlsZC5vbkxvYWQoeyBmaWx0ZXI6IGpzVHNSZWdleCB9LCBhc3luYyAoYXJncykgPT4ge1xuICAgICAgICAvLyBEZXRlcm1pbmUgaWYgdGhpcyBpcyBhIFR5cGVTY3JpcHQgZmlsZVxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIERldGVybWluZSB0aGUgbG9hZGVyIGJhc2VkIG9uIHRoZSBvdXRwdXRcbiAgICAgICAgICBsZXQgbG9hZGVyOiAnanMnIHwgJ2pzeCcgfCAndHN4JyA9ICdqcyc7XG4gICAgICAgICAgaWYgKGFyZ3MucGF0aC5lbmRzV2l0aCgnLmpzeCcpKSB7XG4gICAgICAgICAgICBsb2FkZXIgPSAnanN4JztcbiAgICAgICAgICB9IGVsc2UgaWYgKGFyZ3MucGF0aC5lbmRzV2l0aCgnLnRzeCcpKSB7XG4gICAgICAgICAgICBsb2FkZXIgPSAndHN4JztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgc291cmNlID0gYXdhaXQgcmVhZEZpbGUoYXJncy5wYXRoLCAndXRmOCcpO1xuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRTb3VyY2UgPSBzb3VyY2VcbiAgICAgICAgICAgIC5yZXBsYWNlKC9yZXF1aXJlXFwoXFxzKihbJ1wiXSlzZXJ2ZXItb25seVxcMVxccypcXCkvZywgJ3ZvaWQgMCcpXG4gICAgICAgICAgICAucmVwbGFjZSgvcmVxdWlyZVxcKFxccyooWydcIl0pY2xpZW50LW9ubHlcXDFcXHMqXFwpL2csICd2b2lkIDAnKTtcblxuICAgICAgICAgIC8vIENhbGN1bGF0ZSByZWxhdGl2ZSBwYXRoIGZvciBTV0MgcGx1Z2luXG4gICAgICAgICAgLy8gVGhlIGZpbGVuYW1lIHBhcmFtZXRlciBpcyB1c2VkIHRvIGdlbmVyYXRlIHdvcmtmbG93SWQvc3RlcElkLCBzbyBpdCBtdXN0IGJlIHJlbGF0aXZlXG4gICAgICAgICAgY29uc3Qgd29ya2luZ0RpciA9XG4gICAgICAgICAgICBidWlsZC5pbml0aWFsT3B0aW9ucy5hYnNXb3JraW5nRGlyIHx8IHByb2Nlc3MuY3dkKCk7XG4gICAgICAgICAgY29uc3QgcHJvamVjdFJvb3QgPSBvcHRpb25zLnByb2plY3RSb290IHx8IHdvcmtpbmdEaXI7XG4gICAgICAgICAgY29uc3QgbW9kdWxlU3BlY2lmaWVyUm9vdCA9XG4gICAgICAgICAgICBvcHRpb25zLm1vZHVsZVNwZWNpZmllclJvb3QgfHwgcHJvamVjdFJvb3Q7XG4gICAgICAgICAgLy8gTm9ybWFsaXplIHBhdGhzOiBjb252ZXJ0IGJhY2tzbGFzaGVzIHRvIGZvcndhcmQgc2xhc2hlcyBhbmQgcmVtb3ZlIHRyYWlsaW5nIHNsYXNoZXNcbiAgICAgICAgICBjb25zdCBub3JtYWxpemVkV29ya2luZ0RpciA9IHdvcmtpbmdEaXJcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcL2csICcvJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXC8kLywgJycpO1xuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gYXJncy5wYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcblxuICAgICAgICAgIC8vIFdpbmRvd3MgZml4OiBBbHdheXMgZG8gY2FzZS1pbnNlbnNpdGl2ZSBwYXRoIGNvbXBhcmlzb24gYXMgdGhlIFBSSU1BUlkgbG9naWNcbiAgICAgICAgICAvLyB0byB3b3JrIGFyb3VuZCBub2RlOnBhdGgucmVsYXRpdmUoKSBub3QgcmVjb2duaXppbmcgcGF0aHMgd2l0aCBkaWZmZXJlbnQgZHJpdmVcbiAgICAgICAgICAvLyBsZXR0ZXIgY2FzaW5nIChlLmcuLCBEOiB2cyBkOikgYXMgYmVpbmcgaW4gdGhlIHNhbWUgdHJlZVxuICAgICAgICAgIGNvbnN0IGxvd2VyV2QgPSBub3JtYWxpemVkV29ya2luZ0Rpci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGNvbnN0IGxvd2VyUGF0aCA9IG5vcm1hbGl6ZWRQYXRoLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICBsZXQgcmVsYXRpdmVGaWxlcGF0aDogc3RyaW5nO1xuICAgICAgICAgIGlmIChsb3dlclBhdGguc3RhcnRzV2l0aChgJHtsb3dlcldkfS9gKSkge1xuICAgICAgICAgICAgLy8gRmlsZSBpcyB1bmRlciB3b3JraW5nIGRpcmVjdG9yeSAtIG1hbnVhbGx5IGNhbGN1bGF0ZSByZWxhdGl2ZSBwYXRoXG4gICAgICAgICAgICAvLyBUaGlzIGVuc3VyZXMgd2UgZ2V0IGEgcmVsYXRpdmUgcGF0aCBldmVuIHdpdGggZHJpdmUgbGV0dGVyIGNhc2luZyBpc3N1ZXNcbiAgICAgICAgICAgIHJlbGF0aXZlRmlsZXBhdGggPSBub3JtYWxpemVkUGF0aC5zdWJzdHJpbmcoXG4gICAgICAgICAgICAgIG5vcm1hbGl6ZWRXb3JraW5nRGlyLmxlbmd0aCArIDFcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIGlmIChsb3dlclBhdGggPT09IGxvd2VyV2QpIHtcbiAgICAgICAgICAgIC8vIEZpbGUgSVMgdGhlIHdvcmtpbmcgZGlyZWN0b3J5XG4gICAgICAgICAgICByZWxhdGl2ZUZpbGVwYXRoID0gJy4nO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBGaWxlIGlzIG91dHNpZGUgd29ya2luZyBkaXJlY3RvcnkgLSB1c2UgcmVsYXRpdmUoKSBhbmQgc3RyaXAgLi4vIHByZWZpeGVzIGlmIG5lZWRlZFxuICAgICAgICAgICAgcmVsYXRpdmVGaWxlcGF0aCA9IHJlbGF0aXZlKFxuICAgICAgICAgICAgICBub3JtYWxpemVkV29ya2luZ0RpcixcbiAgICAgICAgICAgICAgbm9ybWFsaXplZFBhdGhcbiAgICAgICAgICAgICkucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuXG4gICAgICAgICAgICAvLyBIYW5kbGUgZmlsZXMgZGlzY292ZXJlZCBvdXRzaWRlIHRoZSB3b3JraW5nIGRpcmVjdG9yeVxuICAgICAgICAgICAgLy8gVGhlc2UgY29tZSBiYWNrIGFzIC4uL3BhdGgvdG8vZmlsZSwgYnV0IHdlIHdhbnQganVzdCBwYXRoL3RvL2ZpbGVcbiAgICAgICAgICAgIGlmIChyZWxhdGl2ZUZpbGVwYXRoLnN0YXJ0c1dpdGgoJy4uLycpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFsaWFzZWRSZWxhdGl2ZVBhdGggPVxuICAgICAgICAgICAgICAgIGF3YWl0IHJlc29sdmVXb3JrZmxvd0FsaWFzUmVsYXRpdmVQYXRoKGFyZ3MucGF0aCwgd29ya2luZ0Rpcik7XG4gICAgICAgICAgICAgIGlmIChhbGlhc2VkUmVsYXRpdmVQYXRoKSB7XG4gICAgICAgICAgICAgICAgcmVsYXRpdmVGaWxlcGF0aCA9IGFsaWFzZWRSZWxhdGl2ZVBhdGg7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVsYXRpdmVGaWxlcGF0aCA9IHJlbGF0aXZlRmlsZXBhdGhcbiAgICAgICAgICAgICAgICAgIC5zcGxpdCgnLycpXG4gICAgICAgICAgICAgICAgICAuZmlsdGVyKChwYXJ0KSA9PiBwYXJ0ICE9PSAnLi4nKVxuICAgICAgICAgICAgICAgICAgLmpvaW4oJy8nKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEZpbmFsIHNhZmV0eSBjaGVjayAtIGVuc3VyZSB3ZSBuZXZlciBwYXNzIGFuIGFic29sdXRlIHBhdGggdG8gU1dDXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcmVsYXRpdmVGaWxlcGF0aC5pbmNsdWRlcygnOicpIHx8XG4gICAgICAgICAgICByZWxhdGl2ZUZpbGVwYXRoLnN0YXJ0c1dpdGgoJy8nKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBidXQgaWYgaXQgZG9lcywgdXNlIGp1c3QgdGhlIGZpbGVuYW1lIGFzIGxhc3QgcmVzb3J0XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBgW0VSUk9SXSByZWxhdGl2ZUZpbGVwYXRoIGlzIHN0aWxsIGFic29sdXRlOiAke3JlbGF0aXZlRmlsZXBhdGh9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJlbGF0aXZlRmlsZXBhdGggPSBub3JtYWxpemVkUGF0aC5zcGxpdCgnLycpLnBvcCgpIHx8ICd1bmtub3duLnRzJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB7IGNvZGU6IHRyYW5zZm9ybWVkQ29kZSwgd29ya2Zsb3dNYW5pZmVzdCB9ID1cbiAgICAgICAgICAgIGF3YWl0IGFwcGx5U3djVHJhbnNmb3JtKFxuICAgICAgICAgICAgICByZWxhdGl2ZUZpbGVwYXRoLFxuICAgICAgICAgICAgICBub3JtYWxpemVkU291cmNlLFxuICAgICAgICAgICAgICBvcHRpb25zLm1vZGUsXG4gICAgICAgICAgICAgIGFyZ3MucGF0aCwgLy8gUGFzcyBhYnNvbHV0ZSBwYXRoIGZvciBtb2R1bGUgc3BlY2lmaWVyIHJlc29sdXRpb25cbiAgICAgICAgICAgICAgcHJvamVjdFJvb3QsXG4gICAgICAgICAgICAgIG1vZHVsZVNwZWNpZmllclJvb3RcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoIW9wdGlvbnMud29ya2Zsb3dNYW5pZmVzdCkge1xuICAgICAgICAgICAgb3B0aW9ucy53b3JrZmxvd01hbmlmZXN0ID0ge307XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVyZ2VXb3JrZmxvd01hbmlmZXN0KFxuICAgICAgICAgICAgb3B0aW9ucy53b3JrZmxvd01hbmlmZXN0LFxuICAgICAgICAgICAgd29ya2Zsb3dNYW5pZmVzdCxcbiAgICAgICAgICAgIHN0ZXBJZHNGb3JDdXJyZW50QnVpbGQsXG4gICAgICAgICAgICB3b3JrZmxvd0lkc0ZvckN1cnJlbnRCdWlsZFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudHM6IHRyYW5zZm9ybWVkQ29kZSxcbiAgICAgICAgICAgIGxvYWRlcixcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9XG4gICAgICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGDinYwgU1dDIHRyYW5zZm9ybSBlcnJvciBpbiAke2FyZ3MucGF0aH06YCxcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVycm9yczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGV4dDogYFNXQyB0cmFuc2Zvcm0gZmFpbGVkOiAke2Vycm9yTWVzc2FnZX1gLFxuICAgICAgICAgICAgICAgIGxvY2F0aW9uOiB7IGZpbGU6IGFyZ3MucGF0aCwgbGluZTogMCwgY29sdW1uOiAwIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzUHJvamVjdExvY2FsRmlsZShmaWxlUGF0aDogc3RyaW5nLCBwcm9qZWN0Um9vdDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmIChub3JtYWxpemVQYXRoKGZpbGVQYXRoKS5pbmNsdWRlcygnL25vZGVfbW9kdWxlcy8nKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgcmVzb2x2ZU1vZHVsZVNwZWNpZmllcihmaWxlUGF0aCwgcHJvamVjdFJvb3QpLm1vZHVsZVNwZWNpZmllciA9PT0gdW5kZWZpbmVkXG4gICk7XG59XG4iXX0=
|
|
388
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3djLWVzYnVpbGQtcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N3Yy1lc2J1aWxkLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RELE9BQU8sbUJBQW1CLE1BQU0sa0JBQWtCLENBQUM7QUFFbkQsT0FBTyxFQUNMLGlCQUFpQixHQUVsQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsY0FBYyxHQUNmLE1BQU0sc0NBQXNDLENBQUM7QUFDOUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUE4RHZFLE1BQU0sb0JBQW9CLEdBQUc7SUFDM0IsY0FBYyxFQUFFLFVBQVU7SUFDMUIsT0FBTyxFQUFFLENBQUMsY0FBYyxDQUFDO0lBQ3pCLGFBQWEsRUFBRSxDQUFDLFNBQVMsQ0FBQztJQUMxQixhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUM7SUFDMUIsY0FBYyxFQUFFLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQztJQUNuQyxnQkFBZ0IsRUFBRSxDQUFDLGNBQWMsQ0FBQztJQUNsQyxVQUFVLEVBQUU7UUFDVixLQUFLO1FBQ0wsTUFBTTtRQUNOLE1BQU07UUFDTixNQUFNO1FBQ04sTUFBTTtRQUNOLE1BQU07UUFDTixLQUFLO1FBQ0wsTUFBTTtRQUNOLE9BQU87UUFDUCxPQUFPO0tBQ1I7SUFDRCxpQkFBaUIsRUFBRSxLQUFLO0lBQ3hCLFFBQVEsRUFBRSxJQUFJO0lBQ2QsVUFBVSxFQUFFLENBQUMsTUFBTSxDQUFDO0lBQ3BCLFNBQVMsRUFBRSxDQUFDLE9BQU8sQ0FBQztJQUNwQixLQUFLLEVBQUUsRUFBRTtJQUNULGNBQWMsRUFBRSxLQUFLO0lBQ3JCLGNBQWMsRUFBRSxLQUFLO0lBQ3JCLGNBQWMsRUFBRSxLQUFLO0lBQ3JCLFlBQVksRUFBRSxFQUFFO0NBQ2pCLENBQUM7QUFFRixNQUFNLHdCQUF3QixHQUFHO0lBQy9CLEdBQUcsb0JBQW9CO0lBQ3ZCLGNBQWMsRUFBRSxLQUFLO0lBQ3JCLGNBQWMsRUFBRSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUM7Q0FDbkMsQ0FBQztBQUVGLFNBQVMsYUFBYSxDQUFDLElBQVk7SUFDakMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBT0QsU0FBUyxnQkFBZ0IsQ0FBQyxRQUFvQjtJQUM1QyxPQUFPLEdBQUcsUUFBUSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDakQsQ0FBQztBQUVELFNBQVMsdUJBQXVCLENBQzlCLGFBQXdFLEVBQ3hFLEdBQTRCLEVBQzVCLEtBQW9FLEVBQ3BFLEtBQTBCO0lBRTFCLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLElBQUksRUFBRSxDQUUzRCxDQUFDO0lBQ0YsS0FBSyxNQUFNLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLGlCQUFpQixFQUFFLENBQUM7UUFDcEQsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNuRCxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkIsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM3QixNQUFNLE9BQU8sR0FBRyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUNuQyxJQUNFLFFBQVE7Z0JBQ1IsQ0FBQyxRQUFRLENBQUMsUUFBUSxLQUFLLE9BQU8sQ0FBQyxRQUFRO29CQUNyQyxRQUFRLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFDakMsQ0FBQztnQkFDRCxNQUFNLE1BQU0sR0FBRyxLQUFLLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO2dCQUNyRSxNQUFNLFlBQVksR0FBRyxHQUFHLEtBQUssV0FBVyxDQUFDO2dCQUN6QyxNQUFNLGdCQUFnQixHQUFHLEtBQUssS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO2dCQUNoRSxNQUFNLElBQUksa0JBQWtCLENBQzFCLGFBQWEsTUFBTSxLQUFLLEVBQUUsbUJBQW1CLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxRQUFRLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQzNHO29CQUNFLElBQUksRUFDRixHQUFHLGdCQUFnQixzQ0FBc0M7d0JBQ3pELHFEQUFxRCxZQUFZLGFBQWE7d0JBQzlFLDhFQUE4RTt3QkFDOUUsMkVBQTJFO3dCQUMzRSw0Q0FBNEM7aUJBQy9DLENBQ0YsQ0FBQztZQUNKLENBQUM7WUFDRCxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLHFCQUFxQixDQUM1QixNQUF3QixFQUN4QixRQUEwQixFQUMxQixPQUFnQyxFQUNoQyxXQUFvQztJQUVwQyx1QkFBdUIsQ0FDckIsUUFBUSxDQUFDLEtBQUssRUFDZCxPQUFPLEVBQ1AsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFFLElBQTJCLENBQUMsTUFBTSxFQUM3QyxNQUFNLENBQ1AsQ0FBQztJQUNGLHVCQUF1QixDQUNyQixRQUFRLENBQUMsU0FBUyxFQUNsQixXQUFXLEVBQ1gsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFFLElBQStCLENBQUMsVUFBVSxFQUNyRCxVQUFVLENBQ1gsQ0FBQztJQUVGLE1BQU0sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLEVBQUUsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDN0UsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRSxNQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3pFLENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUFDLE9BQXlCO0lBQ3ZELE9BQU87UUFDTCxJQUFJLEVBQUUscUJBQXFCO1FBQzNCLEtBQUssQ0FBQyxLQUFLO1lBQ1QsSUFBSSxzQkFBc0IsR0FBRyxJQUFJLEdBQUcsRUFBc0IsQ0FBQztZQUMzRCxJQUFJLDBCQUEwQixHQUFHLElBQUksR0FBRyxFQUFzQixDQUFDO1lBRS9ELEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFO2dCQUNqQixzQkFBc0IsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNuQywwQkFBMEIsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUN2QyxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO29CQUM3QixPQUFPLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7b0JBQ3RDLE9BQU8sT0FBTyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQztvQkFDMUMsT0FBTyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO2dCQUMxQyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxzREFBc0Q7WUFDdEQsZ0JBQWdCO1lBQ2hCLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FDM0IsbUJBQW1CLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQ2pELENBQUM7WUFDRixNQUFNLFdBQVcsR0FBRyxTQUFTLENBQzNCLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUNyRCxDQUFDO1lBRUYsTUFBTSxlQUFlLEdBQUcsS0FBSyxFQUFFLE9BQWUsRUFBRSxJQUFZLEVBQUUsRUFBRTtnQkFDOUQsSUFBSSxDQUFDO29CQUNILE9BQU8sTUFBTSxXQUFXLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUMxQyxDQUFDO2dCQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQ1gsT0FBTyxXQUFXLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNwQyxDQUFDO1lBQ0gsQ0FBQyxDQUFDO1lBRUYsdUVBQXVFO1lBQ3ZFLE1BQU0sMkJBQTJCLEdBQUcsSUFBSSxHQUFHLENBQ3pDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQzdELENBQUM7WUFFRixLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtnQkFDL0MsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLGFBQWE7b0JBQUUsT0FBTyxJQUFJLENBQUM7Z0JBRWhELElBQ0UsQ0FBQyxPQUFPLENBQUMsZUFBZTtvQkFDeEIsMkJBQTJCLENBQUMsSUFBSSxLQUFLLENBQUMsRUFDdEMsQ0FBQztvQkFDRCxPQUFPLElBQUksQ0FBQztnQkFDZCxDQUFDO2dCQUVELG1FQUFtRTtnQkFDbkUsc0VBQXNFO2dCQUN0RSxpRUFBaUU7Z0JBQ2pFLG1FQUFtRTtnQkFDbkUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxrQkFBa0IsRUFBRSxDQUFDO29CQUNqRSxPQUFPLElBQUksQ0FBQztnQkFDZCxDQUFDO2dCQUVELElBQUksQ0FBQztvQkFDSCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO29CQUM1QixNQUFNLGVBQWUsR0FDbkIsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUV6RCxJQUFJLFlBQXdDLENBQUM7b0JBQzdDLGtFQUFrRTtvQkFDbEUsK0RBQStEO29CQUMvRCx5REFBeUQ7b0JBQ3pELE1BQU0sa0JBQWtCLEdBQUcsZUFBZSxDQUFDO29CQUUzQyxJQUFJLGVBQWUsRUFBRSxDQUFDO3dCQUNwQixZQUFZLEdBQUcsTUFBTSxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztvQkFDbkUsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLCtEQUErRDt3QkFDL0QsWUFBWSxHQUFHLE1BQU0sZUFBZSxDQUNsQyxLQUFLLENBQUMsY0FBYyxDQUFDLGFBQWEsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQ25ELFNBQVMsQ0FDVixDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLDRDQUE0Qzt3QkFFdEUsbURBQW1EO3dCQUNuRCxFQUFFO3dCQUNGLDJEQUEyRDt3QkFDM0QsOERBQThEO3dCQUM5RCw2REFBNkQ7d0JBQzdELDhDQUE4Qzt3QkFDOUMsRUFBRTt3QkFDRiwyREFBMkQ7d0JBQzNELDZEQUE2RDt3QkFDN0QsK0RBQStEO3dCQUMvRCw4REFBOEQ7d0JBQzlELDBEQUEwRDt3QkFDMUQscURBQXFEO3dCQUNyRCxFQUFFO3dCQUNGLDhEQUE4RDt3QkFDOUQsNERBQTREO3dCQUM1RCx3Q0FBd0M7d0JBQ3hDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQzs0QkFDbEIsTUFBTSxhQUFhLEdBQUcsTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRTtnQ0FDbkQsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO2dDQUMzQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0NBQ2YsVUFBVSxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRTs2QkFDcEMsQ0FBQyxDQUFDOzRCQUNILE1BQU0sVUFBVSxHQUNkLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7NEJBQ3ZELE1BQU0sa0JBQWtCLEdBQ3RCLFVBQVU7Z0NBQ1YsQ0FBQyxhQUFhLENBQUMsUUFBUTtnQ0FDdkIsQ0FBQyxhQUFhLENBQUMsSUFBSTtxQ0FDaEIsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7cUNBQ25CLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDOzRCQUNoQyxJQUFJLGtCQUFrQixFQUFFLENBQUM7Z0NBQ3ZCLDREQUE0RDtnQ0FDNUQsMkRBQTJEO2dDQUMzRCw4Q0FBOEM7Z0NBQzlDLE9BQU8sSUFBSSxDQUFDOzRCQUNkLENBQUM7aUNBQU0sSUFDTCxPQUFPLENBQUMsZUFBZTtnQ0FDdkIsYUFBYSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQ3JDLENBQUM7Z0NBQ0QsT0FBTztvQ0FDTCxRQUFRLEVBQUUsSUFBSTtvQ0FDZCxJQUFJLEVBQUUsU0FBUztpQ0FDaEIsQ0FBQzs0QkFDSixDQUFDO3dCQUNILENBQUM7b0JBQ0gsQ0FBQztvQkFFRCxJQUFJLENBQUMsWUFBWTt3QkFBRSxPQUFPLElBQUksQ0FBQztvQkFFL0IsNkRBQTZEO29CQUM3RCxNQUFNLHNCQUFzQixHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDM0QsTUFBTSxVQUFVLEdBQ2QsS0FBSyxDQUFDLGNBQWMsQ0FBQyxhQUFhLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUN0RCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxJQUFJLFVBQVUsQ0FBQztvQkFDdEQsTUFBTSxtQkFBbUIsR0FDdkIsT0FBTyxDQUFDLG1CQUFtQixJQUFJLFdBQVcsQ0FBQztvQkFFN0MsSUFDRSxPQUFPLENBQUMsZUFBZTt3QkFDdkIsc0JBQXNCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUN4QyxDQUFDO3dCQUNELE9BQU87NEJBQ0wsUUFBUSxFQUFFLElBQUk7NEJBQ2QsSUFBSSxFQUFFLFNBQVM7eUJBQ2hCLENBQUM7b0JBQ0osQ0FBQztvQkFFRCxtRUFBbUU7b0JBQ25FLGlFQUFpRTtvQkFDakUscUVBQXFFO29CQUNyRSxzQ0FBc0M7b0JBQ3RDLE1BQU0sY0FBYyxHQUFHLDJCQUEyQixDQUFDLEdBQUcsQ0FDcEQsc0JBQXNCLENBQ3ZCLENBQUM7b0JBRUYsSUFBSSxPQUFPLENBQUMsZUFBZSxFQUFFLENBQUM7d0JBQzVCLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQzt3QkFDekIsS0FBSyxNQUFNLGFBQWEsSUFBSSxPQUFPLENBQUMsZUFBZSxFQUFFLENBQUM7NEJBQ3BELE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDOzRCQUUxRCxJQUFJLHNCQUFzQixLQUFLLGVBQWUsRUFBRSxDQUFDO2dDQUMvQyxZQUFZLEdBQUcsSUFBSSxDQUFDO2dDQUNwQixNQUFNOzRCQUNSLENBQUM7NEJBRUQsa0RBQWtEOzRCQUNsRCxvREFBb0Q7NEJBQ3BELGdEQUFnRDs0QkFDaEQsSUFBSSxjQUFjLENBQUMsc0JBQXNCLEVBQUUsZUFBZSxDQUFDLEVBQUUsQ0FBQztnQ0FDNUQsWUFBWSxHQUFHLElBQUksQ0FBQztnQ0FDcEIsTUFBTTs0QkFDUixDQUFDOzRCQUVELDJEQUEyRDs0QkFDM0QsK0RBQStEOzRCQUMvRCw0REFBNEQ7NEJBQzVELCtEQUErRDs0QkFDL0QsZ0VBQWdFOzRCQUNoRSxJQUNFLE9BQU8sQ0FBQyxxQ0FBcUM7Z0NBQzdDLGtCQUFrQixDQUNoQixzQkFBc0IsRUFDdEIsbUJBQW1CLENBQ3BCO2dDQUNELGNBQWMsQ0FBQyxlQUFlLEVBQUUsc0JBQXNCLENBQUMsRUFDdkQsQ0FBQztnQ0FDRCxZQUFZLEdBQUcsSUFBSSxDQUFDO2dDQUNwQixNQUFNOzRCQUNSLENBQUM7d0JBQ0gsQ0FBQzt3QkFFRCxJQUFJLFlBQVksRUFBRSxDQUFDOzRCQUNqQixxRUFBcUU7NEJBQ3JFLHFFQUFxRTs0QkFDckUsdUVBQXVFOzRCQUN2RSx1RUFBdUU7NEJBQ3ZFLGlEQUFpRDs0QkFDakQsT0FBTyxjQUFjO2dDQUNuQixDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7Z0NBQzNDLENBQUMsQ0FBQyxJQUFJLENBQUM7d0JBQ1gsQ0FBQzt3QkFFRCxJQUFJLFlBQW9CLENBQUM7d0JBQ3pCLElBQUksa0JBQWtCLEVBQUUsQ0FBQzs0QkFDdkIsd0RBQXdEOzRCQUN4RCw0REFBNEQ7NEJBQzVELDBEQUEwRDs0QkFDMUQsNERBQTREOzRCQUM1RCw2REFBNkQ7NEJBQzdELHlDQUF5Qzs0QkFDekMsSUFBSSxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO2dDQUN0RCxPQUFPLElBQUksQ0FBQyxDQUFDLHdCQUF3Qjs0QkFDdkMsQ0FBQzs0QkFFRCxZQUFZLEdBQUcsUUFBUSxDQUNyQixPQUFPLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFDL0IsWUFBWSxDQUNiLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQzs0QkFFdEIsSUFBSSxPQUFPLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQ0FDaEMsK0RBQStEO2dDQUMvRCwrREFBK0Q7Z0NBQy9ELFlBQVksR0FBRyxZQUFZO3FDQUN4QixPQUFPLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQztxQ0FDekIsT0FBTyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7cUNBQ3pCLE9BQU8sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7NEJBQy9CLENBQUM7d0JBQ0gsQ0FBQzs2QkFBTSxDQUFDOzRCQUNOLFlBQVksR0FBRyxTQUFTLENBQUM7d0JBQzNCLENBQUM7d0JBRUQsT0FBTzs0QkFDTCxRQUFRLEVBQUUsSUFBSTs0QkFDZCxJQUFJLEVBQUUsWUFBWTs0QkFDbEIsV0FBVyxFQUFFLGNBQWMsSUFBSSxTQUFTO3lCQUN6QyxDQUFDO29CQUNKLENBQUM7b0JBRUQsOERBQThEO29CQUM5RCxxRUFBcUU7b0JBQ3JFLHVFQUF1RTtvQkFDdkUsdUVBQXVFO29CQUN2RSxpREFBaUQ7b0JBQ2pELE9BQU8sY0FBYzt3QkFDbkIsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO3dCQUMzQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUNYLENBQUM7Z0JBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFBLENBQUM7Z0JBQ2QsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDLENBQUMsQ0FBQztZQUVILHlDQUF5QztZQUN6QyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtnQkFDakQseUNBQXlDO2dCQUN6QyxJQUFJLENBQUM7b0JBQ0gsMkNBQTJDO29CQUMzQyxJQUFJLE1BQU0sR0FBeUIsSUFBSSxDQUFDO29CQUN4QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQy9CLE1BQU0sR0FBRyxLQUFLLENBQUM7b0JBQ2pCLENBQUM7eUJBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUN0QyxNQUFNLEdBQUcsS0FBSyxDQUFDO29CQUNqQixDQUFDO29CQUNELE1BQU0sTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQ2pELE1BQU0sZ0JBQWdCLEdBQUcsTUFBTTt5QkFDNUIsT0FBTyxDQUFDLHVDQUF1QyxFQUFFLFFBQVEsQ0FBQzt5QkFDMUQsT0FBTyxDQUFDLHVDQUF1QyxFQUFFLFFBQVEsQ0FBQyxDQUFDO29CQUU5RCx5Q0FBeUM7b0JBQ3pDLHVGQUF1RjtvQkFDdkYsTUFBTSxVQUFVLEdBQ2QsS0FBSyxDQUFDLGNBQWMsQ0FBQyxhQUFhLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUN0RCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxJQUFJLFVBQVUsQ0FBQztvQkFDdEQsTUFBTSxtQkFBbUIsR0FDdkIsT0FBTyxDQUFDLG1CQUFtQixJQUFJLFdBQVcsQ0FBQztvQkFDN0Msc0ZBQXNGO29CQUN0RixNQUFNLG9CQUFvQixHQUFHLFVBQVU7eUJBQ3BDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDO3lCQUNuQixPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUN0QixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBRXJELCtFQUErRTtvQkFDL0UsaUZBQWlGO29CQUNqRiwyREFBMkQ7b0JBQzNELE1BQU0sT0FBTyxHQUFHLG9CQUFvQixDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUNuRCxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBRS9DLElBQUksZ0JBQXdCLENBQUM7b0JBQzdCLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQzt3QkFDeEMscUVBQXFFO3dCQUNyRSwyRUFBMkU7d0JBQzNFLGdCQUFnQixHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQ3pDLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQ2hDLENBQUM7b0JBQ0osQ0FBQzt5QkFBTSxJQUFJLFNBQVMsS0FBSyxPQUFPLEVBQUUsQ0FBQzt3QkFDakMsZ0NBQWdDO3dCQUNoQyxnQkFBZ0IsR0FBRyxHQUFHLENBQUM7b0JBQ3pCLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixzRkFBc0Y7d0JBQ3RGLGdCQUFnQixHQUFHLFFBQVEsQ0FDekIsb0JBQW9CLEVBQ3BCLGNBQWMsQ0FDZixDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7d0JBRXRCLHdEQUF3RDt3QkFDeEQsb0VBQW9FO3dCQUNwRSxJQUFJLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDOzRCQUN2QyxNQUFNLG1CQUFtQixHQUN2QixNQUFNLGdDQUFnQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7NEJBQ2hFLElBQUksbUJBQW1CLEVBQUUsQ0FBQztnQ0FDeEIsZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUM7NEJBQ3pDLENBQUM7aUNBQU0sQ0FBQztnQ0FDTixnQkFBZ0IsR0FBRyxnQkFBZ0I7cUNBQ2hDLEtBQUssQ0FBQyxHQUFHLENBQUM7cUNBQ1YsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDO3FDQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQ2YsQ0FBQzt3QkFDSCxDQUFDO29CQUNILENBQUM7b0JBRUQsb0VBQW9FO29CQUNwRSxJQUNFLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7d0JBQzlCLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFDaEMsQ0FBQzt3QkFDRCxpRkFBaUY7d0JBQ2pGLE9BQU8sQ0FBQyxLQUFLLENBQ1gsK0NBQStDLGdCQUFnQixFQUFFLENBQ2xFLENBQUM7d0JBQ0YsZ0JBQWdCLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxZQUFZLENBQUM7b0JBQ3JFLENBQUM7b0JBRUQsTUFBTSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsR0FDL0MsTUFBTSxpQkFBaUIsQ0FDckIsZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixPQUFPLENBQUMsSUFBSSxFQUNaLElBQUksQ0FBQyxJQUFJLEVBQUUscURBQXFEO29CQUNoRSxXQUFXLEVBQ1gsbUJBQW1CLENBQ3BCLENBQUM7b0JBRUosSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO3dCQUM5QixPQUFPLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO29CQUNoQyxDQUFDO29CQUVELHFCQUFxQixDQUNuQixPQUFPLENBQUMsZ0JBQWdCLEVBQ3hCLGdCQUFnQixFQUNoQixzQkFBc0IsRUFDdEIsMEJBQTBCLENBQzNCLENBQUM7b0JBRUYsTUFBTSxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQzt3QkFDL0IsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO3dCQUNsQixRQUFRLEVBQUUsZ0JBQWdCO3dCQUMxQixZQUFZLEVBQUUsSUFBSSxDQUFDLElBQUk7d0JBQ3ZCLE1BQU0sRUFBRSxnQkFBZ0I7d0JBQ3hCLElBQUksRUFBRSxlQUFlO3dCQUNyQixnQkFBZ0I7cUJBQ2pCLENBQUMsQ0FBQztvQkFFSCxPQUFPO3dCQUNMLFFBQVEsRUFBRSxlQUFlO3dCQUN6QixNQUFNO3FCQUNQLENBQUM7Z0JBQ0osQ0FBQztnQkFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO29CQUNmLE1BQU0sWUFBWSxHQUNoQixLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3pELE9BQU8sQ0FBQyxLQUFLLENBQ1gsNEJBQTRCLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFDeEMsWUFBWSxDQUNiLENBQUM7b0JBQ0YsT0FBTzt3QkFDTCxNQUFNLEVBQUU7NEJBQ047Z0NBQ0UsSUFBSSxFQUFFLHlCQUF5QixZQUFZLEVBQUU7Z0NBQzdDLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRTs2QkFDbEQ7eUJBQ0Y7cUJBQ0YsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLFFBQWdCLEVBQUUsV0FBbUI7SUFDL0QsSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztRQUN2RCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxPQUFPLENBQ0wsc0JBQXNCLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDLGVBQWUsS0FBSyxTQUFTLENBQzVFLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVhZEZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IHJlbGF0aXZlIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gJ25vZGU6dXRpbCc7XG5pbXBvcnQgeyBXb3JrZmxvd0J1aWxkRXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCBlbmhhbmNlZFJlc29sdmVPcmlnIGZyb20gJ2VuaGFuY2VkLXJlc29sdmUnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW4gfSBmcm9tICdlc2J1aWxkJztcbmltcG9ydCB7XG4gIGFwcGx5U3djVHJhbnNmb3JtLFxuICB0eXBlIFdvcmtmbG93TWFuaWZlc3QsXG59IGZyb20gJy4vYXBwbHktc3djLXRyYW5zZm9ybS5qcyc7XG5pbXBvcnQge1xuICBqc1RzUmVnZXgsXG4gIHBhcmVudEhhc0NoaWxkLFxufSBmcm9tICcuL2Rpc2NvdmVyLWVudHJpZXMtZXNidWlsZC1wbHVnaW4uanMnO1xuaW1wb3J0IHsgcmVzb2x2ZU1vZHVsZVNwZWNpZmllciB9IGZyb20gJy4vbW9kdWxlLXNwZWNpZmllci5qcyc7XG5pbXBvcnQgeyByZXNvbHZlV29ya2Zsb3dBbGlhc1JlbGF0aXZlUGF0aCB9IGZyb20gJy4vd29ya2Zsb3ctYWxpYXMuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93VHJhbnNmb3JtUmVzdWx0IHtcbiAgcmVhZG9ubHkgbW9kZTogJ3N0ZXAnIHwgJ3dvcmtmbG93JztcbiAgcmVhZG9ubHkgZmlsZW5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgYWJzb2x1dGVQYXRoOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNvdXJjZTogc3RyaW5nO1xuICByZWFkb25seSBjb2RlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHdvcmtmbG93TWFuaWZlc3Q6IFdvcmtmbG93TWFuaWZlc3Q7XG59XG5cbmV4cG9ydCB0eXBlIFdvcmtmbG93QWZ0ZXJUcmFuc2Zvcm1Ib29rID0gKFxuICByZXN1bHQ6IFdvcmtmbG93VHJhbnNmb3JtUmVzdWx0XG4pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuXG5leHBvcnQgaW50ZXJmYWNlIFN3Y1BsdWdpbk9wdGlvbnMge1xuICBtb2RlOiAnc3RlcCcgfCAnd29ya2Zsb3cnO1xuICBlbnRyaWVzVG9CdW5kbGU/OiBzdHJpbmdbXTtcbiAgb3V0ZGlyPzogc3RyaW5nO1xuICBwcm9qZWN0Um9vdD86IHN0cmluZztcbiAgbW9kdWxlU3BlY2lmaWVyUm9vdD86IHN0cmluZztcbiAgd29ya2Zsb3dNYW5pZmVzdD86IFdvcmtmbG93TWFuaWZlc3Q7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBvYnNlcnZlciBpbnZva2VkIGFmdGVyIGEgdHJhbnNmb3JtJ3MgbWFuaWZlc3QgZW50cmllcyBoYXZlIGJlZW5cbiAgICogYWNjZXB0ZWQuIEEgZmlsZSBtYXkgYmUgb2JzZXJ2ZWQgbXVsdGlwbGUgdGltZXMgYWNyb3NzIG1vZGVzLCBidW5kbGVzLCBhbmRcbiAgICogd2F0Y2ggcmVidWlsZHMuIFRoZSBvYnNlcnZlciBpcyBhd2FpdGVkLCBjYW5ub3QgcmVwbGFjZSB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4gICAqIGFuZCBhYm9ydHMgdGhlIGJ1aWxkIGlmIGl0IHRocm93cy5cbiAgICovXG4gIG9uQWZ0ZXJUcmFuc2Zvcm0/OiBXb3JrZmxvd0FmdGVyVHJhbnNmb3JtSG9vaztcbiAgLyoqXG4gICAqIFJld3JpdGUgVHlwZVNjcmlwdCBleHRlbnNpb25zICgudHMsIC50c3gsIC5tdHMsIC5jdHMpIHRvIHRoZWlyIEpTXG4gICAqIGVxdWl2YWxlbnRzICguanMsIC5tanMsIC5janMpIGluIGV4dGVybmFsaXplZCBpbXBvcnQgcGF0aHMuXG4gICAqXG4gICAqIEVuYWJsZSB0aGlzIHdoZW4gdGhlIG91dHB1dCBidW5kbGUgaXMgY29uc3VtZWQgZGlyZWN0bHkgYnkgTm9kZSdzIG5hdGl2ZVxuICAgKiBFU00gbG9hZGVyIChlLmcuIHZpdGVzdCksIHdoaWNoIGNhbm5vdCByZXNvbHZlIC50cyBleHRlbnNpb25zLlxuICAgKlxuICAgKiBMZWF2ZSBkaXNhYmxlZCAoZGVmYXVsdCkgd2hlbiBhIGRvd25zdHJlYW0gYnVuZGxlciAod2VicGFjaywgVml0ZSwgZXRjLilcbiAgICogaGFuZGxlcyByZXNvbHV0aW9uIOKAlCB0aG9zZSB0b29scyByZXNvbHZlIC50cyBuYXRpdmVseSBhbmQgcmV3cml0aW5nXG4gICAqIGJyZWFrcyB0aGVtIGJlY2F1c2UgdGhlIC5qcyBmaWxlIGRvZXNuJ3QgZXhpc3Qgb24gZGlzay5cbiAgICovXG4gIHJld3JpdGVUc0V4dGVuc2lvbnM/OiBib29sZWFuO1xuICAvKipcbiAgICogQnVuZGxlIHByb2plY3QtbG9jYWwgZmlsZXMgdGhhdCBhcmUgdHJhbnNpdGl2ZWx5IGltcG9ydGVkIGJ5IHN0ZXAgZW50cmllcy5cbiAgICpcbiAgICogS2VlcCB0aGlzIGRpc2FibGVkIHdoZW4gYSBkb3duc3RyZWFtIGJ1bmRsZXIgY29uc3VtZXMgdGhlIGdlbmVyYXRlZCBzdGVwXG4gICAqIGJ1bmRsZSBiZWNhdXNlIHRoYXQgYnVuZGxlciBjYW4gcmVzb2x2ZSB0aGUgZXh0ZXJuYWxpemVkIGxvY2FsIGltcG9ydHMuXG4gICAqIEVuYWJsZSBpdCBmb3IgZGlyZWN0IHJ1bnRpbWUgbG9hZGluZywgd2hlcmUgTm9kZSBpbXBvcnRzIHRoZSBnZW5lcmF0ZWQgc3RlcFxuICAgKiBidW5kbGUgZnJvbSBkaXNrIHdpdGhvdXQgYSBsYXRlciBidW5kbGluZyBwYXNzLlxuICAgKi9cbiAgYnVuZGxlVHJhbnNpdGl2ZUxvY2FsU3RlcERlcGVuZGVuY2llcz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBBYnNvbHV0ZSBmaWxlIHBhdGhzIG9mIGRpc2NvdmVyZWQgd29ya2Zsb3cvc3RlcC9zZXJkZSBlbnRyaWVzIHdob3NlXG4gICAqIGltcG9ydHMgbXVzdCBiZSB0cmVhdGVkIGFzIHNpZGUtZWZmZWN0ZnVsLlxuICAgKlxuICAgKiBUaGUgU1dDIGNvbXBpbGVyIHRyYW5zZm9ybSBpbmplY3RzIHJlZ2lzdHJhdGlvbiBjYWxscyAod29ya2Zsb3cgSURzLFxuICAgKiBzdGVwIElEcywgY2xhc3Mgc2VyaWFsaXphdGlvbiwgZXRjLikgaW50byB0aGVzZSBmaWxlcy4gV2l0aG91dCB0aGlzXG4gICAqIG92ZXJyaWRlLCBlc2J1aWxkIGhvbm91cnMgYFwic2lkZUVmZmVjdHNcIjogZmFsc2VgIGZyb20gdGhlIHBhY2thZ2Unc1xuICAgKiBgcGFja2FnZS5qc29uYCBhbmQgc2lsZW50bHkgZHJvcHMgYmFyZSBpbXBvcnRzIG9mIHRoZXNlIG1vZHVsZXMuXG4gICAqL1xuICBzaWRlRWZmZWN0RW50cmllcz86IHN0cmluZ1tdO1xufVxuXG5jb25zdCBOT0RFX1JFU09MVkVfT1BUSU9OUyA9IHtcbiAgZGVwZW5kZW5jeVR5cGU6ICdjb21tb25qcycsXG4gIG1vZHVsZXM6IFsnbm9kZV9tb2R1bGVzJ10sXG4gIGV4cG9ydHNGaWVsZHM6IFsnZXhwb3J0cyddLFxuICBpbXBvcnRzRmllbGRzOiBbJ2ltcG9ydHMnXSxcbiAgY29uZGl0aW9uTmFtZXM6IFsnbm9kZScsICdyZXF1aXJlJ10sXG4gIGRlc2NyaXB0aW9uRmlsZXM6IFsncGFja2FnZS5qc29uJ10sXG4gIGV4dGVuc2lvbnM6IFtcbiAgICAnLnRzJyxcbiAgICAnLnRzeCcsXG4gICAgJy5tdHMnLFxuICAgICcuY3RzJyxcbiAgICAnLmNqcycsXG4gICAgJy5tanMnLFxuICAgICcuanMnLFxuICAgICcuanN4JyxcbiAgICAnLmpzb24nLFxuICAgICcubm9kZScsXG4gIF0sXG4gIGVuZm9yY2VFeHRlbnNpb25zOiBmYWxzZSxcbiAgc3ltbGlua3M6IHRydWUsXG4gIG1haW5GaWVsZHM6IFsnbWFpbiddLFxuICBtYWluRmlsZXM6IFsnaW5kZXgnXSxcbiAgcm9vdHM6IFtdLFxuICBmdWxseVNwZWNpZmllZDogZmFsc2UsXG4gIHByZWZlclJlbGF0aXZlOiBmYWxzZSxcbiAgcHJlZmVyQWJzb2x1dGU6IGZhbHNlLFxuICByZXN0cmljdGlvbnM6IFtdLFxufTtcblxuY29uc3QgTk9ERV9FU01fUkVTT0xWRV9PUFRJT05TID0ge1xuICAuLi5OT0RFX1JFU09MVkVfT1BUSU9OUyxcbiAgZGVwZW5kZW5jeVR5cGU6ICdlc20nLFxuICBjb25kaXRpb25OYW1lczogWydub2RlJywgJ2ltcG9ydCddLFxufTtcblxuZnVuY3Rpb24gbm9ybWFsaXplUGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG59XG5cbnR5cGUgSWRMb2NhdGlvbiA9IHtcbiAgZmlsZVBhdGg6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gZm9ybWF0SWRMb2NhdGlvbihsb2NhdGlvbjogSWRMb2NhdGlvbik6IHN0cmluZyB7XG4gIHJldHVybiBgJHtsb2NhdGlvbi5maWxlUGF0aH0jJHtsb2NhdGlvbi5uYW1lfWA7XG59XG5cbmZ1bmN0aW9uIGFzc2VydFVuaXF1ZU1hbmlmZXN0SWRzKFxuICBlbnRyaWVzQnlGaWxlOiBXb3JrZmxvd01hbmlmZXN0WydzdGVwcyddIHwgV29ya2Zsb3dNYW5pZmVzdFsnd29ya2Zsb3dzJ10sXG4gIGlkczogTWFwPHN0cmluZywgSWRMb2NhdGlvbj4sXG4gIGdldElkOiAoZGF0YTogeyBzdGVwSWQ6IHN0cmluZyB9IHwgeyB3b3JrZmxvd0lkOiBzdHJpbmcgfSkgPT4gc3RyaW5nLFxuICBsYWJlbDogJ3N0ZXAnIHwgJ3dvcmtmbG93J1xuKTogdm9pZCB7XG4gIGNvbnN0IGVudHJpZXNCeUZpbGVMaXN0ID0gT2JqZWN0LmVudHJpZXMoZW50cmllc0J5RmlsZSB8fCB7fSkgYXMgQXJyYXk8XG4gICAgW3N0cmluZywgUmVjb3JkPHN0cmluZywgeyBzdGVwSWQ6IHN0cmluZyB9IHwgeyB3b3JrZmxvd0lkOiBzdHJpbmcgfT5dXG4gID47XG4gIGZvciAoY29uc3QgW2ZpbGVQYXRoLCBlbnRyaWVzXSBvZiBlbnRyaWVzQnlGaWxlTGlzdCkge1xuICAgIGZvciAoY29uc3QgW25hbWUsIGRhdGFdIG9mIE9iamVjdC5lbnRyaWVzKGVudHJpZXMpKSB7XG4gICAgICBjb25zdCBpZCA9IGdldElkKGRhdGEpO1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSBpZHMuZ2V0KGlkKTtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSB7IGZpbGVQYXRoLCBuYW1lIH07XG4gICAgICBpZiAoXG4gICAgICAgIGV4aXN0aW5nICYmXG4gICAgICAgIChleGlzdGluZy5maWxlUGF0aCAhPT0gY3VycmVudC5maWxlUGF0aCB8fFxuICAgICAgICAgIGV4aXN0aW5nLm5hbWUgIT09IGN1cnJlbnQubmFtZSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCBpZE5hbWUgPSBsYWJlbCA9PT0gJ3N0ZXAnID8gJ3dvcmtmbG93IHN0ZXAgSUQnIDogJ3dvcmtmbG93IElEJztcbiAgICAgICAgY29uc3QgZnVuY3Rpb25OYW1lID0gYCR7bGFiZWx9IGZ1bmN0aW9uYDtcbiAgICAgICAgY29uc3QgY2FwaXRhbGl6ZWRMYWJlbCA9IGxhYmVsID09PSAnc3RlcCcgPyAnU3RlcCcgOiAnV29ya2Zsb3cnO1xuICAgICAgICB0aHJvdyBuZXcgV29ya2Zsb3dCdWlsZEVycm9yKFxuICAgICAgICAgIGBEdXBsaWNhdGUgJHtpZE5hbWV9IFwiJHtpZH1cIiBnZW5lcmF0ZWQgZm9yICR7Zm9ybWF0SWRMb2NhdGlvbihleGlzdGluZyl9IGFuZCAke2Zvcm1hdElkTG9jYXRpb24oY3VycmVudCl9LmAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGludDpcbiAgICAgICAgICAgICAgYCR7Y2FwaXRhbGl6ZWRMYWJlbH0gSURzIG11c3QgYmUgdW5pcXVlIGFjcm9zcyBhIGJ1aWxkLiBgICtcbiAgICAgICAgICAgICAgYElmIHlvdSBvd24gb25lIG9mIHRoZSBjb2xsaWRpbmcgZmlsZXMsIHJlbmFtZSB0aGUgJHtmdW5jdGlvbk5hbWV9IG9yIGV4cG9ydCBgICtcbiAgICAgICAgICAgICAgYHRoZSBwYWNrYWdlIGZpbGUgdGhyb3VnaCBhIHVuaXF1ZSBwYWNrYWdlIHN1YnBhdGguIElmIHRoZSBjb2xsaXNpb24gaXMgaW4gYSBgICtcbiAgICAgICAgICAgICAgYHRyYW5zaXRpdmUgZGVwZW5kZW5jeSB5b3UgZG9uJ3QgY29udHJvbCwgZmlsZSBhbiBpc3N1ZSB3aXRoIHRoZSB1cHN0cmVhbSBgICtcbiAgICAgICAgICAgICAgYHBhY2thZ2Ugb3IgcGluIHRvIGEgbm9uLWNvbGxpZGluZyB2ZXJzaW9uLmAsXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWRzLnNldChpZCwgY3VycmVudCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1lcmdlV29ya2Zsb3dNYW5pZmVzdChcbiAgdGFyZ2V0OiBXb3JrZmxvd01hbmlmZXN0LFxuICBpbmNvbWluZzogV29ya2Zsb3dNYW5pZmVzdCxcbiAgc3RlcElkczogTWFwPHN0cmluZywgSWRMb2NhdGlvbj4sXG4gIHdvcmtmbG93SWRzOiBNYXA8c3RyaW5nLCBJZExvY2F0aW9uPlxuKTogdm9pZCB7XG4gIGFzc2VydFVuaXF1ZU1hbmlmZXN0SWRzKFxuICAgIGluY29taW5nLnN0ZXBzLFxuICAgIHN0ZXBJZHMsXG4gICAgKGRhdGEpID0+IChkYXRhIGFzIHsgc3RlcElkOiBzdHJpbmcgfSkuc3RlcElkLFxuICAgICdzdGVwJ1xuICApO1xuICBhc3NlcnRVbmlxdWVNYW5pZmVzdElkcyhcbiAgICBpbmNvbWluZy53b3JrZmxvd3MsXG4gICAgd29ya2Zsb3dJZHMsXG4gICAgKGRhdGEpID0+IChkYXRhIGFzIHsgd29ya2Zsb3dJZDogc3RyaW5nIH0pLndvcmtmbG93SWQsXG4gICAgJ3dvcmtmbG93J1xuICApO1xuXG4gIHRhcmdldC53b3JrZmxvd3MgPSBPYmplY3QuYXNzaWduKHRhcmdldC53b3JrZmxvd3MgfHwge30sIGluY29taW5nLndvcmtmbG93cyk7XG4gIHRhcmdldC5zdGVwcyA9IE9iamVjdC5hc3NpZ24odGFyZ2V0LnN0ZXBzIHx8IHt9LCBpbmNvbWluZy5zdGVwcyk7XG4gIHRhcmdldC5jbGFzc2VzID0gT2JqZWN0LmFzc2lnbih0YXJnZXQuY2xhc3NlcyB8fCB7fSwgaW5jb21pbmcuY2xhc3Nlcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTd2NQbHVnaW4ob3B0aW9uczogU3djUGx1Z2luT3B0aW9ucyk6IFBsdWdpbiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3N3Yy13b3JrZmxvdy1wbHVnaW4nLFxuICAgIHNldHVwKGJ1aWxkKSB7XG4gICAgICBsZXQgc3RlcElkc0ZvckN1cnJlbnRCdWlsZCA9IG5ldyBNYXA8c3RyaW5nLCBJZExvY2F0aW9uPigpO1xuICAgICAgbGV0IHdvcmtmbG93SWRzRm9yQ3VycmVudEJ1aWxkID0gbmV3IE1hcDxzdHJpbmcsIElkTG9jYXRpb24+KCk7XG5cbiAgICAgIGJ1aWxkLm9uU3RhcnQoKCkgPT4ge1xuICAgICAgICBzdGVwSWRzRm9yQ3VycmVudEJ1aWxkID0gbmV3IE1hcCgpO1xuICAgICAgICB3b3JrZmxvd0lkc0ZvckN1cnJlbnRCdWlsZCA9IG5ldyBNYXAoKTtcbiAgICAgICAgaWYgKG9wdGlvbnMud29ya2Zsb3dNYW5pZmVzdCkge1xuICAgICAgICAgIGRlbGV0ZSBvcHRpb25zLndvcmtmbG93TWFuaWZlc3Quc3RlcHM7XG4gICAgICAgICAgZGVsZXRlIG9wdGlvbnMud29ya2Zsb3dNYW5pZmVzdC53b3JrZmxvd3M7XG4gICAgICAgICAgZGVsZXRlIG9wdGlvbnMud29ya2Zsb3dNYW5pZmVzdC5jbGFzc2VzO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gZXZlcnl0aGluZyBpcyBleHRlcm5hbCB1bmxlc3MgZXhwbGljaXRseSBjb25maWd1cmVkXG4gICAgICAvLyB0byBiZSBidW5kbGVkXG4gICAgICBjb25zdCBjanNSZXNvbHZlciA9IHByb21pc2lmeShcbiAgICAgICAgZW5oYW5jZWRSZXNvbHZlT3JpZy5jcmVhdGUoTk9ERV9SRVNPTFZFX09QVElPTlMpXG4gICAgICApO1xuICAgICAgY29uc3QgZXNtUmVzb2x2ZXIgPSBwcm9taXNpZnkoXG4gICAgICAgIGVuaGFuY2VkUmVzb2x2ZU9yaWcuY3JlYXRlKE5PREVfRVNNX1JFU09MVkVfT1BUSU9OUylcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGVuaGFuY2VkUmVzb2x2ZSA9IGFzeW5jIChjb250ZXh0OiBzdHJpbmcsIHBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBlc21SZXNvbHZlcihjb250ZXh0LCBwYXRoKTtcbiAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgIHJldHVybiBjanNSZXNvbHZlcihjb250ZXh0LCBwYXRoKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgLy8gUHJlLWNvbXB1dGUgdGhlIG5vcm1hbGl6ZWQgc2lkZS1lZmZlY3QgZW50cmllcyBzZXQgZm9yIE8oMSkgbG9va3Vwcy5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRTaWRlRWZmZWN0RW50cmllcyA9IG5ldyBTZXQoXG4gICAgICAgIG9wdGlvbnMuc2lkZUVmZmVjdEVudHJpZXM/Lm1hcCgoZSkgPT4gZS5yZXBsYWNlKC9cXFxcL2csICcvJykpXG4gICAgICApO1xuXG4gICAgICBidWlsZC5vblJlc29sdmUoeyBmaWx0ZXI6IC8uKi8gfSwgYXN5bmMgKGFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGFyZ3MucGx1Z2luRGF0YT8uc2tpcFN3Y1BsdWdpbikgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICFvcHRpb25zLmVudHJpZXNUb0J1bmRsZSAmJlxuICAgICAgICAgIG5vcm1hbGl6ZWRTaWRlRWZmZWN0RW50cmllcy5zaXplID09PSAwXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV2hlbiBvbmx5IHNpZGVFZmZlY3RFbnRyaWVzIGlzIHNldCAobm8gZW50cmllc1RvQnVuZGxlKSwgd2Ugb25seVxuICAgICAgICAvLyBuZWVkIHRvIG92ZXJyaWRlIHNpZGVFZmZlY3RzIGZvciB0b3AtbGV2ZWwgYmFyZSBpbXBvcnRzIOKAlCB0eXBpY2FsbHlcbiAgICAgICAgLy8gZnJvbSB0aGUgdmlydHVhbCBlbnRyeS4gU2tpcCByZXNvbHV0aW9uIGZvciB0cmFuc2l0aXZlIGltcG9ydHNcbiAgICAgICAgLy8gKGR5bmFtaWMgaW1wb3J0cywgcmVxdWlyZXMsIGV0Yy4pIHRvIGF2b2lkIHVubmVjZXNzYXJ5IG92ZXJoZWFkLlxuICAgICAgICBpZiAoIW9wdGlvbnMuZW50cmllc1RvQnVuZGxlICYmIGFyZ3Mua2luZCAhPT0gJ2ltcG9ydC1zdGF0ZW1lbnQnKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHNwZWNpZmllciA9IGFyZ3MucGF0aDtcbiAgICAgICAgICBjb25zdCBzcGVjaWZpZXJJc1BhdGggPVxuICAgICAgICAgICAgc3BlY2lmaWVyLnN0YXJ0c1dpdGgoJy4nKSB8fCBzcGVjaWZpZXIuc3RhcnRzV2l0aCgnLycpO1xuXG4gICAgICAgICAgbGV0IHJlc29sdmVkUGF0aDogc3RyaW5nIHwgZmFsc2UgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgLy8gUGF0aC1zdHlsZSBzcGVjaWZpZXJzICguL2ZvbywgLi4vZm9vLCAvYWJzL3BhdGgpIGV4dGVybmFsaXplIGFzXG4gICAgICAgICAgLy8gcmVsYXRpdmUgcGF0aHMgZnJvbSBgb3V0ZGlyYC4gQmFyZSBzcGVjaWZpZXJzIChucG0gcGFja2FnZXMpXG4gICAgICAgICAgLy8gZXh0ZXJuYWxpemUgYXMtaXMgc28gTm9kZSBjYW4gcmVzb2x2ZSB0aGVtIGF0IHJ1bnRpbWUuXG4gICAgICAgICAgY29uc3Qgc2hvdWxkTWFrZVJlbGF0aXZlID0gc3BlY2lmaWVySXNQYXRoO1xuXG4gICAgICAgICAgaWYgKHNwZWNpZmllcklzUGF0aCkge1xuICAgICAgICAgICAgcmVzb2x2ZWRQYXRoID0gYXdhaXQgZW5oYW5jZWRSZXNvbHZlKGFyZ3MucmVzb2x2ZURpciwgc3BlY2lmaWVyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVzb2x2ZSBmcm9tIHByb2plY3Qgcm9vdCBzbyBuZXN0ZWQgZGVwcyBhcmVuJ3QgZXh0ZXJuYWxpemVkXG4gICAgICAgICAgICByZXNvbHZlZFBhdGggPSBhd2FpdCBlbmhhbmNlZFJlc29sdmUoXG4gICAgICAgICAgICAgIGJ1aWxkLmluaXRpYWxPcHRpb25zLmFic1dvcmtpbmdEaXIgfHwgcHJvY2Vzcy5jd2QoKSxcbiAgICAgICAgICAgICAgc3BlY2lmaWVyXG4gICAgICAgICAgICApLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7IC8vIHN3YWxsb3cgc28gZXNidWlsZCBmYWxsYmFjayBiZWxvdyBjYW4gdHJ5XG5cbiAgICAgICAgICAgIC8vIEZhbGwgYmFjayB0byBlc2J1aWxkIGZvciBhbGlhc2VzL3RzY29uZmlnIHBhdGhzLlxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIElmIHRoZSBzcGVjaWZpZXIgcmVzb2x2ZXMgdG8gYSBwcm9qZWN0LWxvY2FsIGZpbGUgdmlhIGFuXG4gICAgICAgICAgICAvLyBhbGlhcy9wYXRoIG1hcHBpbmcgKGUuZy4gdHNjb25maWcgYHBhdGhzYCwgZXNidWlsZCBgYWxpYXNgLFxuICAgICAgICAgICAgLy8gc2VsZi1yZWZlcmVuY2luZyBwYWNrYWdlIG5hbWVzIGxpa2UgYEBteS1wa2cvbGliL2Zvb2ApLCB3ZVxuICAgICAgICAgICAgLy8gYnVuZGxlIGl0IGlubGluZSByYXRoZXIgdGhhbiBleHRlcm5hbGl6aW5nLlxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIEV4dGVybmFsaXppbmcgc3VjaCBmaWxlcyBpcyB1bnNhZmU6IHdlJ2QgZW1pdCBhIHJlbGF0aXZlXG4gICAgICAgICAgICAvLyBpbXBvcnQgdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBvbiBkaXNrLCBidXQgdGhhdCBzb3VyY2UgY2FuXG4gICAgICAgICAgICAvLyBjb250YWluIGZ1cnRoZXIgYWxpYXMgaW1wb3J0cy4gQXQgcnVudGltZSwgTm9kZSdzIEVTTSBsb2FkZXJcbiAgICAgICAgICAgIC8vIGRvZXNuJ3Qga25vdyBhYm91dCB0c2NvbmZpZyBwYXRocyBvciBidWlsZC10aW1lIGFsaWFzZXMsIHNvXG4gICAgICAgICAgICAvLyB0aG9zZSB0cmFuc2l0aXZlIGltcG9ydHMgdGhyb3cgYEVSUl9NT0RVTEVfTk9UX0ZPVU5EYCAvXG4gICAgICAgICAgICAvLyBgUGFja2FnZSBzdWJwYXRoIC4uLiBpcyBub3QgZGVmaW5lZCBieSBcImV4cG9ydHNcImAuXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gQnVuZGxpbmcgaW5saW5lIGVuc3VyZXMgYWxpYXMtYmFzZWQgaW1wb3J0cyBhcmUgcmVzb2x2ZWQgYXRcbiAgICAgICAgICAgIC8vIGJ1aWxkIHRpbWUgKHdoZXJlIHRoZSBhbGlhcyBtYXAgaXMga25vd24pIGFuZCB0aGUgcnVudGltZVxuICAgICAgICAgICAgLy8gbmV2ZXIgc2VlcyBhbiB1bnJlc29sdmFibGUgc3BlY2lmaWVyLlxuICAgICAgICAgICAgaWYgKCFyZXNvbHZlZFBhdGgpIHtcbiAgICAgICAgICAgICAgY29uc3QgZXNidWlsZFJlc3VsdCA9IGF3YWl0IGJ1aWxkLnJlc29sdmUoc3BlY2lmaWVyLCB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZURpcjogYXJncy5yZXNvbHZlRGlyLFxuICAgICAgICAgICAgICAgIGtpbmQ6IGFyZ3Mua2luZCxcbiAgICAgICAgICAgICAgICBwbHVnaW5EYXRhOiB7IHNraXBTd2NQbHVnaW46IHRydWUgfSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNvbnN0IGRpZFJlc29sdmUgPVxuICAgICAgICAgICAgICAgICEhZXNidWlsZFJlc3VsdC5wYXRoICYmICFlc2J1aWxkUmVzdWx0LmVycm9ycy5sZW5ndGg7XG4gICAgICAgICAgICAgIGNvbnN0IGlzUHJvamVjdExvY2FsRmlsZSA9XG4gICAgICAgICAgICAgICAgZGlkUmVzb2x2ZSAmJlxuICAgICAgICAgICAgICAgICFlc2J1aWxkUmVzdWx0LmV4dGVybmFsICYmXG4gICAgICAgICAgICAgICAgIWVzYnVpbGRSZXN1bHQucGF0aFxuICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFwvZywgJy8nKVxuICAgICAgICAgICAgICAgICAgLmluY2x1ZGVzKCcvbm9kZV9tb2R1bGVzLycpO1xuICAgICAgICAgICAgICBpZiAoaXNQcm9qZWN0TG9jYWxGaWxlKSB7XG4gICAgICAgICAgICAgICAgLy8gTGV0IGVzYnVpbGQgYnVuZGxlIHRoaXMgYWxpYXNlZCBwcm9qZWN0LWxvY2FsIGZpbGUgaW5saW5lXG4gICAgICAgICAgICAgICAgLy8gKHJldHVybiBudWxsIHRvIGRlZmVyIHRvIGVzYnVpbGQncyBub3JtYWwgcGlwZWxpbmUpLiBUaGVcbiAgICAgICAgICAgICAgICAvLyBTV0MgYG9uTG9hZGAgaGFuZGxlciB3aWxsIHN0aWxsIHByb2Nlc3MgaXQuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5lbnRyaWVzVG9CdW5kbGUgJiZcbiAgICAgICAgICAgICAgICBlc2J1aWxkUmVzdWx0LnBhdGg/LmVuZHNXaXRoKCcubm9kZScpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBleHRlcm5hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHBhdGg6IHNwZWNpZmllcixcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFyZXNvbHZlZFBhdGgpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgLy8gTm9ybWFsaXplIHRvIGZvcndhcmQgc2xhc2hlcyBmb3IgY3Jvc3MtcGxhdGZvcm0gY29tcGFyaXNvblxuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRSZXNvbHZlZFBhdGggPSBub3JtYWxpemVQYXRoKHJlc29sdmVkUGF0aCk7XG4gICAgICAgICAgY29uc3Qgd29ya2luZ0RpciA9XG4gICAgICAgICAgICBidWlsZC5pbml0aWFsT3B0aW9ucy5hYnNXb3JraW5nRGlyIHx8IHByb2Nlc3MuY3dkKCk7XG4gICAgICAgICAgY29uc3QgcHJvamVjdFJvb3QgPSBvcHRpb25zLnByb2plY3RSb290IHx8IHdvcmtpbmdEaXI7XG4gICAgICAgICAgY29uc3QgbW9kdWxlU3BlY2lmaWVyUm9vdCA9XG4gICAgICAgICAgICBvcHRpb25zLm1vZHVsZVNwZWNpZmllclJvb3QgfHwgcHJvamVjdFJvb3Q7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBvcHRpb25zLmVudHJpZXNUb0J1bmRsZSAmJlxuICAgICAgICAgICAgbm9ybWFsaXplZFJlc29sdmVkUGF0aC5lbmRzV2l0aCgnLm5vZGUnKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZXh0ZXJuYWw6IHRydWUsXG4gICAgICAgICAgICAgIHBhdGg6IHNwZWNpZmllcixcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBtb2R1bGUgaXMgYSBkaXNjb3ZlcmVkIGVudHJ5IHdob3NlIFNXQy10cmFuc2Zvcm1lZFxuICAgICAgICAgIC8vIGNvZGUgY29udGFpbnMgc2lkZSBlZmZlY3RzICh3b3JrZmxvdy9zdGVwL2NsYXNzIHJlZ2lzdHJhdGlvbikuXG4gICAgICAgICAgLy8gT3ZlcnJpZGUgdGhlIHBhY2thZ2UuanNvbiBcInNpZGVFZmZlY3RzXCI6IGZhbHNlIHNvIGVzYnVpbGQgZG9lcyBub3RcbiAgICAgICAgICAvLyBkcm9wIGJhcmUgaW1wb3J0cyBvZiB0aGVzZSBtb2R1bGVzLlxuICAgICAgICAgIGNvbnN0IGhhc1NpZGVFZmZlY3RzID0gbm9ybWFsaXplZFNpZGVFZmZlY3RFbnRyaWVzLmhhcyhcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRSZXNvbHZlZFBhdGhcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKG9wdGlvbnMuZW50cmllc1RvQnVuZGxlKSB7XG4gICAgICAgICAgICBsZXQgc2hvdWxkQnVuZGxlID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5VG9CdW5kbGUgb2Ygb3B0aW9ucy5lbnRyaWVzVG9CdW5kbGUpIHtcbiAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZEVudHJ5ID0gZW50cnlUb0J1bmRsZS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG5cbiAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRSZXNvbHZlZFBhdGggPT09IG5vcm1hbGl6ZWRFbnRyeSkge1xuICAgICAgICAgICAgICAgIHNob3VsZEJ1bmRsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBpZiB0aGUgY3VycmVudCBlbnRyeSBpbXBvcnRzIGEgY2hpbGQgdGhhdCBuZWVkc1xuICAgICAgICAgICAgICAvLyB0byBiZSBidW5kbGVkIHRoZW4gaXQgbmVlZHMgdG8gYWxzbyBiZSBidW5kbGVkIHNvXG4gICAgICAgICAgICAgIC8vIHRoYXQgdGhlIGNoaWxkIGNhbiBoYXZlIG91ciB0cmFuc2Zvcm0gYXBwbGllZFxuICAgICAgICAgICAgICBpZiAocGFyZW50SGFzQ2hpbGQobm9ybWFsaXplZFJlc29sdmVkUGF0aCwgbm9ybWFsaXplZEVudHJ5KSkge1xuICAgICAgICAgICAgICAgIHNob3VsZEJ1bmRsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBCdW5kbGUgcHJvamVjdC1sb2NhbCBzb3VyY2UgZmlsZXMgdGhhdCBhcmUgaW1wb3J0ZWQgYnkgYVxuICAgICAgICAgICAgICAvLyBzdGVwL3NlcmRlIGVudHJ5IHNvIGRpcmVjdCBydW50aW1lIGxvYWRlcnMgZG8gbm90IHNlZSByYXcgVFNcbiAgICAgICAgICAgICAgLy8gZXh0ZW5zaW9ubGVzcyBpbXBvcnRzLiBLZWVwIHBhY2thZ2UgZGVwZW5kZW5jaWVzIGV4dGVybmFsXG4gICAgICAgICAgICAgIC8vIHVubGVzcyB0aGV5IGFyZSB0aGVtc2VsdmVzIGluIGVudHJpZXNUb0J1bmRsZSBvciBhcmUgcGFyZW50c1xuICAgICAgICAgICAgICAvLyBvZiBhIGRpc2NvdmVyZWQgd29ya2Zsb3cvc3RlcC9zZXJkZSBmaWxlIHZpYSB0aGUgY2hlY2sgYWJvdmUuXG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBvcHRpb25zLmJ1bmRsZVRyYW5zaXRpdmVMb2NhbFN0ZXBEZXBlbmRlbmNpZXMgJiZcbiAgICAgICAgICAgICAgICBpc1Byb2plY3RMb2NhbEZpbGUoXG4gICAgICAgICAgICAgICAgICBub3JtYWxpemVkUmVzb2x2ZWRQYXRoLFxuICAgICAgICAgICAgICAgICAgbW9kdWxlU3BlY2lmaWVyUm9vdFxuICAgICAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICAgICBwYXJlbnRIYXNDaGlsZChub3JtYWxpemVkRW50cnksIG5vcm1hbGl6ZWRSZXNvbHZlZFBhdGgpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHNob3VsZEJ1bmRsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNob3VsZEJ1bmRsZSkge1xuICAgICAgICAgICAgICAvLyBMZXQgZXNidWlsZCBidW5kbGUgdGhpcyBlbnRyeSwgYnV0IG92ZXJyaWRlIHNpZGVFZmZlY3RzIGlmIG5lZWRlZC5cbiAgICAgICAgICAgICAgLy8gV2UgbXVzdCByZXR1cm4gdGhlIHJlc29sdmVkIGBwYXRoYCBhbG9uZ3NpZGUgYHNpZGVFZmZlY3RzYCBiZWNhdXNlXG4gICAgICAgICAgICAgIC8vIHJldHVybmluZyBvbmx5IGB7IHNpZGVFZmZlY3RzOiB0cnVlIH1gIHdpdGhvdXQgYSBwYXRoIGNhdXNlcyBlc2J1aWxkXG4gICAgICAgICAgICAgIC8vIHRvIGZhbGwgdGhyb3VnaCB0byBpdHMgb3duIHJlc29sdmVyLCB3aGljaCByZS1yZWFkcyB0aGUgcGFja2FnZS5qc29uXG4gICAgICAgICAgICAgIC8vIGFuZCBhcHBsaWVzIGBcInNpZGVFZmZlY3RzXCI6IGZhbHNlYCBmcm9tIHRoZXJlLlxuICAgICAgICAgICAgICByZXR1cm4gaGFzU2lkZUVmZmVjdHNcbiAgICAgICAgICAgICAgICA/IHsgcGF0aDogcmVzb2x2ZWRQYXRoLCBzaWRlRWZmZWN0czogdHJ1ZSB9XG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgZXh0ZXJuYWxQYXRoOiBzdHJpbmc7XG4gICAgICAgICAgICBpZiAoc2hvdWxkTWFrZVJlbGF0aXZlKSB7XG4gICAgICAgICAgICAgIC8vIFdoZW4gdGhlIHJlc29sdmVkIGZpbGUgbGl2ZXMgaW5zaWRlIG5vZGVfbW9kdWxlcywgbGV0XG4gICAgICAgICAgICAgIC8vIGVzYnVpbGQgYnVuZGxlIGl0IHJhdGhlciB0aGFuIGV4dGVybmFsaXppbmcgd2l0aCBhIGRlZXBseVxuICAgICAgICAgICAgICAvLyBuZXN0ZWQgcmVsYXRpdmUgcGF0aC4gRG93bnN0cmVhbSBidW5kbGVycyAoUm9sbHVwL1ZpdGUpXG4gICAgICAgICAgICAgIC8vIGNhbid0IHJld3JpdGUgb3BhcXVlIGBfX3JlcXVpcmUoKWAgY2FsbHMgaW4gQ0pTIHNoaW1zLCBzb1xuICAgICAgICAgICAgICAvLyByZWxhdGl2ZSBwYXRocyBjb21wdXRlZCBmb3IgYG91dGRpcmAgYnJlYWsgb25jZSB0aGUgb3V0cHV0XG4gICAgICAgICAgICAgIC8vIGlzIHJlYnVuZGxlZCB0byBhIGRpZmZlcmVudCBkaXJlY3RvcnkuXG4gICAgICAgICAgICAgIGlmIChub3JtYWxpemVkUmVzb2x2ZWRQYXRoLmluY2x1ZGVzKCcvbm9kZV9tb2R1bGVzLycpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7IC8vIGxldCBlc2J1aWxkIGJ1bmRsZSBpdFxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZXh0ZXJuYWxQYXRoID0gcmVsYXRpdmUoXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5vdXRkaXIgfHwgcHJvY2Vzcy5jd2QoKSxcbiAgICAgICAgICAgICAgICByZXNvbHZlZFBhdGhcbiAgICAgICAgICAgICAgKS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG5cbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucmV3cml0ZVRzRXh0ZW5zaW9ucykge1xuICAgICAgICAgICAgICAgIC8vIFJld3JpdGUgVHlwZVNjcmlwdCBleHRlbnNpb25zIHRvIHRoZWlyIEpTIGVxdWl2YWxlbnRzIHNvIHRoZVxuICAgICAgICAgICAgICAgIC8vIGV4dGVybmFsaXplZCBpbXBvcnQgaXMgbG9hZGFibGUgYnkgTm9kZSdzIG5hdGl2ZSBFU00gbG9hZGVyLlxuICAgICAgICAgICAgICAgIGV4dGVybmFsUGF0aCA9IGV4dGVybmFsUGF0aFxuICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcLnRzeD8kLywgJy5qcycpXG4gICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFwubXRzJC8sICcubWpzJylcbiAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXC5jdHMkLywgJy5janMnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZXh0ZXJuYWxQYXRoID0gc3BlY2lmaWVyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBleHRlcm5hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgcGF0aDogZXh0ZXJuYWxQYXRoLFxuICAgICAgICAgICAgICBzaWRlRWZmZWN0czogaGFzU2lkZUVmZmVjdHMgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBObyBlbnRyaWVzVG9CdW5kbGUg4oCUIG9ubHkgb3ZlcnJpZGUgc2lkZUVmZmVjdHMgd2hlbiBuZWVkZWQuXG4gICAgICAgICAgLy8gV2UgbXVzdCByZXR1cm4gdGhlIHJlc29sdmVkIGBwYXRoYCBhbG9uZ3NpZGUgYHNpZGVFZmZlY3RzYCBiZWNhdXNlXG4gICAgICAgICAgLy8gcmV0dXJuaW5nIG9ubHkgYHsgc2lkZUVmZmVjdHM6IHRydWUgfWAgd2l0aG91dCBhIHBhdGggY2F1c2VzIGVzYnVpbGRcbiAgICAgICAgICAvLyB0byBmYWxsIHRocm91Z2ggdG8gaXRzIG93biByZXNvbHZlciwgd2hpY2ggcmUtcmVhZHMgdGhlIHBhY2thZ2UuanNvblxuICAgICAgICAgIC8vIGFuZCBhcHBsaWVzIGBcInNpZGVFZmZlY3RzXCI6IGZhbHNlYCBmcm9tIHRoZXJlLlxuICAgICAgICAgIHJldHVybiBoYXNTaWRlRWZmZWN0c1xuICAgICAgICAgICAgPyB7IHBhdGg6IHJlc29sdmVkUGF0aCwgc2lkZUVmZmVjdHM6IHRydWUgfVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9IGNhdGNoIChfKSB7fVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBIYW5kbGUgVHlwZVNjcmlwdCBhbmQgSmF2YVNjcmlwdCBmaWxlc1xuICAgICAgYnVpbGQub25Mb2FkKHsgZmlsdGVyOiBqc1RzUmVnZXggfSwgYXN5bmMgKGFyZ3MpID0+IHtcbiAgICAgICAgLy8gRGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBUeXBlU2NyaXB0IGZpbGVcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIGxvYWRlciBiYXNlZCBvbiB0aGUgb3V0cHV0XG4gICAgICAgICAgbGV0IGxvYWRlcjogJ2pzJyB8ICdqc3gnIHwgJ3RzeCcgPSAnanMnO1xuICAgICAgICAgIGlmIChhcmdzLnBhdGguZW5kc1dpdGgoJy5qc3gnKSkge1xuICAgICAgICAgICAgbG9hZGVyID0gJ2pzeCc7XG4gICAgICAgICAgfSBlbHNlIGlmIChhcmdzLnBhdGguZW5kc1dpdGgoJy50c3gnKSkge1xuICAgICAgICAgICAgbG9hZGVyID0gJ3RzeCc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IGF3YWl0IHJlYWRGaWxlKGFyZ3MucGF0aCwgJ3V0ZjgnKTtcbiAgICAgICAgICBjb25zdCBub3JtYWxpemVkU291cmNlID0gc291cmNlXG4gICAgICAgICAgICAucmVwbGFjZSgvcmVxdWlyZVxcKFxccyooWydcIl0pc2VydmVyLW9ubHlcXDFcXHMqXFwpL2csICd2b2lkIDAnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3JlcXVpcmVcXChcXHMqKFsnXCJdKWNsaWVudC1vbmx5XFwxXFxzKlxcKS9nLCAndm9pZCAwJyk7XG5cbiAgICAgICAgICAvLyBDYWxjdWxhdGUgcmVsYXRpdmUgcGF0aCBmb3IgU1dDIHBsdWdpblxuICAgICAgICAgIC8vIFRoZSBmaWxlbmFtZSBwYXJhbWV0ZXIgaXMgdXNlZCB0byBnZW5lcmF0ZSB3b3JrZmxvd0lkL3N0ZXBJZCwgc28gaXQgbXVzdCBiZSByZWxhdGl2ZVxuICAgICAgICAgIGNvbnN0IHdvcmtpbmdEaXIgPVxuICAgICAgICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuYWJzV29ya2luZ0RpciB8fCBwcm9jZXNzLmN3ZCgpO1xuICAgICAgICAgIGNvbnN0IHByb2plY3RSb290ID0gb3B0aW9ucy5wcm9qZWN0Um9vdCB8fCB3b3JraW5nRGlyO1xuICAgICAgICAgIGNvbnN0IG1vZHVsZVNwZWNpZmllclJvb3QgPVxuICAgICAgICAgICAgb3B0aW9ucy5tb2R1bGVTcGVjaWZpZXJSb290IHx8IHByb2plY3RSb290O1xuICAgICAgICAgIC8vIE5vcm1hbGl6ZSBwYXRoczogY29udmVydCBiYWNrc2xhc2hlcyB0byBmb3J3YXJkIHNsYXNoZXMgYW5kIHJlbW92ZSB0cmFpbGluZyBzbGFzaGVzXG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFdvcmtpbmdEaXIgPSB3b3JraW5nRGlyXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxcXC9nLCAnLycpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwvJC8sICcnKTtcbiAgICAgICAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IGFyZ3MucGF0aC5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG5cbiAgICAgICAgICAvLyBXaW5kb3dzIGZpeDogQWx3YXlzIGRvIGNhc2UtaW5zZW5zaXRpdmUgcGF0aCBjb21wYXJpc29uIGFzIHRoZSBQUklNQVJZIGxvZ2ljXG4gICAgICAgICAgLy8gdG8gd29yayBhcm91bmQgbm9kZTpwYXRoLnJlbGF0aXZlKCkgbm90IHJlY29nbml6aW5nIHBhdGhzIHdpdGggZGlmZmVyZW50IGRyaXZlXG4gICAgICAgICAgLy8gbGV0dGVyIGNhc2luZyAoZS5nLiwgRDogdnMgZDopIGFzIGJlaW5nIGluIHRoZSBzYW1lIHRyZWVcbiAgICAgICAgICBjb25zdCBsb3dlcldkID0gbm9ybWFsaXplZFdvcmtpbmdEaXIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBjb25zdCBsb3dlclBhdGggPSBub3JtYWxpemVkUGF0aC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgbGV0IHJlbGF0aXZlRmlsZXBhdGg6IHN0cmluZztcbiAgICAgICAgICBpZiAobG93ZXJQYXRoLnN0YXJ0c1dpdGgoYCR7bG93ZXJXZH0vYCkpIHtcbiAgICAgICAgICAgIC8vIEZpbGUgaXMgdW5kZXIgd29ya2luZyBkaXJlY3RvcnkgLSBtYW51YWxseSBjYWxjdWxhdGUgcmVsYXRpdmUgcGF0aFxuICAgICAgICAgICAgLy8gVGhpcyBlbnN1cmVzIHdlIGdldCBhIHJlbGF0aXZlIHBhdGggZXZlbiB3aXRoIGRyaXZlIGxldHRlciBjYXNpbmcgaXNzdWVzXG4gICAgICAgICAgICByZWxhdGl2ZUZpbGVwYXRoID0gbm9ybWFsaXplZFBhdGguc3Vic3RyaW5nKFxuICAgICAgICAgICAgICBub3JtYWxpemVkV29ya2luZ0Rpci5sZW5ndGggKyAxXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSBpZiAobG93ZXJQYXRoID09PSBsb3dlcldkKSB7XG4gICAgICAgICAgICAvLyBGaWxlIElTIHRoZSB3b3JraW5nIGRpcmVjdG9yeVxuICAgICAgICAgICAgcmVsYXRpdmVGaWxlcGF0aCA9ICcuJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRmlsZSBpcyBvdXRzaWRlIHdvcmtpbmcgZGlyZWN0b3J5IC0gdXNlIHJlbGF0aXZlKCkgYW5kIHN0cmlwIC4uLyBwcmVmaXhlcyBpZiBuZWVkZWRcbiAgICAgICAgICAgIHJlbGF0aXZlRmlsZXBhdGggPSByZWxhdGl2ZShcbiAgICAgICAgICAgICAgbm9ybWFsaXplZFdvcmtpbmdEaXIsXG4gICAgICAgICAgICAgIG5vcm1hbGl6ZWRQYXRoXG4gICAgICAgICAgICApLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcblxuICAgICAgICAgICAgLy8gSGFuZGxlIGZpbGVzIGRpc2NvdmVyZWQgb3V0c2lkZSB0aGUgd29ya2luZyBkaXJlY3RvcnlcbiAgICAgICAgICAgIC8vIFRoZXNlIGNvbWUgYmFjayBhcyAuLi9wYXRoL3RvL2ZpbGUsIGJ1dCB3ZSB3YW50IGp1c3QgcGF0aC90by9maWxlXG4gICAgICAgICAgICBpZiAocmVsYXRpdmVGaWxlcGF0aC5zdGFydHNXaXRoKCcuLi8nKSkge1xuICAgICAgICAgICAgICBjb25zdCBhbGlhc2VkUmVsYXRpdmVQYXRoID1cbiAgICAgICAgICAgICAgICBhd2FpdCByZXNvbHZlV29ya2Zsb3dBbGlhc1JlbGF0aXZlUGF0aChhcmdzLnBhdGgsIHdvcmtpbmdEaXIpO1xuICAgICAgICAgICAgICBpZiAoYWxpYXNlZFJlbGF0aXZlUGF0aCkge1xuICAgICAgICAgICAgICAgIHJlbGF0aXZlRmlsZXBhdGggPSBhbGlhc2VkUmVsYXRpdmVQYXRoO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlbGF0aXZlRmlsZXBhdGggPSByZWxhdGl2ZUZpbGVwYXRoXG4gICAgICAgICAgICAgICAgICAuc3BsaXQoJy8nKVxuICAgICAgICAgICAgICAgICAgLmZpbHRlcigocGFydCkgPT4gcGFydCAhPT0gJy4uJylcbiAgICAgICAgICAgICAgICAgIC5qb2luKCcvJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBGaW5hbCBzYWZldHkgY2hlY2sgLSBlbnN1cmUgd2UgbmV2ZXIgcGFzcyBhbiBhYnNvbHV0ZSBwYXRoIHRvIFNXQ1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHJlbGF0aXZlRmlsZXBhdGguaW5jbHVkZXMoJzonKSB8fFxuICAgICAgICAgICAgcmVsYXRpdmVGaWxlcGF0aC5zdGFydHNXaXRoKCcvJylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiwgYnV0IGlmIGl0IGRvZXMsIHVzZSBqdXN0IHRoZSBmaWxlbmFtZSBhcyBsYXN0IHJlc29ydFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgYFtFUlJPUl0gcmVsYXRpdmVGaWxlcGF0aCBpcyBzdGlsbCBhYnNvbHV0ZTogJHtyZWxhdGl2ZUZpbGVwYXRofWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZWxhdGl2ZUZpbGVwYXRoID0gbm9ybWFsaXplZFBhdGguc3BsaXQoJy8nKS5wb3AoKSB8fCAndW5rbm93bi50cyc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgeyBjb2RlOiB0cmFuc2Zvcm1lZENvZGUsIHdvcmtmbG93TWFuaWZlc3QgfSA9XG4gICAgICAgICAgICBhd2FpdCBhcHBseVN3Y1RyYW5zZm9ybShcbiAgICAgICAgICAgICAgcmVsYXRpdmVGaWxlcGF0aCxcbiAgICAgICAgICAgICAgbm9ybWFsaXplZFNvdXJjZSxcbiAgICAgICAgICAgICAgb3B0aW9ucy5tb2RlLFxuICAgICAgICAgICAgICBhcmdzLnBhdGgsIC8vIFBhc3MgYWJzb2x1dGUgcGF0aCBmb3IgbW9kdWxlIHNwZWNpZmllciByZXNvbHV0aW9uXG4gICAgICAgICAgICAgIHByb2plY3RSb290LFxuICAgICAgICAgICAgICBtb2R1bGVTcGVjaWZpZXJSb290XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKCFvcHRpb25zLndvcmtmbG93TWFuaWZlc3QpIHtcbiAgICAgICAgICAgIG9wdGlvbnMud29ya2Zsb3dNYW5pZmVzdCA9IHt9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1lcmdlV29ya2Zsb3dNYW5pZmVzdChcbiAgICAgICAgICAgIG9wdGlvbnMud29ya2Zsb3dNYW5pZmVzdCxcbiAgICAgICAgICAgIHdvcmtmbG93TWFuaWZlc3QsXG4gICAgICAgICAgICBzdGVwSWRzRm9yQ3VycmVudEJ1aWxkLFxuICAgICAgICAgICAgd29ya2Zsb3dJZHNGb3JDdXJyZW50QnVpbGRcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgYXdhaXQgb3B0aW9ucy5vbkFmdGVyVHJhbnNmb3JtPy4oe1xuICAgICAgICAgICAgbW9kZTogb3B0aW9ucy5tb2RlLFxuICAgICAgICAgICAgZmlsZW5hbWU6IHJlbGF0aXZlRmlsZXBhdGgsXG4gICAgICAgICAgICBhYnNvbHV0ZVBhdGg6IGFyZ3MucGF0aCxcbiAgICAgICAgICAgIHNvdXJjZTogbm9ybWFsaXplZFNvdXJjZSxcbiAgICAgICAgICAgIGNvZGU6IHRyYW5zZm9ybWVkQ29kZSxcbiAgICAgICAgICAgIHdvcmtmbG93TWFuaWZlc3QsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudHM6IHRyYW5zZm9ybWVkQ29kZSxcbiAgICAgICAgICAgIGxvYWRlcixcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9XG4gICAgICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGDinYwgU1dDIHRyYW5zZm9ybSBlcnJvciBpbiAke2FyZ3MucGF0aH06YCxcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVycm9yczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGV4dDogYFNXQyB0cmFuc2Zvcm0gZmFpbGVkOiAke2Vycm9yTWVzc2FnZX1gLFxuICAgICAgICAgICAgICAgIGxvY2F0aW9uOiB7IGZpbGU6IGFyZ3MucGF0aCwgbGluZTogMCwgY29sdW1uOiAwIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzUHJvamVjdExvY2FsRmlsZShmaWxlUGF0aDogc3RyaW5nLCBwcm9qZWN0Um9vdDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmIChub3JtYWxpemVQYXRoKGZpbGVQYXRoKS5pbmNsdWRlcygnL25vZGVfbW9kdWxlcy8nKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgcmVzb2x2ZU1vZHVsZVNwZWNpZmllcihmaWxlUGF0aCwgcHJvamVjdFJvb3QpLm1vZHVsZVNwZWNpZmllciA9PT0gdW5kZWZpbmVkXG4gICk7XG59XG4iXX0=
|