@pipeline-builder/pipeline-manager 3.4.117 → 3.4.119

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.
@@ -86,7 +86,7 @@ export async function preflightPorts(spec, target, cwd) {
86
86
  // local PUBLISHES these ports at `docker compose up` time, so a conflict is fatal.
87
87
  // minikube's are kubectl port-forwards setup.sh pkills + restarts (and
88
88
  // ensureMinikubeGateway recovers), so a stale forward must NOT block a re-run.
89
- const fatal = target === 'local';
89
+ const fatal = target === 'docker';
90
90
  // …UNLESS the local stack is already running: those ports are held by YOUR OWN
91
91
  // stack, and `docker compose up` no-ops them — this is exactly how you re-run to
92
92
  // add loads/options. Don't block (the would-be conflict is a self-conflict).
@@ -794,7 +794,7 @@ export function provision(program) {
794
794
  // ec2 and eks don't have provision generate a local `.env`: ec2 bootstraps its
795
795
  // secrets on the instance, and eks's setup.sh creates the k8s secrets itself
796
796
  // (a deploy/aws/eks/.env.example + secret step is a setup.sh TODO).
797
- if ((target === 'local' || target === 'minikube') && envFileMissing(cwd, spec.dir)) {
797
+ if ((target === 'docker' || target === 'minikube') && envFileMissing(cwd, spec.dir)) {
798
798
  if (await confirm(`\n${spec.dir}/.env not found — create it from .env.example (generates secrets; edit later for optional integrations like OAuth)?`, options.yes)) {
799
799
  const n = createEnvFile(cwd, spec.dir);
800
800
  printSuccess(`Created ${spec.dir}/.env — ${n} secret(s) generated.`);
@@ -855,4 +855,4 @@ export function provision(program) {
855
855
  }
856
856
  });
857
857
  }
858
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3Byb3Zpc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQzlDLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxRQUFRLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQXNCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0YsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckYsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBbUMsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRixPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSx5QkFBeUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlHLE9BQU8sRUFDTCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFVBQVUsRUFDVixjQUFjLEVBQ2QsT0FBTyxFQUNQLFVBQVUsRUFDVixlQUFlLEdBR2hCLE1BQU0scUJB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QUssQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDckcsQ0FBQztZQUVELGdGQUFnRjtZQUNoRiwrRUFBK0U7WUFDL0UsNEVBQTRFO1lBQzVFLHFGQUFxRjtZQUNyRix3RkFBd0Y7WUFDeEYsTUFBTSxZQUFZLEdBQUcsZUFBZSxJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sWUFBWSxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNwSixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLE9BQU8sRUFBRTtnQkFDdEMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLO2dCQUMzQixJQUFJLEVBQUUsSUFBSTtnQkFDVixPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRTthQUMvQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IHJlYWRGaWxlU3luYywgZXhpc3RzU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCAqIGFzIHJlYWRsaW5lIGZyb20gJ25vZGU6cmVhZGxpbmUvcHJvbWlzZXMnO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBkaWFnbm9zZUZhaWx1cmUsIGlzQWlDb25maWd1cmVkLCBwYXJzZUdvYWwgfSBmcm9tICcuLi9hZ2VudC9haS5qcyc7XG5pbXBvcnQgeyBib290c3RyYXBDb21tYW5kLCByZXNvbHZlQm9vdHN0cmFwLCB0eXBlIEJvb3RzdHJhcFNwZWMgfSBmcm9tICcuLi9hZ2VudC9ib290c3RyYXAuanMnO1xuaW1wb3J0IHsgY3JlYXRlRW52RmlsZSwgZW52RmlsZU1pc3NpbmcgfSBmcm9tICcuLi9hZ2VudC9lbnYtZmlsZS5qcyc7XG5pbXBvcnQgeyBlbnRyeXBvaW50RXhpc3RzLCBleGVjdXRpb25CbG9ja2VkLCBydW5TY3JpcHQgfSBmcm9tICcuLi9hZ2VudC9leGVjdXRvci5qcyc7XG5pbXBvcnQgeyBkZXJpdmVIZWFsdGhVcmwsIHdhaXRIZWFsdGh5LCBlbnN1cmVNaW5pa3ViZUdhdGV3YXkgfSBmcm9tICcuLi9hZ2VudC9oZWFsdGguanMnO1xuaW1wb3J0IHsgY2hlY2tIb3N0UG9ydHMsIGRpc2NvdmVySG9zdFBvcnRzLCBzdGFja1J1bm5pbmcgfSBmcm9tICcuLi9hZ2VudC9wb3J0cy5qcyc7XG5pbXBvcnQgeyByZXNvbHZlUG9zdFN0ZXBzLCB0eXBlIFBvc3RTdGVwLCB0eXBlIFNraXBwZWRTdGVwIH0gZnJvbSAnLi4vYWdlbnQvcG9zdC1zdGVwcy5qcyc7XG5pbXBvcnQgeyBjaGVja1ByZXJlcXMsIGdpdEF2YWlsYWJsZSwgZ2l0U3VwcG9ydHNTcGFyc2VDaGVja291dCwgcHJlcmVxc1NhdGlzZmllZCB9IGZyb20gJy4uL2FnZW50L3ByZXJlcXMuanMnO1xuaW1wb3J0IHtcbiAgYXNzZW1ibGVDb21tYW5kLFxuICBpc1RhcmdldElkLFxuICBMT0FEX1NURVBTLFxuICBzcGFyc2VQYXRoc0ZvcixcbiAgVEFSR0VUUyxcbiAgVEFSR0VUX0lEUyxcbiAgdGVhcmRvd25Db21tYW5kLFxuICB0eXBlIFRhcmdldElkLFxuICB0eXBlIFRhcmdldFNwZWMsXG59IGZyb20gJy4uL2FnZW50L3RhcmdldHMuanMnO1xuaW1wb3J0IHsgVE9PTFNfRElSLCBmZXRjaFRvb2wsIGlzRmV0Y2hhYmxlLCB3aXRoVG9vbHNPblBhdGggfSBmcm9tICcuLi9hZ2VudC90b29scy5qcyc7XG5pbXBvcnQgeyBtYXRjaElzc3Vlcywgc2VzUG9zdERlcGxveUd1aWRhbmNlIH0gZnJvbSAnLi4vYWdlbnQvdHJvdWJsZXNob290LmpzJztcbmltcG9ydCB7IHByaW50Q29tbWFuZEhlYWRlciB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMuanMnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBwcmludFNlY3Rpb24sIHByaW50S2V5VmFsdWUsIHByaW50SW5mbywgcHJpbnRXYXJuaW5nLCBwcmludEVycm9yLCBwcmludFN1Y2Nlc3MgfSBmcm9tICcuLi91dGlscy9vdXRwdXQtdXRpbHMuanMnO1xuXG4vKipcbiAqIFBvc3QtZGVwbG95IGluaXRpYWxpemF0aW9uIG1vZGUgKHRoZSBzaW5nbGUgYC0taW5pdCA8bW9kZT5gIGZsYWcpOlxuICogICAtIGBhdXRvYCAgIOKAlCBpbml0LXBsYXRmb3JtIHJ1bnMgb25jZSB0aGUgcGxhdGZvcm0gaXMgdXAgKHJlZ2lzdGVyIGFkbWluICsgbG9hZCBwbHVnaW5zL1xuICogICAgICAgICAgICAgICAgY29tcGxpYW5jZS9zYW1wbGVzKS4gT24gZWMyIHRoZSBpbnN0YW5jZSBkb2VzIGl0IGl0c2VsZiBvbiBmaXJzdCBib290OyBvblxuICogICAgICAgICAgICAgICAgbG9jYWwvbWluaWt1YmUvZWtzIGBwcm92aXNpb25gIHJ1bnMgaXQgZm9yIHlvdS4gVGhpcyBpcyB0aGUgREVGQVVMVC5cbiAqICAgLSBgbWFudWFsYCDigJQgZG9uJ3Qgc2VsZi1pbml0OyBzdXJmYWNlIHRoZSBleGFjdCBzdGVwIGZvciB5b3UgdG8gcnVuIHlvdXJzZWxmLlxuICogICAtIGBza2lwYCAgIOKAlCBkb24ndCBpbml0aWFsaXplIGF0IGFsbCAobm8gcmVnaXN0ZXIsIG5vIGxvYWRzKS5cbiAqL1xuZXhwb3J0IHR5cGUgSW5pdE1vZGUgPSAnYXV0bycgfCAnbWFudWFsJyB8ICdza2lwJztcbmNvbnN0IElOSVRfTU9ERVM6IHJlYWRvbmx5IEluaXRNb2RlW10gPSBbJ2F1dG8nLCAnbWFudWFsJywgJ3NraXAnXTtcblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBpbml0IG1vZGUgZnJvbSB0aGUgbmV3IGAtLWluaXQgPG1vZGU+YCBmbGFnLCBmYWxsaW5nIGJhY2sgdG8gdGhlIERFUFJFQ0FURURcbiAqIGFsaWFzZXMgKGAtLW5vLWluaXRgIOKGkiBza2lwLCBgLS1hdXRvLWluaXRgIOKGkiBhdXRvLCBgLS1uby1hdXRvLWluaXRgIOKGkiBtYW51YWwpLCB0aGVuIHRoZVxuICogZGVmYXVsdCAoYGF1dG9gKS4gUmV0dXJucyBgbnVsbGAgd2hlbiBgLS1pbml0YCB3YXMgZ2l2ZW4gYW4gaW52YWxpZCB2YWx1ZSAoY2FsbGVyIGVycm9ycykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlSW5pdE1vZGUob3B0aW9uczogeyBpbml0PzogdW5rbm93bjsgYXV0b0luaXQ/OiB1bmtub3duIH0pOiBJbml0TW9kZSB8IG51bGwge1xuICBpZiAodHlwZW9mIG9wdGlvbnMuaW5pdCA9PT0gJ3N0cmluZycpIHsgLy8gLS1pbml0IDxtb2RlPlxuICAgIGNvbnN0IG0gPSBvcHRpb25zLmluaXQudG9Mb3dlckNhc2UoKSBhcyBJbml0TW9kZTtcbiAgICByZXR1cm4gSU5JVF9NT0RFUy5pbmNsdWRlcyhtKSA/IG0gOiBudWxsO1xuICB9XG4gIGlmIChvcHRpb25zLmluaXQgPT09IGZhbHNlKSByZXR1cm4gJ3NraXAnOyAvLyBkZXByZWNhdGVkIC0tbm8taW5pdFxuICBpZiAob3B0aW9ucy5hdXRvSW5pdCA9PT0gdHJ1ZSkgcmV0dXJuICdhdXRvJzsgLy8gZGVwcmVjYXRlZCAtLWF1dG8taW5pdFxuICBpZiAob3B0aW9ucy5hdXRvSW5pdCA9PT0gZmFsc2UpIHJldHVybiAnbWFudWFsJzsgLy8gZGVwcmVjYXRlZCAtLW5vLWF1dG8taW5pdFxuICByZXR1cm4gJ2F1dG8nOyAvLyBkZWZhdWx0XG59XG5cbi8qKlxuICogUmVhZCBvbmUgbGluZSBvZiB0cmltbWVkIGlucHV0IGZyb20gdGhlIHRlcm1pbmFsLCBvd25pbmcgdGhlIHJlYWRsaW5lXG4gKiBsaWZlY3ljbGUuIFVzZWQgZGlyZWN0bHkgZm9yIHRoZSBkZXN0cnVjdGl2ZSB0ZWFyZG93biBnYXRlIChhIHkvTiBpcyB0b28gZWFzeVxuICogdG8gZmF0LWZpbmdlciwgc28gd2UgcmVxdWlyZSB0aGUgb3BlcmF0b3IgdG8gVFlQRSB0aGUgdGFyZ2V0IGlkIGJhY2spLCBhbmQgYXNcbiAqIHRoZSBiYXNpcyBmb3IgYGNvbmZpcm1gLiBEZWxpYmVyYXRlbHkgaGFzIG5vIGF1dG8tYWNjZXB0LlxuICovXG5hc3luYyBmdW5jdGlvbiBhc2socXVlc3Rpb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHsgaW5wdXQ6IHByb2Nlc3Muc3RkaW4sIG91dHB1dDogcHJvY2Vzcy5zdGRvdXQgfSk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIChhd2FpdCBybC5xdWVzdGlvbihxdWVzdGlvbikpLnRyaW0oKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBybC5jbG9zZSgpO1xuICB9XG59XG5cbi8qKiBJbnRlcmFjdGl2ZSB5L04gY29uZmlybWF0aW9uOyBhdXRvLXRydWUgd2hlbiBgYXV0b1llc2AgKHRoZSBgLS15ZXNgIGZsYWcpLiAqL1xuYXN5bmMgZnVuY3Rpb24gY29uZmlybShxdWVzdGlvbjogc3RyaW5nLCBhdXRvWWVzOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChhdXRvWWVzKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgYW5zd2VyID0gKGF3YWl0IGFzayhgJHtxdWVzdGlvbn0gW3kvTl0gYCkpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBhbnN3ZXIgPT09ICd5JyB8fCBhbnN3ZXIgPT09ICd5ZXMnO1xufVxuXG4vKiogQ29tbWFuZGVyIGNvbGxlY3RvcjogYWNjdW11bGF0ZSByZXBlYXRlZCBgLS1wb3N0LXN0ZXBgIHZhbHVlcyBpbiBvcmRlci4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RTdGVwKHZhbHVlOiBzdHJpbmcsIGFjYzogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIHJldHVybiBbLi4uYWNjLCB2YWx1ZV07XG59XG5cbi8qKlxuICogSG9zdC1wb3J0IHByZS1mbGlnaHQgKGxvY2FsL21pbmlrdWJlKS4gUG9ydHMgYXJlIERFUklWRUQgZnJvbSB0aGUgdGFyZ2V0J3MgY2xvbmVkXG4gKiBkZXBsb3kgc291cmNlIChjb21wb3NlIC8gc2V0dXAuc2gpIHNvIHRoZSBsaXN0IGNhbid0IGRyaWZ0IOKAlCBoZW5jZSB0aGlzIHJ1bnMgQUZURVJcbiAqIHRoZSBjbG9uZS4gQSB0YWtlbiBwb3J0IG1ha2VzIGEgY29udGFpbmVyL2ZvcndhcmQgZmFpbCB0byBiaW5kIG1pZC1kZXBsb3kgKGZvciB0aGVcbiAqIGdhdGV3YXksIGEgc2lsZW50IHVucmVhY2hhYmxlIGhhbmcpLiBQcmludHMgYSDinJMv4pyXIHN1bW1hcnkgYW5kIHJldHVybnMgZmFsc2UgT05MWVxuICogd2hlbiB0aGUgY2FsbGVyIG11c3QgQUJPUlQgKGEgZmF0YWwgbG9jYWwgY29uZmxpY3QpLiBtaW5pa3ViZSBwb3J0cyBhcmUgbWFuYWdlZFxuICogZm9yd2FyZHMgKHNldHVwLnNoIHBraWxscy9yZXN0YXJ0cyB0aGVtKSwgc28gYSBjb25mbGljdCB0aGVyZSB3YXJucyBidXQgcHJvY2VlZHMuXG4gKiBSZW1vdGUgdGFyZ2V0cyAoZWMyL2VrcykgYmluZCBub3RoaW5nIGxvY2FsbHkg4oaSIHJldHVybnMgdHJ1ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByZWZsaWdodFBvcnRzKHNwZWM6IFRhcmdldFNwZWMsIHRhcmdldDogVGFyZ2V0SWQsIGN3ZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHBvcnRzID0gZGlzY292ZXJIb3N0UG9ydHModGFyZ2V0LCBjd2QsIHNwZWMpO1xuICBpZiAocG9ydHMubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgcG9ydENoZWNrcyA9IGF3YWl0IGNoZWNrSG9zdFBvcnRzKHBvcnRzKTtcbiAgY29uc3QgdGFrZW4gPSBwb3J0Q2hlY2tzLmZpbHRlcigoYykgPT4gIWMuYXZhaWxhYmxlKTtcbiAgcHJpbnRTZWN0aW9uKCdQb3J0IGF2YWlsYWJpbGl0eScpO1xuICBmb3IgKGNvbnN0IGMgb2YgcG9ydENoZWNrcykgcHJpbnRJbmZvKGAke2MuYXZhaWxhYmxlID8gJ+KckycgOiAn4pyXJ30gJHtTdHJpbmcoYy5wb3J0KS5wYWRFbmQoNSl9IOKAlCAke2Muc2VydmljZX1gKTtcbiAgaWYgKHRha2VuLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7XG4gIC8vIGxvY2FsIFBVQkxJU0hFUyB0aGVzZSBwb3J0cyBhdCBgZG9ja2VyIGNvbXBvc2UgdXBgIHRpbWUsIHNvIGEgY29uZmxpY3QgaXMgZmF0YWwuXG4gIC8vIG1pbmlrdWJlJ3MgYXJlIGt1YmVjdGwgcG9ydC1mb3J3YXJkcyBzZXR1cC5zaCBwa2lsbHMgKyByZXN0YXJ0cyAoYW5kXG4gIC8vIGVuc3VyZU1pbmlrdWJlR2F0ZXdheSByZWNvdmVycyksIHNvIGEgc3RhbGUgZm9yd2FyZCBtdXN0IE5PVCBibG9jayBhIHJlLXJ1bi5cbiAgY29uc3QgZmF0YWwgPSB0YXJnZXQgPT09ICdsb2NhbCc7XG4gIC8vIOKAplVOTEVTUyB0aGUgbG9jYWwgc3RhY2sgaXMgYWxyZWFkeSBydW5uaW5nOiB0aG9zZSBwb3J0cyBhcmUgaGVsZCBieSBZT1VSIE9XTlxuICAvLyBzdGFjaywgYW5kIGBkb2NrZXIgY29tcG9zZSB1cGAgbm8tb3BzIHRoZW0g4oCUIHRoaXMgaXMgZXhhY3RseSBob3cgeW91IHJlLXJ1biB0b1xuICAvLyBhZGQgbG9hZHMvb3B0aW9ucy4gRG9uJ3QgYmxvY2sgKHRoZSB3b3VsZC1iZSBjb25mbGljdCBpcyBhIHNlbGYtY29uZmxpY3QpLlxuICBpZiAoZmF0YWwgJiYgc3RhY2tSdW5uaW5nKHRhcmdldCwgY3dkLCBzcGVjKSkge1xuICAgIHByaW50V2FybmluZyhgXFxuJHt0YWtlbi5sZW5ndGh9IHBvcnQocykgYXJlIGhlbGQgYnkgeW91ciBhbHJlYWR5LXJ1bm5pbmcgJHtzcGVjLmxhYmVsfSBzdGFjayDigJQgcmUtcnVubmluZyBqdXN0IHJlc3VtZXMgaXQgKG5vIHJlYWwgY29uZmxpY3QpLCBzbyBjb250aW51aW5nLmApO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IGxlYWQgPSBgJHt0YWtlbi5sZW5ndGh9IHJlcXVpcmVkIHBvcnQocykgYWxyZWFkeSBpbiB1c2U6ICR7dGFrZW4ubWFwKChjKSA9PiBjLnBvcnQpLmpvaW4oJywgJyl9YDtcbiAgKGZhdGFsID8gcHJpbnRFcnJvciA6IHByaW50V2FybmluZykoZmF0YWxcbiAgICA/IGBcXG4ke2xlYWR9IOKAlCB0aGUgZGVwbG95IGNhbid0IGJpbmQgdGhlbSBhbmQgd291bGQgZmFpbCBtaWQtd2F5LiBGcmVlIHRoZW0gYW5kIHJlLXJ1bjpgXG4gICAgOiBgXFxuJHtsZWFkfSDigJQgb24gbWluaWt1YmUgdGhlc2UgYXJlIHVzdWFsbHkgYSBwcmV2aW91cyBydW4ncyBwb3J0LWZvcndhcmRzIChzZXR1cC5zaCByZXN0YXJ0cyB0aGVtKS4gRnJlZSBhbnkgTk9OLW1pbmlrdWJlIGhvbGRlciBpZiB0aGUgZ2F0ZXdheSBzdGF5cyB1bnJlYWNoYWJsZTpgKTtcbiAgZm9yIChjb25zdCBjIG9mIHRha2VuKSBwcmludEluZm8oYCAg4oCiIHBvcnQgJHtjLnBvcnR9ICgke2Muc2VydmljZX0pIOKAlCBmaW5kIHRoZSBob2xkZXI6ICBsc29mIC1pIDoke2MucG9ydH1gKTtcbiAgaWYgKHRha2VuLnNvbWUoKGMpID0+IGMucG9ydCA9PT0gNTAwMCkpIHtcbiAgICBwcmludEluZm8oJyAgTm90ZTogb24gbWFjT1MsIHBvcnQgNTAwMCBpcyB1c3VhbGx5IEFpclBsYXkgUmVjZWl2ZXIg4oCUIFN5c3RlbSBTZXR0aW5ncyDihpIgR2VuZXJhbCDihpIgQWlyRHJvcCAmIEhhbmRvZmYg4oaSIEFpclBsYXkgUmVjZWl2ZXIgKG9mZikuJyk7XG4gIH1cbiAgcmV0dXJuICFmYXRhbDtcbn1cblxuLyoqXG4gKiBUZWFyZG93biBtb2RlIOKAlCB0aGUgZGVzdHJveSBjb3VudGVycGFydCBvZiBwcm92aXNpb25pbmcsIGdhdGVkIEhBUkRFUiB0aGFuIGRlcGxveTpcbiAqIEFXUyB0YXJnZXRzIGFyZSBpcnJldmVyc2libGUsIHNvIHRoZSBvcGVyYXRvciBtdXN0IFRZUEUgdGhlIHRhcmdldCBpZCAoLS1mb3JjZVxuICogYnlwYXNzZXMgZm9yIENJOyAtLXllcyBhbG9uZSBkb2VzIE5PVCkuIFRlcm1pbmFsOiBvd25zIGl0cyBvdXRwdXQgKyBleGl0Q29kZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blRlYXJkb3duKFxuICBzcGVjOiBUYXJnZXRTcGVjLFxuICB0YXJnZXQ6IFRhcmdldElkLFxuICBjd2Q6IHN0cmluZyxcbiAgZXhlY3V0aW9uSWQ6IHN0cmluZyxcbiAgb3B0czogeyBzdGFja05hbWU/OiBzdHJpbmc7IGNsdXN0ZXJOYW1lPzogc3RyaW5nOyByZWdpb24/OiBzdHJpbmc7IGRvbWFpbj86IHN0cmluZzsgaG9zdGVkWm9uZUlkPzogc3RyaW5nOyBmb3JjZT86IGJvb2xlYW47IHllcz86IGJvb2xlYW47IGpzb24/OiBib29sZWFuIH0sXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBjb21tYW5kOiBkb3duQ29tbWFuZCwgZGVzdHJ1Y3RpdmUgfSA9IHRlYXJkb3duQ29tbWFuZCh0YXJnZXQsIHtcbiAgICBzdGFja05hbWU6IG9wdHMuc3RhY2tOYW1lLFxuICAgIGNsdXN0ZXJOYW1lOiBvcHRzLmNsdXN0ZXJOYW1lLFxuICAgIHJlZ2lvbjogb3B0cy5yZWdpb24sXG4gICAgLy8gZWtzIHRlYXJkb3duIChiaW4vc2h1dGRvd24uc2gpIGFsc28gY2xlYW5zIHVwIHRoZSBBQ00gY2VydCArIFJvdXRlIDUzIGFsaWFzIGZvclxuICAgIC8vIHRoZSBkb21haW4sIHNvIGZvcndhcmQgdGhlbSB3aGVuIHByZXNlbnQuXG4gICAgZG9tYWluOiBvcHRzLmRvbWFpbixcbiAgICBob3N0ZWRab25lSWQ6IG9wdHMuaG9zdGVkWm9uZUlkLFxuICAgIC8vIE91ciB0eXBlZCBnYXRlIElTIHRoZSBjb25maXJtYXRpb24g4oCUIGFzc3VtZVllcyBmb3J3YXJkcyBhIG5hdGl2ZSBgLS15ZXNgIHRvIGFueVxuICAgIC8vIHNjcmlwdC1iYXNlZCB0ZWFyZG93biAoZWMyIGRlbGV0ZS1zdGFjayBoYXMgbm8gcHJvbXB0OyBla3Mgc2h1dGRvd24uc2ggc2tpcHMgaXRzIG93bikuXG4gICAgYXNzdW1lWWVzOiB0cnVlLFxuICB9KTtcbiAgaWYgKG9wdHMuanNvbikge1xuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHsgc3VjY2VzczogdHJ1ZSwgZXhlY3V0aW9uSWQsIHRhcmdldCwgdGVhcmRvd246IHRydWUsIGRlc3RydWN0aXZlLCBkZXN0cm95czogc3BlYy5kZXN0cm95cywgY29tbWFuZDogZG93bkNvbW1hbmQgfSwgbnVsbCwgMikpO1xuICAgIHJldHVybjtcbiAgfVxuICBwcmludFNlY3Rpb24oYFRlYXJkb3duIHBsYW4g4oCUICR7c3BlYy5sYWJlbH1gKTtcbiAgcHJpbnRLZXlWYWx1ZSh7ICdUYXJnZXQnOiB0YXJnZXQsICdEZXN0cm95cyc6IHNwZWMuZGVzdHJveXMsICdTdG9wcyBjb3N0Jzogc3BlYy5jb3N0IH0pO1xuICBwcmludFNlY3Rpb24oJ0NvbW1hbmQgdG8gcnVuJyk7XG4gIHByaW50SW5mbyhkb3duQ29tbWFuZCk7XG4gIGlmIChkZXN0cnVjdGl2ZSAmJiAhb3B0cy5mb3JjZSkge1xuICAgIC8vIEJpbmQgdGhlIGNvbmZpcm1hdGlvbiB0byB0aGUgcmVzb3VyY2UgYWN0dWFsbHkgZGVzdHJveWVkOiBhIGN1c3RvbSBuYW1lIChlYzJcbiAgICAvLyAtLXN0YWNrLW5hbWUgLyBla3MgLS1jbHVzdGVyLW5hbWUpIG11c3QgYmUgdHlwZWQgdmVyYmF0aW0gc28gYSB3cm9uZyBuYW1lIGNhbid0IGJlXG4gICAgLy8gY29uZmlybWVkIGJ5IGhhYml0OyBvdGhlcndpc2UgdGhlIHRhcmdldCBpZC5cbiAgICBjb25zdCByZXNvdXJjZU5hbWUgPSB0YXJnZXQgPT09ICdla3MnID8gb3B0cy5jbHVzdGVyTmFtZSA6IG9wdHMuc3RhY2tOYW1lO1xuICAgIGNvbnN0IGNvbmZpcm1Ub2tlbiA9IHJlc291cmNlTmFtZSA/PyB0YXJnZXQ7XG4gICAgY29uc3Qgbm91biA9IHRhcmdldCA9PT0gJ2VrcycgPyAob3B0cy5jbHVzdGVyTmFtZSA/ICdjbHVzdGVyIG5hbWUnIDogJ3RhcmdldCBpZCcpIDogKG9wdHMuc3RhY2tOYW1lID8gJ3N0YWNrIG5hbWUnIDogJ3RhcmdldCBpZCcpO1xuICAgIGNvbnN0IHRva2VuID0gYXdhaXQgYXNrKGBcXG5UaGlzIGlzIElSUkVWRVJTSUJMRS4gVHlwZSBcIiR7Y29uZmlybVRva2VufVwiIHRvIGNvbmZpcm0gdGVhcmRvd246IGApO1xuICAgIGlmICh0b2tlbiAhPT0gY29uZmlybVRva2VuKSB7XG4gICAgICBwcmludFdhcm5pbmcoYFRoYXQgZGlkbid0IG1hdGNoLCBzbyBub3RoaW5nIHdhcyBkZXN0cm95ZWQg4oCUIHlvdSBoYXZlIHRvIHR5cGUgdGhlIGV4YWN0ICR7bm91bn0gdG8gY29uZmlybS5gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gZWxzZSBpZiAoIWRlc3RydWN0aXZlICYmICFvcHRzLmZvcmNlICYmICEoYXdhaXQgY29uZmlybSgnXFxuUHJvY2VlZCB3aXRoIHRlYXJkb3duIChzdG9wcyB0aGUgc3RhY2s7IG9uLWRpc2sgZGF0YSBwZXJzaXN0cyk/Jywgb3B0cy55ZXMgPz8gZmFsc2UpKSkge1xuICAgIHByaW50V2FybmluZygnTm8gcHJvYmxlbSDigJQgbm90aGluZyB3YXMgY2hhbmdlZC4nKTtcbiAgICByZXR1cm47XG4gIH1cbiAgcHJpbnRTZWN0aW9uKCdUZWFyaW5nIGRvd24nKTtcbiAgY29uc3QgeyBjb2RlOiBkb3duQ29kZSB9ID0gYXdhaXQgcnVuU2NyaXB0KGRvd25Db21tYW5kLCBjd2QsIHsgY2FwdHVyZTogZmFsc2UgfSk7XG4gIGlmIChkb3duQ29kZSAhPT0gMCkge1xuICAgIHByaW50RXJyb3IoYFxcblRlYXJkb3duIGZhaWxlZCAoZXhpdCAke2Rvd25Db2RlfSkuIEluc3BlY3QgdGhlIHN0YWNrL2NvbnRhaW5lcnMgYW5kIHJldHJ5LmApO1xuICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgIHJldHVybjtcbiAgfVxuICBwcmludFN1Y2Nlc3MoJ1RlYXJkb3duIGNvbXBsZXRlLicpO1xufVxuXG4vKipcbiAqIFJ1biB0aGUgZGVwbG95IGNvbW1hbmQgKHJlYWwsIHNlY3JldHMgdW5tYXNrZWQsIHN0cmVhbWVkICsgY2FwdHVyZWQpIHdpdGggYVxuICogYm91bmRlZCBhdXRvLWZpeCArIHJldHJ5IGxvb3Ag4oCUIHRoZSBkZXBsb3kgc2NyaXB0cyBhcmUgaWRlbXBvdGVudCwgc28gYSBmaXhlZFxuICogcmUtcnVuIHJlc3VtZXMgcmF0aGVyIHRoYW4gc3RhcnRpbmcgb3Zlci4gUmV0dXJucyB3aGV0aGVyIGl0IHN1Y2NlZWRlZCBwbHVzIHRoZVxuICogKHBvc3NpYmx5IGZpeC1hZGp1c3RlZCkgcGFyYW1zLCB3aGljaCB0aGUgY2FsbGVyIG5lZWRzIGZvciBTRVMgZ3VpZGFuY2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5EZXBsb3lXaXRoUmV0cnkoXG4gIHNwZWM6IFRhcmdldFNwZWMsXG4gIHVybDogc3RyaW5nIHwgbnVsbCxcbiAgY3dkOiBzdHJpbmcsXG4gIHBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIGFpT3B0czogeyBwcm92aWRlcj86IHN0cmluZzsgbW9kZWw/OiBzdHJpbmcgfSxcbiAgb3B0czogeyByZXRyaWVzPzogc3RyaW5nOyB5ZXM/OiBib29sZWFuIH0sXG4pOiBQcm9taXNlPHsgc3VjY2VlZGVkOiBib29sZWFuOyBydW5QYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0+IHtcbiAgY29uc3QgbWF4QXR0ZW1wdHMgPSAxICsgTWF0aC5tYXgoMCwgcGFyc2VJbnQob3B0cy5yZXRyaWVzID8/ICcnLCAxMCkgfHwgMCk7XG4gIGxldCBydW5QYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gcGFyYW1zO1xuICBsZXQgc3VjY2VlZGVkID0gZmFsc2U7XG4gIGZvciAobGV0IGF0dGVtcHQgPSAxOyBhdHRlbXB0IDw9IG1heEF0dGVtcHRzOyBhdHRlbXB0KyspIHtcbiAgICBjb25zdCByZWFsQ29tbWFuZCA9IGFzc2VtYmxlQ29tbWFuZChzcGVjLCBydW5QYXJhbXMsIHsgbWFzazogZmFsc2UgfSkuY29tbWFuZDtcbiAgICBwcmludFNlY3Rpb24oYXR0ZW1wdCA9PT0gMSA/ICdEZXBsb3lpbmcnIDogYERlcGxveWluZyDigJQgcmV0cnkgJHthdHRlbXB0IC0gMX1gKTtcbiAgICBpZiAoYXR0ZW1wdCA9PT0gMSkge1xuICAgICAgcHJpbnRJbmZvKGBEZXBsb3lpbmcgJHtzcGVjLmxhYmVsfSDihpIgJHt1cmx9YCk7XG4gICAgICBwcmludEluZm8oc3BlYy5kZXBsb3lzKTtcbiAgICAgIHByaW50SW5mbygnU3RyZWFtaW5nIHRoZSBkZXBsb3kgYmVsb3cg4oCUIGZpcnN0IHJ1biBpcyB0aGUgc2xvdyBvbmUgKGltYWdlIHB1bGxzICsgY2VydCBnZW5lcmF0aW9uKS4nKTtcbiAgICB9XG4gICAgY29uc3QgeyBjb2RlLCB0YWlsIH0gPSBhd2FpdCBydW5TY3JpcHQocmVhbENvbW1hbmQsIGN3ZCwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgIGlmIChjb2RlID09PSAwKSB7IHN1Y2NlZWRlZCA9IHRydWU7IGJyZWFrOyB9XG5cbiAgICBwcmludEVycm9yKGBcXG5EZXBsb3kgZmFpbGVkIChleGl0ICR7Y29kZX0pLmApO1xuICAgIGNvbnN0IGlzc3VlcyA9IG1hdGNoSXNzdWVzKHRhaWwpO1xuICAgIGlmIChpc3N1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgcHJpbnRTZWN0aW9uKCdMaWtlbHkgY2F1c2UnKTtcbiAgICAgIGZvciAoY29uc3QgaSBvZiBpc3N1ZXMpIHByaW50SW5mbyhg4oCiICR7aS5jYXVzZX1cXG4gIOKGkiAke2kuc3VnZ2VzdGlvbn1gKTtcbiAgICB9XG4gICAgaWYgKGlzQWlDb25maWd1cmVkKGFpT3B0cykpIHtcbiAgICAgIGNvbnN0IGRpYWdub3NpcyA9IGF3YWl0IGRpYWdub3NlRmFpbHVyZShyZWRhY3RTZWNyZXRzKHRhaWwsIHNwZWMsIHJ1blBhcmFtcyksIGFpT3B0cyk7XG4gICAgICBpZiAoZGlhZ25vc2lzKSB7IHByaW50U2VjdGlvbignRGlhZ25vc2lzJyk7IHByaW50SW5mbyhkaWFnbm9zaXMpOyB9XG4gICAgfVxuICAgIGlmIChhdHRlbXB0ID49IG1heEF0dGVtcHRzKSBicmVhaztcblxuICAgIC8vIEF1dG8tZml4OiBhIHJldHJ5YWJsZSBpc3N1ZSB3aXRoIGEgcGFyYW0gd2UgaGF2ZW4ndCBhbHJlYWR5IGFwcGxpZWQuXG4gICAgY29uc3QgZml4ID0gaXNzdWVzLmZpbmQoKGkpID0+IGkucmV0cnlhYmxlICYmIGkucGFyYW1GaXggJiYgcnVuUGFyYW1zW2kucGFyYW1GaXgua2V5XSAhPT0gaS5wYXJhbUZpeC52YWx1ZSk7XG4gICAgaWYgKGZpeD8ucGFyYW1GaXggJiYgYXdhaXQgY29uZmlybShgXFxuQXBwbHkgZml4IGFuZCByZXRyeSDigJQgJHtmaXguc3VnZ2VzdGlvbn1gLCBvcHRzLnllcyA/PyBmYWxzZSkpIHtcbiAgICAgIHJ1blBhcmFtcyA9IHsgLi4ucnVuUGFyYW1zLCBbZml4LnBhcmFtRml4LmtleV06IGZpeC5wYXJhbUZpeC52YWx1ZSB9O1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIC8vIFJldHJ5YWJsZSBidXQgbm8gcGFyYW0gY2hhbmdlIChlLmcuIEFDTSBETlMgcHJvcGFnYXRpb24pIOKAlCBvZmZlciBhIHBsYWluIHJlLXJ1bi5cbiAgICBpZiAoIWZpeCAmJiBpc3N1ZXMuc29tZSgoaSkgPT4gaS5yZXRyeWFibGUpICYmIGF3YWl0IGNvbmZpcm0oJ1xcblJldHJ5IHRoZSBkZXBsb3kgKHNhZmUgdG8gcmUtcnVuIOKAlCBpdCByZXN1bWVzIHdoZXJlIGl0IGxlZnQgb2ZmKT8nLCBvcHRzLnllcyA/PyBmYWxzZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBicmVhaztcbiAgfVxuICByZXR1cm4geyBzdWNjZWVkZWQsIHJ1blBhcmFtcyB9O1xufVxuXG4vKipcbiAqIEV4ZWN1dGUgdGhlIHBvc3QtaW5zdGFsbCBzdGVwcyAocmVnaXN0ZXIg4oaSIGxvYWRzIOKGkiBzbW9rZSDihpIgZXZlbnRzIOKGkiBjdXN0b20pLiBPblxuICogRUMyL0VLUyB0aGUgcmVnaXN0ZXIgc3RlcCArIHRoZSBldmVudHMgYnVuZGxlIChzdG9yZS10b2tlbiDihpIgc2V0dXAtZXZlbnRzKSBhcmVcbiAqIFNVUkZBQ0VEIGFzIG9yZGVyZWQgbWFudWFsIG5leHQtc3RlcHMgaW5zdGVhZCBvZiBhdXRvLXJ1bjogZWMyIHJlZ2lzdGVyIG11c3QgcnVuXG4gKiBPTiB0aGUgYm94ICh0aGUgbWluaWt1YmUgdXNlciBvd25zIHRoZSBjbHVzdGVyKSwgYW5kIHRoZSBldmVudHMgYnVuZGxlIG5lZWRzIGFcbiAqIHJlZ2lzdGVyZWQgcGxhdGZvcm0gKyBBV1MgY3JlZHMuIChla3MgcmVnaXN0ZXIgaXRzZWxmIHBvcnQtZm9yd2FyZHMsIHNvIGl0IHJ1bnNcbiAqIGZyb20gYW55d2hlcmUgd2l0aCBrdWJlY3RsIGFjY2Vzcy4pIFNldHMgZXhpdENvZGUgb24gYSBzdGVwIGZhaWx1cmUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5Qb3N0U3RlcHMoXG4gIHBvc3RTdGVwczogUG9zdFN0ZXBbXSxcbiAgc2tpcHBlZFN0ZXBzOiBTa2lwcGVkU3RlcFtdLFxuICB0YXJnZXQ6IFRhcmdldElkLFxuICBjd2Q6IHN0cmluZyxcbiAgYWRtaW5FbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gIG9wdHM6IHsgeWVzPzogYm9vbGVhbjsgYXV0b1J1bj86IGJvb2xlYW47IGF1dG9Jbml0PzogYm9vbGVhbiB9LFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIEFXUyB0YXJnZXRzIHdpdGggYC0taW5pdCBhdXRvYDogdGhlIGRlcGxveSBzZWxmLXJ1bnMgaW5pdC1wbGF0Zm9ybSwgc28gdGhlcmUncyBub1xuICAvLyByZWdpc3Rlci9sb2FkcyBzdGVwIHRvIHN1cmZhY2UgaGVyZSDigJQgY29uZmlybSBpdCBhbmQgcG9pbnQgYXQgd2hlcmUgdG8gd2F0Y2guXG4gIGlmIChvcHRzLmF1dG9Jbml0ICYmIHRhcmdldCA9PT0gJ2VjMicpIHtcbiAgICBwcmludEluZm8oJ1xcbuKckyBJbml0IG1vZGU6IGF1dG8g4oCUIHRoZSBpbnN0YW5jZSBydW5zIGluaXQtcGxhdGZvcm0gaXRzZWxmIG9uIGZpcnN0IGJvb3QnKTtcbiAgICBwcmludEluZm8oJyAgKHJlZ2lzdGVyIGFkbWluICsgYnVpbGQgYm9vdHN0cmFwIGltYWdlICsgbG9hZCBwbHVnaW5zL2NvbXBsaWFuY2Uvc2FtcGxlcykuJyk7XG4gICAgcHJpbnRJbmZvKCcgIEl0IHRha2VzIH4zMC02MCBtaW47IHdhdGNoIHByb2dyZXNzOicpO1xuICAgIHByaW50SW5mbygnICAgIGF3cyBzc20gc3RhcnQtc2Vzc2lvbiAtLXRhcmdldCA8SW5zdGFuY2VJZD4gICAjIEluc3RhbmNlSWQgc3RhY2sgb3V0cHV0Jyk7XG4gICAgcHJpbnRJbmZvKCcgICAgc3VkbyB0YWlsIC1mIC92YXIvbG9nL3VzZXItZGF0YS5sb2cnKTtcbiAgfSBlbHNlIGlmIChvcHRzLmF1dG9Jbml0ICYmIHRhcmdldCA9PT0gJ2VrcycpIHtcbiAgICBwcmludEluZm8oJ1xcbuKckyBJbml0IG1vZGU6IGF1dG8g4oCUIHNldHVwLnNoIHJ1bnMgaW5pdC1wbGF0Zm9ybSBpbiBpdHMgZmluYWwgcGhhc2UnKTtcbiAgICBwcmludEluZm8oJyAgKHJlZ2lzdGVyIGFkbWluICsgYnVpbGQgYm9vdHN0cmFwIGltYWdlICsgbG9hZCBwbHVnaW5zL2NvbXBsaWFuY2Uvc2FtcGxlcywnKTtcbiAgICBwcmludEluZm8oJyAgb3ZlciBhIGt1YmVjdGwgcG9ydC1mb3J3YXJkKS4gUGFzcyAtLWluaXQgbWFudWFsIHRvIHJ1biBpdCB5b3Vyc2VsZiBpbnN0ZWFkLicpO1xuICB9XG4gIGlmIChwb3N0U3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gIGZvciAoY29uc3QgcyBvZiBza2lwcGVkU3RlcHMpIHByaW50V2FybmluZyhgU2tpcHBlZCBwb3N0LXN0ZXAgJHtzLmlkfTogJHtzLnJlYXNvbn1gKTtcbiAgY29uc3QgaXNSZW1vdGUgPSAoaWQ6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgICAodGFyZ2V0ID09PSAnZWMyJyB8fCB0YXJnZXQgPT09ICdla3MnKSAmJiAoaWQgPT09ICdyZWdpc3RlcicgfHwgaWQgPT09ICdzdG9yZS10b2tlbicgfHwgaWQgPT09ICdldmVudHMnKTtcbiAgY29uc3QgcnVubmFibGUgPSBwb3N0U3RlcHMuZmlsdGVyKChzKSA9PiAhaXNSZW1vdGUocy5pZCkpO1xuICBjb25zdCByZW1vdGUgPSBwb3N0U3RlcHMuZmlsdGVyKChzKSA9PiBpc1JlbW90ZShzLmlkKSk7XG4gIGlmIChyZW1vdGUubGVuZ3RoID4gMCkge1xuICAgIGlmICh0YXJnZXQgPT09ICdlYzInKSB7XG4gICAgICAvLyBFQzIgcnVucyB0aGUgcGxhdGZvcm0gYXMgYSBkZWRpY2F0ZWQgYG1pbmlrdWJlYCB1c2VyIGluc2lkZSB0aGUgaW5zdGFuY2U6IHRoZVxuICAgICAgLy8gY2x1c3RlciwgaXRzIGt1YmVjb25maWcsIGFuZCB0aGUgand0LXNlY3JldCBhbGwgYmVsb25nIHRvIHRoYXQgdXNlciwgYW5kIHRoZVxuICAgICAgLy8gcmVnaXN0ZXIgc3RlcCBidWlsZHMrcHVzaGVzIGltYWdlcyBhZ2FpbnN0IGl0LiBTbyBpdCBNVVNUIHJ1biBvbiB0aGUgYm94IGFzXG4gICAgICAvLyBgbWluaWt1YmVgIOKAlCBwcmludCB0aGUgZXhhY3QgbGFuZGluZyBzZXF1ZW5jZSByYXRoZXIgdGhhbiBhIGJhcmUgY29tbWFuZC5cbiAgICAgIHByaW50SW5mbygnXFxuTmV4dCDigJQgZmluaXNoIHNldHVwIE9OIHRoZSBpbnN0YW5jZSAoaXQgYnVpbGRzIGltYWdlcyArIHJlYWRzIHRoZSBjbHVzdGVyLCBzbyBpdCcpO1xuICAgICAgcHJpbnRJbmZvKCdjYW5ub3QgcnVuIGZyb20gaGVyZSkuIExhbmQgb24gdGhlIGJveCwgYmVjb21lIHRoZSBgbWluaWt1YmVgIHVzZXIsIHRoZW4gcnVuIGl0OicpO1xuICAgICAgcHJpbnRJbmZvKCcgIGF3cyBzc20gc3RhcnQtc2Vzc2lvbiAtLXRhcmdldCA8SW5zdGFuY2VJZD4gICAgICAjIEluc3RhbmNlSWQgc3RhY2sgb3V0cHV0Jyk7XG4gICAgICBwcmludEluZm8oJyAgc3VkbyAtaXUgbWluaWt1YmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3ducyB0aGUgY2x1c3RlciArIGRvY2tlcicpO1xuICAgICAgcHJpbnRJbmZvKCcgIGNkIC9vcHQvcGlwZWxpbmUvcGlwZWxpbmUtYnVpbGRlciAgICAgICAgICAgICAgICAjIHRoZSBkZXBsb3llZCBjaGVja291dCcpO1xuICAgICAgZm9yIChjb25zdCBzIG9mIHJlbW90ZSkgcHJpbnRJbmZvKGAgICR7cy5jb21tYW5kfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBla3M6IGluaXQtcGxhdGZvcm0gcG9ydC1mb3J3YXJkcyB0byBzdmMvbmdpbngsIHNvIHJlZ2lzdGVyIHJ1bnMgZnJvbSBhbnl3aGVyZSB3aXRoXG4gICAgICAvLyBrdWJlY3RsIGFjY2VzcyDigJQgbm8gaW4tVlBDIHJlcXVpcmVtZW50IGFuZCBubyB3YWl0aW5nIG9uIHRoZSBBTEIvRE5TLiAoQSAtLXdpdGgtZXZlbnRzXG4gICAgICAvLyBidW5kbGUsIGlmIHByZXNlbnQsIGFkZGl0aW9uYWxseSBuZWVkcyBBV1MgY3JlZHMgKyBhIHJlZ2lzdGVyZWQgcGxhdGZvcm0uKVxuICAgICAgcHJpbnRJbmZvKCdcXG5OZXh0IOKAlCBydW4gd2l0aCBrdWJlY3RsIGFjY2VzcyB0byB0aGUgY2x1c3RlciAoaW4gdGhpcyBvcmRlcik6Jyk7XG4gICAgICBmb3IgKGNvbnN0IHMgb2YgcmVtb3RlKSBwcmludEluZm8oYCAg4oCiICR7cy5sYWJlbH0g4oCUICR7cy5jb21tYW5kfWApO1xuICAgIH1cbiAgfVxuICBpZiAocnVubmFibGUubGVuZ3RoID09PSAwKSByZXR1cm47XG4gIC8vIFdoZW4gdGhlIGxvYWRzIHdlcmUgcGlja2VkIGludGVyYWN0aXZlbHkgKGF1dG9SdW4pLCB0aGUgdXNlciBhbHJlYWR5IG9wdGVkIGluIOKAlCBza2lwXG4gIC8vIHRoZSByZWR1bmRhbnQgc2Vjb25kIGNvbmZpcm0uIEZsYWctZHJpdmVuIC8gbm9uLWludGVyYWN0aXZlIHJ1bnMgc3RpbGwgZ2F0ZSBoZXJlLlxuICBpZiAob3B0cy5hdXRvUnVuIHx8IGF3YWl0IGNvbmZpcm0oYFxcblJ1biAke3J1bm5hYmxlLmxlbmd0aH0gcG9zdC1pbnN0YWxsIHN0ZXAocykgbm93P2AsIG9wdHMueWVzID8/IGZhbHNlKSkge1xuICAgIGlmIChvcHRzLmF1dG9SdW4pIHByaW50SW5mbyhgXFxuUnVubmluZyB0aGUgJHtydW5uYWJsZS5sZW5ndGh9IHBvc3QtaW5zdGFsbCBzdGVwKHMpIHlvdSBzZWxlY3RlZOKApmApO1xuICAgIGZvciAoY29uc3QgcyBvZiBydW5uYWJsZSkge1xuICAgICAgcHJpbnRTZWN0aW9uKGBQb3N0LXN0ZXA6ICR7cy5sYWJlbH1gKTtcbiAgICAgIC8vIHJlZ2lzdGVyIChsb2NhbC9taW5pa3ViZSkgbG9ncyBpbnRvIHRoZSBwbGF0Zm9ybSwgc28gaXQgbmVlZHMgdGhlIGFkbWluIGNyZWRzXG4gICAgICAvLyAoUExBVEZPUk1fSURFTlRJRklFUiAvIFBMQVRGT1JNX1BBU1NXT1JEKSBvbiB0b3Agb2YgaXRzIHN0ZXAgZW52LlxuICAgICAgY29uc3QgbmVlZHNDcmVkcyA9IHMuaWQgPT09ICdyZWdpc3RlcicgfHwgcy5pZCA9PT0gJ3N0b3JlLXRva2VuJztcbiAgICAgIGNvbnN0IGVudiA9IG5lZWRzQ3JlZHMgPyB7IC4uLnMuZW52LCAuLi5hZG1pbkVudiB9IDogcy5lbnY7XG4gICAgICAvLyBMb2Fkcy9zbW9rZSBhcmUgbm9pc3kgKyBub24taW50ZXJhY3RpdmUg4oaSIHJ1biBRVUlFVCAoY2FwdHVyZSwgc2hvdyBvbmx5IG9uXG4gICAgICAvLyBmYWlsdXJlKS4gRXhjZXB0aW9uOiBhIHJlZ2lzdGVyIHdpdGggbm8gYWRtaW4gY3JlZHMgcHJvbXB0cywgc28gaXQgbXVzdCBzdHJlYW0uXG4gICAgICBjb25zdCBpbnRlcmFjdGl2ZVJlZ2lzdGVyID0gcy5pZCA9PT0gJ3JlZ2lzdGVyJyAmJiAhYWRtaW5FbnYuUExBVEZPUk1fSURFTlRJRklFUjtcbiAgICAgIGNvbnN0IHF1aWV0ID0gIWludGVyYWN0aXZlUmVnaXN0ZXI7XG4gICAgICBpZiAocXVpZXQpIHByaW50SW5mbyhgJHtzLmNvbW1hbmR9XFxuICDigKZydW5uaW5nIChvdXRwdXQgc2hvd24gb25seSBpZiBpdCBmYWlscylgKTtcbiAgICAgIGVsc2UgcHJpbnRJbmZvKHMuY29tbWFuZCk7XG4gICAgICBjb25zdCB7IGNvZGUsIHRhaWwgfSA9IGF3YWl0IHJ1blNjcmlwdChzLmNvbW1hbmQsIGN3ZCwgeyBxdWlldCwgY2FwdHVyZTogZmFsc2UsIGVudiB9KTtcbiAgICAgIGlmIChjb2RlICE9PSAwKSB7XG4gICAgICAgIGlmIChxdWlldCAmJiB0YWlsKSB7IHByaW50RXJyb3IoJ1xcbi0tLSBsYXN0IG91dHB1dCAtLS0nKTsgcHJpbnRJbmZvKHRhaWwpOyB9XG4gICAgICAgIHByaW50RXJyb3IoYFxcblBvc3Qtc3RlcCAnJHtzLmlkfScgZmFpbGVkIChleGl0ICR7Y29kZX0pLiBUaGUgcGxhdGZvcm0gaXMgZGVwbG95ZWQ7IGZpeCBhbmQgcmUtcnVuIHRoZSBzdGVwIG1hbnVhbGx5LmApO1xuICAgICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBwcmludFN1Y2Nlc3MoYCR7cy5pZH0g4pyTYCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHByaW50SW5mbygnXFxuU2tpcHBlZCBwb3N0LWluc3RhbGwgc3RlcHMuIFJ1biB0aGUgY29tbWFuZHMgYWJvdmUgbWFudWFsbHkgd2hlbiByZWFkeS4nKTtcbiAgfVxufVxuXG4vKipcbiAqIFNwYXJzZS1jbG9uZSB0aGUgcGxhdGZvcm0gcmVwbyAod2hlbiAtLXJlcG8sIG9yIGFjY2VwdGVkIHZpYSB0aGUgaW50ZXJhY3RpdmVcbiAqIG9mZmVyKSwgcmVwb2ludCBjd2QgaW50byBpdCwgYW5kIHZlcmlmeSB0aGUgZGVwbG95IGVudHJ5cG9pbnQgZXhpc3RzLiBPd25zIHRoZVxuICogY3dkL2Jvb3RzdHJhcHBlZCBzdGF0ZS4gU2V0cyBleGl0Q29kZSBvbiBhIGhhcmQgZmFpbHVyZSAoY2xvbmUgZXJyb3IgLyBtaXNzaW5nXG4gKiBlbnRyeXBvaW50KSwgbWF0Y2hpbmcgdGhlIG9sZCBpbmxpbmUgYmVoYXZpb3I7IGEgcGxhaW4gZGVjbGluZSBsZWF2ZXMgZXhpdENvZGVcbiAqIHVudG91Y2hlZC4gUmV0dXJucyBvazpmYWxzZSB3aGVuIHRoZSBjYWxsZXIgbXVzdCBhYm9ydC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJvb3RzdHJhcEFuZExvY2F0ZShcbiAgc3BlYzogVGFyZ2V0U3BlYyxcbiAgYm9vdHN0cmFwOiBCb290c3RyYXBTcGVjLFxuICBib290c3RyYXBDbWQ6IHN0cmluZyB8IG51bGwsXG4gIHNwYXJzZVBhdGhzOiByZWFkb25seSBzdHJpbmdbXSxcbiAgc3RhcnRDd2Q6IHN0cmluZyxcbiAgb3B0czogeyB5ZXM/OiBib29sZWFuIH0sXG4pOiBQcm9taXNlPHsgY3dkOiBzdHJpbmc7IGJvb3RzdHJhcHBlZDogYm9vbGVhbjsgb2s6IGJvb2xlYW4gfT4ge1xuICBsZXQgY3dkID0gc3RhcnRDd2Q7XG4gIGxldCBib290c3RyYXBwZWQgPSBmYWxzZTtcbiAgLy8gU2hhcmVkIGJ5IGAtLXJlcG9gIGFuZCB0aGUgaW50ZXJhY3RpdmUgb2ZmZXIuIFJlcG9pbnRzIGN3ZCArIHNldHMgYm9vdHN0cmFwcGVkO1xuICAvLyBgYm9vdHN0cmFwcGVkYCByZWNvcmRzIHdoZXRoZXIgd2UgY3JlYXRlZCB0aGUgY2xvbmUgKHZzLiBhbiBleGlzdGluZyBjaGVja291dCkg4oCUXG4gIC8vIG9ubHkgdGhlbiBjYW4gdGhlIGNhbGxlciBhZGRpdGl2ZWx5IHNwYXJzZS1mZXRjaCBsb2FkIGZvbGRlcnMuXG4gIGNvbnN0IGJvb3RzdHJhcENsb25lID0gYXN5bmMgKCk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgIGNvbnN0IGNtZCA9IGJvb3RzdHJhcENvbW1hbmQoYm9vdHN0cmFwKTtcbiAgICBwcmludFNlY3Rpb24oJ0Jvb3RzdHJhcCcpO1xuICAgIHByaW50SW5mbyhjbWQpO1xuICAgIGNvbnN0IHsgY29kZSB9ID0gYXdhaXQgcnVuU2NyaXB0KGNtZCwgY3dkLCB7IGNhcHR1cmU6IGZhbHNlIH0pO1xuICAgIGlmIChjb2RlICE9PSAwKSB7XG4gICAgICBwcmludEVycm9yKGBcXG5UaGUgY2xvbmUgZGlkbid0IGZpbmlzaCAoZXhpdCAke2NvZGV9KS4gRG91YmxlLWNoZWNrIHRoZSByZXBvIFVSTCAvIHJlZiAob3IgeW91ciBuZXR3b3JrKSBhbmQgZ2l2ZSBpdCBhbm90aGVyIGdvLmApO1xuICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGN3ZCA9IHBhdGgucmVzb2x2ZShjd2QsIGJvb3RzdHJhcC53b3JrZGlyKTtcbiAgICBib290c3RyYXBwZWQgPSB0cnVlO1xuICAgIHByaW50U3VjY2VzcyhgUmVwbyBpcyByZWFkeSDigJQgY29udGludWluZyBmcm9tICR7Y3dkfWApO1xuICAgIGNvbnN0IGFic2VudCA9IHNwYXJzZVBhdGhzLmZpbHRlcigocCkgPT4gIWV4aXN0c1N5bmMocGF0aC5qb2luKGN3ZCwgcCkpKTtcbiAgICBpZiAoYWJzZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgIHByaW50RXJyb3IoYFxcblRoZSBzcGFyc2UgY2xvbmUgaXMgbWlzc2luZyAke2Fic2VudC5qb2luKCcsICcpfSDigJQgdGhhdCByZWYgbWF5IG5vdCBoYXZlIHRob3NlIGZvbGRlcnMuIFRyeSBhIGRpZmZlcmVudCAtLXJlZi5gKTtcbiAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICAvLyBgLS1yZXBvYDogY2xvbmUgdXAgZnJvbnQgKG11c3QgcHJlY2VkZSB0aGUgZW50cnlwb2ludCBjaGVjaykuXG4gIGlmIChib290c3RyYXBDbWQpIHtcbiAgICBwcmludEluZm8oYFxcbkJvb3RzdHJhcCDihpIgY2xvbmUgJHtib290c3RyYXAucmVwb30gQCAke2Jvb3RzdHJhcC5yZWZ9IGludG8gJHtib290c3RyYXAud29ya2Rpcn0gKHNwYXJzZSkuYCk7XG4gICAgaWYgKCEoYXdhaXQgY29uZmlybSgnR28gYWhlYWQgd2l0aCB0aGUgY2xvbmU/Jywgb3B0cy55ZXMgPz8gZmFsc2UpKSkge1xuICAgICAgcHJpbnRXYXJuaW5nKCdObyBwcm9ibGVtIOKAlCBub3RoaW5nIHdhcyBjaGFuZ2VkLiBSZS1ydW4gd2hlbmV2ZXIgeW91XFwncmUgcmVhZHkuJyk7XG4gICAgICByZXR1cm4geyBjd2QsIGJvb3RzdHJhcHBlZCwgb2s6IGZhbHNlIH07XG4gICAgfVxuICAgIGlmICghKGF3YWl0IGJvb3RzdHJhcENsb25lKCkpKSByZXR1cm4geyBjd2QsIGJvb3RzdHJhcHBlZCwgb2s6IGZhbHNlIH07XG4gIH1cblxuICAvLyBUaGUgZGVwbG95IGVudHJ5cG9pbnQgbXVzdCBleGlzdCByZWxhdGl2ZSB0byBjd2QuIElmIGl0IGRvZXNuJ3QgYW5kIHdlIGhhdmVuJ3RcbiAgLy8gYm9vdHN0cmFwcGVkLCBncmFjZWZ1bGx5IE9GRkVSIHRvIGNsb25lIChpbnRlcmFjdGl2ZSBvbmx5KSBzbyBhIGZyZXNoIG1hY2hpbmUgY2FuXG4gIC8vIHByb2NlZWQgd2l0aG91dCByZS1ydW5uaW5nIHdpdGggLS1yZXBvLlxuICBpZiAoIWVudHJ5cG9pbnRFeGlzdHMoc3BlYywgY3dkKSkge1xuICAgIGNvbnN0IGludGVyYWN0aXZlID0gQm9vbGVhbihwcm9jZXNzLnN0ZGluLmlzVFRZKSAmJiAhb3B0cy55ZXM7XG4gICAgaWYgKCFib290c3RyYXBDbWQgJiYgaW50ZXJhY3RpdmUgJiYgZ2l0QXZhaWxhYmxlKCkpIHtcbiAgICAgIHByaW50SW5mbyhgXFxuTG9va3MgbGlrZSB5b3UncmUgbm90IGluc2lkZSBhIHBpcGVsaW5lLWJ1aWxkZXIgY2hlY2tvdXQsIHNvIHRoZSAke3NwZWMubGFiZWx9IGRlcGxveSBzY3JpcHRzIGFyZW4ndCBoZXJlIHlldC5gKTtcbiAgICAgIGlmIChhd2FpdCBjb25maXJtKGBXYW50IG1lIHRvIHNwYXJzZS1jbG9uZSB0aGVtIGludG8gJHtib290c3RyYXAud29ya2Rpcn0gYW5kIGtlZXAgZ29pbmc/YCwgZmFsc2UpKSB7XG4gICAgICAgIGlmICghKGF3YWl0IGJvb3RzdHJhcENsb25lKCkpKSByZXR1cm4geyBjd2QsIGJvb3RzdHJhcHBlZCwgb2s6IGZhbHNlIH07XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghZW50cnlwb2ludEV4aXN0cyhzcGVjLCBjd2QpKSB7XG4gICAgICBwcmludFdhcm5pbmcoYFxcbkkgY291bGRuJ3QgZmluZCAke3NwZWMuZGlyfS8ke3NwZWMuZW50cnlwb2ludH0gZnJvbSAke2N3ZH0uYCk7XG4gICAgICBwcmludEluZm8oJ1R3byBlYXN5IHdheXMgZm9yd2FyZDonKTtcbiAgICAgIHByaW50SW5mbygnICDigKIgY2QgaW50byB5b3VyIHBpcGVsaW5lLWJ1aWxkZXIgY2hlY2tvdXQgYW5kIHJlLXJ1biwgb3InKTtcbiAgICAgIHByaW50SW5mbyhgICDigKIgYWRkIC0tcmVwbyBhbmQgSSdsbCBib290c3RyYXAgYSBmcmVzaCBzcGFyc2UgY2xvbmUgZm9yIHlvdSR7Z2l0QXZhaWxhYmxlKCkgPyAnLicgOiAnIChvbmNlIGdpdCBpcyBpbnN0YWxsZWQpLid9YCk7XG4gICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgIHJldHVybiB7IGN3ZCwgYm9vdHN0cmFwcGVkLCBvazogZmFsc2UgfTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgY3dkLCBib290c3RyYXBwZWQsIG9rOiB0cnVlIH07XG59XG5cbi8qKlxuICogSW50ZXJhY3RpdmUgb3B0LWluIGxvYWRzLCBvZmZlcmVkIEFGVEVSIHRoZSBjbG9uZSAoc28gd2Ugb25seSBhc2sgb25jZSB0aGUgb3BlcmF0b3JcbiAqIGhhcyBhZ3JlZWQgdG8gcHJvY2VlZCkuIFByb21wdHMgcGVyIGxvYWQsIGFkZGl0aXZlbHkgc3BhcnNlLWZldGNoZXMgdGhlIHBpY2tlZFxuICogZm9sZGVycyBpbnRvIGEgYm9vdHN0cmFwcGVkIHNwYXJzZSBjbG9uZSwgdGhlbiByZS1yZXNvbHZlcyB0aGUgcG9zdC1pbnN0YWxsIHN0ZXBzXG4gKiB3aXRoIHRoZSBzZWxlY3Rpb25zLiBSZXR1cm5zIHRoZSBjaG9zZW4gaWRzICsgdGhlIHJlY29tcHV0ZWQgc3RlcHMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlTG9hZHNJbnRlcmFjdGl2ZWx5KFxuICB0YXJnZXQ6IFRhcmdldElkLFxuICB1cmw6IHN0cmluZyB8IG51bGwsXG4gIHJlZ2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBjd2Q6IHN0cmluZyxcbiAgYm9vdHN0cmFwcGVkOiBib29sZWFuLFxuICBib290c3RyYXA6IEJvb3RzdHJhcFNwZWMsXG4gIHBvc3RTdGVwRmxhZ3M6IHsgaW5pdDogYm9vbGVhbjsgYXV0b0luaXQ6IGJvb2xlYW47IGJ1aWxkQm9vdHN0cmFwOiBib29sZWFuOyBzbW9rZVRlc3Q6IGJvb2xlYW47IGV2ZW50czogYm9vbGVhbjsgc3RlcHM6IHN0cmluZ1tdIH0sXG4pOiBQcm9taXNlPHsgZW5hYmxlZExvYWRJZHM6IHN0cmluZ1tdOyBzdGVwczogUG9zdFN0ZXBbXTsgc2tpcHBlZDogU2tpcHBlZFN0ZXBbXSB9PiB7XG4gIGNvbnN0IHByb21wdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgcGx1Z2luczogJ0xvYWQgcGx1Z2lucz8nLFxuICAgIHNhbXBsZXM6ICdMb2FkIHNhbXBsZSBwaXBlbGluZXM/JyxcbiAgICBjb21wbGlhbmNlOiAnTG9hZCBjb21wbGlhbmNlIHJ1bGVzPycsXG4gIH07XG4gIHByaW50U2VjdGlvbignT3B0aW9uYWwgcG9zdC1pbnN0YWxsIGxvYWRzJyk7XG4gIGNvbnN0IGNob3Nlbjogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBzIG9mIExPQURfU1RFUFMpIHtcbiAgICBpZiAoYXdhaXQgY29uZmlybShwcm9tcHRzW3MuaWRdID8/IGBMb2FkICR7cy5pZH0/YCwgZmFsc2UpKSBjaG9zZW4ucHVzaChzLmlkKTtcbiAgfVxuICAvLyBBZGRpdGl2ZSBzcGFyc2UgcmUtc3luYzogbWF0ZXJpYWxpemUgT05MWSB0aGUgcGlja2VkIGxvYWRzJyBmb2xkZXJzICh0aGUgcGFydGlhbFxuICAvLyBjbG9uZSBmZXRjaGVzIHRoZWlyIGJsb2JzIG9uIGRlbWFuZCkuIE9ubHkgd2hlbiB3ZSBjcmVhdGVkIGEgU1BBUlNFIGNsb25lIOKAlCBhXG4gIC8vIG5vcm1hbCBjaGVja291dCBhbHJlYWR5IGhhcyBldmVyeSBmb2xkZXIsIGFuZCB0aGUgZ2l0PDIuMjcgZnVsbC1jbG9uZSBmYWxsYmFja1xuICAvLyAoYm9vdHN0cmFwLmZ1bGwpIGlzIG5vbi1zcGFyc2UsIHdoZXJlIGBzcGFyc2UtY2hlY2tvdXQgYWRkYCB3b3VsZCBzd2l0Y2ggaXQgdG9cbiAgLy8gY29uZSBtb2RlIGFuZCBQUlVORSB0aGUgYWxyZWFkeS1tYXRlcmlhbGl6ZWQgZGVwbG95IGZvbGRlcnMuXG4gIGlmIChib290c3RyYXBwZWQgJiYgIWJvb3RzdHJhcC5mdWxsKSB7XG4gICAgY29uc3QgYWJzZW50ID0gc3BhcnNlUGF0aHNGb3IodGFyZ2V0LCBjaG9zZW4pLmZpbHRlcigocCkgPT4gIWV4aXN0c1N5bmMocGF0aC5qb2luKGN3ZCwgcCkpKTtcbiAgICBpZiAoYWJzZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgIHByaW50U2VjdGlvbignRmV0Y2hpbmcgc2VsZWN0ZWQgbG9hZCBmb2xkZXJzJyk7XG4gICAgICBjb25zdCBhZGRDbWQgPSBgZ2l0IHNwYXJzZS1jaGVja291dCBhZGQgJHthYnNlbnQubWFwKChwKSA9PiBgJyR7cH0nYCkuam9pbignICcpfSAmJiBnaXQgY2hlY2tvdXQgJyR7Ym9vdHN0cmFwLnJlZn0nYDtcbiAgICAgIHByaW50SW5mbyhhZGRDbWQpO1xuICAgICAgY29uc3QgeyBjb2RlIH0gPSBhd2FpdCBydW5TY3JpcHQoYWRkQ21kLCBjd2QsIHsgY2FwdHVyZTogZmFsc2UgfSk7XG4gICAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgICBwcmludFdhcm5pbmcoYENvdWxkbid0IGZldGNoICR7YWJzZW50LmpvaW4oJywgJyl9IOKAlCB0aGUgbWF0Y2hpbmcgbG9hZCBzdGVwKHMpIG1heSBmYWlsLiBSZS1ydW4gd2l0aCAtLXJlcG8gdG8gcmVmcmVzaCB0aGUgY2xvbmUuYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZVBvc3RTdGVwcyh7XG4gICAgdGFyZ2V0LFxuICAgIHVybCxcbiAgICByZWdpb24sXG4gICAgZW5hYmxlZExvYWRJZHM6IGNob3NlbixcbiAgICAuLi5wb3N0U3RlcEZsYWdzLFxuICAgIGJ1aWxkQm9vdHN0cmFwOiBwb3N0U3RlcEZsYWdzLmJ1aWxkQm9vdHN0cmFwIHx8IGNob3Nlbi5pbmNsdWRlcygncGx1Z2lucycpLFxuICB9KTtcbiAgcmV0dXJuIHsgZW5hYmxlZExvYWRJZHM6IGNob3Nlbiwgc3RlcHM6IHJlc29sdmVkLnN0ZXBzLCBza2lwcGVkOiByZXNvbHZlZC5za2lwcGVkIH07XG59XG5cbi8qKlxuICogUmVkYWN0IHNlY3JldCBwYXJhbSB2YWx1ZXMgKGUuZy4gdGhlIGdoY3IgdG9rZW4pIGZyb20gY2FwdHVyZWQgZGVwbG95IG91dHB1dFxuICogYmVmb3JlIGl0IGlzIHNlbnQgdG8gdGhlIExMTSBmb3IgZGlhZ25vc2lzLiBUaGUgZGVwbG95IHJ1bnMgd2l0aCBzZWNyZXRzXG4gKiB1bm1hc2tlZCwgc28gYWx0aG91Z2ggdGhlIGN1cnJlbnQgc2NyaXB0cyBkb24ndCBlY2hvIHRoZW0sIHRoaXMga2VlcHMgYSBmdXR1cmVcbiAqIHNjcmlwdCdzIHN0cmF5IGVjaG8gKG9yIGEgdmVyYm9zZSBzdWItdG9vbCkgZnJvbSBjcm9zc2luZyB0aGUgdGhpcmQtcGFydHktTExNXG4gKiBib3VuZGFyeS5cbiAqL1xuZnVuY3Rpb24gcmVkYWN0U2VjcmV0cyh0ZXh0OiBzdHJpbmcsIHNwZWM6IFRhcmdldFNwZWMsIHBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmcge1xuICBsZXQgb3V0ID0gdGV4dDtcbiAgZm9yIChjb25zdCBpbnB1dCBvZiBbLi4uc3BlYy5yZXF1aXJlZCwgLi4uc3BlYy5vcHRpb25hbF0pIHtcbiAgICBpZiAoIWlucHV0LnNlY3JldCkgY29udGludWU7XG4gICAgY29uc3QgdmFsdWUgPSBwYXJhbXNbaW5wdXQua2V5XTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPj0gNCkgb3V0ID0gb3V0LnNwbGl0KHZhbHVlKS5qb2luKCcqKionKTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgYHByb3Zpc2lvbmAgY29tbWFuZCDigJQgYW4gQUktYXNzaXN0ZWQgaW5zdGFsbGVyIGZvciB0aGUgUGlwZWxpbmVcbiAqIEJ1aWxkZXIgUExBVEZPUk0gKGxvY2FsL21pbmlrdWJlL0VDMi9FS1MpLiBJdCBwcmludHMgdGhlIGFzc2VtYmxlZCBwbGFuXG4gKiAocHJlcmVxIGNoZWNrcywgTkwtZ29hbCBwYXJzaW5nLCBjb21tYW5kIGFzc2VtYmx5KSBhbmQgdGhlbiBERVBMT1lTLCBnYXRlZCBieVxuICogY29uZmlybWF0aW9uIHByb21wdHMgKGAtLXllc2AgdG8gYXV0by1hY2NlcHQ7IGAtLWpzb25gIGlzIHRoZSBvbmx5IG5vbi1leGVjdXRpbmdcbiAqIG1vZGUsIHByaW50aW5nIHRoZSBwbGFuIGZvciB0b29saW5nKS4gV2l0aCBgLS1yZXBvYCBpdCBjYW4gYm9vdHN0cmFwIGEgZnJlc2hcbiAqIG1hY2hpbmUgYnkgc3BhcnNlbHkgY2xvbmluZyBvbmx5IHRoZSBkZXBsb3kgZm9sZGVycyB0aGUgc2VsZWN0ZWQgdGFyZ2V0ICtcbiAqIG9wdGlvbnMgbmVlZCwgdGhlbiBydW5zIHBvc3QtaW5zdGFsbCBzdGVwcyAocmVnaXN0ZXIgYWRtaW4sIG9wdC1pbiBsb2FkcyxcbiAqIHNtb2tlIHRlc3QsIGN1c3RvbSBjb21tYW5kcykuIGAtLXRlYXJkb3duYCByZW1vdmVzIGEgZGVwbG95bWVudCBpbnN0ZWFkLlxuICpcbiAqIEBwYXJhbSBwcm9ncmFtIC0gVGhlIHJvb3QgQ29tbWFuZGVyIHByb2dyYW0gaW5zdGFuY2UgdG8gYXR0YWNoIHRoZSBjb21tYW5kIHRvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlzaW9uKHByb2dyYW06IENvbW1hbmQpOiB2b2lkIHtcbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKCdwcm92aXNpb24nKVxuICAgIC5kZXNjcmlwdGlvbignQUktYXNzaXN0ZWQgaW5zdGFsbGVyIGZvciB0aGUgcGxhdGZvcm0gKGxvY2FsL21pbmlrdWJlL0VDMi9FS1MpOiBkZXBsb3lzIGl0IChnYXRlZCBieSBjb25maXJtYXRpb24gcHJvbXB0cyksIG9yIC0tdGVhcmRvd24gdG8gcmVtb3ZlJylcbiAgICAub3B0aW9uKCctdCwgLS10YXJnZXQgPHRhcmdldD4nLCBgRGVwbG95IHRhcmdldDogJHtUQVJHRVRfSURTLmpvaW4oJyB8ICcpfWApXG4gICAgLm9wdGlvbignLXAsIC0tcHJvbXB0IDx0ZXh0PicsICdOYXR1cmFsLWxhbmd1YWdlIGdvYWwgKHBhcnNlZCBpbnRvIHBhcmFtcyB3aGVuIGFuIEFJIGtleSBpcyBzZXQpJylcbiAgICAub3B0aW9uKCctLXJlZ2lvbiA8cmVnaW9uPicsICdBV1MgcmVnaW9uIChFQzIvRUtTKScpXG4gICAgLm9wdGlvbignLS1kb21haW4gPGRvbWFpbj4nLCAnRnVsbHktcXVhbGlmaWVkIGRvbWFpbiBuYW1lIChFQzIvRUtTKScpXG4gICAgLm9wdGlvbignLS1ob3N0ZWQtem9uZS1pZCA8aWQ+JywgJ1B1YmxpYyBSb3V0ZSA1MyBob3N0ZWQgem9uZSBJRCAoRUMyL0VLUyknKVxuICAgIC5vcHRpb24oJy0tZGVwbG95LW1vZGUgPG1vZGU+JywgJ3B1YmxpYyB8IHByaXZhdGUgKEVDMi9FS1MpJylcbiAgICAub3B0aW9uKCctLWtleS1wYWlyIDxuYW1lPicsICdFQzIga2V5IHBhaXIgKEVDMiknKVxuICAgIC5vcHRpb24oJy0taW5zdGFuY2UtdHlwZSA8dHlwZT4nLCAnRUMyIGluc3RhbmNlIHR5cGUgKEVDMiknKVxuICAgIC5vcHRpb24oJy0tZ2hjci10b2tlbiA8dG9rZW4+JywgJ0dpdEh1YiBQQVQgKHJlYWQ6cGFja2FnZXMpIOKAlCBtYXNrZWQgaW4gb3V0cHV0JylcbiAgICAub3B0aW9uKCctLWVtYWlsJywgJ0VuYWJsZSBTRVMgdHJhbnNhY3Rpb25hbCBlbWFpbCAob24gYnkgZGVmYXVsdCBmb3IgQVdTKScpXG4gICAgLm9wdGlvbignLS1uby1lbWFpbCcsICdTa2lwIFNFUyAodHJhbnNhY3Rpb25hbCBlbWFpbCBpcyBwcm92aXNpb25lZCBieSBkZWZhdWx0IG9uIEFXUyknKVxuICAgIC5vcHRpb24oJy0tZW1haWwtZnJvbSA8YWRkcj4nLCAnU0VTIEZyb20gYWRkcmVzcycpXG4gICAgLm9wdGlvbignLS1lbWFpbC1mcm9tLW5hbWUgPG5hbWU+JywgJ1NFUyBGcm9tIGRpc3BsYXkgbmFtZScpXG4gICAgLm9wdGlvbignLS1hbGVydC1lbWFpbCA8YWRkcj4nLCAnU3Vic2NyaWJlIGFuIGFkZHJlc3MgdG8gdGhlIGJvdW5jZS9jb21wbGFpbnQgU05TIHRvcGljJylcbiAgICAub3B0aW9uKCctLXNraXAtc2VzLWlkZW50aXR5JywgJ1NraXAgU0VTIGlkZW50aXR5IGNyZWF0aW9uIChkb21haW4gYWxyZWFkeSB2ZXJpZmllZCknKVxuICAgIC5vcHRpb24oJy0tYWktcHJvdmlkZXIgPHByb3ZpZGVyPicsICdBSSBwcm92aWRlciAoYW50aHJvcGljfG9wZW5haXxnb29nbGV8eGFpfGJlZHJvY2spJylcbiAgICAub3B0aW9uKCctLW1vZGVsIDxtb2RlbD4nLCAnQUkgbW9kZWwgaWQnKVxuICAgIC5vcHRpb24oJy0tZGlhZ25vc2UgPGZpbGU+JywgJ0RpYWdub3NlIGEgQ2xvdWRGb3JtYXRpb24vZGVwbG95IGZhaWx1cmUgZnJvbSBhIGZpbGUgKG5lZWRzIGFuIEFJIGtleSknKVxuICAgIC5vcHRpb24oJy15LCAtLXllcycsICdBdXRvLWFjY2VwdCBhbGwgY29uZmlybWF0aW9uIHByb21wdHMgKGZvciBDSSAvIG5vbi1pbnRlcmFjdGl2ZSknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXJldHJpZXMgPG4+JywgJ0F1dG8tZml4ICsgcmV0cnkgYXR0ZW1wdHMgYWZ0ZXIgYSBmYWlsdXJlIChkZXBsb3kgc2NyaXB0cyBhcmUgaWRlbXBvdGVudCknLCAnMScpXG4gICAgLm9wdGlvbignLS10ZWFyZG93bicsICdUZWFyIGRvd24gYW4gZXhpc3RpbmcgZGVwbG95bWVudCBpbnN0ZWFkIG9mIGNyZWF0aW5nIG9uZSAoZ2F0ZWQ7IEFXUyB0YXJnZXRzIHJlcXVpcmUgYSB0eXBlZCBjb25maXJtYXRpb24pJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1zdGFjay1uYW1lIDxuYW1lPicsICdDbG91ZEZvcm1hdGlvbiBzdGFjayBuYW1lIChFQzIpIGZvciB0aGUgZGVwbG95IEFORCB0ZWFyZG93biDigJQgZGVmYXVsdHMgdG8gcGlwZWxpbmUtYnVpbGRlciAoc2V0IGl0IHRvIHJ1biBhIHNlY29uZCBlbnZpcm9ubWVudCknKVxuICAgIC5vcHRpb24oJy0tY2x1c3Rlci1uYW1lIDxuYW1lPicsICdFS1MgY2x1c3RlciBuYW1lIGZvciB0aGUgZGVwbG95IEFORCB0ZWFyZG93biDigJQgZGVmYXVsdHMgdG8gcGlwZWxpbmUtYnVpbGRlcicpXG4gICAgLm9wdGlvbignLS1mb3JjZScsICdTa2lwIHRoZSB0ZWFyZG93biB0eXBlZC1jb25maXJtYXRpb24gKERBTkdFUk9VUyDigJQgZm9yIENJL2F1dG9tYXRpb24gb25seSknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLWluaXQgPG1vZGU+JywgJ1Bvc3QtZGVwbG95IGluaXRpYWxpemF0aW9uOiBhdXRvIChERUZBVUxUIOKAlCByZWdpc3RlciBhZG1pbiArIGxvYWQgcGx1Z2lucy9jb21wbGlhbmNlL3NhbXBsZXM7IG9uIGVjMiB0aGUgaW5zdGFuY2UgZG9lcyBpdCBpdHNlbGYgb24gZmlyc3QgYm9vdCksIG1hbnVhbCAoZG9uXFwndCBzZWxmLWluaXQg4oCUIHN1cmZhY2UgdGhlIHN0ZXAgZm9yIHlvdSB0byBydW4sIGUuZy4gdG8gc2V0IHJlYWwgYWRtaW4gY3JlZHMpLCBvciBza2lwIChkbyBub3RoaW5nKS4gbG9jYWwvbWluaWt1YmUvZWtzIHJ1biBpbml0IHZpYSBwcm92aXNpb24gdW5sZXNzIHNraXAuJylcbiAgICAvLyBEZXByZWNhdGVkIGFsaWFzZXMg4oCUIGtlcHQgd29ya2luZyBmb3IgYmFjay1jb21wYXQ7IC0taW5pdCBpcyB0aGUgZG9jdW1lbnRlZCBmb3JtLlxuICAgIC5vcHRpb24oJy0tbm8taW5pdCcsICdbZGVwcmVjYXRlZF0gYWxpYXMgZm9yIC0taW5pdCBza2lwJylcbiAgICAub3B0aW9uKCctLWF1dG8taW5pdCcsICdbZGVwcmVjYXRlZF0gYWxpYXMgZm9yIC0taW5pdCBhdXRvJylcbiAgICAub3B0aW9uKCctLW5vLWF1dG8taW5pdCcsICdbZGVwcmVjYXRlZF0gYWxpYXMgZm9yIC0taW5pdCBtYW51YWwnKVxuICAgIC8vIEJvb3RzdHJhcCAoc3BhcnNlIGNsb25lKSDigJQgcHJvdmlzaW9uIGEgZnJlc2ggbWFjaGluZSBpbiBvbmUgY29tbWFuZC5cbiAgICAub3B0aW9uKCctLXJlcG8gW3VybF0nLCAnQm9vdHN0cmFwOiBnaXQtY2xvbmUgdGhlIHBsYXRmb3JtIHJlcG8gZmlyc3QgKHNwYXJzZSDigJQgb25seSB0aGUgbmVlZGVkIGRlcGxveSBmb2xkZXJzKSwgdGhlbiBydW4gZnJvbSBpdCAobm8gdmFsdWUgPSB0aGUgdXBzdHJlYW0gZGVmYXVsdCknKVxuICAgIC5vcHRpb24oJy0tcmVmIDxyZWY+JywgJ0dpdCBicmFuY2gvdGFnIHRvIGNoZWNrIG91dCB3aGVuIGJvb3RzdHJhcHBpbmcgKGRlZmF1bHQ6IG1haW4pJylcbiAgICAub3B0aW9uKCctLXdvcmtkaXIgPGRpcj4nLCAnRGlyZWN0b3J5IHRvIGNsb25lIGludG8gLyBydW4gZnJvbSB3aGVuIGJvb3RzdHJhcHBpbmcgKGRlZmF1bHQ6IHBpcGVsaW5lLWJ1aWxkZXIpJylcbiAgICAvLyBQb3N0LWluc3RhbGwgbG9hZHMg4oCUIGVhY2ggb3B0LWluIHN0ZXAgYWxzbyBhZGRzIGl0cyBkZXBsb3kgZm9sZGVyIHRvIHRoZSBzcGFyc2UgY2xvbmUuXG4gICAgLm9wdGlvbignLS13aXRoLXBsdWdpbnMnLCAnUG9zdC1pbnN0YWxsOiBidWlsZCArIGxvYWQgcGx1Z2lucyAoYWRkcyBkZXBsb3kvcGx1Z2lucywgZGVwbG95L2NvZGVidWlsZCknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXdpdGgtY29tcGxpYW5jZScsICdQb3N0LWluc3RhbGw6IGxvYWQgc2FtcGxlIGNvbXBsaWFuY2UgcnVsZXMvcG9saWNpZXMgKGFkZHMgZGVwbG95L2NvbXBsaWFuY2UpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS13aXRoLXNhbXBsZXMnLCAnUG9zdC1pbnN0YWxsOiBsb2FkIHNhbXBsZSBwaXBlbGluZXMgKGFkZHMgZGVwbG95L3NhbXBsZXMpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS13aXRoLWFsbCcsICdQb3N0LWluc3RhbGw6IHBsdWdpbnMgKyBjb21wbGlhbmNlICsgc2FtcGxlcycsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0tYnVpbGQtYm9vdHN0cmFwJywgJ0J1aWxkICsgcHVibGlzaCB0aGUgQ29kZUJ1aWxkIGJvb3RzdHJhcCBpbWFnZSBkdXJpbmcgcmVnaXN0ZXIgKGFkZHMgZGVwbG95L2NvZGVidWlsZCknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXdpdGgtc21va2UtdGVzdCcsICdQb3N0LWluc3RhbGw6IHJlYWQtb25seSBBUEkgcmVhY2hhYmlsaXR5IGNoZWNrJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS13aXRoLWV2ZW50cycsICdQb3N0LWluc3RhbGwgKEFXUyk6IGV2ZW50IGluZ2VzdGlvbiBidW5kbGUg4oCUIHN0b3JlLXRva2VuIChKV1Qg4oaSIFNlY3JldHMgTWFuYWdlcikgdGhlbiBzZXR1cC1ldmVudHMgKEV2ZW50QnJpZGdlL0xhbWJkYSknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXBvc3Qtc3RlcCA8Y21kPicsICdSdW4gYW4gZXh0cmEgY29tbWFuZCBhZnRlciB0aGUgbG9hZHMgKHJlcGVhdGFibGUsIGluIG9yZGVyKScsIGNvbGxlY3RTdGVwLCBbXSlcbiAgICAub3B0aW9uKCctLWFkbWluLWVtYWlsIDxhZGRyPicsICdBZG1pbiBlbWFpbCBmb3Igbm9uLWludGVyYWN0aXZlIHJlZ2lzdGVyIChzZXRzIFBMQVRGT1JNX0lERU5USUZJRVIpJylcbiAgICAub3B0aW9uKCctLWFkbWluLXBhc3N3b3JkIDxwdz4nLCAnQWRtaW4gcGFzc3dvcmQgZm9yIG5vbi1pbnRlcmFjdGl2ZSByZWdpc3RlciAoc2V0cyBQTEFURk9STV9QQVNTV09SRCknKVxuICAgIC5vcHRpb24oJy0tanNvbicsICdQcmludCB0aGUgcGxhbiBhcyBKU09OIGFuZCBleGl0IFdJVEhPVVQgcnVubmluZyAodGhlIG9ubHkgbm9uLWV4ZWN1dGluZyBtb2RlIOKAlCBmb3IgdG9vbGluZy9DSSBpbnNwZWN0aW9uKScsIGZhbHNlKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdQcm92aXNpb24nKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gUmVzb2x2ZSB0aGUgc2luZ2xlIHBvc3QtZGVwbG95IGluaXQgbW9kZSAoYXV0b3xtYW51YWx8c2tpcCkgZnJvbSAtLWluaXQgb3IgaXRzXG4gICAgICAgIC8vIGRlcHJlY2F0ZWQgYWxpYXNlcy4gVHdvIGludGVybmFsIHNpZ25hbHMgZGVyaXZlIGZyb20gaXQ6IHdoZXRoZXIgaW5pdCBoYXBwZW5zIGF0XG4gICAgICAgIC8vIGFsbCwgYW5kIHdoZXRoZXIgdGhlIERFUExPWSBzZWxmLXJ1bnMgaXQgKHZzLiB3ZSBzdXJmYWNlIGl0KS5cbiAgICAgICAgY29uc3QgaW5pdE1vZGUgPSByZXNvbHZlSW5pdE1vZGUob3B0aW9ucyk7XG4gICAgICAgIGlmIChpbml0TW9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHByaW50RXJyb3IoYEludmFsaWQgLS1pbml0IHZhbHVlICcke1N0cmluZyhvcHRpb25zLmluaXQpfScuIFVzZSBvbmUgb2Y6ICR7SU5JVF9NT0RFUy5qb2luKCcgfCAnKX0uYCk7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluaXRFbmFibGVkID0gaW5pdE1vZGUgIT09ICdza2lwJzsgLy8gc2tpcCDihpIgbm8gcmVnaXN0ZXIvbG9hZHMgYXQgYWxsXG4gICAgICAgIGNvbnN0IHNlbGZJbml0ID0gaW5pdE1vZGUgPT09ICdhdXRvJzsgLy8gYXV0byDihpIgdGhlIGRlcGxveSBpbml0aWFsaXplcyBpdHNlbGZcblxuICAgICAgICAvLyAxLiBBc3NlbWJsZSBwYXJhbXMgZnJvbSBleHBsaWNpdCBmbGFncyAoZmxhZ3MgYWx3YXlzIHdpbiBvdmVyIE5MIHBhcnNlKS5cbiAgICAgICAgY29uc3QgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgICAgICByZWdpb246IG9wdGlvbnMucmVnaW9uLFxuICAgICAgICAgIGRvbWFpbjogb3B0aW9ucy5kb21haW4sXG4gICAgICAgICAgaG9zdGVkWm9uZUlkOiBvcHRpb25zLmhvc3RlZFpvbmVJZCxcbiAgICAgICAgICBkZXBsb3lNb2RlOiBvcHRpb25zLmRlcGxveU1vZGUsXG4gICAgICAgICAga2V5UGFpcjogb3B0aW9ucy5rZXlQYWlyLFxuICAgICAgICAgIGluc3RhbmNlVHlwZTogb3B0aW9ucy5pbnN0YW5jZVR5cGUsXG4gICAgICAgICAgLy8gRGVwbG95LXRpbWUgcmVzb3VyY2UgaWRlbnRpdHk6IGVjMiBlbWl0cyAtLXN0YWNrLW5hbWUgKGtleSBzdGFja05hbWUpLCBla3MgZW1pdHNcbiAgICAgICAgICAvLyAtLWNsdXN0ZXItbmFtZSAoa2V5IGNsdXN0ZXJOYW1lKS4gQm90aCBhbHNvIGRyaXZlIHRlYXJkb3duLiBVbmRlZmluZWQg4oaSIGRlZmF1bHRzLlxuICAgICAgICAgIHN0YWNrTmFtZTogb3B0aW9ucy5zdGFja05hbWUsXG4gICAgICAgICAgY2x1c3Rlck5hbWU6IG9wdGlvbnMuY2x1c3Rlck5hbWUsXG4gICAgICAgICAgZ2hjclRva2VuOiBvcHRpb25zLmdoY3JUb2tlbixcbiAgICAgICAgICAvLyBlbWFpbC9ub0VtYWlsIGFyZSBjb2VyY2VkIEFGVEVSIHRoZSBOTCBtZXJnZSBiZWxvdyDigJQgcGFyc2VHb2FsIGNhbiByZXR1cm5cbiAgICAgICAgICAvLyBgZW1haWxgLCBzbyBwcmUtY29lcmNpbmcgaGVyZSAobmV2ZXItdW5kZWZpbmVkKSB3b3VsZCBsZXQgdGhlIG1lcmdlJ3NcbiAgICAgICAgICAvLyBgPT09IHVuZGVmaW5lZGAgZ3VhcmQgc2lsZW50bHkgZHJvcCBhbiBBSS1wYXJzZWQgZW1haWwgY2hvaWNlLiBMZWZ0IG91dCBvZlxuICAgICAgICAgIC8vIHRoaXMgbGl0ZXJhbCBvbiBwdXJwb3NlOyByZXNvbHZlZCBhIGZldyBsaW5lcyBkb3duLlxuICAgICAgICAgIGVtYWlsRnJvbTogb3B0aW9ucy5lbWFpbEZyb20sXG4gICAgICAgICAgZW1haWxGcm9tTmFtZTogb3B0aW9ucy5lbWFpbEZyb21OYW1lLFxuICAgICAgICAgIGFsZXJ0RW1haWw6IG9wdGlvbnMuYWxlcnRFbWFpbCxcbiAgICAgICAgICBub0NyZWF0ZVNlc0lkZW50aXR5OiBvcHRpb25zLnNraXBTZXNJZGVudGl0eSxcbiAgICAgICAgICAvLyBUaGUgQVdTIGRlcGxveXMgc2VsZi1pbml0IGJ5IGRlZmF1bHQgKGVjMiBvbiBmaXJzdCBib290LCBla3MgaW4gc2V0dXAuc2gncyBmaW5hbFxuICAgICAgICAgIC8vIHBoYXNlKSwgc28gd2UgZW1pdCB0aGUgbG9hZC1iZWFyaW5nIGAtLW5vLWF1dG8taW5pdGAgd2hlbiB0aGUgbW9kZSBpcyBOT1QgYXV0b1xuICAgICAgICAgIC8vIChtYW51YWwvc2tpcCA9IFwiZG9uJ3QgbGV0IHRoZSBkZXBsb3kgaW5pdCBpdHNlbGZcIikuIGAtLWF1dG8taW5pdGAgKGEgbm8tb3AgcmVhZmZpcm0pXG4gICAgICAgICAgLy8gaXMgbmV2ZXIgZW1pdHRlZC4gT25seSBlYzIvZWtzIGNhcnJ5IHRoZXNlIGZsYWdzIGluIHRoZWlyIHNwZWM7IG90aGVyIHRhcmdldHMgaWdub3JlIGl0LlxuICAgICAgICAgIG5vQXV0b0luaXQ6ICFzZWxmSW5pdCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYWlPcHRzID0geyBwcm92aWRlcjogb3B0aW9ucy5haVByb3ZpZGVyLCBtb2RlbDogb3B0aW9ucy5tb2RlbCB9O1xuXG4gICAgICAgIC8vIEJvb3RzdHJhcCAoc3BhcnNlIGNsb25lKSArIHBvc3QtaW5zdGFsbCBzZWxlY3Rpb25zLlxuICAgICAgICBjb25zdCB3YW50Qm9vdHN0cmFwID0gb3B0aW9ucy5yZXBvICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5yZXBvICE9PSBmYWxzZTtcbiAgICAgICAgY29uc3Qgd2l0aEFsbCA9IG9wdGlvbnMud2l0aEFsbCA9PT0gdHJ1ZTtcbiAgICAgICAgY29uc3QgYW55TG9hZEZsYWcgPSB3aXRoQWxsIHx8IExPQURfU1RFUFMuc29tZSgocykgPT4gb3B0aW9uc1tzLmZsYWddID09PSB0cnVlKTtcbiAgICAgICAgbGV0IGVuYWJsZWRMb2FkSWRzOiBzdHJpbmdbXSA9IExPQURfU1RFUFMuZmlsdGVyKChzKSA9PiB3aXRoQWxsIHx8IG9wdGlvbnNbcy5mbGFnXSA9PT0gdHJ1ZSkubWFwKChzKSA9PiBzLmlkKTtcbiAgICAgICAgLy8gV2l0aCBubyAtLXdpdGgtKiBmbGFncywgYW4gaW50ZXJhY3RpdmUgcnVuIG9mZmVycyBlYWNoIGxvYWQg4oCUIGJ1dCBBRlRFUiB0aGVcbiAgICAgICAgLy8gY2xvbmUsIHNvIHRoZSBxdWVzdGlvbnMgY29tZSBvbmNlIHlvdSd2ZSBhZ3JlZWQgdG8gcHJvY2VlZCAobm90IHVwIGZyb250KS5cbiAgICAgICAgLy8gRWFjaCBwaWNrZWQgbG9hZCdzIGZvbGRlciBpcyB0aGVuIGZldGNoZWQgdmlhIGFuIGFkZGl0aXZlIHNwYXJzZSByZS1zeW5jLlxuICAgICAgICAvLyBGbGFncyAvIC0teWVzIC8gLS1qc29uIC8gbm9uLWludGVyYWN0aXZlIHNoZWxscyBza2lwIHRoZSBwcm9tcHRzLlxuICAgICAgICBsZXQgd2lsbFByb21wdExvYWRzID0gIW9wdGlvbnMueWVzICYmICFvcHRpb25zLmpzb24gJiYgQm9vbGVhbihwcm9jZXNzLnN0ZGluLmlzVFRZKSAmJiAhYW55TG9hZEZsYWc7XG4gICAgICAgIGNvbnN0IHBvc3RTdGVwRmxhZ3MgPSB7XG4gICAgICAgICAgaW5pdDogaW5pdEVuYWJsZWQsXG4gICAgICAgICAgLy8gc2VsZkluaXQgKG1vZGUgYXV0bykgZHJvcHMgdGhlIHN1cmZhY2VkIHJlZ2lzdGVyIHN0ZXAgb24gdGhlIEFXUyB0YXJnZXRzIGluXG4gICAgICAgICAgLy8gcmVzb2x2ZVBvc3RTdGVwcywgc28gYSBzZWxmLWluaXRpYWxpemluZyBlYzIvZWtzIGRlcGxveSBkb2Vzbid0IGFsc28gcHJpbnQgYSBtYW51YWxcbiAgICAgICAgICAvLyByZWdpc3RlciBzdGVwLiBGb3IgbWFudWFsIG1vZGUgKG9yIGxvY2FsL21pbmlrdWJlKSB0aGUgcmVnaXN0ZXIgc3RlcCBpcyBzdXJmYWNlZC5cbiAgICAgICAgICBhdXRvSW5pdDogc2VsZkluaXQsXG4gICAgICAgICAgYnVpbGRCb290c3RyYXA6IG9wdGlvbnMuYnVpbGRCb290c3RyYXAgPT09IHRydWUgfHwgZW5hYmxlZExvYWRJZHMuaW5jbHVkZXMoJ3BsdWdpbnMnKSxcbiAgICAgICAgICBzbW9rZVRlc3Q6IG9wdGlvbnMud2l0aFNtb2tlVGVzdCA9PT0gdHJ1ZSxcbiAgICAgICAgICBldmVudHM6IG9wdGlvbnMud2l0aEV2ZW50cyA9PT0gdHJ1ZSxcbiAgICAgICAgICBzdGVwczogKG9wdGlvbnMucG9zdFN0ZXAgPz8gW10pIGFzIHN0cmluZ1tdLFxuICAgICAgICB9O1xuICAgICAgICAvLyBBZG1pbiBjcmVkZW50aWFscyBmb3J3YXJkZWQgYXMgZW52IHNvIHJlZ2lzdGVyIHJ1bnMgbm9uLWludGVyYWN0aXZlbHkuXG4gICAgICAgIGNvbnN0IGFkbWluRW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hZG1pbkVtYWlsID09PSAnc3RyaW5nJykgYWRtaW5FbnYuUExBVEZPUk1fSURFTlRJRklFUiA9IG9wdGlvbnMuYWRtaW5FbWFpbDtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmFkbWluUGFzc3dvcmQgPT09ICdzdHJpbmcnKSBhZG1pbkVudi5QTEFURk9STV9QQVNTV09SRCA9IG9wdGlvbnMuYWRtaW5QYXNzd29yZDtcblxuICAgICAgICAvLyAyLiBPcHRpb25hbGx5IHBhcnNlIGEgbmF0dXJhbC1sYW5ndWFnZSBnb2FsIHRvIGZpbGwgYW55IEdBUFMgKGJlc3QtZWZmb3J0KS5cbiAgICAgICAgbGV0IHRhcmdldDogVGFyZ2V0SWQgfCB1bmRlZmluZWQgPSBpc1RhcmdldElkKG9wdGlvbnMudGFyZ2V0KSA/IG9wdGlvbnMudGFyZ2V0IDogdW5kZWZpbmVkO1xuICAgICAgICBpZiAob3B0aW9ucy5wcm9tcHQpIHtcbiAgICAgICAgICBpZiAoaXNBaUNvbmZpZ3VyZWQoYWlPcHRzKSkge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gYXdhaXQgcGFyc2VHb2FsKG9wdGlvbnMucHJvbXB0LCBhaU9wdHMpO1xuICAgICAgICAgICAgaWYgKHBhcnNlZCkge1xuICAgICAgICAgICAgICBpZiAoIXRhcmdldCAmJiBpc1RhcmdldElkKHBhcnNlZC50YXJnZXQpKSB0YXJnZXQgPSBwYXJzZWQudGFyZ2V0O1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhwYXJzZWQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGsgIT09ICd0YXJnZXQnICYmIHBhcmFtc1trXSA9PT0gdW5kZWZpbmVkICYmIHYgIT09IHVuZGVmaW5lZCkgcGFyYW1zW2tdID0gdjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoIW9wdGlvbnMuanNvbikge1xuICAgICAgICAgICAgLy8gRG9uJ3QgcHJpbnQgaHVtYW4gdGV4dCBiZWZvcmUgYSAtLWpzb24gcGxhbiAoaXQgd291bGQgY29ycnVwdCB0aGUgc3RyZWFtKS5cbiAgICAgICAgICAgIHByaW50V2FybmluZygnQSAtLXByb21wdCB3YXMgZ2l2ZW4gYnV0IG5vIEFJIGtleSBpcyBzZXQg4oCUIGlnbm9yaW5nIGl0IGFuZCB1c2luZyBmbGFncyBvbmx5LiBTZXQgQU5USFJPUElDX0FQSV9LRVkgKG9yIC0tYWktcHJvdmlkZXIgKyBpdHMga2V5KS4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXNvbHZlIGVtYWlsIE5PVyAoYWZ0ZXIgdGhlIE5MIG1lcmdlKTogYW4gZXhwbGljaXQgLS1lbWFpbC8tLW5vLWVtYWlsIGZsYWcgd2lucyxcbiAgICAgICAgLy8gZWxzZSBhbiBBSS1wYXJzZWQgYGVtYWlsYCAobWVyZ2VkIGludG8gcGFyYW1zLmVtYWlsIGFib3ZlKSBkZWNpZGVzLCBlbHNlIGRlZmF1bHQtb24uXG4gICAgICAgIC8vIENvZXJjZSB0byB0aGUgdHdvIGxvYWQtYmVhcmluZyBrZXlzIGFzc2VtYmxlQ29tbWFuZCBlbWl0cy5cbiAgICAgICAgY29uc3QgZW1haWxDaG9pY2UgPSBvcHRpb25zLmVtYWlsICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IG9wdGlvbnMuZW1haWxcbiAgICAgICAgICA6ICh0eXBlb2YgcGFyYW1zLmVtYWlsID09PSAnYm9vbGVhbicgPyBwYXJhbXMuZW1haWwgOiB1bmRlZmluZWQpO1xuICAgICAgICBwYXJhbXMuZW1haWwgPSBlbWFpbENob2ljZSA9PT0gdHJ1ZTtcbiAgICAgICAgcGFyYW1zLm5vRW1haWwgPSBlbWFpbENob2ljZSA9PT0gZmFsc2U7XG5cbiAgICAgICAgLy8gMy4gT3B0aW9uYWwgZmFpbHVyZSBkaWFnbm9zaXMgKGluZGVwZW5kZW50IG9mIGEgZGVwbG95IHBsYW4pLlxuICAgICAgICBpZiAob3B0aW9ucy5kaWFnbm9zZSkge1xuICAgICAgICAgIGxldCBmYWlsdXJlVGV4dDogc3RyaW5nO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmYWlsdXJlVGV4dCA9IHJlYWRGaWxlU3luYyhvcHRpb25zLmRpYWdub3NlLCAndXRmLTgnKTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHByaW50RXJyb3IoYENhbm5vdCByZWFkIC0tZGlhZ25vc2UgZmlsZTogJHtvcHRpb25zLmRpYWdub3NlfWApO1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGRpYWdub3NpcyA9IGlzQWlDb25maWd1cmVkKGFpT3B0cykgPyBhd2FpdCBkaWFnbm9zZUZhaWx1cmUoZmFpbHVyZVRleHQsIGFpT3B0cykgOiBudWxsO1xuICAgICAgICAgIC8vIFdpdGggLS1qc29uLCB0aGUgZGlhZ25vc2lzIElTIHRoZSBtYWNoaW5lLXJlYWRhYmxlIG91dHB1dCDigJQgZW1pdCBpdFxuICAgICAgICAgIC8vIGFsb25lIChkb24ndCBhbHNvIHByaW50IHRleHQsIHdoaWNoIHdvdWxkIGNvcnJ1cHQgdGhlIEpTT04gc3RyZWFtKS5cbiAgICAgICAgICBpZiAob3B0aW9ucy5qc29uKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7IHN1Y2Nlc3M6IHRydWUsIGV4ZWN1dGlvbklkLCBkaWFnbm9zaXMgfSwgbnVsbCwgMikpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGlhZ25vc2lzKSB7XG4gICAgICAgICAgICBwcmludFNlY3Rpb24oJ0ZhaWx1cmUgZGlhZ25vc2lzJyk7XG4gICAgICAgICAgICBwcmludEluZm8oZGlhZ25vc2lzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKCdEaWFnbm9zaXMgdW5hdmFpbGFibGUgKG5vIEFJIGtleSBjb25maWd1cmVkIG9yIHRoZSBtb2RlbCBjb3VsZCBub3QgYmUgcmVhY2hlZCkuJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIC0tZGlhZ25vc2UgaXMgYSByZWFkLW9ubHkgaW5zcGVjdGlvbiBtb2RlOiByZXR1cm4gd2hldGhlciBvciBub3QgYSB0YXJnZXQgd2FzXG4gICAgICAgICAgLy8gZ2l2ZW4sIHNvIGl0IG5ldmVyIGZhbGxzIHRocm91Z2ggaW50byBhIChwb3NzaWJseSAtLXllcykgZGVwbG95LlxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdpdGggYC0taW5pdCBhdXRvYCAodGhlIGRlZmF1bHQpIHRoZSBFQzIgaW5zdGFuY2UgbG9hZHMgcGx1Z2lucy9jb21wbGlhbmNlL3NhbXBsZXNcbiAgICAgICAgLy8gaXRzZWxmIG9uIHRoZSBib3ggKGJvb3RzdHJhcC5zaCBoYXJkY29kZXMgTE9BRF8qPXkpLCBzbyB0aGUgbG9jYWwgbG9hZCBwaWNrZXIg4oCUIGFuZFxuICAgICAgICAvLyB0aGUgbG9hZC1mb2xkZXIgZmV0Y2ggaXQgdHJpZ2dlcnMg4oCUIGlzIHBvaW50bGVzcy4gU2tpcCBib3RoICh0aGUgaW5zdGFuY2UgaGFzIGl0c1xuICAgICAgICAvLyBvd24gY2hlY2tvdXQpLlxuICAgICAgICBpZiAoc2VsZkluaXQgJiYgdGFyZ2V0ID09PSAnZWMyJykge1xuICAgICAgICAgIHdpbGxQcm9tcHRMb2FkcyA9IGZhbHNlO1xuICAgICAgICAgIGVuYWJsZWRMb2FkSWRzID0gW107XG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZkluaXQgJiYgdGFyZ2V0ID09PSAnZWtzJyAmJiAhYW55TG9hZEZsYWcpIHtcbiAgICAgICAgICAvLyBgLS1pbml0IGF1dG9gIG9uIGVrcyBpbml0aWFsaXplcyBsaWtlIGVjMjogTk8gaW50ZXJhY3RpdmUgcGlja2VyIOKAlCBkZWZhdWx0IHRvXG4gICAgICAgICAgLy8gbG9hZGluZyBBTEwgb2YgcGx1Z2lucyArIGNvbXBsaWFuY2UgKyBzYW1wbGVzIChzZXR1cC5zaCdzIGZpbmFsIHBoYXNlIGhhcmRjb2Rlc1xuICAgICAgICAgIC8vIExPQURfKj15KS4gc2V0dXAuc2ggcnVucyB0aGUgbG9hZHMgaXRzZWxmIChvdmVyIGEga3ViZWN0bCBwb3J0LWZvcndhcmQpLCBidXQgd2VcbiAgICAgICAgICAvLyBzdGlsbCByZXNvbHZlIHRoZW0gaGVyZSBzbyB0aGUgc3BhcnNlIGNsb25lIGZldGNoZXMgdGhlIGZvbGRlcnMgc2V0dXAuc2ggYnVpbGRzXG4gICAgICAgICAgLy8gZnJvbS4gRXhwbGljaXQgYC0td2l0aC0qYCBmbGFncyBvdmVycmlkZTsgYC0taW5pdCBtYW51YWxgIC8gYC0taW5pdCBza2lwYCBvcHQgb3V0LlxuICAgICAgICAgIHdpbGxQcm9tcHRMb2FkcyA9IGZhbHNlO1xuICAgICAgICAgIGVuYWJsZWRMb2FkSWRzID0gTE9BRF9TVEVQUy5tYXAoKHMpID0+IHMuaWQpO1xuICAgICAgICAgIHBvc3RTdGVwRmxhZ3MuYnVpbGRCb290c3RyYXAgPSBvcHRpb25zLmJ1aWxkQm9vdHN0cmFwID09PSB0cnVlIHx8IGVuYWJsZWRMb2FkSWRzLmluY2x1ZGVzKCdwbHVnaW5zJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbWluaWt1YmUvbG9jYWwga2VlcCB0aGUgaW50ZXJhY3RpdmUgcGlja2VyIChsb2NhbC1kZXY7IG5vIGAtLWluaXQgYXV0b2AgbG9hZCBwYXJpdHkpLlxuXG4gICAgICAgIC8vIDQuIE5lZWQgYSB0YXJnZXQgdG8gYXNzZW1ibGUgYSBwbGFuLlxuICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgIHByaW50RXJyb3IoYE5vIHRhcmdldCBzcGVjaWZpZWQuIFBhc3MgLS10YXJnZXQgPCR7VEFSR0VUX0lEUy5qb2luKCd8Jyl9PiBvciBkZXNjcmliZSB0aGUgZ29hbCB3aXRoIC0tcHJvbXB0LmApO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNwZWMgPSBUQVJHRVRTW3RhcmdldF07XG4gICAgICAgIGxldCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gICAgICAgIC8vIDRiLiBUZWFyZG93biBtb2RlIOKAlCB0aGUgZGVzdHJveSBjb3VudGVycGFydCBvZiBwcm92aXNpb25pbmcgKHNlZSBydW5UZWFyZG93bikuXG4gICAgICAgIGlmIChvcHRpb25zLnRlYXJkb3duKSB7XG4gICAgICAgICAgYXdhaXQgcnVuVGVhcmRvd24oc3BlYywgdGFyZ2V0LCBjd2QsIGV4ZWN1dGlvbklkLCBvcHRpb25zKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNYWtlIHByZXZpb3VzbHktZmV0Y2hlZCBzaW5nbGUtYmluYXJ5IHRvb2xzIChlLmcuIHlxKSB2aXNpYmxlIHRvIHRoZVxuICAgICAgICAvLyBwcmVyZXEgY2hlY2tzICsgdGhlIGRlcGxveSDigJQgdGhleSBsaXZlIGluIHRoZSB0b29scyBjYWNoZSwgbm90IG9uIHRoZVxuICAgICAgICAvLyBzeXN0ZW0gUEFUSC4gKEJvdGggYGhhcygpYCBhbmQgdGhlIGRlcGxveSdzIGBiYXNoIC1sY2AgaW5oZXJpdCB0aGlzLilcbiAgICAgICAgd2l0aFRvb2xzT25QYXRoKCk7XG4gICAgICAgIC8vIEhhcmQtcmVxdWlyZSBwbHVnaW4gcHJlcmVxcyAoZS5nLiB5cSBvbiBtaW5pa3ViZSkgb25seSB3aGVuIHBsdWdpbnMgaXMgRVhQTElDSVRMWVxuICAgICAgICAvLyBzZWxlY3RlZCDigJQgTk9UIG9uIHRoZSB3aWxsUHJvbXB0TG9hZHMgZ3Vlc3MsIHdoaWNoIHdvdWxkIGJsb2NrL3Byb21wdCBiZWZvcmUgdGhlXG4gICAgICAgIC8vIHVzZXIgaGFzIGV2ZW4gYmVlbiBhc2tlZCB3aGV0aGVyIHRoZXkgd2FudCBwbHVnaW5zLiBJZiB0aGV5IHBpY2sgcGx1Z2lucyBpbiB0aGVcbiAgICAgICAgLy8gaW50ZXJhY3RpdmUgcHJvbXB0LCB3ZSByZS1jaGVjayArIG9mZmVyIHRvIGZldGNoIHJpZ2h0IGFmdGVyIHRoYXQgc2VsZWN0aW9uIChiZWxvdykuXG4gICAgICAgIGxldCBwcmVyZXFzID0gY2hlY2tQcmVyZXFzKHRhcmdldCwgeyBib290c3RyYXA6IHdhbnRCb290c3RyYXAsIHdpdGhQbHVnaW5zOiBlbmFibGVkTG9hZElkcy5pbmNsdWRlcygncGx1Z2lucycpIH0pO1xuICAgICAgICBjb25zdCB7IGNvbW1hbmQsIG1pc3NpbmcgfSA9IGFzc2VtYmxlQ29tbWFuZChzcGVjLCBwYXJhbXMpO1xuICAgICAgICBjb25zdCB1cmwgPSBkZXJpdmVIZWFsdGhVcmwodGFyZ2V0LCBwYXJhbXMpO1xuXG4gICAgICAgIC8vIFNwYXJzZSBib290c3RyYXAgY2xvbmUgY29tbWFuZCAoY29tbW9uIGJhc2UgKyB0YXJnZXQgKyBzZWxlY3RlZCBsb2FkcykuXG4gICAgICAgIC8vIEludGVyYWN0aXZlIGxvYWRzIGFyZSBjaG9zZW4gQUZURVIgdGhlIGNsb25lLCBzbyB0aGUgY2xvbmUgc3RheXMgbWluaW1hbCDigJRcbiAgICAgICAgLy8gZWFjaCBwaWNrZWQgbG9hZCdzIGZvbGRlciBpcyBmZXRjaGVkIHRoZW4gdmlhIGFuIGFkZGl0aXZlIHNwYXJzZSByZS1zeW5jLlxuICAgICAgICBjb25zdCBzcGFyc2VQYXRocyA9IHNwYXJzZVBhdGhzRm9yKHRhcmdldCwgZW5hYmxlZExvYWRJZHMpO1xuICAgICAgICBjb25zdCBib290c3RyYXAgPSByZXNvbHZlQm9vdHN0cmFwKFxuICAgICAgICAgIHsgcmVwbzogdHlwZW9mIG9wdGlvbnMucmVwbyA9PT0gJ3N0cmluZycgPyBvcHRpb25zLnJlcG8gOiB1bmRlZmluZWQsIHJlZjogb3B0aW9ucy5yZWYsIHdvcmtkaXI6IG9wdGlvbnMud29ya2RpciwgZnVsbDogIWdpdFN1cHBvcnRzU3BhcnNlQ2hlY2tvdXQoKSB9LFxuICAgICAgICAgIHNwYXJzZVBhdGhzLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBib290c3RyYXBDbWQgPSB3YW50Qm9vdHN0cmFwID8gYm9vdHN0cmFwQ29tbWFuZChib290c3RyYXApIDogbnVsbDtcblxuICAgICAgICAvLyBSZXNvbHZlIHBvc3QtaW5zdGFsbCBzdGVwcyAocmVnaXN0ZXIg4oaSIHNtb2tlIOKGkiBldmVudHMg4oaSIGN1c3RvbSkuIFJlLXJlc29sdmVkXG4gICAgICAgIC8vIGFmdGVyIHRoZSBwb3N0LWNsb25lIGxvYWQgcHJvbXB0cyAoc2VlIGJlbG93KSB3aGVuIHRob3NlIHJ1biBpbnRlcmFjdGl2ZWx5LlxuICAgICAgICBsZXQgeyBzdGVwczogcG9zdFN0ZXBzLCBza2lwcGVkOiBza2lwcGVkU3RlcHMgfSA9IHJlc29sdmVQb3N0U3RlcHMoe1xuICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgcmVnaW9uOiB0eXBlb2YgcGFyYW1zLnJlZ2lvbiA9PT0gJ3N0cmluZycgPyBwYXJhbXMucmVnaW9uIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGVuYWJsZWRMb2FkSWRzLFxuICAgICAgICAgIC4uLnBvc3RTdGVwRmxhZ3MsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmpzb24pIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBwcmVyZXFzLFxuICAgICAgICAgICAgcHJlcmVxc1NhdGlzZmllZDogcHJlcmVxc1NhdGlzZmllZChwcmVyZXFzKSxcbiAgICAgICAgICAgIG1pc3NpbmdJbnB1dHM6IG1pc3NpbmcubWFwKChtKSA9PiAoeyBmbGFnOiBtLmZsYWcsIGRlc2NyaXB0aW9uOiBtLmRlc2NyaXB0aW9uIH0pKSxcbiAgICAgICAgICAgIGJvb3RzdHJhcDogYm9vdHN0cmFwQ21kLFxuICAgICAgICAgICAgc3BhcnNlUGF0aHM6IHdhbnRCb290c3RyYXAgPyBzcGFyc2VQYXRocyA6IG51bGwsXG4gICAgICAgICAgICBjb21tYW5kLFxuICAgICAgICAgICAgcG9zdFN0ZXBzOiBwb3N0U3RlcHMubWFwKChzKSA9PiAoeyBpZDogcy5pZCwgbGFiZWw6IHMubGFiZWwsIGNvbW1hbmQ6IHMuY29tbWFuZCB9KSksXG4gICAgICAgICAgICBza2lwcGVkUG9zdFN0ZXBzOiBza2lwcGVkU3RlcHMsXG4gICAgICAgICAgfSwgbnVsbCwgMikpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDUuIFByaW50IHRoZSBwbGFuIChzaG93biBiZWZvcmUgdGhlIGdhdGVkIGV4ZWN1dGlvbiBiZWxvdykuXG4gICAgICAgIHByaW50U2VjdGlvbihgUHJvdmlzaW9uIHBsYW4g4oCUICR7c3BlYy5sYWJlbH1gKTtcbiAgICAgICAgcHJpbnRLZXlWYWx1ZSh7ICdUYXJnZXQnOiB0YXJnZXQsICdCZXN0IGZvcic6IHNwZWMuYmVzdEZvciwgJ0Nvc3QnOiBzcGVjLmNvc3QgfSk7XG5cbiAgICAgICAgcHJpbnRTZWN0aW9uKCdQcmVyZXF1aXNpdGVzJyk7XG4gICAgICAgIGZvciAoY29uc3QgYyBvZiBwcmVyZXFzKSBwcmludEluZm8oYCR7Yy5vayA/ICfinJMnIDogJ+Kclyd9ICR7Yy5uYW1lfSDigJQgJHtjLmRldGFpbH1gKTtcbiAgICAgICAgaWYgKCFwcmVyZXFzU2F0aXNmaWVkKHByZXJlcXMpKSBwcmludFdhcm5pbmcoJ1Jlc29sdmUgdGhlIGZhaWxpbmcgcHJlcmVxdWlzaXRlcyBhYm92ZSBiZWZvcmUgZGVwbG95aW5nLicpO1xuXG4gICAgICAgIGlmIChtaXNzaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ01pc3NpbmcgcmVxdWlyZWQgaW5wdXRzJyk7XG4gICAgICAgICAgZm9yIChjb25zdCBtIG9mIG1pc3NpbmcpIHByaW50SW5mbyhgICAtLSR7bS5mbGFnfSAgKCR7bS5kZXNjcmlwdGlvbn0pYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYm9vdHN0cmFwQ21kKSB7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdCb290c3RyYXAgKHNwYXJzZSBnaXQgY2xvbmUsIHJ1bnMgZmlyc3QpJyk7XG4gICAgICAgICAgcHJpbnRJbmZvKGBDbG9uZSAke2Jvb3RzdHJhcC5yZXBvfSBAICR7Ym9vdHN0cmFwLnJlZn0g4oaSICR7Ym9vdHN0cmFwLndvcmtkaXJ9OyBmb2xkZXJzOiAke3NwYXJzZVBhdGhzLmpvaW4oJywgJyl9YCk7XG4gICAgICAgICAgcHJpbnRJbmZvKGJvb3RzdHJhcENtZCk7XG4gICAgICAgIH1cblxuICAgICAgICBwcmludFNlY3Rpb24oJ0NvbW1hbmQgdG8gcnVuJyk7XG4gICAgICAgIHByaW50SW5mbyhjb21tYW5kKTtcblxuICAgICAgICBpZiAocG9zdFN0ZXBzLmxlbmd0aCA+IDAgfHwgc2tpcHBlZFN0ZXBzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ1Bvc3QtaW5zdGFsbCBzdGVwcycpO1xuICAgICAgICAgIGZvciAoY29uc3QgcyBvZiBwb3N0U3RlcHMpIHByaW50SW5mbyhg4oCiICR7cy5sYWJlbH1cXG4gICAgJHtzLmNvbW1hbmR9YCk7XG4gICAgICAgICAgZm9yIChjb25zdCBzIG9mIHNraXBwZWRTdGVwcykgcHJpbnRXYXJuaW5nKGBTa2lwcGVkICR7cy5pZH06ICR7cy5yZWFzb259YCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyA2LiBBbnkgbWlzc2luZyByZXF1aXJlZCBwcmVyZXEgdGhhdCdzIGEgc2luZ2xlIHN0YXRpYyBiaW5hcnkgKGUuZy4geXEpXG4gICAgICAgIC8vIGNhbiBiZSBmZXRjaGVkIGludG8gdGhlIHRvb2xzIGNhY2hlIGluc3RlYWQgb2YgYSBzeXN0ZW0gaW5zdGFsbCDigJQgbm9cbiAgICAgICAgLy8gYnJldy9hcHQuIE9mZmVyIGl0LCB0aGVuIHJlLWNoZWNrICh0aGUgY2FjaGUgZGlyIGlzIGFscmVhZHkgb24gUEFUSCkuXG4gICAgICAgIGNvbnN0IGZldGNoYWJsZSA9IHByZXJlcXMuZmlsdGVyKChjKSA9PiAhYy5vayAmJiBjLnJlcXVpcmVkICYmIGlzRmV0Y2hhYmxlKGMubmFtZSkpO1xuICAgICAgICBpZiAoZmV0Y2hhYmxlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBuYW1lcyA9IGZldGNoYWJsZS5tYXAoKGMpID0+IGMubmFtZSkuam9pbignLCAnKTtcbiAgICAgICAgICBpZiAoYXdhaXQgY29uZmlybShgXFxuJHtuYW1lc30gbm90IGluc3RhbGxlZCDigJQgZmV0Y2ggdGhlIG9mZmljaWFsIHN0YXRpYyBiaW5hcnkgaW50byAke1RPT0xTX0RJUn0gKG5vIHN5c3RlbSBpbnN0YWxsKT9gLCBvcHRpb25zLnllcykpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYyBvZiBmZXRjaGFibGUpIHtcbiAgICAgICAgICAgICAgcHJpbnRJbmZvKGBGZXRjaGluZyAke2MubmFtZX3igKZgKTtcbiAgICAgICAgICAgICAgaWYgKCFmZXRjaFRvb2woYy5uYW1lKSkgcHJpbnRXYXJuaW5nKGBDb3VsZG4ndCBmZXRjaCAke2MubmFtZX0g4oCUIGluc3RhbGwgaXQgbWFudWFsbHkgYW5kIHJlLXJ1bi5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByZXJlcXMgPSBjaGVja1ByZXJlcXModGFyZ2V0LCB7IGJvb3RzdHJhcDogd2FudEJvb3RzdHJhcCwgd2l0aFBsdWdpbnM6IGVuYWJsZWRMb2FkSWRzLmluY2x1ZGVzKCdwbHVnaW5zJykgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gN2IuIEdhdGVkIGV4ZWN1dGlvbi4gQ2hlY2sgcHJlcmVxcyAvIHJlcXVpcmVkIGlucHV0cyBmaXJzdCDigJQgdGhpcyBhbHNvXG4gICAgICAgIC8vIGNhdGNoZXMgYSBtaXNzaW5nIGBnaXRgIHdoZW4gYm9vdHN0cmFwcGluZy5cbiAgICAgICAgY29uc3QgYmxvY2tlZCA9IGV4ZWN1dGlvbkJsb2NrZWQocHJlcmVxcywgbWlzc2luZyk7XG4gICAgICAgIGlmIChibG9ja2VkKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcihgQ2FuJ3Qgc3RhcnQganVzdCB5ZXQg4oCUICR7YmxvY2tlZH0uIFJlc29sdmUgdGhhdCBhbmQgcmUtcnVuLmApO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbW1pdCBnYXRlIOKAlCBjb25maXJtIEJFRk9SRSBhbnkgc2lkZSBlZmZlY3QgKGNsb25lLCAuZW52LCBkZXBsb3kpIHNvIGEgXCJOb1wiXG4gICAgICAgIC8vIGxlYXZlcyBub3RoaW5nIGJlaGluZC4gVGhlIHBvcnQgY2hlY2sgKyBvcHRpb25hbCBsb2FkcyArIC5lbnYgYmVsb3cgYXJlIHBhcnQgb2ZcbiAgICAgICAgLy8gZXhlY3V0aW5nIHRoZSBhZ3JlZWQtdG8gcGxhbi5cbiAgICAgICAgaWYgKCEoYXdhaXQgY29uZmlybShgXFxuUHJvY2VlZCB3aXRoIHByb3Zpc2lvbmluZyAke3NwZWMubGFiZWx9P2AsIG9wdGlvbnMueWVzKSkpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoJ05vIHByb2JsZW0g4oCUIG5vdGhpbmcgd2FzIGNoYW5nZWQuJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gN2EvN2IuIFNwYXJzZS1jbG9uZSAoaWYgLS1yZXBvIG9yIGFjY2VwdGVkIGludGVyYWN0aXZlbHkpICsgbG9jYXRlIHRoZSBkZXBsb3lcbiAgICAgICAgLy8gZW50cnlwb2ludCwgcmVwb2ludGluZyBjd2QgaW50byB0aGUgY2xvbmUuIFNlZSBib290c3RyYXBBbmRMb2NhdGUuXG4gICAgICAgIGNvbnN0IGxvY2F0ZWQgPSBhd2FpdCBib290c3RyYXBBbmRMb2NhdGUoc3BlYywgYm9vdHN0cmFwLCBib290c3RyYXBDbWQsIHNwYXJzZVBhdGhzLCBjd2QsIG9wdGlvbnMpO1xuICAgICAgICBjd2QgPSBsb2NhdGVkLmN3ZDtcbiAgICAgICAgY29uc3QgYm9vdHN0cmFwcGVkID0gbG9jYXRlZC5ib290c3RyYXBwZWQ7XG4gICAgICAgIGlmICghbG9jYXRlZC5vaykgcmV0dXJuO1xuXG4gICAgICAgIC8vIEhvc3QtcG9ydCBwcmUtZmxpZ2h0IOKAlCBub3cgdGhhdCB0aGUgZGVwbG95IHNvdXJjZSBpcyBvbiBkaXNrIChwb3N0LWNsb25lKSxcbiAgICAgICAgLy8gZGVyaXZlIHRoZSBwb3J0cyBmcm9tIGl0IChjb21wb3NlIC8gc2V0dXAuc2gpIGFuZCBzdG9wIG9uIGEgZmF0YWwgY29uZmxpY3RcbiAgICAgICAgLy8gYmVmb3JlIGRlcGxveWluZy4gU2VlIHByZWZsaWdodFBvcnRzLlxuICAgICAgICBpZiAoIShhd2FpdCBwcmVmbGlnaHRQb3J0cyhzcGVjLCB0YXJnZXQsIGN3ZCkpKSB7XG4gICAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3B0LWluIGxvYWRzIOKAlCBvZmZlcmVkIEFGVEVSIHRoZSBjbG9uZSAoc2VlIHJlc29sdmVMb2Fkc0ludGVyYWN0aXZlbHkpOyBpdFxuICAgICAgICAvLyBwcm9tcHRzLCBhZGRpdGl2ZWx5IHNwYXJzZS1mZXRjaGVzIHRoZSBwaWNrZWQgZm9sZGVycywgYW5kIHJlLXJlc29sdmVzIHRoZVxuICAgICAgICAvLyBwb3N0LWluc3RhbGwgc3RlcHMgd2l0aCB0aGUgc2VsZWN0aW9ucy5cbiAgICAgICAgaWYgKHdpbGxQcm9tcHRMb2Fkcykge1xuICAgICAgICAgIGNvbnN0IGxvYWRlZCA9IGF3YWl0IHJlc29sdmVMb2Fkc0ludGVyYWN0aXZlbHkoXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICB0eXBlb2YgcGFyYW1zLnJlZ2lvbiA9PT0gJ3N0cmluZycgPyBwYXJhbXMucmVnaW9uIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY3dkLFxuICAgICAgICAgICAgYm9vdHN0cmFwcGVkLFxuICAgICAgICAgICAgYm9vdHN0cmFwLFxuICAgICAgICAgICAgcG9zdFN0ZXBGbGFncyxcbiAgICAgICAgICApO1xuICAgICAgICAgIGVuYWJsZWRMb2FkSWRzID0gbG9hZGVkLmVuYWJsZWRMb2FkSWRzO1xuICAgICAgICAgIHBvc3RTdGVwcyA9IGxvYWRlZC5zdGVwcztcbiAgICAgICAgICBza2lwcGVkU3RlcHMgPSBsb2FkZWQuc2tpcHBlZDtcbiAgICAgICAgICAvLyBOb3cgdGhhdCBwbHVnaW5zIG1heSBoYXZlIGJlZW4gcGlja2VkLCByZS1jaGVjayB0aGUgcGx1Z2luLXNwZWNpZmljIHByZXJlcXMgd2VcbiAgICAgICAgICAvLyBkZWxpYmVyYXRlbHkgZGlkbid0IGhhcmQtcmVxdWlyZSB1cCBmcm9udCAoZS5nLiB5cSBmb3IgbWluaWt1YmUgcGx1Z2luIGJ1aWxkcykuXG4gICAgICAgICAgLy8gT2ZmZXIgdG8gZmV0Y2ggYW55IGZldGNoYWJsZSBvbmU7IHdhcm4gKGRvbid0IGJsb2NrIOKAlCB0aGUgcGxhdGZvcm0gc3RpbGwgZGVwbG95cylcbiAgICAgICAgICAvLyBpZiBpdCBjYW4ndCBiZSByZXNvbHZlZCwgc28gdGhlIGxhdGVyIHBsdWdpbiBidWlsZCBkb2Vzbid0IGZhaWwgb3BhcXVlbHkuXG4gICAgICAgICAgaWYgKGVuYWJsZWRMb2FkSWRzLmluY2x1ZGVzKCdwbHVnaW5zJykpIHtcbiAgICAgICAgICAgIGNvbnN0IHBsdWdpblByZXJlcXMgPSBjaGVja1ByZXJlcXModGFyZ2V0LCB7IGJvb3RzdHJhcDogd2FudEJvb3RzdHJhcCwgd2l0aFBsdWdpbnM6IHRydWUgfSk7XG4gICAgICAgICAgICBjb25zdCBwbHVnaW5HYXBzID0gcGx1Z2luUHJlcmVxcy5maWx0ZXIoKGMpID0+ICFjLm9rICYmIGMucmVxdWlyZWQgJiYgIXByZXJlcXMuc29tZSgocCkgPT4gcC5uYW1lID09PSBjLm5hbWUpKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYyBvZiBwbHVnaW5HYXBzKSB7XG4gICAgICAgICAgICAgIGlmIChpc0ZldGNoYWJsZShjLm5hbWUpICYmIGF3YWl0IGNvbmZpcm0oYFxcbiR7Yy5uYW1lfSBpcyBuZWVkZWQgdG8gYnVpbGQgcGx1Z2lucyBidXQgaXNuJ3QgaW5zdGFsbGVkIOKAlCBmZXRjaCB0aGUgc3RhdGljIGJpbmFyeSBpbnRvICR7VE9PTFNfRElSfT9gLCBvcHRpb25zLnllcykpIHtcbiAgICAgICAgICAgICAgICBwcmludEluZm8oYEZldGNoaW5nICR7Yy5uYW1lfeKApmApO1xuICAgICAgICAgICAgICAgIGlmICghZmV0Y2hUb29sKGMubmFtZSkpIHByaW50V2FybmluZyhgQ291bGRuJ3QgZmV0Y2ggJHtjLm5hbWV9IOKAlCBpbnN0YWxsIGl0IGJlZm9yZSB0aGUgcGx1Z2luIGJ1aWxkIHJ1bnMuYCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcHJpbnRXYXJuaW5nKGAke2MubmFtZX0gbWlzc2luZyDigJQgdGhlIHBsdWdpbiBsb2FkL2J1aWxkIHN0ZXAgbWF5IGZhaWwuICR7Yy5kZXRhaWx9YCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gbG9jYWwvbWluaWt1YmUncyBzZXR1cC5zaCBSRVFVSVJFUyBhIGAuZW52YCBhbmQgYWJvcnRzIHdpdGhvdXQgaXQg4oCUIGNyZWF0ZVxuICAgICAgICAvLyBpdCBmcm9tIC5lbnYuZXhhbXBsZSB3aXRoIGdlbmVyYXRlZCBzZWNyZXRzIHNvIHRoZSBkZXBsb3kgaXMgbm9uLWludGVyYWN0aXZlLlxuICAgICAgICAvLyBlYzIgYW5kIGVrcyBkb24ndCBoYXZlIHByb3Zpc2lvbiBnZW5lcmF0ZSBhIGxvY2FsIGAuZW52YDogZWMyIGJvb3RzdHJhcHMgaXRzXG4gICAgICAgIC8vIHNlY3JldHMgb24gdGhlIGluc3RhbmNlLCBhbmQgZWtzJ3Mgc2V0dXAuc2ggY3JlYXRlcyB0aGUgazhzIHNlY3JldHMgaXRzZWxmXG4gICAgICAgIC8vIChhIGRlcGxveS9hd3MvZWtzLy5lbnYuZXhhbXBsZSArIHNlY3JldCBzdGVwIGlzIGEgc2V0dXAuc2ggVE9ETykuXG4gICAgICAgIGlmICgodGFyZ2V0ID09PSAnbG9jYWwnIHx8IHRhcmdldCA9PT0gJ21pbmlrdWJlJykgJiYgZW52RmlsZU1pc3NpbmcoY3dkLCBzcGVjLmRpcikpIHtcbiAgICAgICAgICBpZiAoYXdhaXQgY29uZmlybShgXFxuJHtzcGVjLmRpcn0vLmVudiBub3QgZm91bmQg4oCUIGNyZWF0ZSBpdCBmcm9tIC5lbnYuZXhhbXBsZSAoZ2VuZXJhdGVzIHNlY3JldHM7IGVkaXQgbGF0ZXIgZm9yIG9wdGlvbmFsIGludGVncmF0aW9ucyBsaWtlIE9BdXRoKT9gLCBvcHRpb25zLnllcykpIHtcbiAgICAgICAgICAgIGNvbnN0IG4gPSBjcmVhdGVFbnZGaWxlKGN3ZCwgc3BlYy5kaXIpO1xuICAgICAgICAgICAgcHJpbnRTdWNjZXNzKGBDcmVhdGVkICR7c3BlYy5kaXJ9Ly5lbnYg4oCUICR7bn0gc2VjcmV0KHMpIGdlbmVyYXRlZC5gKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKCdDb250aW51aW5nIHdpdGhvdXQgLmVudiDigJQgc2V0dXAuc2ggd2lsbCBhYm9ydCBpZiBpdCBzdGF5cyBtaXNzaW5nLicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyA3Yy4gUnVuIHRoZSBkZXBsb3kgd2l0aCBhIGJvdW5kZWQgYXV0by1maXggKyByZXRyeSBsb29wIChzZWUgcnVuRGVwbG95V2l0aFJldHJ5KS5cbiAgICAgICAgY29uc3QgeyBzdWNjZWVkZWQsIHJ1blBhcmFtcyB9ID0gYXdhaXQgcnVuRGVwbG95V2l0aFJldHJ5KHNwZWMsIHVybCwgY3dkLCBwYXJhbXMsIGFpT3B0cywgb3B0aW9ucyk7XG4gICAgICAgIGlmICghc3VjY2VlZGVkKSB7IHByb2Nlc3MuZXhpdENvZGUgPSAxOyByZXR1cm47IH1cbiAgICAgICAgcHJpbnRTdWNjZXNzKCdEZXBsb3kgY29tbWFuZCBjb21wbGV0ZWQuJyk7XG5cbiAgICAgICAgLy8gN2QuIFNFUyBwb3N0LWRlcGxveSBndWlkYW5jZSAoYXN5bmMgREtJTSArIHNhbmRib3ggKyBib3VuY2UgdG9waWMpLlxuICAgICAgICAvLyBTRVMgaXMgcHJvdmlzaW9uZWQgQlkgREVGQVVMVCBvbiBBV1MgZGVwbG95cywgc28gc3VyZmFjZSB0aGUgZ3VpZGFuY2VcbiAgICAgICAgLy8gZm9yIGVjMi9la3MgdW5sZXNzIHRoZSBvcGVyYXRvciBvcHRlZCBvdXQgd2l0aCAtLW5vLWVtYWlsLlxuICAgICAgICBjb25zdCBzZXNQcm92aXNpb25lZCA9ICh0YXJnZXQgPT09ICdlYzInIHx8IHRhcmdldCA9PT0gJ2VrcycpICYmIHJ1blBhcmFtcy5ub0VtYWlsICE9PSB0cnVlO1xuICAgICAgICBpZiAoc2VzUHJvdmlzaW9uZWQpIHtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ1NFUyDigJQgbmV4dCBzdGVwcycpO1xuICAgICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBzZXNQb3N0RGVwbG95R3VpZGFuY2UoKSkgcHJpbnRJbmZvKGDigKIgJHtsaW5lfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gN2UuIFZlcmlmeSBoZWFsdGggKENSRUFURV9DT01QTEVURSAhPSBzZXJ2aW5nKS5cbiAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgIHByaW50U2VjdGlvbignVmVyaWZ5aW5nIGhlYWx0aCcpO1xuICAgICAgICAgIC8vIE1pbmlrdWJlIHJlYWNoZXMgdGhlIGdhdGV3YXkgdmlhIGEga3ViZWN0bCBwb3J0LWZvcndhcmQgdGhhdCBzZXR1cC5zaFxuICAgICAgICAgIC8vIGJhY2tncm91bmRzIGFuZCB0aGF0IGNhbiBkaWUvZmFpbCB0byBiaW5kIOKAlCAocmUpc3RhcnQgaXQgYmVmb3JlIHBvbGxpbmdcbiAgICAgICAgICAvLyBzbyB3ZSBkb24ndCBzaXQgYXQgdGhlIGdhdGUgb24gYSBkZWFkIGZvcndhcmQgd2hpbGUgdGhlIHBvZHMgYXJlIGZpbmUuXG4gICAgICAgICAgaWYgKHRhcmdldCA9PT0gJ21pbmlrdWJlJykge1xuICAgICAgICAgICAgYXdhaXQgZW5zdXJlTWluaWt1YmVHYXRld2F5KHVybCwgeyBvbkluZm86IChtKSA9PiBwcmludEluZm8obSkgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHByaW50SW5mbyhgUG9sbGluZyAke3VybH0vaGVhbHRoIOKApmApO1xuICAgICAgICAgIC8vIEZyZXNoIEVLUyBsZWdpdGltYXRlbHkgbmVlZHMgbG9uZ2VyIHRoYW4gdGhlIDMwMHMgZGVmYXVsdDogS2FycGVudGVyIHByb3Zpc2lvbnNcbiAgICAgICAgICAvLyBub2RlcywgfjEwIHNlcnZpY2VzIGNvbGQtcHVsbCBpbWFnZXMsIHRoZSBBTEIgcHJvdmlzaW9ucyAofjItMyBtaW4pLCBhbmQgdGhlXG4gICAgICAgICAgLy8gUm91dGUgNTMgYWxpYXMgcHJvcGFnYXRlcy4gR2l2ZSBpdCAxNSBtaW4gYmVmb3JlIHN1cmZhY2luZyB0aGUgbm90LXJlYWNoYWJsZSBub3RlLlxuICAgICAgICAgIGNvbnN0IGhlYWx0aFRpbWVvdXRNcyA9IHRhcmdldCA9PT0gJ2VrcycgPyA5MDBfMDAwIDogdW5kZWZpbmVkO1xuICAgICAgICAgIGNvbnN0IGhlYWx0aCA9IGF3YWl0IHdhaXRIZWFsdGh5KHVybCwgeyB0aW1lb3V0TXM6IGhlYWx0aFRpbWVvdXRNcywgb25UaWNrOiAobSkgPT4gcHJpbnRJbmZvKG0pIH0pO1xuICAgICAgICAgIC8vIEdyZWVuIG9ubHkgd2hlbiBmdWxseSByZWFkeTsgYSBcImhlYWx0aCBPSyBidXQgL3JlYWR5IG5ldmVyIGNhbWVcIiBwcm9jZWVkLVxuICAgICAgICAgIC8vIGFueXdheSBzdGF0ZSBpcyBoZWFsdGh5OnRydWUgYnV0IGRlZ3JhZGVkIOKGkiB3YXJuIHNvIGl0IGRvZXNuJ3QgcmVhZCBhcyBkb25lLlxuICAgICAgICAgIChoZWFsdGguaGVhbHRoeSAmJiBoZWFsdGgucmVhZHkgPyBwcmludFN1Y2Nlc3MgOiBwcmludFdhcm5pbmcpKGAke2hlYWx0aC51cmx9IOKAlCAke2hlYWx0aC5kZXRhaWx9YCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyA3Zi4gUG9zdC1pbnN0YWxsIHN0ZXBzIChyZWdpc3RlciArIG9wdC1pbiBsb2Fkcywgc21va2UgdGVzdCwgZXZlbnRzLCBjdXN0b20pLlxuICAgICAgICAvLyBTZWUgcnVuUG9zdFN0ZXBzIOKAlCBpdCBzdXJmYWNlcyByZWdpc3RlciArIHRoZSBldmVudHMgYnVuZGxlIGFzIG1hbnVhbCBpbi1WUENcbiAgICAgICAgLy8gbmV4dC1zdGVwcyBvbiBFQzIvRUtTIGluc3RlYWQgb2YgYXV0by1ydW5uaW5nIChhbmQgZmFpbGluZykgdGhlbSBsb2NhbGx5LlxuICAgICAgICAvLyBhdXRvUnVuIChza2lwIHRoZSBzZWNvbmQgY29uZmlybSkgb25seSB3aGVuIHRoZSB1c2VyIGFjdHVhbGx5IFBJQ0tFRCBhIGxvYWQgaW4gdGhlXG4gICAgICAgIC8vIGludGVyYWN0aXZlIHByb21wdCDigJQgZGVjbGluaW5nIGV2ZXJ5IGxvYWQgc2hvdWxkbid0IHNpbGVudGx5IHJ1biByZWdpc3RlciB1bnByb21wdGVkLlxuICAgICAgICBjb25zdCBhdXRvUmFuTG9hZHMgPSB3aWxsUHJvbXB0TG9hZHMgJiYgZW5hYmxlZExvYWRJZHMubGVuZ3RoID4gMDtcbiAgICAgICAgYXdhaXQgcnVuUG9zdFN0ZXBzKHBvc3RTdGVwcywgc2tpcHBlZFN0ZXBzLCB0YXJnZXQsIGN3ZCwgYWRtaW5FbnYsIHsgeWVzOiBvcHRpb25zLnllcywgYXV0b1J1bjogYXV0b1JhbkxvYWRzLCBhdXRvSW5pdDogcG9zdFN0ZXBGbGFncy5hdXRvSW5pdCB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5HRU5FUkFMLCB7XG4gICAgICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgICAgIGV4aXQ6IHRydWUsXG4gICAgICAgICAgY29udGV4dDogeyBjb21tYW5kOiAncHJvdmlzaW9uJywgZXhlY3V0aW9uSWQgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG59XG4iXX0=
858
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3Byb3Zpc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQzlDLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxRQUFRLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQXNCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0YsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckYsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBbUMsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRixPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSx5QkFBeUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlHLE9BQU8sRUFDTCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFVBQVUsRUFDVixjQUFjLEVBQ2QsT0FBTyxFQUNQLFVBQVUsRUFDVixlQUFlLEdBR2hCLE1BQU0scUJB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QUssQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDckcsQ0FBQztZQUVELGdGQUFnRjtZQUNoRiwrRUFBK0U7WUFDL0UsNEVBQTRFO1lBQzVFLHFGQUFxRjtZQUNyRix3RkFBd0Y7WUFDeEYsTUFBTSxZQUFZLEdBQUcsZUFBZSxJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sWUFBWSxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNwSixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLE9BQU8sRUFBRTtnQkFDdEMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLO2dCQUMzQixJQUFJLEVBQUUsSUFBSTtnQkFDVixPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRTthQUMvQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IHJlYWRGaWxlU3luYywgZXhpc3RzU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCAqIGFzIHJlYWRsaW5lIGZyb20gJ25vZGU6cmVhZGxpbmUvcHJvbWlzZXMnO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBkaWFnbm9zZUZhaWx1cmUsIGlzQWlDb25maWd1cmVkLCBwYXJzZUdvYWwgfSBmcm9tICcuLi9hZ2VudC9haS5qcyc7XG5pbXBvcnQgeyBib290c3RyYXBDb21tYW5kLCByZXNvbHZlQm9vdHN0cmFwLCB0eXBlIEJvb3RzdHJhcFNwZWMgfSBmcm9tICcuLi9hZ2VudC9ib290c3RyYXAuanMnO1xuaW1wb3J0IHsgY3JlYXRlRW52RmlsZSwgZW52RmlsZU1pc3NpbmcgfSBmcm9tICcuLi9hZ2VudC9lbnYtZmlsZS5qcyc7XG5pbXBvcnQgeyBlbnRyeXBvaW50RXhpc3RzLCBleGVjdXRpb25CbG9ja2VkLCBydW5TY3JpcHQgfSBmcm9tICcuLi9hZ2VudC9leGVjdXRvci5qcyc7XG5pbXBvcnQgeyBkZXJpdmVIZWFsdGhVcmwsIHdhaXRIZWFsdGh5LCBlbnN1cmVNaW5pa3ViZUdhdGV3YXkgfSBmcm9tICcuLi9hZ2VudC9oZWFsdGguanMnO1xuaW1wb3J0IHsgY2hlY2tIb3N0UG9ydHMsIGRpc2NvdmVySG9zdFBvcnRzLCBzdGFja1J1bm5pbmcgfSBmcm9tICcuLi9hZ2VudC9wb3J0cy5qcyc7XG5pbXBvcnQgeyByZXNvbHZlUG9zdFN0ZXBzLCB0eXBlIFBvc3RTdGVwLCB0eXBlIFNraXBwZWRTdGVwIH0gZnJvbSAnLi4vYWdlbnQvcG9zdC1zdGVwcy5qcyc7XG5pbXBvcnQgeyBjaGVja1ByZXJlcXMsIGdpdEF2YWlsYWJsZSwgZ2l0U3VwcG9ydHNTcGFyc2VDaGVja291dCwgcHJlcmVxc1NhdGlzZmllZCB9IGZyb20gJy4uL2FnZW50L3ByZXJlcXMuanMnO1xuaW1wb3J0IHtcbiAgYXNzZW1ibGVDb21tYW5kLFxuICBpc1RhcmdldElkLFxuICBMT0FEX1NURVBTLFxuICBzcGFyc2VQYXRoc0ZvcixcbiAgVEFSR0VUUyxcbiAgVEFSR0VUX0lEUyxcbiAgdGVhcmRvd25Db21tYW5kLFxuICB0eXBlIFRhcmdldElkLFxuICB0eXBlIFRhcmdldFNwZWMsXG59IGZyb20gJy4uL2FnZW50L3RhcmdldHMuanMnO1xuaW1wb3J0IHsgVE9PTFNfRElSLCBmZXRjaFRvb2wsIGlzRmV0Y2hhYmxlLCB3aXRoVG9vbHNPblBhdGggfSBmcm9tICcuLi9hZ2VudC90b29scy5qcyc7XG5pbXBvcnQgeyBtYXRjaElzc3Vlcywgc2VzUG9zdERlcGxveUd1aWRhbmNlIH0gZnJvbSAnLi4vYWdlbnQvdHJvdWJsZXNob290LmpzJztcbmltcG9ydCB7IHByaW50Q29tbWFuZEhlYWRlciB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMuanMnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBwcmludFNlY3Rpb24sIHByaW50S2V5VmFsdWUsIHByaW50SW5mbywgcHJpbnRXYXJuaW5nLCBwcmludEVycm9yLCBwcmludFN1Y2Nlc3MgfSBmcm9tICcuLi91dGlscy9vdXRwdXQtdXRpbHMuanMnO1xuXG4vKipcbiAqIFBvc3QtZGVwbG95IGluaXRpYWxpemF0aW9uIG1vZGUgKHRoZSBzaW5nbGUgYC0taW5pdCA8bW9kZT5gIGZsYWcpOlxuICogICAtIGBhdXRvYCAgIOKAlCBpbml0LXBsYXRmb3JtIHJ1bnMgb25jZSB0aGUgcGxhdGZvcm0gaXMgdXAgKHJlZ2lzdGVyIGFkbWluICsgbG9hZCBwbHVnaW5zL1xuICogICAgICAgICAgICAgICAgY29tcGxpYW5jZS9zYW1wbGVzKS4gT24gZWMyIHRoZSBpbnN0YW5jZSBkb2VzIGl0IGl0c2VsZiBvbiBmaXJzdCBib290OyBvblxuICogICAgICAgICAgICAgICAgbG9jYWwvbWluaWt1YmUvZWtzIGBwcm92aXNpb25gIHJ1bnMgaXQgZm9yIHlvdS4gVGhpcyBpcyB0aGUgREVGQVVMVC5cbiAqICAgLSBgbWFudWFsYCDigJQgZG9uJ3Qgc2VsZi1pbml0OyBzdXJmYWNlIHRoZSBleGFjdCBzdGVwIGZvciB5b3UgdG8gcnVuIHlvdXJzZWxmLlxuICogICAtIGBza2lwYCAgIOKAlCBkb24ndCBpbml0aWFsaXplIGF0IGFsbCAobm8gcmVnaXN0ZXIsIG5vIGxvYWRzKS5cbiAqL1xuZXhwb3J0IHR5cGUgSW5pdE1vZGUgPSAnYXV0bycgfCAnbWFudWFsJyB8ICdza2lwJztcbmNvbnN0IElOSVRfTU9ERVM6IHJlYWRvbmx5IEluaXRNb2RlW10gPSBbJ2F1dG8nLCAnbWFudWFsJywgJ3NraXAnXTtcblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBpbml0IG1vZGUgZnJvbSB0aGUgbmV3IGAtLWluaXQgPG1vZGU+YCBmbGFnLCBmYWxsaW5nIGJhY2sgdG8gdGhlIERFUFJFQ0FURURcbiAqIGFsaWFzZXMgKGAtLW5vLWluaXRgIOKGkiBza2lwLCBgLS1hdXRvLWluaXRgIOKGkiBhdXRvLCBgLS1uby1hdXRvLWluaXRgIOKGkiBtYW51YWwpLCB0aGVuIHRoZVxuICogZGVmYXVsdCAoYGF1dG9gKS4gUmV0dXJucyBgbnVsbGAgd2hlbiBgLS1pbml0YCB3YXMgZ2l2ZW4gYW4gaW52YWxpZCB2YWx1ZSAoY2FsbGVyIGVycm9ycykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlSW5pdE1vZGUob3B0aW9uczogeyBpbml0PzogdW5rbm93bjsgYXV0b0luaXQ/OiB1bmtub3duIH0pOiBJbml0TW9kZSB8IG51bGwge1xuICBpZiAodHlwZW9mIG9wdGlvbnMuaW5pdCA9PT0gJ3N0cmluZycpIHsgLy8gLS1pbml0IDxtb2RlPlxuICAgIGNvbnN0IG0gPSBvcHRpb25zLmluaXQudG9Mb3dlckNhc2UoKSBhcyBJbml0TW9kZTtcbiAgICByZXR1cm4gSU5JVF9NT0RFUy5pbmNsdWRlcyhtKSA/IG0gOiBudWxsO1xuICB9XG4gIGlmIChvcHRpb25zLmluaXQgPT09IGZhbHNlKSByZXR1cm4gJ3NraXAnOyAvLyBkZXByZWNhdGVkIC0tbm8taW5pdFxuICBpZiAob3B0aW9ucy5hdXRvSW5pdCA9PT0gdHJ1ZSkgcmV0dXJuICdhdXRvJzsgLy8gZGVwcmVjYXRlZCAtLWF1dG8taW5pdFxuICBpZiAob3B0aW9ucy5hdXRvSW5pdCA9PT0gZmFsc2UpIHJldHVybiAnbWFudWFsJzsgLy8gZGVwcmVjYXRlZCAtLW5vLWF1dG8taW5pdFxuICByZXR1cm4gJ2F1dG8nOyAvLyBkZWZhdWx0XG59XG5cbi8qKlxuICogUmVhZCBvbmUgbGluZSBvZiB0cmltbWVkIGlucHV0IGZyb20gdGhlIHRlcm1pbmFsLCBvd25pbmcgdGhlIHJlYWRsaW5lXG4gKiBsaWZlY3ljbGUuIFVzZWQgZGlyZWN0bHkgZm9yIHRoZSBkZXN0cnVjdGl2ZSB0ZWFyZG93biBnYXRlIChhIHkvTiBpcyB0b28gZWFzeVxuICogdG8gZmF0LWZpbmdlciwgc28gd2UgcmVxdWlyZSB0aGUgb3BlcmF0b3IgdG8gVFlQRSB0aGUgdGFyZ2V0IGlkIGJhY2spLCBhbmQgYXNcbiAqIHRoZSBiYXNpcyBmb3IgYGNvbmZpcm1gLiBEZWxpYmVyYXRlbHkgaGFzIG5vIGF1dG8tYWNjZXB0LlxuICovXG5hc3luYyBmdW5jdGlvbiBhc2socXVlc3Rpb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHsgaW5wdXQ6IHByb2Nlc3Muc3RkaW4sIG91dHB1dDogcHJvY2Vzcy5zdGRvdXQgfSk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIChhd2FpdCBybC5xdWVzdGlvbihxdWVzdGlvbikpLnRyaW0oKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBybC5jbG9zZSgpO1xuICB9XG59XG5cbi8qKiBJbnRlcmFjdGl2ZSB5L04gY29uZmlybWF0aW9uOyBhdXRvLXRydWUgd2hlbiBgYXV0b1llc2AgKHRoZSBgLS15ZXNgIGZsYWcpLiAqL1xuYXN5bmMgZnVuY3Rpb24gY29uZmlybShxdWVzdGlvbjogc3RyaW5nLCBhdXRvWWVzOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChhdXRvWWVzKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgYW5zd2VyID0gKGF3YWl0IGFzayhgJHtxdWVzdGlvbn0gW3kvTl0gYCkpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBhbnN3ZXIgPT09ICd5JyB8fCBhbnN3ZXIgPT09ICd5ZXMnO1xufVxuXG4vKiogQ29tbWFuZGVyIGNvbGxlY3RvcjogYWNjdW11bGF0ZSByZXBlYXRlZCBgLS1wb3N0LXN0ZXBgIHZhbHVlcyBpbiBvcmRlci4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RTdGVwKHZhbHVlOiBzdHJpbmcsIGFjYzogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIHJldHVybiBbLi4uYWNjLCB2YWx1ZV07XG59XG5cbi8qKlxuICogSG9zdC1wb3J0IHByZS1mbGlnaHQgKGxvY2FsL21pbmlrdWJlKS4gUG9ydHMgYXJlIERFUklWRUQgZnJvbSB0aGUgdGFyZ2V0J3MgY2xvbmVkXG4gKiBkZXBsb3kgc291cmNlIChjb21wb3NlIC8gc2V0dXAuc2gpIHNvIHRoZSBsaXN0IGNhbid0IGRyaWZ0IOKAlCBoZW5jZSB0aGlzIHJ1bnMgQUZURVJcbiAqIHRoZSBjbG9uZS4gQSB0YWtlbiBwb3J0IG1ha2VzIGEgY29udGFpbmVyL2ZvcndhcmQgZmFpbCB0byBiaW5kIG1pZC1kZXBsb3kgKGZvciB0aGVcbiAqIGdhdGV3YXksIGEgc2lsZW50IHVucmVhY2hhYmxlIGhhbmcpLiBQcmludHMgYSDinJMv4pyXIHN1bW1hcnkgYW5kIHJldHVybnMgZmFsc2UgT05MWVxuICogd2hlbiB0aGUgY2FsbGVyIG11c3QgQUJPUlQgKGEgZmF0YWwgbG9jYWwgY29uZmxpY3QpLiBtaW5pa3ViZSBwb3J0cyBhcmUgbWFuYWdlZFxuICogZm9yd2FyZHMgKHNldHVwLnNoIHBraWxscy9yZXN0YXJ0cyB0aGVtKSwgc28gYSBjb25mbGljdCB0aGVyZSB3YXJucyBidXQgcHJvY2VlZHMuXG4gKiBSZW1vdGUgdGFyZ2V0cyAoZWMyL2VrcykgYmluZCBub3RoaW5nIGxvY2FsbHkg4oaSIHJldHVybnMgdHJ1ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByZWZsaWdodFBvcnRzKHNwZWM6IFRhcmdldFNwZWMsIHRhcmdldDogVGFyZ2V0SWQsIGN3ZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHBvcnRzID0gZGlzY292ZXJIb3N0UG9ydHModGFyZ2V0LCBjd2QsIHNwZWMpO1xuICBpZiAocG9ydHMubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgcG9ydENoZWNrcyA9IGF3YWl0IGNoZWNrSG9zdFBvcnRzKHBvcnRzKTtcbiAgY29uc3QgdGFrZW4gPSBwb3J0Q2hlY2tzLmZpbHRlcigoYykgPT4gIWMuYXZhaWxhYmxlKTtcbiAgcHJpbnRTZWN0aW9uKCdQb3J0IGF2YWlsYWJpbGl0eScpO1xuICBmb3IgKGNvbnN0IGMgb2YgcG9ydENoZWNrcykgcHJpbnRJbmZvKGAke2MuYXZhaWxhYmxlID8gJ+KckycgOiAn4pyXJ30gJHtTdHJpbmcoYy5wb3J0KS5wYWRFbmQoNSl9IOKAlCAke2Muc2VydmljZX1gKTtcbiAgaWYgKHRha2VuLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7XG4gIC8vIGxvY2FsIFBVQkxJU0hFUyB0aGVzZSBwb3J0cyBhdCBgZG9ja2VyIGNvbXBvc2UgdXBgIHRpbWUsIHNvIGEgY29uZmxpY3QgaXMgZmF0YWwuXG4gIC8vIG1pbmlrdWJlJ3MgYXJlIGt1YmVjdGwgcG9ydC1mb3J3YXJkcyBzZXR1cC5zaCBwa2lsbHMgKyByZXN0YXJ0cyAoYW5kXG4gIC8vIGVuc3VyZU1pbmlrdWJlR2F0ZXdheSByZWNvdmVycyksIHNvIGEgc3RhbGUgZm9yd2FyZCBtdXN0IE5PVCBibG9jayBhIHJlLXJ1bi5cbiAgY29uc3QgZmF0YWwgPSB0YXJnZXQgPT09ICdkb2NrZXInO1xuICAvLyDigKZVTkxFU1MgdGhlIGxvY2FsIHN0YWNrIGlzIGFscmVhZHkgcnVubmluZzogdGhvc2UgcG9ydHMgYXJlIGhlbGQgYnkgWU9VUiBPV05cbiAgLy8gc3RhY2ssIGFuZCBgZG9ja2VyIGNvbXBvc2UgdXBgIG5vLW9wcyB0aGVtIOKAlCB0aGlzIGlzIGV4YWN0bHkgaG93IHlvdSByZS1ydW4gdG9cbiAgLy8gYWRkIGxvYWRzL29wdGlvbnMuIERvbid0IGJsb2NrICh0aGUgd291bGQtYmUgY29uZmxpY3QgaXMgYSBzZWxmLWNvbmZsaWN0KS5cbiAgaWYgKGZhdGFsICYmIHN0YWNrUnVubmluZyh0YXJnZXQsIGN3ZCwgc3BlYykpIHtcbiAgICBwcmludFdhcm5pbmcoYFxcbiR7dGFrZW4ubGVuZ3RofSBwb3J0KHMpIGFyZSBoZWxkIGJ5IHlvdXIgYWxyZWFkeS1ydW5uaW5nICR7c3BlYy5sYWJlbH0gc3RhY2sg4oCUIHJlLXJ1bm5pbmcganVzdCByZXN1bWVzIGl0IChubyByZWFsIGNvbmZsaWN0KSwgc28gY29udGludWluZy5gKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb25zdCBsZWFkID0gYCR7dGFrZW4ubGVuZ3RofSByZXF1aXJlZCBwb3J0KHMpIGFscmVhZHkgaW4gdXNlOiAke3Rha2VuLm1hcCgoYykgPT4gYy5wb3J0KS5qb2luKCcsICcpfWA7XG4gIChmYXRhbCA/IHByaW50RXJyb3IgOiBwcmludFdhcm5pbmcpKGZhdGFsXG4gICAgPyBgXFxuJHtsZWFkfSDigJQgdGhlIGRlcGxveSBjYW4ndCBiaW5kIHRoZW0gYW5kIHdvdWxkIGZhaWwgbWlkLXdheS4gRnJlZSB0aGVtIGFuZCByZS1ydW46YFxuICAgIDogYFxcbiR7bGVhZH0g4oCUIG9uIG1pbmlrdWJlIHRoZXNlIGFyZSB1c3VhbGx5IGEgcHJldmlvdXMgcnVuJ3MgcG9ydC1mb3J3YXJkcyAoc2V0dXAuc2ggcmVzdGFydHMgdGhlbSkuIEZyZWUgYW55IE5PTi1taW5pa3ViZSBob2xkZXIgaWYgdGhlIGdhdGV3YXkgc3RheXMgdW5yZWFjaGFibGU6YCk7XG4gIGZvciAoY29uc3QgYyBvZiB0YWtlbikgcHJpbnRJbmZvKGAgIOKAoiBwb3J0ICR7Yy5wb3J0fSAoJHtjLnNlcnZpY2V9KSDigJQgZmluZCB0aGUgaG9sZGVyOiAgbHNvZiAtaSA6JHtjLnBvcnR9YCk7XG4gIGlmICh0YWtlbi5zb21lKChjKSA9PiBjLnBvcnQgPT09IDUwMDApKSB7XG4gICAgcHJpbnRJbmZvKCcgIE5vdGU6IG9uIG1hY09TLCBwb3J0IDUwMDAgaXMgdXN1YWxseSBBaXJQbGF5IFJlY2VpdmVyIOKAlCBTeXN0ZW0gU2V0dGluZ3Mg4oaSIEdlbmVyYWwg4oaSIEFpckRyb3AgJiBIYW5kb2ZmIOKGkiBBaXJQbGF5IFJlY2VpdmVyIChvZmYpLicpO1xuICB9XG4gIHJldHVybiAhZmF0YWw7XG59XG5cbi8qKlxuICogVGVhcmRvd24gbW9kZSDigJQgdGhlIGRlc3Ryb3kgY291bnRlcnBhcnQgb2YgcHJvdmlzaW9uaW5nLCBnYXRlZCBIQVJERVIgdGhhbiBkZXBsb3k6XG4gKiBBV1MgdGFyZ2V0cyBhcmUgaXJyZXZlcnNpYmxlLCBzbyB0aGUgb3BlcmF0b3IgbXVzdCBUWVBFIHRoZSB0YXJnZXQgaWQgKC0tZm9yY2VcbiAqIGJ5cGFzc2VzIGZvciBDSTsgLS15ZXMgYWxvbmUgZG9lcyBOT1QpLiBUZXJtaW5hbDogb3ducyBpdHMgb3V0cHV0ICsgZXhpdENvZGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5UZWFyZG93bihcbiAgc3BlYzogVGFyZ2V0U3BlYyxcbiAgdGFyZ2V0OiBUYXJnZXRJZCxcbiAgY3dkOiBzdHJpbmcsXG4gIGV4ZWN1dGlvbklkOiBzdHJpbmcsXG4gIG9wdHM6IHsgc3RhY2tOYW1lPzogc3RyaW5nOyBjbHVzdGVyTmFtZT86IHN0cmluZzsgcmVnaW9uPzogc3RyaW5nOyBkb21haW4/OiBzdHJpbmc7IGhvc3RlZFpvbmVJZD86IHN0cmluZzsgZm9yY2U/OiBib29sZWFuOyB5ZXM/OiBib29sZWFuOyBqc29uPzogYm9vbGVhbiB9LFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgY29tbWFuZDogZG93bkNvbW1hbmQsIGRlc3RydWN0aXZlIH0gPSB0ZWFyZG93bkNvbW1hbmQodGFyZ2V0LCB7XG4gICAgc3RhY2tOYW1lOiBvcHRzLnN0YWNrTmFtZSxcbiAgICBjbHVzdGVyTmFtZTogb3B0cy5jbHVzdGVyTmFtZSxcbiAgICByZWdpb246IG9wdHMucmVnaW9uLFxuICAgIC8vIGVrcyB0ZWFyZG93biAoYmluL3NodXRkb3duLnNoKSBhbHNvIGNsZWFucyB1cCB0aGUgQUNNIGNlcnQgKyBSb3V0ZSA1MyBhbGlhcyBmb3JcbiAgICAvLyB0aGUgZG9tYWluLCBzbyBmb3J3YXJkIHRoZW0gd2hlbiBwcmVzZW50LlxuICAgIGRvbWFpbjogb3B0cy5kb21haW4sXG4gICAgaG9zdGVkWm9uZUlkOiBvcHRzLmhvc3RlZFpvbmVJZCxcbiAgICAvLyBPdXIgdHlwZWQgZ2F0ZSBJUyB0aGUgY29uZmlybWF0aW9uIOKAlCBhc3N1bWVZZXMgZm9yd2FyZHMgYSBuYXRpdmUgYC0teWVzYCB0byBhbnlcbiAgICAvLyBzY3JpcHQtYmFzZWQgdGVhcmRvd24gKGVjMiBkZWxldGUtc3RhY2sgaGFzIG5vIHByb21wdDsgZWtzIHNodXRkb3duLnNoIHNraXBzIGl0cyBvd24pLlxuICAgIGFzc3VtZVllczogdHJ1ZSxcbiAgfSk7XG4gIGlmIChvcHRzLmpzb24pIHtcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7IHN1Y2Nlc3M6IHRydWUsIGV4ZWN1dGlvbklkLCB0YXJnZXQsIHRlYXJkb3duOiB0cnVlLCBkZXN0cnVjdGl2ZSwgZGVzdHJveXM6IHNwZWMuZGVzdHJveXMsIGNvbW1hbmQ6IGRvd25Db21tYW5kIH0sIG51bGwsIDIpKTtcbiAgICByZXR1cm47XG4gIH1cbiAgcHJpbnRTZWN0aW9uKGBUZWFyZG93biBwbGFuIOKAlCAke3NwZWMubGFiZWx9YCk7XG4gIHByaW50S2V5VmFsdWUoeyAnVGFyZ2V0JzogdGFyZ2V0LCAnRGVzdHJveXMnOiBzcGVjLmRlc3Ryb3lzLCAnU3RvcHMgY29zdCc6IHNwZWMuY29zdCB9KTtcbiAgcHJpbnRTZWN0aW9uKCdDb21tYW5kIHRvIHJ1bicpO1xuICBwcmludEluZm8oZG93bkNvbW1hbmQpO1xuICBpZiAoZGVzdHJ1Y3RpdmUgJiYgIW9wdHMuZm9yY2UpIHtcbiAgICAvLyBCaW5kIHRoZSBjb25maXJtYXRpb24gdG8gdGhlIHJlc291cmNlIGFjdHVhbGx5IGRlc3Ryb3llZDogYSBjdXN0b20gbmFtZSAoZWMyXG4gICAgLy8gLS1zdGFjay1uYW1lIC8gZWtzIC0tY2x1c3Rlci1uYW1lKSBtdXN0IGJlIHR5cGVkIHZlcmJhdGltIHNvIGEgd3JvbmcgbmFtZSBjYW4ndCBiZVxuICAgIC8vIGNvbmZpcm1lZCBieSBoYWJpdDsgb3RoZXJ3aXNlIHRoZSB0YXJnZXQgaWQuXG4gICAgY29uc3QgcmVzb3VyY2VOYW1lID0gdGFyZ2V0ID09PSAnZWtzJyA/IG9wdHMuY2x1c3Rlck5hbWUgOiBvcHRzLnN0YWNrTmFtZTtcbiAgICBjb25zdCBjb25maXJtVG9rZW4gPSByZXNvdXJjZU5hbWUgPz8gdGFyZ2V0O1xuICAgIGNvbnN0IG5vdW4gPSB0YXJnZXQgPT09ICdla3MnID8gKG9wdHMuY2x1c3Rlck5hbWUgPyAnY2x1c3RlciBuYW1lJyA6ICd0YXJnZXQgaWQnKSA6IChvcHRzLnN0YWNrTmFtZSA/ICdzdGFjayBuYW1lJyA6ICd0YXJnZXQgaWQnKTtcbiAgICBjb25zdCB0b2tlbiA9IGF3YWl0IGFzayhgXFxuVGhpcyBpcyBJUlJFVkVSU0lCTEUuIFR5cGUgXCIke2NvbmZpcm1Ub2tlbn1cIiB0byBjb25maXJtIHRlYXJkb3duOiBgKTtcbiAgICBpZiAodG9rZW4gIT09IGNvbmZpcm1Ub2tlbikge1xuICAgICAgcHJpbnRXYXJuaW5nKGBUaGF0IGRpZG4ndCBtYXRjaCwgc28gbm90aGluZyB3YXMgZGVzdHJveWVkIOKAlCB5b3UgaGF2ZSB0byB0eXBlIHRoZSBleGFjdCAke25vdW59IHRvIGNvbmZpcm0uYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9IGVsc2UgaWYgKCFkZXN0cnVjdGl2ZSAmJiAhb3B0cy5mb3JjZSAmJiAhKGF3YWl0IGNvbmZpcm0oJ1xcblByb2NlZWQgd2l0aCB0ZWFyZG93biAoc3RvcHMgdGhlIHN0YWNrOyBvbi1kaXNrIGRhdGEgcGVyc2lzdHMpPycsIG9wdHMueWVzID8/IGZhbHNlKSkpIHtcbiAgICBwcmludFdhcm5pbmcoJ05vIHByb2JsZW0g4oCUIG5vdGhpbmcgd2FzIGNoYW5nZWQuJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHByaW50U2VjdGlvbignVGVhcmluZyBkb3duJyk7XG4gIGNvbnN0IHsgY29kZTogZG93bkNvZGUgfSA9IGF3YWl0IHJ1blNjcmlwdChkb3duQ29tbWFuZCwgY3dkLCB7IGNhcHR1cmU6IGZhbHNlIH0pO1xuICBpZiAoZG93bkNvZGUgIT09IDApIHtcbiAgICBwcmludEVycm9yKGBcXG5UZWFyZG93biBmYWlsZWQgKGV4aXQgJHtkb3duQ29kZX0pLiBJbnNwZWN0IHRoZSBzdGFjay9jb250YWluZXJzIGFuZCByZXRyeS5gKTtcbiAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICByZXR1cm47XG4gIH1cbiAgcHJpbnRTdWNjZXNzKCdUZWFyZG93biBjb21wbGV0ZS4nKTtcbn1cblxuLyoqXG4gKiBSdW4gdGhlIGRlcGxveSBjb21tYW5kIChyZWFsLCBzZWNyZXRzIHVubWFza2VkLCBzdHJlYW1lZCArIGNhcHR1cmVkKSB3aXRoIGFcbiAqIGJvdW5kZWQgYXV0by1maXggKyByZXRyeSBsb29wIOKAlCB0aGUgZGVwbG95IHNjcmlwdHMgYXJlIGlkZW1wb3RlbnQsIHNvIGEgZml4ZWRcbiAqIHJlLXJ1biByZXN1bWVzIHJhdGhlciB0aGFuIHN0YXJ0aW5nIG92ZXIuIFJldHVybnMgd2hldGhlciBpdCBzdWNjZWVkZWQgcGx1cyB0aGVcbiAqIChwb3NzaWJseSBmaXgtYWRqdXN0ZWQpIHBhcmFtcywgd2hpY2ggdGhlIGNhbGxlciBuZWVkcyBmb3IgU0VTIGd1aWRhbmNlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuRGVwbG95V2l0aFJldHJ5KFxuICBzcGVjOiBUYXJnZXRTcGVjLFxuICB1cmw6IHN0cmluZyB8IG51bGwsXG4gIGN3ZDogc3RyaW5nLFxuICBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBhaU9wdHM6IHsgcHJvdmlkZXI/OiBzdHJpbmc7IG1vZGVsPzogc3RyaW5nIH0sXG4gIG9wdHM6IHsgcmV0cmllcz86IHN0cmluZzsgeWVzPzogYm9vbGVhbiB9LFxuKTogUHJvbWlzZTx7IHN1Y2NlZWRlZDogYm9vbGVhbjsgcnVuUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9PiB7XG4gIGNvbnN0IG1heEF0dGVtcHRzID0gMSArIE1hdGgubWF4KDAsIHBhcnNlSW50KG9wdHMucmV0cmllcyA/PyAnJywgMTApIHx8IDApO1xuICBsZXQgcnVuUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHBhcmFtcztcbiAgbGV0IHN1Y2NlZWRlZCA9IGZhbHNlO1xuICBmb3IgKGxldCBhdHRlbXB0ID0gMTsgYXR0ZW1wdCA8PSBtYXhBdHRlbXB0czsgYXR0ZW1wdCsrKSB7XG4gICAgY29uc3QgcmVhbENvbW1hbmQgPSBhc3NlbWJsZUNvbW1hbmQoc3BlYywgcnVuUGFyYW1zLCB7IG1hc2s6IGZhbHNlIH0pLmNvbW1hbmQ7XG4gICAgcHJpbnRTZWN0aW9uKGF0dGVtcHQgPT09IDEgPyAnRGVwbG95aW5nJyA6IGBEZXBsb3lpbmcg4oCUIHJldHJ5ICR7YXR0ZW1wdCAtIDF9YCk7XG4gICAgaWYgKGF0dGVtcHQgPT09IDEpIHtcbiAgICAgIHByaW50SW5mbyhgRGVwbG95aW5nICR7c3BlYy5sYWJlbH0g4oaSICR7dXJsfWApO1xuICAgICAgcHJpbnRJbmZvKHNwZWMuZGVwbG95cyk7XG4gICAgICBwcmludEluZm8oJ1N0cmVhbWluZyB0aGUgZGVwbG95IGJlbG93IOKAlCBmaXJzdCBydW4gaXMgdGhlIHNsb3cgb25lIChpbWFnZSBwdWxscyArIGNlcnQgZ2VuZXJhdGlvbikuJyk7XG4gICAgfVxuICAgIGNvbnN0IHsgY29kZSwgdGFpbCB9ID0gYXdhaXQgcnVuU2NyaXB0KHJlYWxDb21tYW5kLCBjd2QsIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgICBpZiAoY29kZSA9PT0gMCkgeyBzdWNjZWVkZWQgPSB0cnVlOyBicmVhazsgfVxuXG4gICAgcHJpbnRFcnJvcihgXFxuRGVwbG95IGZhaWxlZCAoZXhpdCAke2NvZGV9KS5gKTtcbiAgICBjb25zdCBpc3N1ZXMgPSBtYXRjaElzc3Vlcyh0YWlsKTtcbiAgICBpZiAoaXNzdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHByaW50U2VjdGlvbignTGlrZWx5IGNhdXNlJyk7XG4gICAgICBmb3IgKGNvbnN0IGkgb2YgaXNzdWVzKSBwcmludEluZm8oYOKAoiAke2kuY2F1c2V9XFxuICDihpIgJHtpLnN1Z2dlc3Rpb259YCk7XG4gICAgfVxuICAgIGlmIChpc0FpQ29uZmlndXJlZChhaU9wdHMpKSB7XG4gICAgICBjb25zdCBkaWFnbm9zaXMgPSBhd2FpdCBkaWFnbm9zZUZhaWx1cmUocmVkYWN0U2VjcmV0cyh0YWlsLCBzcGVjLCBydW5QYXJhbXMpLCBhaU9wdHMpO1xuICAgICAgaWYgKGRpYWdub3NpcykgeyBwcmludFNlY3Rpb24oJ0RpYWdub3NpcycpOyBwcmludEluZm8oZGlhZ25vc2lzKTsgfVxuICAgIH1cbiAgICBpZiAoYXR0ZW1wdCA+PSBtYXhBdHRlbXB0cykgYnJlYWs7XG5cbiAgICAvLyBBdXRvLWZpeDogYSByZXRyeWFibGUgaXNzdWUgd2l0aCBhIHBhcmFtIHdlIGhhdmVuJ3QgYWxyZWFkeSBhcHBsaWVkLlxuICAgIGNvbnN0IGZpeCA9IGlzc3Vlcy5maW5kKChpKSA9PiBpLnJldHJ5YWJsZSAmJiBpLnBhcmFtRml4ICYmIHJ1blBhcmFtc1tpLnBhcmFtRml4LmtleV0gIT09IGkucGFyYW1GaXgudmFsdWUpO1xuICAgIGlmIChmaXg/LnBhcmFtRml4ICYmIGF3YWl0IGNvbmZpcm0oYFxcbkFwcGx5IGZpeCBhbmQgcmV0cnkg4oCUICR7Zml4LnN1Z2dlc3Rpb259YCwgb3B0cy55ZXMgPz8gZmFsc2UpKSB7XG4gICAgICBydW5QYXJhbXMgPSB7IC4uLnJ1blBhcmFtcywgW2ZpeC5wYXJhbUZpeC5rZXldOiBmaXgucGFyYW1GaXgudmFsdWUgfTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICAvLyBSZXRyeWFibGUgYnV0IG5vIHBhcmFtIGNoYW5nZSAoZS5nLiBBQ00gRE5TIHByb3BhZ2F0aW9uKSDigJQgb2ZmZXIgYSBwbGFpbiByZS1ydW4uXG4gICAgaWYgKCFmaXggJiYgaXNzdWVzLnNvbWUoKGkpID0+IGkucmV0cnlhYmxlKSAmJiBhd2FpdCBjb25maXJtKCdcXG5SZXRyeSB0aGUgZGVwbG95IChzYWZlIHRvIHJlLXJ1biDigJQgaXQgcmVzdW1lcyB3aGVyZSBpdCBsZWZ0IG9mZik/Jywgb3B0cy55ZXMgPz8gZmFsc2UpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIHsgc3VjY2VlZGVkLCBydW5QYXJhbXMgfTtcbn1cblxuLyoqXG4gKiBFeGVjdXRlIHRoZSBwb3N0LWluc3RhbGwgc3RlcHMgKHJlZ2lzdGVyIOKGkiBsb2FkcyDihpIgc21va2Ug4oaSIGV2ZW50cyDihpIgY3VzdG9tKS4gT25cbiAqIEVDMi9FS1MgdGhlIHJlZ2lzdGVyIHN0ZXAgKyB0aGUgZXZlbnRzIGJ1bmRsZSAoc3RvcmUtdG9rZW4g4oaSIHNldHVwLWV2ZW50cykgYXJlXG4gKiBTVVJGQUNFRCBhcyBvcmRlcmVkIG1hbnVhbCBuZXh0LXN0ZXBzIGluc3RlYWQgb2YgYXV0by1ydW46IGVjMiByZWdpc3RlciBtdXN0IHJ1blxuICogT04gdGhlIGJveCAodGhlIG1pbmlrdWJlIHVzZXIgb3ducyB0aGUgY2x1c3RlciksIGFuZCB0aGUgZXZlbnRzIGJ1bmRsZSBuZWVkcyBhXG4gKiByZWdpc3RlcmVkIHBsYXRmb3JtICsgQVdTIGNyZWRzLiAoZWtzIHJlZ2lzdGVyIGl0c2VsZiBwb3J0LWZvcndhcmRzLCBzbyBpdCBydW5zXG4gKiBmcm9tIGFueXdoZXJlIHdpdGgga3ViZWN0bCBhY2Nlc3MuKSBTZXRzIGV4aXRDb2RlIG9uIGEgc3RlcCBmYWlsdXJlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuUG9zdFN0ZXBzKFxuICBwb3N0U3RlcHM6IFBvc3RTdGVwW10sXG4gIHNraXBwZWRTdGVwczogU2tpcHBlZFN0ZXBbXSxcbiAgdGFyZ2V0OiBUYXJnZXRJZCxcbiAgY3dkOiBzdHJpbmcsXG4gIGFkbWluRW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBvcHRzOiB7IHllcz86IGJvb2xlYW47IGF1dG9SdW4/OiBib29sZWFuOyBhdXRvSW5pdD86IGJvb2xlYW4gfSxcbik6IFByb21pc2U8dm9pZD4ge1xuICAvLyBBV1MgdGFyZ2V0cyB3aXRoIGAtLWluaXQgYXV0b2A6IHRoZSBkZXBsb3kgc2VsZi1ydW5zIGluaXQtcGxhdGZvcm0sIHNvIHRoZXJlJ3Mgbm9cbiAgLy8gcmVnaXN0ZXIvbG9hZHMgc3RlcCB0byBzdXJmYWNlIGhlcmUg4oCUIGNvbmZpcm0gaXQgYW5kIHBvaW50IGF0IHdoZXJlIHRvIHdhdGNoLlxuICBpZiAob3B0cy5hdXRvSW5pdCAmJiB0YXJnZXQgPT09ICdlYzInKSB7XG4gICAgcHJpbnRJbmZvKCdcXG7inJMgSW5pdCBtb2RlOiBhdXRvIOKAlCB0aGUgaW5zdGFuY2UgcnVucyBpbml0LXBsYXRmb3JtIGl0c2VsZiBvbiBmaXJzdCBib290Jyk7XG4gICAgcHJpbnRJbmZvKCcgIChyZWdpc3RlciBhZG1pbiArIGJ1aWxkIGJvb3RzdHJhcCBpbWFnZSArIGxvYWQgcGx1Z2lucy9jb21wbGlhbmNlL3NhbXBsZXMpLicpO1xuICAgIHByaW50SW5mbygnICBJdCB0YWtlcyB+MzAtNjAgbWluOyB3YXRjaCBwcm9ncmVzczonKTtcbiAgICBwcmludEluZm8oJyAgICBhd3Mgc3NtIHN0YXJ0LXNlc3Npb24gLS10YXJnZXQgPEluc3RhbmNlSWQ+ICAgIyBJbnN0YW5jZUlkIHN0YWNrIG91dHB1dCcpO1xuICAgIHByaW50SW5mbygnICAgIHN1ZG8gdGFpbCAtZiAvdmFyL2xvZy91c2VyLWRhdGEubG9nJyk7XG4gIH0gZWxzZSBpZiAob3B0cy5hdXRvSW5pdCAmJiB0YXJnZXQgPT09ICdla3MnKSB7XG4gICAgcHJpbnRJbmZvKCdcXG7inJMgSW5pdCBtb2RlOiBhdXRvIOKAlCBzZXR1cC5zaCBydW5zIGluaXQtcGxhdGZvcm0gaW4gaXRzIGZpbmFsIHBoYXNlJyk7XG4gICAgcHJpbnRJbmZvKCcgIChyZWdpc3RlciBhZG1pbiArIGJ1aWxkIGJvb3RzdHJhcCBpbWFnZSArIGxvYWQgcGx1Z2lucy9jb21wbGlhbmNlL3NhbXBsZXMsJyk7XG4gICAgcHJpbnRJbmZvKCcgIG92ZXIgYSBrdWJlY3RsIHBvcnQtZm9yd2FyZCkuIFBhc3MgLS1pbml0IG1hbnVhbCB0byBydW4gaXQgeW91cnNlbGYgaW5zdGVhZC4nKTtcbiAgfVxuICBpZiAocG9zdFN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICBmb3IgKGNvbnN0IHMgb2Ygc2tpcHBlZFN0ZXBzKSBwcmludFdhcm5pbmcoYFNraXBwZWQgcG9zdC1zdGVwICR7cy5pZH06ICR7cy5yZWFzb259YCk7XG4gIGNvbnN0IGlzUmVtb3RlID0gKGlkOiBzdHJpbmcpOiBib29sZWFuID0+XG4gICAgKHRhcmdldCA9PT0gJ2VjMicgfHwgdGFyZ2V0ID09PSAnZWtzJykgJiYgKGlkID09PSAncmVnaXN0ZXInIHx8IGlkID09PSAnc3RvcmUtdG9rZW4nIHx8IGlkID09PSAnZXZlbnRzJyk7XG4gIGNvbnN0IHJ1bm5hYmxlID0gcG9zdFN0ZXBzLmZpbHRlcigocykgPT4gIWlzUmVtb3RlKHMuaWQpKTtcbiAgY29uc3QgcmVtb3RlID0gcG9zdFN0ZXBzLmZpbHRlcigocykgPT4gaXNSZW1vdGUocy5pZCkpO1xuICBpZiAocmVtb3RlLmxlbmd0aCA+IDApIHtcbiAgICBpZiAodGFyZ2V0ID09PSAnZWMyJykge1xuICAgICAgLy8gRUMyIHJ1bnMgdGhlIHBsYXRmb3JtIGFzIGEgZGVkaWNhdGVkIGBtaW5pa3ViZWAgdXNlciBpbnNpZGUgdGhlIGluc3RhbmNlOiB0aGVcbiAgICAgIC8vIGNsdXN0ZXIsIGl0cyBrdWJlY29uZmlnLCBhbmQgdGhlIGp3dC1zZWNyZXQgYWxsIGJlbG9uZyB0byB0aGF0IHVzZXIsIGFuZCB0aGVcbiAgICAgIC8vIHJlZ2lzdGVyIHN0ZXAgYnVpbGRzK3B1c2hlcyBpbWFnZXMgYWdhaW5zdCBpdC4gU28gaXQgTVVTVCBydW4gb24gdGhlIGJveCBhc1xuICAgICAgLy8gYG1pbmlrdWJlYCDigJQgcHJpbnQgdGhlIGV4YWN0IGxhbmRpbmcgc2VxdWVuY2UgcmF0aGVyIHRoYW4gYSBiYXJlIGNvbW1hbmQuXG4gICAgICBwcmludEluZm8oJ1xcbk5leHQg4oCUIGZpbmlzaCBzZXR1cCBPTiB0aGUgaW5zdGFuY2UgKGl0IGJ1aWxkcyBpbWFnZXMgKyByZWFkcyB0aGUgY2x1c3Rlciwgc28gaXQnKTtcbiAgICAgIHByaW50SW5mbygnY2Fubm90IHJ1biBmcm9tIGhlcmUpLiBMYW5kIG9uIHRoZSBib3gsIGJlY29tZSB0aGUgYG1pbmlrdWJlYCB1c2VyLCB0aGVuIHJ1biBpdDonKTtcbiAgICAgIHByaW50SW5mbygnICBhd3Mgc3NtIHN0YXJ0LXNlc3Npb24gLS10YXJnZXQgPEluc3RhbmNlSWQ+ICAgICAgIyBJbnN0YW5jZUlkIHN0YWNrIG91dHB1dCcpO1xuICAgICAgcHJpbnRJbmZvKCcgIHN1ZG8gLWl1IG1pbmlrdWJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG93bnMgdGhlIGNsdXN0ZXIgKyBkb2NrZXInKTtcbiAgICAgIHByaW50SW5mbygnICBjZCAvb3B0L3BpcGVsaW5lL3BpcGVsaW5lLWJ1aWxkZXIgICAgICAgICAgICAgICAgIyB0aGUgZGVwbG95ZWQgY2hlY2tvdXQnKTtcbiAgICAgIGZvciAoY29uc3QgcyBvZiByZW1vdGUpIHByaW50SW5mbyhgICAke3MuY29tbWFuZH1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZWtzOiBpbml0LXBsYXRmb3JtIHBvcnQtZm9yd2FyZHMgdG8gc3ZjL25naW54LCBzbyByZWdpc3RlciBydW5zIGZyb20gYW55d2hlcmUgd2l0aFxuICAgICAgLy8ga3ViZWN0bCBhY2Nlc3Mg4oCUIG5vIGluLVZQQyByZXF1aXJlbWVudCBhbmQgbm8gd2FpdGluZyBvbiB0aGUgQUxCL0ROUy4gKEEgLS13aXRoLWV2ZW50c1xuICAgICAgLy8gYnVuZGxlLCBpZiBwcmVzZW50LCBhZGRpdGlvbmFsbHkgbmVlZHMgQVdTIGNyZWRzICsgYSByZWdpc3RlcmVkIHBsYXRmb3JtLilcbiAgICAgIHByaW50SW5mbygnXFxuTmV4dCDigJQgcnVuIHdpdGgga3ViZWN0bCBhY2Nlc3MgdG8gdGhlIGNsdXN0ZXIgKGluIHRoaXMgb3JkZXIpOicpO1xuICAgICAgZm9yIChjb25zdCBzIG9mIHJlbW90ZSkgcHJpbnRJbmZvKGAgIOKAoiAke3MubGFiZWx9IOKAlCAke3MuY29tbWFuZH1gKTtcbiAgICB9XG4gIH1cbiAgaWYgKHJ1bm5hYmxlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAvLyBXaGVuIHRoZSBsb2FkcyB3ZXJlIHBpY2tlZCBpbnRlcmFjdGl2ZWx5IChhdXRvUnVuKSwgdGhlIHVzZXIgYWxyZWFkeSBvcHRlZCBpbiDigJQgc2tpcFxuICAvLyB0aGUgcmVkdW5kYW50IHNlY29uZCBjb25maXJtLiBGbGFnLWRyaXZlbiAvIG5vbi1pbnRlcmFjdGl2ZSBydW5zIHN0aWxsIGdhdGUgaGVyZS5cbiAgaWYgKG9wdHMuYXV0b1J1biB8fCBhd2FpdCBjb25maXJtKGBcXG5SdW4gJHtydW5uYWJsZS5sZW5ndGh9IHBvc3QtaW5zdGFsbCBzdGVwKHMpIG5vdz9gLCBvcHRzLnllcyA/PyBmYWxzZSkpIHtcbiAgICBpZiAob3B0cy5hdXRvUnVuKSBwcmludEluZm8oYFxcblJ1bm5pbmcgdGhlICR7cnVubmFibGUubGVuZ3RofSBwb3N0LWluc3RhbGwgc3RlcChzKSB5b3Ugc2VsZWN0ZWTigKZgKTtcbiAgICBmb3IgKGNvbnN0IHMgb2YgcnVubmFibGUpIHtcbiAgICAgIHByaW50U2VjdGlvbihgUG9zdC1zdGVwOiAke3MubGFiZWx9YCk7XG4gICAgICAvLyByZWdpc3RlciAobG9jYWwvbWluaWt1YmUpIGxvZ3MgaW50byB0aGUgcGxhdGZvcm0sIHNvIGl0IG5lZWRzIHRoZSBhZG1pbiBjcmVkc1xuICAgICAgLy8gKFBMQVRGT1JNX0lERU5USUZJRVIgLyBQTEFURk9STV9QQVNTV09SRCkgb24gdG9wIG9mIGl0cyBzdGVwIGVudi5cbiAgICAgIGNvbnN0IG5lZWRzQ3JlZHMgPSBzLmlkID09PSAncmVnaXN0ZXInIHx8IHMuaWQgPT09ICdzdG9yZS10b2tlbic7XG4gICAgICBjb25zdCBlbnYgPSBuZWVkc0NyZWRzID8geyAuLi5zLmVudiwgLi4uYWRtaW5FbnYgfSA6IHMuZW52O1xuICAgICAgLy8gTG9hZHMvc21va2UgYXJlIG5vaXN5ICsgbm9uLWludGVyYWN0aXZlIOKGkiBydW4gUVVJRVQgKGNhcHR1cmUsIHNob3cgb25seSBvblxuICAgICAgLy8gZmFpbHVyZSkuIEV4Y2VwdGlvbjogYSByZWdpc3RlciB3aXRoIG5vIGFkbWluIGNyZWRzIHByb21wdHMsIHNvIGl0IG11c3Qgc3RyZWFtLlxuICAgICAgY29uc3QgaW50ZXJhY3RpdmVSZWdpc3RlciA9IHMuaWQgPT09ICdyZWdpc3RlcicgJiYgIWFkbWluRW52LlBMQVRGT1JNX0lERU5USUZJRVI7XG4gICAgICBjb25zdCBxdWlldCA9ICFpbnRlcmFjdGl2ZVJlZ2lzdGVyO1xuICAgICAgaWYgKHF1aWV0KSBwcmludEluZm8oYCR7cy5jb21tYW5kfVxcbiAg4oCmcnVubmluZyAob3V0cHV0IHNob3duIG9ubHkgaWYgaXQgZmFpbHMpYCk7XG4gICAgICBlbHNlIHByaW50SW5mbyhzLmNvbW1hbmQpO1xuICAgICAgY29uc3QgeyBjb2RlLCB0YWlsIH0gPSBhd2FpdCBydW5TY3JpcHQocy5jb21tYW5kLCBjd2QsIHsgcXVpZXQsIGNhcHR1cmU6IGZhbHNlLCBlbnYgfSk7XG4gICAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgICBpZiAocXVpZXQgJiYgdGFpbCkgeyBwcmludEVycm9yKCdcXG4tLS0gbGFzdCBvdXRwdXQgLS0tJyk7IHByaW50SW5mbyh0YWlsKTsgfVxuICAgICAgICBwcmludEVycm9yKGBcXG5Qb3N0LXN0ZXAgJyR7cy5pZH0nIGZhaWxlZCAoZXhpdCAke2NvZGV9KS4gVGhlIHBsYXRmb3JtIGlzIGRlcGxveWVkOyBmaXggYW5kIHJlLXJ1biB0aGUgc3RlcCBtYW51YWxseS5gKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcHJpbnRTdWNjZXNzKGAke3MuaWR9IOKck2ApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBwcmludEluZm8oJ1xcblNraXBwZWQgcG9zdC1pbnN0YWxsIHN0ZXBzLiBSdW4gdGhlIGNvbW1hbmRzIGFib3ZlIG1hbnVhbGx5IHdoZW4gcmVhZHkuJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBTcGFyc2UtY2xvbmUgdGhlIHBsYXRmb3JtIHJlcG8gKHdoZW4gLS1yZXBvLCBvciBhY2NlcHRlZCB2aWEgdGhlIGludGVyYWN0aXZlXG4gKiBvZmZlciksIHJlcG9pbnQgY3dkIGludG8gaXQsIGFuZCB2ZXJpZnkgdGhlIGRlcGxveSBlbnRyeXBvaW50IGV4aXN0cy4gT3ducyB0aGVcbiAqIGN3ZC9ib290c3RyYXBwZWQgc3RhdGUuIFNldHMgZXhpdENvZGUgb24gYSBoYXJkIGZhaWx1cmUgKGNsb25lIGVycm9yIC8gbWlzc2luZ1xuICogZW50cnlwb2ludCksIG1hdGNoaW5nIHRoZSBvbGQgaW5saW5lIGJlaGF2aW9yOyBhIHBsYWluIGRlY2xpbmUgbGVhdmVzIGV4aXRDb2RlXG4gKiB1bnRvdWNoZWQuIFJldHVybnMgb2s6ZmFsc2Ugd2hlbiB0aGUgY2FsbGVyIG11c3QgYWJvcnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBib290c3RyYXBBbmRMb2NhdGUoXG4gIHNwZWM6IFRhcmdldFNwZWMsXG4gIGJvb3RzdHJhcDogQm9vdHN0cmFwU3BlYyxcbiAgYm9vdHN0cmFwQ21kOiBzdHJpbmcgfCBudWxsLFxuICBzcGFyc2VQYXRoczogcmVhZG9ubHkgc3RyaW5nW10sXG4gIHN0YXJ0Q3dkOiBzdHJpbmcsXG4gIG9wdHM6IHsgeWVzPzogYm9vbGVhbiB9LFxuKTogUHJvbWlzZTx7IGN3ZDogc3RyaW5nOyBib290c3RyYXBwZWQ6IGJvb2xlYW47IG9rOiBib29sZWFuIH0+IHtcbiAgbGV0IGN3ZCA9IHN0YXJ0Q3dkO1xuICBsZXQgYm9vdHN0cmFwcGVkID0gZmFsc2U7XG4gIC8vIFNoYXJlZCBieSBgLS1yZXBvYCBhbmQgdGhlIGludGVyYWN0aXZlIG9mZmVyLiBSZXBvaW50cyBjd2QgKyBzZXRzIGJvb3RzdHJhcHBlZDtcbiAgLy8gYGJvb3RzdHJhcHBlZGAgcmVjb3JkcyB3aGV0aGVyIHdlIGNyZWF0ZWQgdGhlIGNsb25lICh2cy4gYW4gZXhpc3RpbmcgY2hlY2tvdXQpIOKAlFxuICAvLyBvbmx5IHRoZW4gY2FuIHRoZSBjYWxsZXIgYWRkaXRpdmVseSBzcGFyc2UtZmV0Y2ggbG9hZCBmb2xkZXJzLlxuICBjb25zdCBib290c3RyYXBDbG9uZSA9IGFzeW5jICgpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICBjb25zdCBjbWQgPSBib290c3RyYXBDb21tYW5kKGJvb3RzdHJhcCk7XG4gICAgcHJpbnRTZWN0aW9uKCdCb290c3RyYXAnKTtcbiAgICBwcmludEluZm8oY21kKTtcbiAgICBjb25zdCB7IGNvZGUgfSA9IGF3YWl0IHJ1blNjcmlwdChjbWQsIGN3ZCwgeyBjYXB0dXJlOiBmYWxzZSB9KTtcbiAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgcHJpbnRFcnJvcihgXFxuVGhlIGNsb25lIGRpZG4ndCBmaW5pc2ggKGV4aXQgJHtjb2RlfSkuIERvdWJsZS1jaGVjayB0aGUgcmVwbyBVUkwgLyByZWYgKG9yIHlvdXIgbmV0d29yaykgYW5kIGdpdmUgaXQgYW5vdGhlciBnby5gKTtcbiAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjd2QgPSBwYXRoLnJlc29sdmUoY3dkLCBib290c3RyYXAud29ya2Rpcik7XG4gICAgYm9vdHN0cmFwcGVkID0gdHJ1ZTtcbiAgICBwcmludFN1Y2Nlc3MoYFJlcG8gaXMgcmVhZHkg4oCUIGNvbnRpbnVpbmcgZnJvbSAke2N3ZH1gKTtcbiAgICBjb25zdCBhYnNlbnQgPSBzcGFyc2VQYXRocy5maWx0ZXIoKHApID0+ICFleGlzdHNTeW5jKHBhdGguam9pbihjd2QsIHApKSk7XG4gICAgaWYgKGFic2VudC5sZW5ndGggPiAwKSB7XG4gICAgICBwcmludEVycm9yKGBcXG5UaGUgc3BhcnNlIGNsb25lIGlzIG1pc3NpbmcgJHthYnNlbnQuam9pbignLCAnKX0g4oCUIHRoYXQgcmVmIG1heSBub3QgaGF2ZSB0aG9zZSBmb2xkZXJzLiBUcnkgYSBkaWZmZXJlbnQgLS1yZWYuYCk7XG4gICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgLy8gYC0tcmVwb2A6IGNsb25lIHVwIGZyb250IChtdXN0IHByZWNlZGUgdGhlIGVudHJ5cG9pbnQgY2hlY2spLlxuICBpZiAoYm9vdHN0cmFwQ21kKSB7XG4gICAgcHJpbnRJbmZvKGBcXG5Cb290c3RyYXAg4oaSIGNsb25lICR7Ym9vdHN0cmFwLnJlcG99IEAgJHtib290c3RyYXAucmVmfSBpbnRvICR7Ym9vdHN0cmFwLndvcmtkaXJ9IChzcGFyc2UpLmApO1xuICAgIGlmICghKGF3YWl0IGNvbmZpcm0oJ0dvIGFoZWFkIHdpdGggdGhlIGNsb25lPycsIG9wdHMueWVzID8/IGZhbHNlKSkpIHtcbiAgICAgIHByaW50V2FybmluZygnTm8gcHJvYmxlbSDigJQgbm90aGluZyB3YXMgY2hhbmdlZC4gUmUtcnVuIHdoZW5ldmVyIHlvdVxcJ3JlIHJlYWR5LicpO1xuICAgICAgcmV0dXJuIHsgY3dkLCBib290c3RyYXBwZWQsIG9rOiBmYWxzZSB9O1xuICAgIH1cbiAgICBpZiAoIShhd2FpdCBib290c3RyYXBDbG9uZSgpKSkgcmV0dXJuIHsgY3dkLCBib290c3RyYXBwZWQsIG9rOiBmYWxzZSB9O1xuICB9XG5cbiAgLy8gVGhlIGRlcGxveSBlbnRyeXBvaW50IG11c3QgZXhpc3QgcmVsYXRpdmUgdG8gY3dkLiBJZiBpdCBkb2Vzbid0IGFuZCB3ZSBoYXZlbid0XG4gIC8vIGJvb3RzdHJhcHBlZCwgZ3JhY2VmdWxseSBPRkZFUiB0byBjbG9uZSAoaW50ZXJhY3RpdmUgb25seSkgc28gYSBmcmVzaCBtYWNoaW5lIGNhblxuICAvLyBwcm9jZWVkIHdpdGhvdXQgcmUtcnVubmluZyB3aXRoIC0tcmVwby5cbiAgaWYgKCFlbnRyeXBvaW50RXhpc3RzKHNwZWMsIGN3ZCkpIHtcbiAgICBjb25zdCBpbnRlcmFjdGl2ZSA9IEJvb2xlYW4ocHJvY2Vzcy5zdGRpbi5pc1RUWSkgJiYgIW9wdHMueWVzO1xuICAgIGlmICghYm9vdHN0cmFwQ21kICYmIGludGVyYWN0aXZlICYmIGdpdEF2YWlsYWJsZSgpKSB7XG4gICAgICBwcmludEluZm8oYFxcbkxvb2tzIGxpa2UgeW91J3JlIG5vdCBpbnNpZGUgYSBwaXBlbGluZS1idWlsZGVyIGNoZWNrb3V0LCBzbyB0aGUgJHtzcGVjLmxhYmVsfSBkZXBsb3kgc2NyaXB0cyBhcmVuJ3QgaGVyZSB5ZXQuYCk7XG4gICAgICBpZiAoYXdhaXQgY29uZmlybShgV2FudCBtZSB0byBzcGFyc2UtY2xvbmUgdGhlbSBpbnRvICR7Ym9vdHN0cmFwLndvcmtkaXJ9IGFuZCBrZWVwIGdvaW5nP2AsIGZhbHNlKSkge1xuICAgICAgICBpZiAoIShhd2FpdCBib290c3RyYXBDbG9uZSgpKSkgcmV0dXJuIHsgY3dkLCBib290c3RyYXBwZWQsIG9rOiBmYWxzZSB9O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWVudHJ5cG9pbnRFeGlzdHMoc3BlYywgY3dkKSkge1xuICAgICAgcHJpbnRXYXJuaW5nKGBcXG5JIGNvdWxkbid0IGZpbmQgJHtzcGVjLmRpcn0vJHtzcGVjLmVudHJ5cG9pbnR9IGZyb20gJHtjd2R9LmApO1xuICAgICAgcHJpbnRJbmZvKCdUd28gZWFzeSB3YXlzIGZvcndhcmQ6Jyk7XG4gICAgICBwcmludEluZm8oJyAg4oCiIGNkIGludG8geW91ciBwaXBlbGluZS1idWlsZGVyIGNoZWNrb3V0IGFuZCByZS1ydW4sIG9yJyk7XG4gICAgICBwcmludEluZm8oYCAg4oCiIGFkZCAtLXJlcG8gYW5kIEknbGwgYm9vdHN0cmFwIGEgZnJlc2ggc3BhcnNlIGNsb25lIGZvciB5b3Uke2dpdEF2YWlsYWJsZSgpID8gJy4nIDogJyAob25jZSBnaXQgaXMgaW5zdGFsbGVkKS4nfWApO1xuICAgICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgICByZXR1cm4geyBjd2QsIGJvb3RzdHJhcHBlZCwgb2s6IGZhbHNlIH07XG4gICAgfVxuICB9XG4gIHJldHVybiB7IGN3ZCwgYm9vdHN0cmFwcGVkLCBvazogdHJ1ZSB9O1xufVxuXG4vKipcbiAqIEludGVyYWN0aXZlIG9wdC1pbiBsb2Fkcywgb2ZmZXJlZCBBRlRFUiB0aGUgY2xvbmUgKHNvIHdlIG9ubHkgYXNrIG9uY2UgdGhlIG9wZXJhdG9yXG4gKiBoYXMgYWdyZWVkIHRvIHByb2NlZWQpLiBQcm9tcHRzIHBlciBsb2FkLCBhZGRpdGl2ZWx5IHNwYXJzZS1mZXRjaGVzIHRoZSBwaWNrZWRcbiAqIGZvbGRlcnMgaW50byBhIGJvb3RzdHJhcHBlZCBzcGFyc2UgY2xvbmUsIHRoZW4gcmUtcmVzb2x2ZXMgdGhlIHBvc3QtaW5zdGFsbCBzdGVwc1xuICogd2l0aCB0aGUgc2VsZWN0aW9ucy4gUmV0dXJucyB0aGUgY2hvc2VuIGlkcyArIHRoZSByZWNvbXB1dGVkIHN0ZXBzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUxvYWRzSW50ZXJhY3RpdmVseShcbiAgdGFyZ2V0OiBUYXJnZXRJZCxcbiAgdXJsOiBzdHJpbmcgfCBudWxsLFxuICByZWdpb246IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgY3dkOiBzdHJpbmcsXG4gIGJvb3RzdHJhcHBlZDogYm9vbGVhbixcbiAgYm9vdHN0cmFwOiBCb290c3RyYXBTcGVjLFxuICBwb3N0U3RlcEZsYWdzOiB7IGluaXQ6IGJvb2xlYW47IGF1dG9Jbml0OiBib29sZWFuOyBidWlsZEJvb3RzdHJhcDogYm9vbGVhbjsgc21va2VUZXN0OiBib29sZWFuOyBldmVudHM6IGJvb2xlYW47IHN0ZXBzOiBzdHJpbmdbXSB9LFxuKTogUHJvbWlzZTx7IGVuYWJsZWRMb2FkSWRzOiBzdHJpbmdbXTsgc3RlcHM6IFBvc3RTdGVwW107IHNraXBwZWQ6IFNraXBwZWRTdGVwW10gfT4ge1xuICBjb25zdCBwcm9tcHRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIHBsdWdpbnM6ICdMb2FkIHBsdWdpbnM/JyxcbiAgICBzYW1wbGVzOiAnTG9hZCBzYW1wbGUgcGlwZWxpbmVzPycsXG4gICAgY29tcGxpYW5jZTogJ0xvYWQgY29tcGxpYW5jZSBydWxlcz8nLFxuICB9O1xuICBwcmludFNlY3Rpb24oJ09wdGlvbmFsIHBvc3QtaW5zdGFsbCBsb2FkcycpO1xuICBjb25zdCBjaG9zZW46IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgcyBvZiBMT0FEX1NURVBTKSB7XG4gICAgaWYgKGF3YWl0IGNvbmZpcm0ocHJvbXB0c1tzLmlkXSA/PyBgTG9hZCAke3MuaWR9P2AsIGZhbHNlKSkgY2hvc2VuLnB1c2gocy5pZCk7XG4gIH1cbiAgLy8gQWRkaXRpdmUgc3BhcnNlIHJlLXN5bmM6IG1hdGVyaWFsaXplIE9OTFkgdGhlIHBpY2tlZCBsb2FkcycgZm9sZGVycyAodGhlIHBhcnRpYWxcbiAgLy8gY2xvbmUgZmV0Y2hlcyB0aGVpciBibG9icyBvbiBkZW1hbmQpLiBPbmx5IHdoZW4gd2UgY3JlYXRlZCBhIFNQQVJTRSBjbG9uZSDigJQgYVxuICAvLyBub3JtYWwgY2hlY2tvdXQgYWxyZWFkeSBoYXMgZXZlcnkgZm9sZGVyLCBhbmQgdGhlIGdpdDwyLjI3IGZ1bGwtY2xvbmUgZmFsbGJhY2tcbiAgLy8gKGJvb3RzdHJhcC5mdWxsKSBpcyBub24tc3BhcnNlLCB3aGVyZSBgc3BhcnNlLWNoZWNrb3V0IGFkZGAgd291bGQgc3dpdGNoIGl0IHRvXG4gIC8vIGNvbmUgbW9kZSBhbmQgUFJVTkUgdGhlIGFscmVhZHktbWF0ZXJpYWxpemVkIGRlcGxveSBmb2xkZXJzLlxuICBpZiAoYm9vdHN0cmFwcGVkICYmICFib290c3RyYXAuZnVsbCkge1xuICAgIGNvbnN0IGFic2VudCA9IHNwYXJzZVBhdGhzRm9yKHRhcmdldCwgY2hvc2VuKS5maWx0ZXIoKHApID0+ICFleGlzdHNTeW5jKHBhdGguam9pbihjd2QsIHApKSk7XG4gICAgaWYgKGFic2VudC5sZW5ndGggPiAwKSB7XG4gICAgICBwcmludFNlY3Rpb24oJ0ZldGNoaW5nIHNlbGVjdGVkIGxvYWQgZm9sZGVycycpO1xuICAgICAgY29uc3QgYWRkQ21kID0gYGdpdCBzcGFyc2UtY2hlY2tvdXQgYWRkICR7YWJzZW50Lm1hcCgocCkgPT4gYCcke3B9J2ApLmpvaW4oJyAnKX0gJiYgZ2l0IGNoZWNrb3V0ICcke2Jvb3RzdHJhcC5yZWZ9J2A7XG4gICAgICBwcmludEluZm8oYWRkQ21kKTtcbiAgICAgIGNvbnN0IHsgY29kZSB9ID0gYXdhaXQgcnVuU2NyaXB0KGFkZENtZCwgY3dkLCB7IGNhcHR1cmU6IGZhbHNlIH0pO1xuICAgICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgcHJpbnRXYXJuaW5nKGBDb3VsZG4ndCBmZXRjaCAke2Fic2VudC5qb2luKCcsICcpfSDigJQgdGhlIG1hdGNoaW5nIGxvYWQgc3RlcChzKSBtYXkgZmFpbC4gUmUtcnVuIHdpdGggLS1yZXBvIHRvIHJlZnJlc2ggdGhlIGNsb25lLmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVQb3N0U3RlcHMoe1xuICAgIHRhcmdldCxcbiAgICB1cmwsXG4gICAgcmVnaW9uLFxuICAgIGVuYWJsZWRMb2FkSWRzOiBjaG9zZW4sXG4gICAgLi4ucG9zdFN0ZXBGbGFncyxcbiAgICBidWlsZEJvb3RzdHJhcDogcG9zdFN0ZXBGbGFncy5idWlsZEJvb3RzdHJhcCB8fCBjaG9zZW4uaW5jbHVkZXMoJ3BsdWdpbnMnKSxcbiAgfSk7XG4gIHJldHVybiB7IGVuYWJsZWRMb2FkSWRzOiBjaG9zZW4sIHN0ZXBzOiByZXNvbHZlZC5zdGVwcywgc2tpcHBlZDogcmVzb2x2ZWQuc2tpcHBlZCB9O1xufVxuXG4vKipcbiAqIFJlZGFjdCBzZWNyZXQgcGFyYW0gdmFsdWVzIChlLmcuIHRoZSBnaGNyIHRva2VuKSBmcm9tIGNhcHR1cmVkIGRlcGxveSBvdXRwdXRcbiAqIGJlZm9yZSBpdCBpcyBzZW50IHRvIHRoZSBMTE0gZm9yIGRpYWdub3Npcy4gVGhlIGRlcGxveSBydW5zIHdpdGggc2VjcmV0c1xuICogdW5tYXNrZWQsIHNvIGFsdGhvdWdoIHRoZSBjdXJyZW50IHNjcmlwdHMgZG9uJ3QgZWNobyB0aGVtLCB0aGlzIGtlZXBzIGEgZnV0dXJlXG4gKiBzY3JpcHQncyBzdHJheSBlY2hvIChvciBhIHZlcmJvc2Ugc3ViLXRvb2wpIGZyb20gY3Jvc3NpbmcgdGhlIHRoaXJkLXBhcnR5LUxMTVxuICogYm91bmRhcnkuXG4gKi9cbmZ1bmN0aW9uIHJlZGFjdFNlY3JldHModGV4dDogc3RyaW5nLCBzcGVjOiBUYXJnZXRTcGVjLCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogc3RyaW5nIHtcbiAgbGV0IG91dCA9IHRleHQ7XG4gIGZvciAoY29uc3QgaW5wdXQgb2YgWy4uLnNwZWMucmVxdWlyZWQsIC4uLnNwZWMub3B0aW9uYWxdKSB7XG4gICAgaWYgKCFpbnB1dC5zZWNyZXQpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHZhbHVlID0gcGFyYW1zW2lucHV0LmtleV07XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID49IDQpIG91dCA9IG91dC5zcGxpdCh2YWx1ZSkuam9pbignKioqJyk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIGBwcm92aXNpb25gIGNvbW1hbmQg4oCUIGFuIEFJLWFzc2lzdGVkIGluc3RhbGxlciBmb3IgdGhlIFBpcGVsaW5lXG4gKiBCdWlsZGVyIFBMQVRGT1JNIChsb2NhbC9taW5pa3ViZS9FQzIvRUtTKS4gSXQgcHJpbnRzIHRoZSBhc3NlbWJsZWQgcGxhblxuICogKHByZXJlcSBjaGVja3MsIE5MLWdvYWwgcGFyc2luZywgY29tbWFuZCBhc3NlbWJseSkgYW5kIHRoZW4gREVQTE9ZUywgZ2F0ZWQgYnlcbiAqIGNvbmZpcm1hdGlvbiBwcm9tcHRzIChgLS15ZXNgIHRvIGF1dG8tYWNjZXB0OyBgLS1qc29uYCBpcyB0aGUgb25seSBub24tZXhlY3V0aW5nXG4gKiBtb2RlLCBwcmludGluZyB0aGUgcGxhbiBmb3IgdG9vbGluZykuIFdpdGggYC0tcmVwb2AgaXQgY2FuIGJvb3RzdHJhcCBhIGZyZXNoXG4gKiBtYWNoaW5lIGJ5IHNwYXJzZWx5IGNsb25pbmcgb25seSB0aGUgZGVwbG95IGZvbGRlcnMgdGhlIHNlbGVjdGVkIHRhcmdldCArXG4gKiBvcHRpb25zIG5lZWQsIHRoZW4gcnVucyBwb3N0LWluc3RhbGwgc3RlcHMgKHJlZ2lzdGVyIGFkbWluLCBvcHQtaW4gbG9hZHMsXG4gKiBzbW9rZSB0ZXN0LCBjdXN0b20gY29tbWFuZHMpLiBgLS10ZWFyZG93bmAgcmVtb3ZlcyBhIGRlcGxveW1lbnQgaW5zdGVhZC5cbiAqXG4gKiBAcGFyYW0gcHJvZ3JhbSAtIFRoZSByb290IENvbW1hbmRlciBwcm9ncmFtIGluc3RhbmNlIHRvIGF0dGFjaCB0aGUgY29tbWFuZCB0by5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3Zpc2lvbihwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIHByb2dyYW1cbiAgICAuY29tbWFuZCgncHJvdmlzaW9uJylcbiAgICAuZGVzY3JpcHRpb24oJ0FJLWFzc2lzdGVkIGluc3RhbGxlciBmb3IgdGhlIHBsYXRmb3JtIChsb2NhbC9taW5pa3ViZS9FQzIvRUtTKTogZGVwbG95cyBpdCAoZ2F0ZWQgYnkgY29uZmlybWF0aW9uIHByb21wdHMpLCBvciAtLXRlYXJkb3duIHRvIHJlbW92ZScpXG4gICAgLm9wdGlvbignLXQsIC0tdGFyZ2V0IDx0YXJnZXQ+JywgYERlcGxveSB0YXJnZXQ6ICR7VEFSR0VUX0lEUy5qb2luKCcgfCAnKX1gKVxuICAgIC5vcHRpb24oJy1wLCAtLXByb21wdCA8dGV4dD4nLCAnTmF0dXJhbC1sYW5ndWFnZSBnb2FsIChwYXJzZWQgaW50byBwYXJhbXMgd2hlbiBhbiBBSSBrZXkgaXMgc2V0KScpXG4gICAgLm9wdGlvbignLS1yZWdpb24gPHJlZ2lvbj4nLCAnQVdTIHJlZ2lvbiAoRUMyL0VLUyknKVxuICAgIC5vcHRpb24oJy0tZG9tYWluIDxkb21haW4+JywgJ0Z1bGx5LXF1YWxpZmllZCBkb21haW4gbmFtZSAoRUMyL0VLUyknKVxuICAgIC5vcHRpb24oJy0taG9zdGVkLXpvbmUtaWQgPGlkPicsICdQdWJsaWMgUm91dGUgNTMgaG9zdGVkIHpvbmUgSUQgKEVDMi9FS1MpJylcbiAgICAub3B0aW9uKCctLWRlcGxveS1tb2RlIDxtb2RlPicsICdwdWJsaWMgfCBwcml2YXRlIChFQzIvRUtTKScpXG4gICAgLm9wdGlvbignLS1rZXktcGFpciA8bmFtZT4nLCAnRUMyIGtleSBwYWlyIChFQzIpJylcbiAgICAub3B0aW9uKCctLWluc3RhbmNlLXR5cGUgPHR5cGU+JywgJ0VDMiBpbnN0YW5jZSB0eXBlIChFQzIpJylcbiAgICAub3B0aW9uKCctLWdoY3ItdG9rZW4gPHRva2VuPicsICdHaXRIdWIgUEFUIChyZWFkOnBhY2thZ2VzKSDigJQgbWFza2VkIGluIG91dHB1dCcpXG4gICAgLm9wdGlvbignLS1lbWFpbCcsICdFbmFibGUgU0VTIHRyYW5zYWN0aW9uYWwgZW1haWwgKG9uIGJ5IGRlZmF1bHQgZm9yIEFXUyknKVxuICAgIC5vcHRpb24oJy0tbm8tZW1haWwnLCAnU2tpcCBTRVMgKHRyYW5zYWN0aW9uYWwgZW1haWwgaXMgcHJvdmlzaW9uZWQgYnkgZGVmYXVsdCBvbiBBV1MpJylcbiAgICAub3B0aW9uKCctLWVtYWlsLWZyb20gPGFkZHI+JywgJ1NFUyBGcm9tIGFkZHJlc3MnKVxuICAgIC5vcHRpb24oJy0tZW1haWwtZnJvbS1uYW1lIDxuYW1lPicsICdTRVMgRnJvbSBkaXNwbGF5IG5hbWUnKVxuICAgIC5vcHRpb24oJy0tYWxlcnQtZW1haWwgPGFkZHI+JywgJ1N1YnNjcmliZSBhbiBhZGRyZXNzIHRvIHRoZSBib3VuY2UvY29tcGxhaW50IFNOUyB0b3BpYycpXG4gICAgLm9wdGlvbignLS1za2lwLXNlcy1pZGVudGl0eScsICdTa2lwIFNFUyBpZGVudGl0eSBjcmVhdGlvbiAoZG9tYWluIGFscmVhZHkgdmVyaWZpZWQpJylcbiAgICAub3B0aW9uKCctLWFpLXByb3ZpZGVyIDxwcm92aWRlcj4nLCAnQUkgcHJvdmlkZXIgKGFudGhyb3BpY3xvcGVuYWl8Z29vZ2xlfHhhaXxiZWRyb2NrKScpXG4gICAgLm9wdGlvbignLS1tb2RlbCA8bW9kZWw+JywgJ0FJIG1vZGVsIGlkJylcbiAgICAub3B0aW9uKCctLWRpYWdub3NlIDxmaWxlPicsICdEaWFnbm9zZSBhIENsb3VkRm9ybWF0aW9uL2RlcGxveSBmYWlsdXJlIGZyb20gYSBmaWxlIChuZWVkcyBhbiBBSSBrZXkpJylcbiAgICAub3B0aW9uKCcteSwgLS15ZXMnLCAnQXV0by1hY2NlcHQgYWxsIGNvbmZpcm1hdGlvbiBwcm9tcHRzIChmb3IgQ0kgLyBub24taW50ZXJhY3RpdmUpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1yZXRyaWVzIDxuPicsICdBdXRvLWZpeCArIHJldHJ5IGF0dGVtcHRzIGFmdGVyIGEgZmFpbHVyZSAoZGVwbG95IHNjcmlwdHMgYXJlIGlkZW1wb3RlbnQpJywgJzEnKVxuICAgIC5vcHRpb24oJy0tdGVhcmRvd24nLCAnVGVhciBkb3duIGFuIGV4aXN0aW5nIGRlcGxveW1lbnQgaW5zdGVhZCBvZiBjcmVhdGluZyBvbmUgKGdhdGVkOyBBV1MgdGFyZ2V0cyByZXF1aXJlIGEgdHlwZWQgY29uZmlybWF0aW9uKScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0tc3RhY2stbmFtZSA8bmFtZT4nLCAnQ2xvdWRGb3JtYXRpb24gc3RhY2sgbmFtZSAoRUMyKSBmb3IgdGhlIGRlcGxveSBBTkQgdGVhcmRvd24g4oCUIGRlZmF1bHRzIHRvIHBpcGVsaW5lLWJ1aWxkZXIgKHNldCBpdCB0byBydW4gYSBzZWNvbmQgZW52aXJvbm1lbnQpJylcbiAgICAub3B0aW9uKCctLWNsdXN0ZXItbmFtZSA8bmFtZT4nLCAnRUtTIGNsdXN0ZXIgbmFtZSBmb3IgdGhlIGRlcGxveSBBTkQgdGVhcmRvd24g4oCUIGRlZmF1bHRzIHRvIHBpcGVsaW5lLWJ1aWxkZXInKVxuICAgIC5vcHRpb24oJy0tZm9yY2UnLCAnU2tpcCB0aGUgdGVhcmRvd24gdHlwZWQtY29uZmlybWF0aW9uIChEQU5HRVJPVVMg4oCUIGZvciBDSS9hdXRvbWF0aW9uIG9ubHkpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1pbml0IDxtb2RlPicsICdQb3N0LWRlcGxveSBpbml0aWFsaXphdGlvbjogYXV0byAoREVGQVVMVCDigJQgcmVnaXN0ZXIgYWRtaW4gKyBsb2FkIHBsdWdpbnMvY29tcGxpYW5jZS9zYW1wbGVzOyBvbiBlYzIgdGhlIGluc3RhbmNlIGRvZXMgaXQgaXRzZWxmIG9uIGZpcnN0IGJvb3QpLCBtYW51YWwgKGRvblxcJ3Qgc2VsZi1pbml0IOKAlCBzdXJmYWNlIHRoZSBzdGVwIGZvciB5b3UgdG8gcnVuLCBlLmcuIHRvIHNldCByZWFsIGFkbWluIGNyZWRzKSwgb3Igc2tpcCAoZG8gbm90aGluZykuIGxvY2FsL21pbmlrdWJlL2VrcyBydW4gaW5pdCB2aWEgcHJvdmlzaW9uIHVubGVzcyBza2lwLicpXG4gICAgLy8gRGVwcmVjYXRlZCBhbGlhc2VzIOKAlCBrZXB0IHdvcmtpbmcgZm9yIGJhY2stY29tcGF0OyAtLWluaXQgaXMgdGhlIGRvY3VtZW50ZWQgZm9ybS5cbiAgICAub3B0aW9uKCctLW5vLWluaXQnLCAnW2RlcHJlY2F0ZWRdIGFsaWFzIGZvciAtLWluaXQgc2tpcCcpXG4gICAgLm9wdGlvbignLS1hdXRvLWluaXQnLCAnW2RlcHJlY2F0ZWRdIGFsaWFzIGZvciAtLWluaXQgYXV0bycpXG4gICAgLm9wdGlvbignLS1uby1hdXRvLWluaXQnLCAnW2RlcHJlY2F0ZWRdIGFsaWFzIGZvciAtLWluaXQgbWFudWFsJylcbiAgICAvLyBCb290c3RyYXAgKHNwYXJzZSBjbG9uZSkg4oCUIHByb3Zpc2lvbiBhIGZyZXNoIG1hY2hpbmUgaW4gb25lIGNvbW1hbmQuXG4gICAgLm9wdGlvbignLS1yZXBvIFt1cmxdJywgJ0Jvb3RzdHJhcDogZ2l0LWNsb25lIHRoZSBwbGF0Zm9ybSByZXBvIGZpcnN0IChzcGFyc2Ug4oCUIG9ubHkgdGhlIG5lZWRlZCBkZXBsb3kgZm9sZGVycyksIHRoZW4gcnVuIGZyb20gaXQgKG5vIHZhbHVlID0gdGhlIHVwc3RyZWFtIGRlZmF1bHQpJylcbiAgICAub3B0aW9uKCctLXJlZiA8cmVmPicsICdHaXQgYnJhbmNoL3RhZyB0byBjaGVjayBvdXQgd2hlbiBib290c3RyYXBwaW5nIChkZWZhdWx0OiBtYWluKScpXG4gICAgLm9wdGlvbignLS13b3JrZGlyIDxkaXI+JywgJ0RpcmVjdG9yeSB0byBjbG9uZSBpbnRvIC8gcnVuIGZyb20gd2hlbiBib290c3RyYXBwaW5nIChkZWZhdWx0OiBwaXBlbGluZS1idWlsZGVyKScpXG4gICAgLy8gUG9zdC1pbnN0YWxsIGxvYWRzIOKAlCBlYWNoIG9wdC1pbiBzdGVwIGFsc28gYWRkcyBpdHMgZGVwbG95IGZvbGRlciB0byB0aGUgc3BhcnNlIGNsb25lLlxuICAgIC5vcHRpb24oJy0td2l0aC1wbHVnaW5zJywgJ1Bvc3QtaW5zdGFsbDogYnVpbGQgKyBsb2FkIHBsdWdpbnMgKGFkZHMgZGVwbG95L3BsdWdpbnMsIGRlcGxveS9jb2RlYnVpbGQpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS13aXRoLWNvbXBsaWFuY2UnLCAnUG9zdC1pbnN0YWxsOiBsb2FkIHNhbXBsZSBjb21wbGlhbmNlIHJ1bGVzL3BvbGljaWVzIChhZGRzIGRlcGxveS9jb21wbGlhbmNlKScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0td2l0aC1zYW1wbGVzJywgJ1Bvc3QtaW5zdGFsbDogbG9hZCBzYW1wbGUgcGlwZWxpbmVzIChhZGRzIGRlcGxveS9zYW1wbGVzKScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0td2l0aC1hbGwnLCAnUG9zdC1pbnN0YWxsOiBwbHVnaW5zICsgY29tcGxpYW5jZSArIHNhbXBsZXMnLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLWJ1aWxkLWJvb3RzdHJhcCcsICdCdWlsZCArIHB1Ymxpc2ggdGhlIENvZGVCdWlsZCBib290c3RyYXAgaW1hZ2UgZHVyaW5nIHJlZ2lzdGVyIChhZGRzIGRlcGxveS9jb2RlYnVpbGQpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS13aXRoLXNtb2tlLXRlc3QnLCAnUG9zdC1pbnN0YWxsOiByZWFkLW9ubHkgQVBJIHJlYWNoYWJpbGl0eSBjaGVjaycsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0td2l0aC1ldmVudHMnLCAnUG9zdC1pbnN0YWxsIChBV1MpOiBldmVudCBpbmdlc3Rpb24gYnVuZGxlIOKAlCBzdG9yZS10b2tlbiAoSldUIOKGkiBTZWNyZXRzIE1hbmFnZXIpIHRoZW4gc2V0dXAtZXZlbnRzIChFdmVudEJyaWRnZS9MYW1iZGEpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1wb3N0LXN0ZXAgPGNtZD4nLCAnUnVuIGFuIGV4dHJhIGNvbW1hbmQgYWZ0ZXIgdGhlIGxvYWRzIChyZXBlYXRhYmxlLCBpbiBvcmRlciknLCBjb2xsZWN0U3RlcCwgW10pXG4gICAgLm9wdGlvbignLS1hZG1pbi1lbWFpbCA8YWRkcj4nLCAnQWRtaW4gZW1haWwgZm9yIG5vbi1pbnRlcmFjdGl2ZSByZWdpc3RlciAoc2V0cyBQTEFURk9STV9JREVOVElGSUVSKScpXG4gICAgLm9wdGlvbignLS1hZG1pbi1wYXNzd29yZCA8cHc+JywgJ0FkbWluIHBhc3N3b3JkIGZvciBub24taW50ZXJhY3RpdmUgcmVnaXN0ZXIgKHNldHMgUExBVEZPUk1fUEFTU1dPUkQpJylcbiAgICAub3B0aW9uKCctLWpzb24nLCAnUHJpbnQgdGhlIHBsYW4gYXMgSlNPTiBhbmQgZXhpdCBXSVRIT1VUIHJ1bm5pbmcgKHRoZSBvbmx5IG5vbi1leGVjdXRpbmcgbW9kZSDigJQgZm9yIHRvb2xpbmcvQ0kgaW5zcGVjdGlvbiknLCBmYWxzZSlcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBleGVjdXRpb25JZCA9IHByaW50Q29tbWFuZEhlYWRlcignUHJvdmlzaW9uJyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFJlc29sdmUgdGhlIHNpbmdsZSBwb3N0LWRlcGxveSBpbml0IG1vZGUgKGF1dG98bWFudWFsfHNraXApIGZyb20gLS1pbml0IG9yIGl0c1xuICAgICAgICAvLyBkZXByZWNhdGVkIGFsaWFzZXMuIFR3byBpbnRlcm5hbCBzaWduYWxzIGRlcml2ZSBmcm9tIGl0OiB3aGV0aGVyIGluaXQgaGFwcGVucyBhdFxuICAgICAgICAvLyBhbGwsIGFuZCB3aGV0aGVyIHRoZSBERVBMT1kgc2VsZi1ydW5zIGl0ICh2cy4gd2Ugc3VyZmFjZSBpdCkuXG4gICAgICAgIGNvbnN0IGluaXRNb2RlID0gcmVzb2x2ZUluaXRNb2RlKG9wdGlvbnMpO1xuICAgICAgICBpZiAoaW5pdE1vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICBwcmludEVycm9yKGBJbnZhbGlkIC0taW5pdCB2YWx1ZSAnJHtTdHJpbmcob3B0aW9ucy5pbml0KX0nLiBVc2Ugb25lIG9mOiAke0lOSVRfTU9ERVMuam9pbignIHwgJyl9LmApO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbml0RW5hYmxlZCA9IGluaXRNb2RlICE9PSAnc2tpcCc7IC8vIHNraXAg4oaSIG5vIHJlZ2lzdGVyL2xvYWRzIGF0IGFsbFxuICAgICAgICBjb25zdCBzZWxmSW5pdCA9IGluaXRNb2RlID09PSAnYXV0byc7IC8vIGF1dG8g4oaSIHRoZSBkZXBsb3kgaW5pdGlhbGl6ZXMgaXRzZWxmXG5cbiAgICAgICAgLy8gMS4gQXNzZW1ibGUgcGFyYW1zIGZyb20gZXhwbGljaXQgZmxhZ3MgKGZsYWdzIGFsd2F5cyB3aW4gb3ZlciBOTCBwYXJzZSkuXG4gICAgICAgIGNvbnN0IHBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICAgICAgcmVnaW9uOiBvcHRpb25zLnJlZ2lvbixcbiAgICAgICAgICBkb21haW46IG9wdGlvbnMuZG9tYWluLFxuICAgICAgICAgIGhvc3RlZFpvbmVJZDogb3B0aW9ucy5ob3N0ZWRab25lSWQsXG4gICAgICAgICAgZGVwbG95TW9kZTogb3B0aW9ucy5kZXBsb3lNb2RlLFxuICAgICAgICAgIGtleVBhaXI6IG9wdGlvbnMua2V5UGFpcixcbiAgICAgICAgICBpbnN0YW5jZVR5cGU6IG9wdGlvbnMuaW5zdGFuY2VUeXBlLFxuICAgICAgICAgIC8vIERlcGxveS10aW1lIHJlc291cmNlIGlkZW50aXR5OiBlYzIgZW1pdHMgLS1zdGFjay1uYW1lIChrZXkgc3RhY2tOYW1lKSwgZWtzIGVtaXRzXG4gICAgICAgICAgLy8gLS1jbHVzdGVyLW5hbWUgKGtleSBjbHVzdGVyTmFtZSkuIEJvdGggYWxzbyBkcml2ZSB0ZWFyZG93bi4gVW5kZWZpbmVkIOKGkiBkZWZhdWx0cy5cbiAgICAgICAgICBzdGFja05hbWU6IG9wdGlvbnMuc3RhY2tOYW1lLFxuICAgICAgICAgIGNsdXN0ZXJOYW1lOiBvcHRpb25zLmNsdXN0ZXJOYW1lLFxuICAgICAgICAgIGdoY3JUb2tlbjogb3B0aW9ucy5naGNyVG9rZW4sXG4gICAgICAgICAgLy8gZW1haWwvbm9FbWFpbCBhcmUgY29lcmNlZCBBRlRFUiB0aGUgTkwgbWVyZ2UgYmVsb3cg4oCUIHBhcnNlR29hbCBjYW4gcmV0dXJuXG4gICAgICAgICAgLy8gYGVtYWlsYCwgc28gcHJlLWNvZXJjaW5nIGhlcmUgKG5ldmVyLXVuZGVmaW5lZCkgd291bGQgbGV0IHRoZSBtZXJnZSdzXG4gICAgICAgICAgLy8gYD09PSB1bmRlZmluZWRgIGd1YXJkIHNpbGVudGx5IGRyb3AgYW4gQUktcGFyc2VkIGVtYWlsIGNob2ljZS4gTGVmdCBvdXQgb2ZcbiAgICAgICAgICAvLyB0aGlzIGxpdGVyYWwgb24gcHVycG9zZTsgcmVzb2x2ZWQgYSBmZXcgbGluZXMgZG93bi5cbiAgICAgICAgICBlbWFpbEZyb206IG9wdGlvbnMuZW1haWxGcm9tLFxuICAgICAgICAgIGVtYWlsRnJvbU5hbWU6IG9wdGlvbnMuZW1haWxGcm9tTmFtZSxcbiAgICAgICAgICBhbGVydEVtYWlsOiBvcHRpb25zLmFsZXJ0RW1haWwsXG4gICAgICAgICAgbm9DcmVhdGVTZXNJZGVudGl0eTogb3B0aW9ucy5za2lwU2VzSWRlbnRpdHksXG4gICAgICAgICAgLy8gVGhlIEFXUyBkZXBsb3lzIHNlbGYtaW5pdCBieSBkZWZhdWx0IChlYzIgb24gZmlyc3QgYm9vdCwgZWtzIGluIHNldHVwLnNoJ3MgZmluYWxcbiAgICAgICAgICAvLyBwaGFzZSksIHNvIHdlIGVtaXQgdGhlIGxvYWQtYmVhcmluZyBgLS1uby1hdXRvLWluaXRgIHdoZW4gdGhlIG1vZGUgaXMgTk9UIGF1dG9cbiAgICAgICAgICAvLyAobWFudWFsL3NraXAgPSBcImRvbid0IGxldCB0aGUgZGVwbG95IGluaXQgaXRzZWxmXCIpLiBgLS1hdXRvLWluaXRgIChhIG5vLW9wIHJlYWZmaXJtKVxuICAgICAgICAgIC8vIGlzIG5ldmVyIGVtaXR0ZWQuIE9ubHkgZWMyL2VrcyBjYXJyeSB0aGVzZSBmbGFncyBpbiB0aGVpciBzcGVjOyBvdGhlciB0YXJnZXRzIGlnbm9yZSBpdC5cbiAgICAgICAgICBub0F1dG9Jbml0OiAhc2VsZkluaXQsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGFpT3B0cyA9IHsgcHJvdmlkZXI6IG9wdGlvbnMuYWlQcm92aWRlciwgbW9kZWw6IG9wdGlvbnMubW9kZWwgfTtcblxuICAgICAgICAvLyBCb290c3RyYXAgKHNwYXJzZSBjbG9uZSkgKyBwb3N0LWluc3RhbGwgc2VsZWN0aW9ucy5cbiAgICAgICAgY29uc3Qgd2FudEJvb3RzdHJhcCA9IG9wdGlvbnMucmVwbyAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMucmVwbyAhPT0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHdpdGhBbGwgPSBvcHRpb25zLndpdGhBbGwgPT09IHRydWU7XG4gICAgICAgIGNvbnN0IGFueUxvYWRGbGFnID0gd2l0aEFsbCB8fCBMT0FEX1NURVBTLnNvbWUoKHMpID0+IG9wdGlvbnNbcy5mbGFnXSA9PT0gdHJ1ZSk7XG4gICAgICAgIGxldCBlbmFibGVkTG9hZElkczogc3RyaW5nW10gPSBMT0FEX1NURVBTLmZpbHRlcigocykgPT4gd2l0aEFsbCB8fCBvcHRpb25zW3MuZmxhZ10gPT09IHRydWUpLm1hcCgocykgPT4gcy5pZCk7XG4gICAgICAgIC8vIFdpdGggbm8gLS13aXRoLSogZmxhZ3MsIGFuIGludGVyYWN0aXZlIHJ1biBvZmZlcnMgZWFjaCBsb2FkIOKAlCBidXQgQUZURVIgdGhlXG4gICAgICAgIC8vIGNsb25lLCBzbyB0aGUgcXVlc3Rpb25zIGNvbWUgb25jZSB5b3UndmUgYWdyZWVkIHRvIHByb2NlZWQgKG5vdCB1cCBmcm9udCkuXG4gICAgICAgIC8vIEVhY2ggcGlja2VkIGxvYWQncyBmb2xkZXIgaXMgdGhlbiBmZXRjaGVkIHZpYSBhbiBhZGRpdGl2ZSBzcGFyc2UgcmUtc3luYy5cbiAgICAgICAgLy8gRmxhZ3MgLyAtLXllcyAvIC0tanNvbiAvIG5vbi1pbnRlcmFjdGl2ZSBzaGVsbHMgc2tpcCB0aGUgcHJvbXB0cy5cbiAgICAgICAgbGV0IHdpbGxQcm9tcHRMb2FkcyA9ICFvcHRpb25zLnllcyAmJiAhb3B0aW9ucy5qc29uICYmIEJvb2xlYW4ocHJvY2Vzcy5zdGRpbi5pc1RUWSkgJiYgIWFueUxvYWRGbGFnO1xuICAgICAgICBjb25zdCBwb3N0U3RlcEZsYWdzID0ge1xuICAgICAgICAgIGluaXQ6IGluaXRFbmFibGVkLFxuICAgICAgICAgIC8vIHNlbGZJbml0IChtb2RlIGF1dG8pIGRyb3BzIHRoZSBzdXJmYWNlZCByZWdpc3RlciBzdGVwIG9uIHRoZSBBV1MgdGFyZ2V0cyBpblxuICAgICAgICAgIC8vIHJlc29sdmVQb3N0U3RlcHMsIHNvIGEgc2VsZi1pbml0aWFsaXppbmcgZWMyL2VrcyBkZXBsb3kgZG9lc24ndCBhbHNvIHByaW50IGEgbWFudWFsXG4gICAgICAgICAgLy8gcmVnaXN0ZXIgc3RlcC4gRm9yIG1hbnVhbCBtb2RlIChvciBsb2NhbC9taW5pa3ViZSkgdGhlIHJlZ2lzdGVyIHN0ZXAgaXMgc3VyZmFjZWQuXG4gICAgICAgICAgYXV0b0luaXQ6IHNlbGZJbml0LFxuICAgICAgICAgIGJ1aWxkQm9vdHN0cmFwOiBvcHRpb25zLmJ1aWxkQm9vdHN0cmFwID09PSB0cnVlIHx8IGVuYWJsZWRMb2FkSWRzLmluY2x1ZGVzKCdwbHVnaW5zJyksXG4gICAgICAgICAgc21va2VUZXN0OiBvcHRpb25zLndpdGhTbW9rZVRlc3QgPT09IHRydWUsXG4gICAgICAgICAgZXZlbnRzOiBvcHRpb25zLndpdGhFdmVudHMgPT09IHRydWUsXG4gICAgICAgICAgc3RlcHM6IChvcHRpb25zLnBvc3RTdGVwID8/IFtdKSBhcyBzdHJpbmdbXSxcbiAgICAgICAgfTtcbiAgICAgICAgLy8gQWRtaW4gY3JlZGVudGlhbHMgZm9yd2FyZGVkIGFzIGVudiBzbyByZWdpc3RlciBydW5zIG5vbi1pbnRlcmFjdGl2ZWx5LlxuICAgICAgICBjb25zdCBhZG1pbkVudjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYWRtaW5FbWFpbCA9PT0gJ3N0cmluZycpIGFkbWluRW52LlBMQVRGT1JNX0lERU5USUZJRVIgPSBvcHRpb25zLmFkbWluRW1haWw7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hZG1pblBhc3N3b3JkID09PSAnc3RyaW5nJykgYWRtaW5FbnYuUExBVEZPUk1fUEFTU1dPUkQgPSBvcHRpb25zLmFkbWluUGFzc3dvcmQ7XG5cbiAgICAgICAgLy8gMi4gT3B0aW9uYWxseSBwYXJzZSBhIG5hdHVyYWwtbGFuZ3VhZ2UgZ29hbCB0byBmaWxsIGFueSBHQVBTIChiZXN0LWVmZm9ydCkuXG4gICAgICAgIGxldCB0YXJnZXQ6IFRhcmdldElkIHwgdW5kZWZpbmVkID0gaXNUYXJnZXRJZChvcHRpb25zLnRhcmdldCkgPyBvcHRpb25zLnRhcmdldCA6IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKG9wdGlvbnMucHJvbXB0KSB7XG4gICAgICAgICAgaWYgKGlzQWlDb25maWd1cmVkKGFpT3B0cykpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IGF3YWl0IHBhcnNlR29hbChvcHRpb25zLnByb21wdCwgYWlPcHRzKTtcbiAgICAgICAgICAgIGlmIChwYXJzZWQpIHtcbiAgICAgICAgICAgICAgaWYgKCF0YXJnZXQgJiYgaXNUYXJnZXRJZChwYXJzZWQudGFyZ2V0KSkgdGFyZ2V0ID0gcGFyc2VkLnRhcmdldDtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMocGFyc2VkKSkge1xuICAgICAgICAgICAgICAgIGlmIChrICE9PSAndGFyZ2V0JyAmJiBwYXJhbXNba10gPT09IHVuZGVmaW5lZCAmJiB2ICE9PSB1bmRlZmluZWQpIHBhcmFtc1trXSA9IHY7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKCFvcHRpb25zLmpzb24pIHtcbiAgICAgICAgICAgIC8vIERvbid0IHByaW50IGh1bWFuIHRleHQgYmVmb3JlIGEgLS1qc29uIHBsYW4gKGl0IHdvdWxkIGNvcnJ1cHQgdGhlIHN0cmVhbSkuXG4gICAgICAgICAgICBwcmludFdhcm5pbmcoJ0EgLS1wcm9tcHQgd2FzIGdpdmVuIGJ1dCBubyBBSSBrZXkgaXMgc2V0IOKAlCBpZ25vcmluZyBpdCBhbmQgdXNpbmcgZmxhZ3Mgb25seS4gU2V0IEFOVEhST1BJQ19BUElfS0VZIChvciAtLWFpLXByb3ZpZGVyICsgaXRzIGtleSkuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVzb2x2ZSBlbWFpbCBOT1cgKGFmdGVyIHRoZSBOTCBtZXJnZSk6IGFuIGV4cGxpY2l0IC0tZW1haWwvLS1uby1lbWFpbCBmbGFnIHdpbnMsXG4gICAgICAgIC8vIGVsc2UgYW4gQUktcGFyc2VkIGBlbWFpbGAgKG1lcmdlZCBpbnRvIHBhcmFtcy5lbWFpbCBhYm92ZSkgZGVjaWRlcywgZWxzZSBkZWZhdWx0LW9uLlxuICAgICAgICAvLyBDb2VyY2UgdG8gdGhlIHR3byBsb2FkLWJlYXJpbmcga2V5cyBhc3NlbWJsZUNvbW1hbmQgZW1pdHMuXG4gICAgICAgIGNvbnN0IGVtYWlsQ2hvaWNlID0gb3B0aW9ucy5lbWFpbCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyBvcHRpb25zLmVtYWlsXG4gICAgICAgICAgOiAodHlwZW9mIHBhcmFtcy5lbWFpbCA9PT0gJ2Jvb2xlYW4nID8gcGFyYW1zLmVtYWlsIDogdW5kZWZpbmVkKTtcbiAgICAgICAgcGFyYW1zLmVtYWlsID0gZW1haWxDaG9pY2UgPT09IHRydWU7XG4gICAgICAgIHBhcmFtcy5ub0VtYWlsID0gZW1haWxDaG9pY2UgPT09IGZhbHNlO1xuXG4gICAgICAgIC8vIDMuIE9wdGlvbmFsIGZhaWx1cmUgZGlhZ25vc2lzIChpbmRlcGVuZGVudCBvZiBhIGRlcGxveSBwbGFuKS5cbiAgICAgICAgaWYgKG9wdGlvbnMuZGlhZ25vc2UpIHtcbiAgICAgICAgICBsZXQgZmFpbHVyZVRleHQ6IHN0cmluZztcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZmFpbHVyZVRleHQgPSByZWFkRmlsZVN5bmMob3B0aW9ucy5kaWFnbm9zZSwgJ3V0Zi04Jyk7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICBwcmludEVycm9yKGBDYW5ub3QgcmVhZCAtLWRpYWdub3NlIGZpbGU6ICR7b3B0aW9ucy5kaWFnbm9zZX1gKTtcbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBkaWFnbm9zaXMgPSBpc0FpQ29uZmlndXJlZChhaU9wdHMpID8gYXdhaXQgZGlhZ25vc2VGYWlsdXJlKGZhaWx1cmVUZXh0LCBhaU9wdHMpIDogbnVsbDtcbiAgICAgICAgICAvLyBXaXRoIC0tanNvbiwgdGhlIGRpYWdub3NpcyBJUyB0aGUgbWFjaGluZS1yZWFkYWJsZSBvdXRwdXQg4oCUIGVtaXQgaXRcbiAgICAgICAgICAvLyBhbG9uZSAoZG9uJ3QgYWxzbyBwcmludCB0ZXh0LCB3aGljaCB3b3VsZCBjb3JydXB0IHRoZSBKU09OIHN0cmVhbSkuXG4gICAgICAgICAgaWYgKG9wdGlvbnMuanNvbikge1xuICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoeyBzdWNjZXNzOiB0cnVlLCBleGVjdXRpb25JZCwgZGlhZ25vc2lzIH0sIG51bGwsIDIpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGRpYWdub3Npcykge1xuICAgICAgICAgICAgcHJpbnRTZWN0aW9uKCdGYWlsdXJlIGRpYWdub3NpcycpO1xuICAgICAgICAgICAgcHJpbnRJbmZvKGRpYWdub3Npcyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZygnRGlhZ25vc2lzIHVuYXZhaWxhYmxlIChubyBBSSBrZXkgY29uZmlndXJlZCBvciB0aGUgbW9kZWwgY291bGQgbm90IGJlIHJlYWNoZWQpLicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyAtLWRpYWdub3NlIGlzIGEgcmVhZC1vbmx5IGluc3BlY3Rpb24gbW9kZTogcmV0dXJuIHdoZXRoZXIgb3Igbm90IGEgdGFyZ2V0IHdhc1xuICAgICAgICAgIC8vIGdpdmVuLCBzbyBpdCBuZXZlciBmYWxscyB0aHJvdWdoIGludG8gYSAocG9zc2libHkgLS15ZXMpIGRlcGxveS5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXaXRoIGAtLWluaXQgYXV0b2AgKHRoZSBkZWZhdWx0KSB0aGUgRUMyIGluc3RhbmNlIGxvYWRzIHBsdWdpbnMvY29tcGxpYW5jZS9zYW1wbGVzXG4gICAgICAgIC8vIGl0c2VsZiBvbiB0aGUgYm94IChib290c3RyYXAuc2ggaGFyZGNvZGVzIExPQURfKj15KSwgc28gdGhlIGxvY2FsIGxvYWQgcGlja2VyIOKAlCBhbmRcbiAgICAgICAgLy8gdGhlIGxvYWQtZm9sZGVyIGZldGNoIGl0IHRyaWdnZXJzIOKAlCBpcyBwb2ludGxlc3MuIFNraXAgYm90aCAodGhlIGluc3RhbmNlIGhhcyBpdHNcbiAgICAgICAgLy8gb3duIGNoZWNrb3V0KS5cbiAgICAgICAgaWYgKHNlbGZJbml0ICYmIHRhcmdldCA9PT0gJ2VjMicpIHtcbiAgICAgICAgICB3aWxsUHJvbXB0TG9hZHMgPSBmYWxzZTtcbiAgICAgICAgICBlbmFibGVkTG9hZElkcyA9IFtdO1xuICAgICAgICB9IGVsc2UgaWYgKHNlbGZJbml0ICYmIHRhcmdldCA9PT0gJ2VrcycgJiYgIWFueUxvYWRGbGFnKSB7XG4gICAgICAgICAgLy8gYC0taW5pdCBhdXRvYCBvbiBla3MgaW5pdGlhbGl6ZXMgbGlrZSBlYzI6IE5PIGludGVyYWN0aXZlIHBpY2tlciDigJQgZGVmYXVsdCB0b1xuICAgICAgICAgIC8vIGxvYWRpbmcgQUxMIG9mIHBsdWdpbnMgKyBjb21wbGlhbmNlICsgc2FtcGxlcyAoc2V0dXAuc2gncyBmaW5hbCBwaGFzZSBoYXJkY29kZXNcbiAgICAgICAgICAvLyBMT0FEXyo9eSkuIHNldHVwLnNoIHJ1bnMgdGhlIGxvYWRzIGl0c2VsZiAob3ZlciBhIGt1YmVjdGwgcG9ydC1mb3J3YXJkKSwgYnV0IHdlXG4gICAgICAgICAgLy8gc3RpbGwgcmVzb2x2ZSB0aGVtIGhlcmUgc28gdGhlIHNwYXJzZSBjbG9uZSBmZXRjaGVzIHRoZSBmb2xkZXJzIHNldHVwLnNoIGJ1aWxkc1xuICAgICAgICAgIC8vIGZyb20uIEV4cGxpY2l0IGAtLXdpdGgtKmAgZmxhZ3Mgb3ZlcnJpZGU7IGAtLWluaXQgbWFudWFsYCAvIGAtLWluaXQgc2tpcGAgb3B0IG91dC5cbiAgICAgICAgICB3aWxsUHJvbXB0TG9hZHMgPSBmYWxzZTtcbiAgICAgICAgICBlbmFibGVkTG9hZElkcyA9IExPQURfU1RFUFMubWFwKChzKSA9PiBzLmlkKTtcbiAgICAgICAgICBwb3N0U3RlcEZsYWdzLmJ1aWxkQm9vdHN0cmFwID0gb3B0aW9ucy5idWlsZEJvb3RzdHJhcCA9PT0gdHJ1ZSB8fCBlbmFibGVkTG9hZElkcy5pbmNsdWRlcygncGx1Z2lucycpO1xuICAgICAgICB9XG4gICAgICAgIC8vIG1pbmlrdWJlL2xvY2FsIGtlZXAgdGhlIGludGVyYWN0aXZlIHBpY2tlciAobG9jYWwtZGV2OyBubyBgLS1pbml0IGF1dG9gIGxvYWQgcGFyaXR5KS5cblxuICAgICAgICAvLyA0LiBOZWVkIGEgdGFyZ2V0IHRvIGFzc2VtYmxlIGEgcGxhbi5cbiAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICBwcmludEVycm9yKGBObyB0YXJnZXQgc3BlY2lmaWVkLiBQYXNzIC0tdGFyZ2V0IDwke1RBUkdFVF9JRFMuam9pbignfCcpfT4gb3IgZGVzY3JpYmUgdGhlIGdvYWwgd2l0aCAtLXByb21wdC5gKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzcGVjID0gVEFSR0VUU1t0YXJnZXRdO1xuICAgICAgICBsZXQgY3dkID0gcHJvY2Vzcy5jd2QoKTtcblxuICAgICAgICAvLyA0Yi4gVGVhcmRvd24gbW9kZSDigJQgdGhlIGRlc3Ryb3kgY291bnRlcnBhcnQgb2YgcHJvdmlzaW9uaW5nIChzZWUgcnVuVGVhcmRvd24pLlxuICAgICAgICBpZiAob3B0aW9ucy50ZWFyZG93bikge1xuICAgICAgICAgIGF3YWl0IHJ1blRlYXJkb3duKHNwZWMsIHRhcmdldCwgY3dkLCBleGVjdXRpb25JZCwgb3B0aW9ucyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTWFrZSBwcmV2aW91c2x5LWZldGNoZWQgc2luZ2xlLWJpbmFyeSB0b29scyAoZS5nLiB5cSkgdmlzaWJsZSB0byB0aGVcbiAgICAgICAgLy8gcHJlcmVxIGNoZWNrcyArIHRoZSBkZXBsb3kg4oCUIHRoZXkgbGl2ZSBpbiB0aGUgdG9vbHMgY2FjaGUsIG5vdCBvbiB0aGVcbiAgICAgICAgLy8gc3lzdGVtIFBBVEguIChCb3RoIGBoYXMoKWAgYW5kIHRoZSBkZXBsb3kncyBgYmFzaCAtbGNgIGluaGVyaXQgdGhpcy4pXG4gICAgICAgIHdpdGhUb29sc09uUGF0aCgpO1xuICAgICAgICAvLyBIYXJkLXJlcXVpcmUgcGx1Z2luIHByZXJlcXMgKGUuZy4geXEgb24gbWluaWt1YmUpIG9ubHkgd2hlbiBwbHVnaW5zIGlzIEVYUExJQ0lUTFlcbiAgICAgICAgLy8gc2VsZWN0ZWQg4oCUIE5PVCBvbiB0aGUgd2lsbFByb21wdExvYWRzIGd1ZXNzLCB3aGljaCB3b3VsZCBibG9jay9wcm9tcHQgYmVmb3JlIHRoZVxuICAgICAgICAvLyB1c2VyIGhhcyBldmVuIGJlZW4gYXNrZWQgd2hldGhlciB0aGV5IHdhbnQgcGx1Z2lucy4gSWYgdGhleSBwaWNrIHBsdWdpbnMgaW4gdGhlXG4gICAgICAgIC8vIGludGVyYWN0aXZlIHByb21wdCwgd2UgcmUtY2hlY2sgKyBvZmZlciB0byBmZXRjaCByaWdodCBhZnRlciB0aGF0IHNlbGVjdGlvbiAoYmVsb3cpLlxuICAgICAgICBsZXQgcHJlcmVxcyA9IGNoZWNrUHJlcmVxcyh0YXJnZXQsIHsgYm9vdHN0cmFwOiB3YW50Qm9vdHN0cmFwLCB3aXRoUGx1Z2luczogZW5hYmxlZExvYWRJZHMuaW5jbHVkZXMoJ3BsdWdpbnMnKSB9KTtcbiAgICAgICAgY29uc3QgeyBjb21tYW5kLCBtaXNzaW5nIH0gPSBhc3NlbWJsZUNvbW1hbmQoc3BlYywgcGFyYW1zKTtcbiAgICAgICAgY29uc3QgdXJsID0gZGVyaXZlSGVhbHRoVXJsKHRhcmdldCwgcGFyYW1zKTtcblxuICAgICAgICAvLyBTcGFyc2UgYm9vdHN0cmFwIGNsb25lIGNvbW1hbmQgKGNvbW1vbiBiYXNlICsgdGFyZ2V0ICsgc2VsZWN0ZWQgbG9hZHMpLlxuICAgICAgICAvLyBJbnRlcmFjdGl2ZSBsb2FkcyBhcmUgY2hvc2VuIEFGVEVSIHRoZSBjbG9uZSwgc28gdGhlIGNsb25lIHN0YXlzIG1pbmltYWwg4oCUXG4gICAgICAgIC8vIGVhY2ggcGlja2VkIGxvYWQncyBmb2xkZXIgaXMgZmV0Y2hlZCB0aGVuIHZpYSBhbiBhZGRpdGl2ZSBzcGFyc2UgcmUtc3luYy5cbiAgICAgICAgY29uc3Qgc3BhcnNlUGF0aHMgPSBzcGFyc2VQYXRoc0Zvcih0YXJnZXQsIGVuYWJsZWRMb2FkSWRzKTtcbiAgICAgICAgY29uc3QgYm9vdHN0cmFwID0gcmVzb2x2ZUJvb3RzdHJhcChcbiAgICAgICAgICB7IHJlcG86IHR5cGVvZiBvcHRpb25zLnJlcG8gPT09ICdzdHJpbmcnID8gb3B0aW9ucy5yZXBvIDogdW5kZWZpbmVkLCByZWY6IG9wdGlvbnMucmVmLCB3b3JrZGlyOiBvcHRpb25zLndvcmtkaXIsIGZ1bGw6ICFnaXRTdXBwb3J0c1NwYXJzZUNoZWNrb3V0KCkgfSxcbiAgICAgICAgICBzcGFyc2VQYXRocyxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgYm9vdHN0cmFwQ21kID0gd2FudEJvb3RzdHJhcCA/IGJvb3RzdHJhcENvbW1hbmQoYm9vdHN0cmFwKSA6IG51bGw7XG5cbiAgICAgICAgLy8gUmVzb2x2ZSBwb3N0LWluc3RhbGwgc3RlcHMgKHJlZ2lzdGVyIOKGkiBzbW9rZSDihpIgZXZlbnRzIOKGkiBjdXN0b20pLiBSZS1yZXNvbHZlZFxuICAgICAgICAvLyBhZnRlciB0aGUgcG9zdC1jbG9uZSBsb2FkIHByb21wdHMgKHNlZSBiZWxvdykgd2hlbiB0aG9zZSBydW4gaW50ZXJhY3RpdmVseS5cbiAgICAgICAgbGV0IHsgc3RlcHM6IHBvc3RTdGVwcywgc2tpcHBlZDogc2tpcHBlZFN0ZXBzIH0gPSByZXNvbHZlUG9zdFN0ZXBzKHtcbiAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHJlZ2lvbjogdHlwZW9mIHBhcmFtcy5yZWdpb24gPT09ICdzdHJpbmcnID8gcGFyYW1zLnJlZ2lvbiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBlbmFibGVkTG9hZElkcyxcbiAgICAgICAgICAuLi5wb3N0U3RlcEZsYWdzLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAob3B0aW9ucy5qc29uKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIGV4ZWN1dGlvbklkLFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgcHJlcmVxcyxcbiAgICAgICAgICAgIHByZXJlcXNTYXRpc2ZpZWQ6IHByZXJlcXNTYXRpc2ZpZWQocHJlcmVxcyksXG4gICAgICAgICAgICBtaXNzaW5nSW5wdXRzOiBtaXNzaW5nLm1hcCgobSkgPT4gKHsgZmxhZzogbS5mbGFnLCBkZXNjcmlwdGlvbjogbS5kZXNjcmlwdGlvbiB9KSksXG4gICAgICAgICAgICBib290c3RyYXA6IGJvb3RzdHJhcENtZCxcbiAgICAgICAgICAgIHNwYXJzZVBhdGhzOiB3YW50Qm9vdHN0cmFwID8gc3BhcnNlUGF0aHMgOiBudWxsLFxuICAgICAgICAgICAgY29tbWFuZCxcbiAgICAgICAgICAgIHBvc3RTdGVwczogcG9zdFN0ZXBzLm1hcCgocykgPT4gKHsgaWQ6IHMuaWQsIGxhYmVsOiBzLmxhYmVsLCBjb21tYW5kOiBzLmNvbW1hbmQgfSkpLFxuICAgICAgICAgICAgc2tpcHBlZFBvc3RTdGVwczogc2tpcHBlZFN0ZXBzLFxuICAgICAgICAgIH0sIG51bGwsIDIpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyA1LiBQcmludCB0aGUgcGxhbiAoc2hvd24gYmVmb3JlIHRoZSBnYXRlZCBleGVjdXRpb24gYmVsb3cpLlxuICAgICAgICBwcmludFNlY3Rpb24oYFByb3Zpc2lvbiBwbGFuIOKAlCAke3NwZWMubGFiZWx9YCk7XG4gICAgICAgIHByaW50S2V5VmFsdWUoeyAnVGFyZ2V0JzogdGFyZ2V0LCAnQmVzdCBmb3InOiBzcGVjLmJlc3RGb3IsICdDb3N0Jzogc3BlYy5jb3N0IH0pO1xuXG4gICAgICAgIHByaW50U2VjdGlvbignUHJlcmVxdWlzaXRlcycpO1xuICAgICAgICBmb3IgKGNvbnN0IGMgb2YgcHJlcmVxcykgcHJpbnRJbmZvKGAke2Mub2sgPyAn4pyTJyA6ICfinJcnfSAke2MubmFtZX0g4oCUICR7Yy5kZXRhaWx9YCk7XG4gICAgICAgIGlmICghcHJlcmVxc1NhdGlzZmllZChwcmVyZXFzKSkgcHJpbnRXYXJuaW5nKCdSZXNvbHZlIHRoZSBmYWlsaW5nIHByZXJlcXVpc2l0ZXMgYWJvdmUgYmVmb3JlIGRlcGxveWluZy4nKTtcblxuICAgICAgICBpZiAobWlzc2luZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdNaXNzaW5nIHJlcXVpcmVkIGlucHV0cycpO1xuICAgICAgICAgIGZvciAoY29uc3QgbSBvZiBtaXNzaW5nKSBwcmludEluZm8oYCAgLS0ke20uZmxhZ30gICgke20uZGVzY3JpcHRpb259KWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJvb3RzdHJhcENtZCkge1xuICAgICAgICAgIHByaW50U2VjdGlvbignQm9vdHN0cmFwIChzcGFyc2UgZ2l0IGNsb25lLCBydW5zIGZpcnN0KScpO1xuICAgICAgICAgIHByaW50SW5mbyhgQ2xvbmUgJHtib290c3RyYXAucmVwb30gQCAke2Jvb3RzdHJhcC5yZWZ9IOKGkiAke2Jvb3RzdHJhcC53b3JrZGlyfTsgZm9sZGVyczogJHtzcGFyc2VQYXRocy5qb2luKCcsICcpfWApO1xuICAgICAgICAgIHByaW50SW5mbyhib290c3RyYXBDbWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJpbnRTZWN0aW9uKCdDb21tYW5kIHRvIHJ1bicpO1xuICAgICAgICBwcmludEluZm8oY29tbWFuZCk7XG5cbiAgICAgICAgaWYgKHBvc3RTdGVwcy5sZW5ndGggPiAwIHx8IHNraXBwZWRTdGVwcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdQb3N0LWluc3RhbGwgc3RlcHMnKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHMgb2YgcG9zdFN0ZXBzKSBwcmludEluZm8oYOKAoiAke3MubGFiZWx9XFxuICAgICR7cy5jb21tYW5kfWApO1xuICAgICAgICAgIGZvciAoY29uc3QgcyBvZiBza2lwcGVkU3RlcHMpIHByaW50V2FybmluZyhgU2tpcHBlZCAke3MuaWR9OiAke3MucmVhc29ufWApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gNi4gQW55IG1pc3NpbmcgcmVxdWlyZWQgcHJlcmVxIHRoYXQncyBhIHNpbmdsZSBzdGF0aWMgYmluYXJ5IChlLmcuIHlxKVxuICAgICAgICAvLyBjYW4gYmUgZmV0Y2hlZCBpbnRvIHRoZSB0b29scyBjYWNoZSBpbnN0ZWFkIG9mIGEgc3lzdGVtIGluc3RhbGwg4oCUIG5vXG4gICAgICAgIC8vIGJyZXcvYXB0LiBPZmZlciBpdCwgdGhlbiByZS1jaGVjayAodGhlIGNhY2hlIGRpciBpcyBhbHJlYWR5IG9uIFBBVEgpLlxuICAgICAgICBjb25zdCBmZXRjaGFibGUgPSBwcmVyZXFzLmZpbHRlcigoYykgPT4gIWMub2sgJiYgYy5yZXF1aXJlZCAmJiBpc0ZldGNoYWJsZShjLm5hbWUpKTtcbiAgICAgICAgaWYgKGZldGNoYWJsZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgbmFtZXMgPSBmZXRjaGFibGUubWFwKChjKSA9PiBjLm5hbWUpLmpvaW4oJywgJyk7XG4gICAgICAgICAgaWYgKGF3YWl0IGNvbmZpcm0oYFxcbiR7bmFtZXN9IG5vdCBpbnN0YWxsZWQg4oCUIGZldGNoIHRoZSBvZmZpY2lhbCBzdGF0aWMgYmluYXJ5IGludG8gJHtUT09MU19ESVJ9IChubyBzeXN0ZW0gaW5zdGFsbCk/YCwgb3B0aW9ucy55ZXMpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGMgb2YgZmV0Y2hhYmxlKSB7XG4gICAgICAgICAgICAgIHByaW50SW5mbyhgRmV0Y2hpbmcgJHtjLm5hbWV94oCmYCk7XG4gICAgICAgICAgICAgIGlmICghZmV0Y2hUb29sKGMubmFtZSkpIHByaW50V2FybmluZyhgQ291bGRuJ3QgZmV0Y2ggJHtjLm5hbWV9IOKAlCBpbnN0YWxsIGl0IG1hbnVhbGx5IGFuZCByZS1ydW4uYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmVyZXFzID0gY2hlY2tQcmVyZXFzKHRhcmdldCwgeyBib290c3RyYXA6IHdhbnRCb290c3RyYXAsIHdpdGhQbHVnaW5zOiBlbmFibGVkTG9hZElkcy5pbmNsdWRlcygncGx1Z2lucycpIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDdiLiBHYXRlZCBleGVjdXRpb24uIENoZWNrIHByZXJlcXMgLyByZXF1aXJlZCBpbnB1dHMgZmlyc3Qg4oCUIHRoaXMgYWxzb1xuICAgICAgICAvLyBjYXRjaGVzIGEgbWlzc2luZyBgZ2l0YCB3aGVuIGJvb3RzdHJhcHBpbmcuXG4gICAgICAgIGNvbnN0IGJsb2NrZWQgPSBleGVjdXRpb25CbG9ja2VkKHByZXJlcXMsIG1pc3NpbmcpO1xuICAgICAgICBpZiAoYmxvY2tlZCkge1xuICAgICAgICAgIHByaW50RXJyb3IoYENhbid0IHN0YXJ0IGp1c3QgeWV0IOKAlCAke2Jsb2NrZWR9LiBSZXNvbHZlIHRoYXQgYW5kIHJlLXJ1bi5gKTtcbiAgICAgICAgICBwcm9jZXNzLmV4aXRDb2RlID0gMTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb21taXQgZ2F0ZSDigJQgY29uZmlybSBCRUZPUkUgYW55IHNpZGUgZWZmZWN0IChjbG9uZSwgLmVudiwgZGVwbG95KSBzbyBhIFwiTm9cIlxuICAgICAgICAvLyBsZWF2ZXMgbm90aGluZyBiZWhpbmQuIFRoZSBwb3J0IGNoZWNrICsgb3B0aW9uYWwgbG9hZHMgKyAuZW52IGJlbG93IGFyZSBwYXJ0IG9mXG4gICAgICAgIC8vIGV4ZWN1dGluZyB0aGUgYWdyZWVkLXRvIHBsYW4uXG4gICAgICAgIGlmICghKGF3YWl0IGNvbmZpcm0oYFxcblByb2NlZWQgd2l0aCBwcm92aXNpb25pbmcgJHtzcGVjLmxhYmVsfT9gLCBvcHRpb25zLnllcykpKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKCdObyBwcm9ibGVtIOKAlCBub3RoaW5nIHdhcyBjaGFuZ2VkLicpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDdhLzdiLiBTcGFyc2UtY2xvbmUgKGlmIC0tcmVwbyBvciBhY2NlcHRlZCBpbnRlcmFjdGl2ZWx5KSArIGxvY2F0ZSB0aGUgZGVwbG95XG4gICAgICAgIC8vIGVudHJ5cG9pbnQsIHJlcG9pbnRpbmcgY3dkIGludG8gdGhlIGNsb25lLiBTZWUgYm9vdHN0cmFwQW5kTG9jYXRlLlxuICAgICAgICBjb25zdCBsb2NhdGVkID0gYXdhaXQgYm9vdHN0cmFwQW5kTG9jYXRlKHNwZWMsIGJvb3RzdHJhcCwgYm9vdHN0cmFwQ21kLCBzcGFyc2VQYXRocywgY3dkLCBvcHRpb25zKTtcbiAgICAgICAgY3dkID0gbG9jYXRlZC5jd2Q7XG4gICAgICAgIGNvbnN0IGJvb3RzdHJhcHBlZCA9IGxvY2F0ZWQuYm9vdHN0cmFwcGVkO1xuICAgICAgICBpZiAoIWxvY2F0ZWQub2spIHJldHVybjtcblxuICAgICAgICAvLyBIb3N0LXBvcnQgcHJlLWZsaWdodCDigJQgbm93IHRoYXQgdGhlIGRlcGxveSBzb3VyY2UgaXMgb24gZGlzayAocG9zdC1jbG9uZSksXG4gICAgICAgIC8vIGRlcml2ZSB0aGUgcG9ydHMgZnJvbSBpdCAoY29tcG9zZSAvIHNldHVwLnNoKSBhbmQgc3RvcCBvbiBhIGZhdGFsIGNvbmZsaWN0XG4gICAgICAgIC8vIGJlZm9yZSBkZXBsb3lpbmcuIFNlZSBwcmVmbGlnaHRQb3J0cy5cbiAgICAgICAgaWYgKCEoYXdhaXQgcHJlZmxpZ2h0UG9ydHMoc3BlYywgdGFyZ2V0LCBjd2QpKSkge1xuICAgICAgICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9wdC1pbiBsb2FkcyDigJQgb2ZmZXJlZCBBRlRFUiB0aGUgY2xvbmUgKHNlZSByZXNvbHZlTG9hZHNJbnRlcmFjdGl2ZWx5KTsgaXRcbiAgICAgICAgLy8gcHJvbXB0cywgYWRkaXRpdmVseSBzcGFyc2UtZmV0Y2hlcyB0aGUgcGlja2VkIGZvbGRlcnMsIGFuZCByZS1yZXNvbHZlcyB0aGVcbiAgICAgICAgLy8gcG9zdC1pbnN0YWxsIHN0ZXBzIHdpdGggdGhlIHNlbGVjdGlvbnMuXG4gICAgICAgIGlmICh3aWxsUHJvbXB0TG9hZHMpIHtcbiAgICAgICAgICBjb25zdCBsb2FkZWQgPSBhd2FpdCByZXNvbHZlTG9hZHNJbnRlcmFjdGl2ZWx5KFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgdHlwZW9mIHBhcmFtcy5yZWdpb24gPT09ICdzdHJpbmcnID8gcGFyYW1zLnJlZ2lvbiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGN3ZCxcbiAgICAgICAgICAgIGJvb3RzdHJhcHBlZCxcbiAgICAgICAgICAgIGJvb3RzdHJhcCxcbiAgICAgICAgICAgIHBvc3RTdGVwRmxhZ3MsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBlbmFibGVkTG9hZElkcyA9IGxvYWRlZC5lbmFibGVkTG9hZElkcztcbiAgICAgICAgICBwb3N0U3RlcHMgPSBsb2FkZWQuc3RlcHM7XG4gICAgICAgICAgc2tpcHBlZFN0ZXBzID0gbG9hZGVkLnNraXBwZWQ7XG4gICAgICAgICAgLy8gTm93IHRoYXQgcGx1Z2lucyBtYXkgaGF2ZSBiZWVuIHBpY2tlZCwgcmUtY2hlY2sgdGhlIHBsdWdpbi1zcGVjaWZpYyBwcmVyZXFzIHdlXG4gICAgICAgICAgLy8gZGVsaWJlcmF0ZWx5IGRpZG4ndCBoYXJkLXJlcXVpcmUgdXAgZnJvbnQgKGUuZy4geXEgZm9yIG1pbmlrdWJlIHBsdWdpbiBidWlsZHMpLlxuICAgICAgICAgIC8vIE9mZmVyIHRvIGZldGNoIGFueSBmZXRjaGFibGUgb25lOyB3YXJuIChkb24ndCBibG9jayDigJQgdGhlIHBsYXRmb3JtIHN0aWxsIGRlcGxveXMpXG4gICAgICAgICAgLy8gaWYgaXQgY2FuJ3QgYmUgcmVzb2x2ZWQsIHNvIHRoZSBsYXRlciBwbHVnaW4gYnVpbGQgZG9lc24ndCBmYWlsIG9wYXF1ZWx5LlxuICAgICAgICAgIGlmIChlbmFibGVkTG9hZElkcy5pbmNsdWRlcygncGx1Z2lucycpKSB7XG4gICAgICAgICAgICBjb25zdCBwbHVnaW5QcmVyZXFzID0gY2hlY2tQcmVyZXFzKHRhcmdldCwgeyBib290c3RyYXA6IHdhbnRCb290c3RyYXAsIHdpdGhQbHVnaW5zOiB0cnVlIH0pO1xuICAgICAgICAgICAgY29uc3QgcGx1Z2luR2FwcyA9IHBsdWdpblByZXJlcXMuZmlsdGVyKChjKSA9PiAhYy5vayAmJiBjLnJlcXVpcmVkICYmICFwcmVyZXFzLnNvbWUoKHApID0+IHAubmFtZSA9PT0gYy5uYW1lKSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGMgb2YgcGx1Z2luR2Fwcykge1xuICAgICAgICAgICAgICBpZiAoaXNGZXRjaGFibGUoYy5uYW1lKSAmJiBhd2FpdCBjb25maXJtKGBcXG4ke2MubmFtZX0gaXMgbmVlZGVkIHRvIGJ1aWxkIHBsdWdpbnMgYnV0IGlzbid0IGluc3RhbGxlZCDigJQgZmV0Y2ggdGhlIHN0YXRpYyBiaW5hcnkgaW50byAke1RPT0xTX0RJUn0/YCwgb3B0aW9ucy55ZXMpKSB7XG4gICAgICAgICAgICAgICAgcHJpbnRJbmZvKGBGZXRjaGluZyAke2MubmFtZX3igKZgKTtcbiAgICAgICAgICAgICAgICBpZiAoIWZldGNoVG9vbChjLm5hbWUpKSBwcmludFdhcm5pbmcoYENvdWxkbid0IGZldGNoICR7Yy5uYW1lfSDigJQgaW5zdGFsbCBpdCBiZWZvcmUgdGhlIHBsdWdpbiBidWlsZCBydW5zLmApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHByaW50V2FybmluZyhgJHtjLm5hbWV9IG1pc3Npbmcg4oCUIHRoZSBwbHVnaW4gbG9hZC9idWlsZCBzdGVwIG1heSBmYWlsLiAke2MuZGV0YWlsfWApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGxvY2FsL21pbmlrdWJlJ3Mgc2V0dXAuc2ggUkVRVUlSRVMgYSBgLmVudmAgYW5kIGFib3J0cyB3aXRob3V0IGl0IOKAlCBjcmVhdGVcbiAgICAgICAgLy8gaXQgZnJvbSAuZW52LmV4YW1wbGUgd2l0aCBnZW5lcmF0ZWQgc2VjcmV0cyBzbyB0aGUgZGVwbG95IGlzIG5vbi1pbnRlcmFjdGl2ZS5cbiAgICAgICAgLy8gZWMyIGFuZCBla3MgZG9uJ3QgaGF2ZSBwcm92aXNpb24gZ2VuZXJhdGUgYSBsb2NhbCBgLmVudmA6IGVjMiBib290c3RyYXBzIGl0c1xuICAgICAgICAvLyBzZWNyZXRzIG9uIHRoZSBpbnN0YW5jZSwgYW5kIGVrcydzIHNldHVwLnNoIGNyZWF0ZXMgdGhlIGs4cyBzZWNyZXRzIGl0c2VsZlxuICAgICAgICAvLyAoYSBkZXBsb3kvYXdzL2Vrcy8uZW52LmV4YW1wbGUgKyBzZWNyZXQgc3RlcCBpcyBhIHNldHVwLnNoIFRPRE8pLlxuICAgICAgICBpZiAoKHRhcmdldCA9PT0gJ2RvY2tlcicgfHwgdGFyZ2V0ID09PSAnbWluaWt1YmUnKSAmJiBlbnZGaWxlTWlzc2luZyhjd2QsIHNwZWMuZGlyKSkge1xuICAgICAgICAgIGlmIChhd2FpdCBjb25maXJtKGBcXG4ke3NwZWMuZGlyfS8uZW52IG5vdCBmb3VuZCDigJQgY3JlYXRlIGl0IGZyb20gLmVudi5leGFtcGxlIChnZW5lcmF0ZXMgc2VjcmV0czsgZWRpdCBsYXRlciBmb3Igb3B0aW9uYWwgaW50ZWdyYXRpb25zIGxpa2UgT0F1dGgpP2AsIG9wdGlvbnMueWVzKSkge1xuICAgICAgICAgICAgY29uc3QgbiA9IGNyZWF0ZUVudkZpbGUoY3dkLCBzcGVjLmRpcik7XG4gICAgICAgICAgICBwcmludFN1Y2Nlc3MoYENyZWF0ZWQgJHtzcGVjLmRpcn0vLmVudiDigJQgJHtufSBzZWNyZXQocykgZ2VuZXJhdGVkLmApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoJ0NvbnRpbnVpbmcgd2l0aG91dCAuZW52IOKAlCBzZXR1cC5zaCB3aWxsIGFib3J0IGlmIGl0IHN0YXlzIG1pc3NpbmcuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIDdjLiBSdW4gdGhlIGRlcGxveSB3aXRoIGEgYm91bmRlZCBhdXRvLWZpeCArIHJldHJ5IGxvb3AgKHNlZSBydW5EZXBsb3lXaXRoUmV0cnkpLlxuICAgICAgICBjb25zdCB7IHN1Y2NlZWRlZCwgcnVuUGFyYW1zIH0gPSBhd2FpdCBydW5EZXBsb3lXaXRoUmV0cnkoc3BlYywgdXJsLCBjd2QsIHBhcmFtcywgYWlPcHRzLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKCFzdWNjZWVkZWQpIHsgcHJvY2Vzcy5leGl0Q29kZSA9IDE7IHJldHVybjsgfVxuICAgICAgICBwcmludFN1Y2Nlc3MoJ0RlcGxveSBjb21tYW5kIGNvbXBsZXRlZC4nKTtcblxuICAgICAgICAvLyA3ZC4gU0VTIHBvc3QtZGVwbG95IGd1aWRhbmNlIChhc3luYyBES0lNICsgc2FuZGJveCArIGJvdW5jZSB0b3BpYykuXG4gICAgICAgIC8vIFNFUyBpcyBwcm92aXNpb25lZCBCWSBERUZBVUxUIG9uIEFXUyBkZXBsb3lzLCBzbyBzdXJmYWNlIHRoZSBndWlkYW5jZVxuICAgICAgICAvLyBmb3IgZWMyL2VrcyB1bmxlc3MgdGhlIG9wZXJhdG9yIG9wdGVkIG91dCB3aXRoIC0tbm8tZW1haWwuXG4gICAgICAgIGNvbnN0IHNlc1Byb3Zpc2lvbmVkID0gKHRhcmdldCA9PT0gJ2VjMicgfHwgdGFyZ2V0ID09PSAnZWtzJykgJiYgcnVuUGFyYW1zLm5vRW1haWwgIT09IHRydWU7XG4gICAgICAgIGlmIChzZXNQcm92aXNpb25lZCkge1xuICAgICAgICAgIHByaW50U2VjdGlvbignU0VTIOKAlCBuZXh0IHN0ZXBzJyk7XG4gICAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIHNlc1Bvc3REZXBsb3lHdWlkYW5jZSgpKSBwcmludEluZm8oYOKAoiAke2xpbmV9YCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyA3ZS4gVmVyaWZ5IGhlYWx0aCAoQ1JFQVRFX0NPTVBMRVRFICE9IHNlcnZpbmcpLlxuICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdWZXJpZnlpbmcgaGVhbHRoJyk7XG4gICAgICAgICAgLy8gTWluaWt1YmUgcmVhY2hlcyB0aGUgZ2F0ZXdheSB2aWEgYSBrdWJlY3RsIHBvcnQtZm9yd2FyZCB0aGF0IHNldHVwLnNoXG4gICAgICAgICAgLy8gYmFja2dyb3VuZHMgYW5kIHRoYXQgY2FuIGRpZS9mYWlsIHRvIGJpbmQg4oCUIChyZSlzdGFydCBpdCBiZWZvcmUgcG9sbGluZ1xuICAgICAgICAgIC8vIHNvIHdlIGRvbid0IHNpdCBhdCB0aGUgZ2F0ZSBvbiBhIGRlYWQgZm9yd2FyZCB3aGlsZSB0aGUgcG9kcyBhcmUgZmluZS5cbiAgICAgICAgICBpZiAodGFyZ2V0ID09PSAnbWluaWt1YmUnKSB7XG4gICAgICAgICAgICBhd2FpdCBlbnN1cmVNaW5pa3ViZUdhdGV3YXkodXJsLCB7IG9uSW5mbzogKG0pID0+IHByaW50SW5mbyhtKSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJpbnRJbmZvKGBQb2xsaW5nICR7dXJsfS9oZWFsdGgg4oCmYCk7XG4gICAgICAgICAgLy8gRnJlc2ggRUtTIGxlZ2l0aW1hdGVseSBuZWVkcyBsb25nZXIgdGhhbiB0aGUgMzAwcyBkZWZhdWx0OiBLYXJwZW50ZXIgcHJvdmlzaW9uc1xuICAgICAgICAgIC8vIG5vZGVzLCB+MTAgc2VydmljZXMgY29sZC1wdWxsIGltYWdlcywgdGhlIEFMQiBwcm92aXNpb25zICh+Mi0zIG1pbiksIGFuZCB0aGVcbiAgICAgICAgICAvLyBSb3V0ZSA1MyBhbGlhcyBwcm9wYWdhdGVzLiBHaXZlIGl0IDE1IG1pbiBiZWZvcmUgc3VyZmFjaW5nIHRoZSBub3QtcmVhY2hhYmxlIG5vdGUuXG4gICAgICAgICAgY29uc3QgaGVhbHRoVGltZW91dE1zID0gdGFyZ2V0ID09PSAnZWtzJyA/IDkwMF8wMDAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgY29uc3QgaGVhbHRoID0gYXdhaXQgd2FpdEhlYWx0aHkodXJsLCB7IHRpbWVvdXRNczogaGVhbHRoVGltZW91dE1zLCBvblRpY2s6IChtKSA9PiBwcmludEluZm8obSkgfSk7XG4gICAgICAgICAgLy8gR3JlZW4gb25seSB3aGVuIGZ1bGx5IHJlYWR5OyBhIFwiaGVhbHRoIE9LIGJ1dCAvcmVhZHkgbmV2ZXIgY2FtZVwiIHByb2NlZWQtXG4gICAgICAgICAgLy8gYW55d2F5IHN0YXRlIGlzIGhlYWx0aHk6dHJ1ZSBidXQgZGVncmFkZWQg4oaSIHdhcm4gc28gaXQgZG9lc24ndCByZWFkIGFzIGRvbmUuXG4gICAgICAgICAgKGhlYWx0aC5oZWFsdGh5ICYmIGhlYWx0aC5yZWFkeSA/IHByaW50U3VjY2VzcyA6IHByaW50V2FybmluZykoYCR7aGVhbHRoLnVybH0g4oCUICR7aGVhbHRoLmRldGFpbH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDdmLiBQb3N0LWluc3RhbGwgc3RlcHMgKHJlZ2lzdGVyICsgb3B0LWluIGxvYWRzLCBzbW9rZSB0ZXN0LCBldmVudHMsIGN1c3RvbSkuXG4gICAgICAgIC8vIFNlZSBydW5Qb3N0U3RlcHMg4oCUIGl0IHN1cmZhY2VzIHJlZ2lzdGVyICsgdGhlIGV2ZW50cyBidW5kbGUgYXMgbWFudWFsIGluLVZQQ1xuICAgICAgICAvLyBuZXh0LXN0ZXBzIG9uIEVDMi9FS1MgaW5zdGVhZCBvZiBhdXRvLXJ1bm5pbmcgKGFuZCBmYWlsaW5nKSB0aGVtIGxvY2FsbHkuXG4gICAgICAgIC8vIGF1dG9SdW4gKHNraXAgdGhlIHNlY29uZCBjb25maXJtKSBvbmx5IHdoZW4gdGhlIHVzZXIgYWN0dWFsbHkgUElDS0VEIGEgbG9hZCBpbiB0aGVcbiAgICAgICAgLy8gaW50ZXJhY3RpdmUgcHJvbXB0IOKAlCBkZWNsaW5pbmcgZXZlcnkgbG9hZCBzaG91bGRuJ3Qgc2lsZW50bHkgcnVuIHJlZ2lzdGVyIHVucHJvbXB0ZWQuXG4gICAgICAgIGNvbnN0IGF1dG9SYW5Mb2FkcyA9IHdpbGxQcm9tcHRMb2FkcyAmJiBlbmFibGVkTG9hZElkcy5sZW5ndGggPiAwO1xuICAgICAgICBhd2FpdCBydW5Qb3N0U3RlcHMocG9zdFN0ZXBzLCBza2lwcGVkU3RlcHMsIHRhcmdldCwgY3dkLCBhZG1pbkVudiwgeyB5ZXM6IG9wdGlvbnMueWVzLCBhdXRvUnVuOiBhdXRvUmFuTG9hZHMsIGF1dG9Jbml0OiBwb3N0U3RlcEZsYWdzLmF1dG9Jbml0IH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkdFTkVSQUwsIHtcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgICAgICBjb250ZXh0OiB7IGNvbW1hbmQ6ICdwcm92aXNpb24nLCBleGVjdXRpb25JZCB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"synth.d.ts","sourceRoot":"","sources":["../../src/commands/synth.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkEpC;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsG5C"}
1
+ {"version":3,"file":"synth.d.ts","sourceRoot":"","sources":["../../src/commands/synth.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwEpC;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsG5C"}