@cartanova/qgrid-cli 2.5.10 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ko.md +0 -1
- package/README.md +0 -1
- package/bundle/dist/application/qgrid/qgrid-run-lifecycle.js +2 -1
- package/bundle/dist/application/qgrid/qgrid.frame.js +12 -3
- package/bundle/dist/application/request-log/request-log.model.js +3 -2
- package/bundle/dist/application/request-log/request-log.types.js +4 -2
- package/bundle/dist/application/sonamu.generated.js +8 -1
- package/bundle/dist/application/sonamu.generated.sso.js +2 -1
- package/bundle/dist/i18n/sd.generated.js +2 -1
- package/bundle/dist/migrations/20260806141701_alter_request_logs_add1_alter1.js +15 -0
- package/bundle/src/application/qgrid/qgrid-oauth-redirect.test.ts +60 -0
- package/bundle/src/application/qgrid/qgrid-run-lifecycle.test.ts +14 -0
- package/bundle/src/application/qgrid/qgrid-run-lifecycle.ts +3 -0
- package/bundle/src/application/qgrid/qgrid.frame.ts +22 -5
- package/bundle/src/application/request-log/request-log.entity.json +8 -0
- package/bundle/src/application/request-log/request-log.model.test.ts +3 -1
- package/bundle/src/application/request-log/request-log.model.ts +7 -1
- package/bundle/src/application/request-log/request-log.types.ts +5 -0
- package/bundle/src/application/sonamu.generated.http +1 -2
- package/bundle/src/application/sonamu.generated.sso.ts +1 -0
- package/bundle/src/application/sonamu.generated.ts +13 -0
- package/bundle/src/i18n/sd.generated.ts +1 -0
- package/bundle/src/migrations/20260806141701_alter_request_logs_add1_alter1.ts +15 -0
- package/bundle/web-dist/client/assets/index-GA9b-zy4.css +1 -0
- package/bundle/web-dist/client/assets/{index-SdI2T3b8.js → index-YowQRE2y.js} +3 -3
- package/bundle/web-dist/client/assets/{logs-O-8hGStp.js → logs-o8mm530D.js} +1 -1
- package/bundle/web-dist/client/assets/{monit-DA8MAY-d.js → monit-B51yXcqk.js} +1 -1
- package/bundle/web-dist/client/assets/{routes-COPjkgNr.js → routes-BqaUiBc0.js} +1 -1
- package/bundle/web-dist/client/assets/{sd.generated-DbBC73_z.js → sd.generated-CjW3rfJ8.js} +1 -1
- package/bundle/web-dist/client/assets/{services.generated-BWyAypSh.js → services.generated-D3MH3EfY.js} +1 -1
- package/bundle/web-dist/client/assets/show-LAFY13v6.js +30 -0
- package/bundle/web-dist/client/assets/tokens-B9Ig7-9Z.js +1 -0
- package/bundle/web-dist/client/assets/{use-update-token-mutation-DeDBiZiM.js → use-update-token-mutation-CLhv6SUL.js} +1 -1
- package/bundle/web-dist/client/index.html +3 -3
- package/bundle/web-dist/server/assets/{lazyRouteComponent-BCJr868T.js → lazyRouteComponent-PRxXWW3t.js} +1 -1
- package/bundle/web-dist/server/assets/{logs-33YNafdW.js → logs-Dbk2Ig2z.js} +3 -3
- package/bundle/web-dist/server/assets/{monit--9mVsjNU.js → monit-Hm9dIPhx.js} +2 -2
- package/bundle/web-dist/server/assets/{routes-BK3Xh1UB.js → routes-DztxeUjk.js} +3 -3
- package/bundle/web-dist/server/assets/{sd.generated-C3gcvRcU.js → sd.generated-ek-tz-7H.js} +1 -0
- package/bundle/web-dist/server/assets/{services.generated-B2_Auwvk.js → services.generated-1Kcul41h.js} +1 -1
- package/bundle/web-dist/server/assets/{show-Dxxxe608.js → show-BHUSw7qv.js} +39 -13
- package/bundle/web-dist/server/assets/{tokens-BWPVvdfi.js → tokens-DHU9lUT2.js} +18 -15
- package/bundle/web-dist/server/assets/{use-update-token-mutation-CNBgTysy.js → use-update-token-mutation-axqnye4L.js} +1 -1
- package/bundle/web-dist/server/entry-server.generated.js +8 -8
- package/package.json +1 -1
- package/skills/qgrid/references/cli-env-and-server-boot.md +1 -2
- package/skills/qgrid/references/token-auth-quota-lifecycle.md +1 -1
- package/bundle/web-dist/client/assets/index-B-cZKEyf.css +0 -1
- package/bundle/web-dist/client/assets/show-ClG4e0BP.js +0 -30
- package/bundle/web-dist/client/assets/tokens-Cc5frn5f.js +0 -1
package/README.ko.md
CHANGED
|
@@ -96,7 +96,6 @@ CLI는 실행 시 npm의 최신 버전을 확인하고 patch를 포함해 설치
|
|
|
96
96
|
| 변수 | 설명 | 기본값 |
|
|
97
97
|
|------|------|--------|
|
|
98
98
|
| `NODE_ENV` | Sonamu 실행 프로필. 원격 비프로덕션 배포에는 `staging` 사용 | `production` |
|
|
99
|
-
| `QGRID_PUBLIC_BASE_URL` | Anthropic OAuth callback 공개 베이스 URL. 원격 접속 환경에서 설정 | 미설정 시 `http://localhost:<port>/callback` |
|
|
100
99
|
|
|
101
100
|
## 사전 요구사항
|
|
102
101
|
|
package/README.md
CHANGED
|
@@ -97,7 +97,6 @@ Server behavior variables:
|
|
|
97
97
|
| Variable | Description | Default |
|
|
98
98
|
|------|------|--------|
|
|
99
99
|
| `NODE_ENV` | Sonamu runtime profile. Set `staging` for a remote non-production deployment | `production` |
|
|
100
|
-
| `QGRID_PUBLIC_BASE_URL` | Public base URL for the Anthropic OAuth callback. Set it when the server is accessed remotely | `http://localhost:<port>/callback` when unset |
|
|
101
100
|
|
|
102
101
|
## Prerequisites
|
|
103
102
|
|
|
@@ -53,6 +53,7 @@ async function beforeQuery(args) {
|
|
|
53
53
|
effort: args.effort,
|
|
54
54
|
project_name: args.projectName,
|
|
55
55
|
history: filterHistoryForStorage(args.history),
|
|
56
|
+
tools: args.tools?.length ? args.tools : void 0,
|
|
56
57
|
is_image_generation: args.imageGeneration
|
|
57
58
|
});
|
|
58
59
|
}
|
|
@@ -186,4 +187,4 @@ async function performStaleRunCleanup() {
|
|
|
186
187
|
//#endregion
|
|
187
188
|
export { afterQuery, beforeQuery, finishRunAborted, finishRunWithError };
|
|
188
189
|
|
|
189
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQtcnVuLWxpZmVjeWNsZS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvcWdyaWQtcnVuLWxpZmVjeWNsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuXG5pbXBvcnQgeyBSZXF1ZXN0TG9nTW9kZWwgfSBmcm9tIFwiLi4vcmVxdWVzdC1sb2cvcmVxdWVzdC1sb2cubW9kZWxcIjtcbmltcG9ydCB7XG4gIGVzdGltYXRlSW1hZ2VHZW5lcmF0aW9uQ29zdE1pY3JvVXNkLFxuICBpbWFnZUdlbmVyYXRpb25Db3N0TWV0aG9kLFxufSBmcm9tIFwiLi9xZ3JpZC1pbWFnZS1nZW5lcmF0aW9uXCI7XG5pbXBvcnQge1xuICBidWlsZEltYWdlR2VuZXJhdGlvblRvb2xTdGVwcyxcbiAgZm9ybWF0UmVzcG9uc2VGb3JMb2csXG4gIGdldEltYWdlUGFydHMsXG59IGZyb20gXCIuL3FncmlkLXJlc3BvbnNlLWZvcm1hdFwiO1xuaW1wb3J0IHsgdHlwZSBRZ3JpZFJ1bkNvbnRleHQsIHR5cGUgUXVlcnlJbnB1dCwgdHlwZSBRdWVyeU91dHB1dCB9IGZyb20gXCIuL3FncmlkLnR5cGVzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcihbXCJxZ3JpZFwiLCBcInJ1bi1saWZlY3ljbGVcIl0pO1xuY29uc3QgU1RBTEVfUlVOX1RIUkVTSE9MRF9NUyA9IDMwICogNjAgKiAxMDAwO1xuY29uc3QgU1RBTEVfQ0xFQU5VUF9JTlRFUlZBTF9NUyA9IDYwICogMTAwMDtcbmxldCBzdGFsZUNsZWFudXBJbkZsaWdodDogUHJvbWlzZTx2b2lkPiB8IHVuZGVmaW5lZDtcbmxldCBsYXN0U3RhbGVDbGVhbnVwU3RhcnRlZEF0ID0gMDtcblxuZnVuY3Rpb24gd2l0aFByb3ZpZGVyUHJlZml4KFxuICByb3V0ZU1vZGVsOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIG1vZGVsOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIW1vZGVsKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAobW9kZWwuaW5jbHVkZXMoXCIvXCIpKSByZXR1cm4gbW9kZWw7XG4gIGNvbnN0IHNsYXNoID0gcm91dGVNb2RlbD8uaW5kZXhPZihcIi9cIikgPz8gLTE7XG4gIGNvbnN0IHByb3ZpZGVyID0gc2xhc2ggPiAwID8gcm91dGVNb2RlbD8uc2xpY2UoMCwgc2xhc2gpIDogdW5kZWZpbmVkO1xuICByZXR1cm4gcHJvdmlkZXIgPyBgJHtwcm92aWRlcn0vJHttb2RlbH1gIDogbW9kZWw7XG59XG5cbi8qKlxuICogaGlzdG9yeeuKlCDsm5Drs7gg6re464yA66GcIOyggOyepe2VmOq4sOuztOuLpOuKlCwgcnVuIOu2hOyEneyXkCDtlYTsmpTtlZwgdXNlci9hc3Npc3RhbnQg7KCV67O066eMIO2VhO2EsOunge2VtOyEnCDsoIDsnqVcbiAqL1xuZnVuY3Rpb24gZmlsdGVySGlzdG9yeUZvclN0b3JhZ2UocmF3SGlzdG9yeTogc3RyaW5nIHwgdW5kZWZpbmVkKTogdW5rbm93biB7XG4gIGlmICghcmF3SGlzdG9yeSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgdHJ5IHtcbiAgICBjb25zdCBpdGVtcyA9IEpTT04ucGFyc2UocmF3SGlzdG9yeSkgYXMgdW5rbm93bltdO1xuICAgIGNvbnN0IGZpbHRlcmVkID0gaXRlbXMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICBpZiAoIWl0ZW0gfHwgdHlwZW9mIGl0ZW0gIT09IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IHJlY29yZCA9IGl0ZW0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICByZXR1cm4gcmVjb3JkLnR5cGUgPT09IFwibWVzc2FnZVwiICYmIChyZWNvcmQucm9sZSA9PT0gXCJ1c2VyXCIgfHwgcmVjb3JkLnJvbGUgPT09IFwiYXNzaXN0YW50XCIpO1xuICAgIH0pO1xuICAgIHJldHVybiBmaWx0ZXJlZC5sZW5ndGggPiAwID8gZmlsdGVyZWQgOiB1bmRlZmluZWQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgUnVuTGlmZWN5Y2xlUmVzdWx0ID0ge1xuICBydW5Db250ZXh0PzogUWdyaWRSdW5Db250ZXh0O1xufTtcblxuLyoqXG4gKiBsb2dnZXItZW5hYmxlZCBxdWVyeS9zdHJlYW0g7J2R64u1IOyghO2bhOyXkCDtmLjstpwuXG4gKlxuICogMSkgYmVmb3JlUXVlcnk6IHJ1biDsg53shLEv6rOE7IaNICsgdG9vbCByZXN1bHQg7JmE66OMICsgc3RhbGUgdG9vbC13YWl0IGNsZWFudXBcbiAqIDIpIGFmdGVyUXVlcnk6IGdlbmVyYXRlIHN0ZXAgKyB0b29sLWNhbGwgc3RlcCArIGZpbmlzaC9rZWVwLW9wZW5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJlZm9yZVF1ZXJ5KGFyZ3M6IFF1ZXJ5SW5wdXQpOiBQcm9taXNlPHtcbiAgcmVxdWVzdExvZ0lkOiBudW1iZXI7XG4gIHN0ZXBJbmRleDogbnVtYmVyO1xufT4ge1xuICBsZXQgcmVxdWVzdExvZ0lkOiBudW1iZXI7XG4gIGxldCBzdGVwSW5kZXggPSAwO1xuXG4gIC8vIHJlcXVlc3RMb2dJZCDqsIAg7J6I7J2EIOuVjOunjCDquLDsobQgcnVuIOyXsOyepS4gdGhyZWFkQ29vcmQg66eMIOyeiOuKlCBjb252IOuKlCDsg4ggcnVuIOycvOuhnCDsi5zsnpEuXG4gIGlmIChhcmdzLnJ1bkNvbnRleHQ/LnJlcXVlc3RMb2dJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmVxdWVzdExvZ0lkID0gYXJncy5ydW5Db250ZXh0LnJlcXVlc3RMb2dJZDtcbiAgICAvLyBjbGVhbnVw6rO8IOqwmeydgCBEQiBhZHZpc29yeSBsb2Nr7J2EIOyeoeqzoCB0b29sIOqysOqzvCDrsJjsmIEgKyDri6TsnYwgc3RlcCDsmIjslb3snYQg7ZWcXG4gICAgLy8gdHJhbnNhY3Rpb27sl5DshJwg7LKY66as7ZWc64ukLiDsl6zrn6wgcWdyaWQg7ZSE66Gc7IS47IqkIOyCrOydtOyXkOyEnOuPhCBzdGFsZSBleHBpcnnqsIBcbiAgICAvLyDrj4TssKkg7KSR7J24IGZvbGxvdy11cOydhCBlcnJvcuuhnCDrja7slrTsk7Dsp4Ag66q77ZWc64ukLlxuICAgIHN0ZXBJbmRleCA9IGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5jb250aW51ZVRvb2xSdW4ocmVxdWVzdExvZ0lkLCBhcmdzLnRvb2xSZXN1bHRzID8/IFtdKTtcbiAgICBhd2FpdCBjbGVhbnVwU3RhbGVSdW5zKCk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgY2xlYW51cFN0YWxlUnVucygpO1xuICAgIHJlcXVlc3RMb2dJZCA9IGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5jcmVhdGVSdW4oe1xuICAgICAgdXNlcl9wcm9tcHQ6IGFyZ3MucHJvbXB0LFxuICAgICAgc3lzdGVtX3Byb21wdDogYXJncy5zeXN0ZW0sXG4gICAgICByZXF1ZXN0ZWRfbW9kZWxfbmFtZTogYXJncy5tb2RlbCxcbiAgICAgIGVmZm9ydDogYXJncy5lZmZvcnQsXG4gICAgICBwcm9qZWN0X25hbWU6IGFyZ3MucHJvamVjdE5hbWUsXG4gICAgICBoaXN0b3J5OiBmaWx0ZXJIaXN0b3J5Rm9yU3RvcmFnZShhcmdzLmhpc3RvcnkpLFxuICAgICAgaXNfaW1hZ2VfZ2VuZXJhdGlvbjogYXJncy5pbWFnZUdlbmVyYXRpb24sXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4geyByZXF1ZXN0TG9nSWQsIHN0ZXBJbmRleCB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWZ0ZXJRdWVyeShcbiAgcmVxdWVzdExvZ0lkOiBudW1iZXIsXG4gIHN0ZXBJbmRleDogbnVtYmVyLFxuICBhcmdzOiBRdWVyeUlucHV0LFxuICByZXN1bHQ6IFF1ZXJ5T3V0cHV0LFxuKTogUHJvbWlzZTxSdW5MaWZlY3ljbGVSZXN1bHQ+IHtcbiAgLy8gcHJvdmlkZXLqsIAgY2Fub25pY2FsIG1vZGVs7J2EIOuPjOugpOykmOuPhCDsmpTssq0gcm91dGUg7J6Q7LK0KFsxbV0g65OxKeuKlCDrs7TsobTtlZzri6QuXG4gIGNvbnN0IHJlcXVlc3RlZE1vZGVsTmFtZSA9IHdpdGhQcm92aWRlclByZWZpeChcbiAgICBhcmdzLm1vZGVsLFxuICAgIGFyZ3MubW9kZWwgPz8gcmVzdWx0LnJlcXVlc3RlZE1vZGVsID8/IHJlc3VsdC5tb2RlbCxcbiAgKTtcbiAgY29uc3Qgc2VydmVkTW9kZWxOYW1lID0gd2l0aFByb3ZpZGVyUHJlZml4KGFyZ3MubW9kZWwsIHJlc3VsdC5tb2RlbCk7XG5cbiAgLy8gZ2VuZXJhdGUgc3RlcCDquLDroZ1cbiAgYXdhaXQgUmVxdWVzdExvZ01vZGVsLmFwcGVuZFN0ZXAocmVxdWVzdExvZ0lkLCB7XG4gICAgc3RlcF9pbmRleDogc3RlcEluZGV4LFxuICAgIHR5cGU6IFwiZ2VuZXJhdGVcIixcbiAgICBtb2RlbF9uYW1lOiBzZXJ2ZWRNb2RlbE5hbWUsXG4gICAgcmVxdWVzdGVkX21vZGVsX25hbWU6IHJlcXVlc3RlZE1vZGVsTmFtZSxcbiAgICBmYWxsYmFja19jb3VudDogcmVzdWx0Lm1vZGVsRmFsbGJhY2tzPy5sZW5ndGggPz8gMCxcbiAgICBpbnB1dF90b2tlbnM6IHJlc3VsdC51c2FnZS5pbnB1dF90b2tlbnMsXG4gICAgb3V0cHV0X3Rva2VuczogcmVzdWx0LnVzYWdlLm91dHB1dF90b2tlbnMsXG4gICAgY2FjaGVfcmVhZF90b2tlbnM6IHJlc3VsdC51c2FnZS5jYWNoZV9yZWFkX2lucHV0X3Rva2VucyxcbiAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IHJlc3VsdC51c2FnZS5jYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMsXG4gICAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zOiByZXN1bHQudXNhZ2UuY2FjaGVfY3JlYXRpb25fNW1faW5wdXRfdG9rZW5zLFxuICAgIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2VuczogcmVzdWx0LnVzYWdlLmNhY2hlX2NyZWF0aW9uXzFoX2lucHV0X3Rva2VucyxcbiAgICBjb3N0X3VzZDogTWF0aC5yb3VuZChyZXN1bHQuY29zdFVzZCAqIDFfMDAwXzAwMCksXG4gICAgY29zdF9zb3VyY2U6IHJlc3VsdC5jb3N0U291cmNlLFxuICAgIGR1cmF0aW9uX21zOiByZXN1bHQuZHVyYXRpb25NcyxcbiAgICB0dGZ0X21zOiByZXN1bHQudHRmdE1zLFxuICAgIGZpbmlzaF9yZWFzb246IHJlc3VsdC5maW5pc2hSZWFzb24sXG4gIH0pO1xuXG4gIGNvbnN0IGltYWdlUGFydHMgPSBnZXRJbWFnZVBhcnRzKHJlc3VsdCk7XG4gIGNvbnN0IGltYWdlQ29zdE1pY3JvVXNkID0gZXN0aW1hdGVJbWFnZUdlbmVyYXRpb25Db3N0TWljcm9Vc2QoXG4gICAgcmVzdWx0LFxuICAgIGFyZ3MuaW1hZ2VHZW5lcmF0aW9uT3B0aW9ucyxcbiAgKTtcbiAgZm9yIChjb25zdCBzdGVwIG9mIGJ1aWxkSW1hZ2VHZW5lcmF0aW9uVG9vbFN0ZXBzKGFyZ3MsIGltYWdlUGFydHMsIHN0ZXBJbmRleCkpIHtcbiAgICBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuYXBwZW5kU3RlcChyZXF1ZXN0TG9nSWQsIHN0ZXApO1xuICB9XG5cbiAgaWYgKHJlc3VsdC5maW5pc2hSZWFzb24gPT09IFwidG9vbC1jYWxsc1wiKSB7XG4gICAgLy8gdG9vbC1jYWxsIHN0ZXDsnYQg7KaJ7IucIOq4sOuhne2VmOqzoCwg64uk7J2MIGZvbGxvdy11cOydtCDqsJnsnYAgcm937JeQIOqysOqzvOulvCDssYTsmrTri6QuXG4gICAgY29uc3QgdG9vbENhbGxzID0gcmVzdWx0LmNvbnRlbnQuZmlsdGVyKChjKSA9PiBjLnR5cGUgPT09IFwidG9vbC1jYWxsXCIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9vbENhbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB0YyA9IHRvb2xDYWxsc1tpXSE7XG4gICAgICBpZiAodGMudHlwZSAhPT0gXCJ0b29sLWNhbGxcIikgY29udGludWU7XG4gICAgICBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuYXBwZW5kU3RlcChyZXF1ZXN0TG9nSWQsIHtcbiAgICAgICAgc3RlcF9pbmRleDogc3RlcEluZGV4LFxuICAgICAgICB0eXBlOiBcInRvb2xfY2FsbFwiLFxuICAgICAgICB0b29sX2NhbGxfaW5kZXg6IGltYWdlUGFydHMubGVuZ3RoICsgaSxcbiAgICAgICAgdG9vbF9jYWxsX2lkOiB0Yy50b29sQ2FsbElkLFxuICAgICAgICB0b29sX25hbWU6IHRjLnRvb2xOYW1lLFxuICAgICAgICB0b29sX2FyZ3M6IHRjLmlucHV0LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcnVuQ29udGV4dDogeyByZXF1ZXN0TG9nSWQgfSB9O1xuICB9XG5cbiAgLy8gZmluaXNoUmVhc29uID09PSBcInN0b3BcIiDihpIgcnVuIOyiheujjCAo7KCE7LK0IHN0ZXAgdXNhZ2Ug7ZWp7IKwKVxuICBjb25zdCBhZ2cgPSBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuYWdncmVnYXRlU3RlcFVzYWdlKHJlcXVlc3RMb2dJZCk7XG4gIGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5maW5pc2hSdW4ocmVxdWVzdExvZ0lkLCB7XG4gICAgc3RhdHVzOiBcInN1Y2NlZWRlZFwiLFxuICAgIHJlc3BvbnNlOiBmb3JtYXRSZXNwb25zZUZvckxvZyhyZXN1bHQpLFxuICAgIHRva2VuX25hbWU6IHJlc3VsdC50b2tlbk5hbWUsXG4gICAgaW5wdXRfdG9rZW5zOiBhZ2cuaW5wdXRfdG9rZW5zLFxuICAgIG91dHB1dF90b2tlbnM6IGFnZy5vdXRwdXRfdG9rZW5zLFxuICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBhZ2cuY2FjaGVfcmVhZF90b2tlbnMsXG4gICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBhZ2cuY2FjaGVfY3JlYXRpb25fdG9rZW5zLFxuICAgIGNhY2hlX2NyZWF0aW9uXzVtX3Rva2VuczogYWdnLmNhY2hlX2NyZWF0aW9uXzVtX3Rva2VucyxcbiAgICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IGFnZy5jYWNoZV9jcmVhdGlvbl8xaF90b2tlbnMsXG4gICAgZHVyYXRpb25fbXM6IGFnZy5kdXJhdGlvbl9tcyxcbiAgICAvLyBtdWx0aS1zdGVwIHJ1biDrtoDrqqjsnZgg66qo64247J2AIOy1nOyihSB0dXJu7J2EIOyEnOu5me2VnCDrqqjrjbjsnbTri6QuXG4gICAgcmVxdWVzdGVkX21vZGVsX25hbWU6IHJlcXVlc3RlZE1vZGVsTmFtZSxcbiAgICBtb2RlbF9uYW1lOiBzZXJ2ZWRNb2RlbE5hbWUsXG4gICAgZmFsbGJhY2tfY291bnQ6IGFnZy5mYWxsYmFja19jb3VudCxcbiAgICBjb3N0X3VzZDogYWdnLmNvc3RfdXNkLFxuICAgIGNvc3Rfc291cmNlOiBhZ2cuY29zdF9zb3VyY2UsXG4gICAgaW1hZ2VfY29zdF91c2Q6IGltYWdlQ29zdE1pY3JvVXNkLFxuICAgIGltYWdlX2Nvc3RfbWV0aG9kOlxuICAgICAgaW1hZ2VDb3N0TWljcm9Vc2QgIT09IG51bGwgPyBpbWFnZUdlbmVyYXRpb25Db3N0TWV0aG9kKGFyZ3MuaW1hZ2VHZW5lcmF0aW9uT3B0aW9ucykgOiBudWxsLFxuICAgIGhpc3Rvcnk6IGZpbHRlckhpc3RvcnlGb3JTdG9yYWdlKGFyZ3MuaGlzdG9yeSksXG4gIH0pO1xuXG4gIHJldHVybiB7fTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbmlzaFJ1bldpdGhFcnJvcihcbiAgcmVxdWVzdExvZ0lkOiBudW1iZXIsXG4gIGVycm9yTWVzc2FnZTogc3RyaW5nLFxuICBhcmdzPzogUXVlcnlJbnB1dCxcbik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBmaW5pc2hUZXJtaW5hbFJ1bihyZXF1ZXN0TG9nSWQsIFwiZXJyb3JcIiwgZXJyb3JNZXNzYWdlLCBhcmdzKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbmlzaFJ1bkFib3J0ZWQocmVxdWVzdExvZ0lkOiBudW1iZXIsIGFyZ3M/OiBRdWVyeUlucHV0KTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGZpbmlzaFRlcm1pbmFsUnVuKHJlcXVlc3RMb2dJZCwgXCJhYm9ydGVkXCIsIFwiY2xpZW50IGRpc2Nvbm5lY3RlZFwiLCBhcmdzKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmluaXNoVGVybWluYWxSdW4oXG4gIHJlcXVlc3RMb2dJZDogbnVtYmVyLFxuICBzdGF0dXM6IFwiZXJyb3JcIiB8IFwiYWJvcnRlZFwiLFxuICBlcnJvck1lc3NhZ2U6IHN0cmluZyxcbiAgYXJncz86IFF1ZXJ5SW5wdXQsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBsZXQgYWdncmVnYXRlOiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIFJlcXVlc3RMb2dNb2RlbC5hZ2dyZWdhdGVTdGVwVXNhZ2U+PiB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgYWdncmVnYXRlID0gYXdhaXQgUmVxdWVzdExvZ01vZGVsLmFnZ3JlZ2F0ZVN0ZXBVc2FnZShyZXF1ZXN0TG9nSWQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgYWdncmVnYXRlU3RlcFVzYWdlIGZhaWxlZCB3aGlsZSBmaW5pc2hpbmcgJHtzdGF0dXN9OiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgIH1cblxuICAgIGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5maW5pc2hSdW4ocmVxdWVzdExvZ0lkLCB7XG4gICAgICBzdGF0dXMsXG4gICAgICBlcnJvcl9tZXNzYWdlOiBlcnJvck1lc3NhZ2UsXG4gICAgICBoaXN0b3J5OiBhcmdzID8gZmlsdGVySGlzdG9yeUZvclN0b3JhZ2UoYXJncy5oaXN0b3J5KSA6IHVuZGVmaW5lZCxcbiAgICAgIC4uLihhZ2dyZWdhdGVcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBpbnB1dF90b2tlbnM6IGFnZ3JlZ2F0ZS5pbnB1dF90b2tlbnMsXG4gICAgICAgICAgICBvdXRwdXRfdG9rZW5zOiBhZ2dyZWdhdGUub3V0cHV0X3Rva2VucyxcbiAgICAgICAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBhZ2dyZWdhdGUuY2FjaGVfcmVhZF90b2tlbnMsXG4gICAgICAgICAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IGFnZ3JlZ2F0ZS5jYWNoZV9jcmVhdGlvbl90b2tlbnMsXG4gICAgICAgICAgICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM6IGFnZ3JlZ2F0ZS5jYWNoZV9jcmVhdGlvbl81bV90b2tlbnMsXG4gICAgICAgICAgICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IGFnZ3JlZ2F0ZS5jYWNoZV9jcmVhdGlvbl8xaF90b2tlbnMsXG4gICAgICAgICAgICBkdXJhdGlvbl9tczogYWdncmVnYXRlLmR1cmF0aW9uX21zLFxuICAgICAgICAgICAgZmFsbGJhY2tfY291bnQ6IGFnZ3JlZ2F0ZS5mYWxsYmFja19jb3VudCxcbiAgICAgICAgICAgIGNvc3RfdXNkOiBhZ2dyZWdhdGUuY29zdF91c2QsXG4gICAgICAgICAgICBjb3N0X3NvdXJjZTogYWdncmVnYXRlLmNvc3Rfc291cmNlLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7fSksXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIuZXJyb3IoYGZpbmlzaFRlcm1pbmFsUnVuKCR7c3RhdHVzfSkgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNsZWFudXBTdGFsZVJ1bnMoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChzdGFsZUNsZWFudXBJbkZsaWdodCkge1xuICAgIGF3YWl0IHN0YWxlQ2xlYW51cEluRmxpZ2h0O1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGlmIChub3cgLSBsYXN0U3RhbGVDbGVhbnVwU3RhcnRlZEF0IDwgU1RBTEVfQ0xFQU5VUF9JTlRFUlZBTF9NUykgcmV0dXJuO1xuICBsYXN0U3RhbGVDbGVhbnVwU3RhcnRlZEF0ID0gbm93O1xuXG4gIGNvbnN0IGNsZWFudXAgPSBwZXJmb3JtU3RhbGVSdW5DbGVhbnVwKCk7XG4gIHN0YWxlQ2xlYW51cEluRmxpZ2h0ID0gY2xlYW51cDtcbiAgdHJ5IHtcbiAgICBhd2FpdCBjbGVhbnVwO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChzdGFsZUNsZWFudXBJbkZsaWdodCA9PT0gY2xlYW51cCkgc3RhbGVDbGVhbnVwSW5GbGlnaHQgPSB1bmRlZmluZWQ7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcGVyZm9ybVN0YWxlUnVuQ2xlYW51cCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBcInRvb2wtY2FsbCBydW46IG5vIGZvbGxvdy11cCB3aXRoaW4gMzAgbWludXRlc1wiO1xuICAgIGNvbnN0IHN0YWxlSWRzID0gYXdhaXQgUmVxdWVzdExvZ01vZGVsLmV4cGlyZVN0YWxlVG9vbFdhaXRpbmdSdW5zKFxuICAgICAgU1RBTEVfUlVOX1RIUkVTSE9MRF9NUyxcbiAgICAgIGVycm9yTWVzc2FnZSxcbiAgICApO1xuICAgIGNvbnN0IGNsZWFuZWRDb3VudCA9IHN0YWxlSWRzLmxlbmd0aDtcbiAgICBpZiAoY2xlYW5lZENvdW50ID4gMCkge1xuICAgICAgbG9nZ2VyLmluZm8oYGNsZWFuZWQgdXAgJHtjbGVhbmVkQ291bnR9IHN0YWxlIHJ1bm5pbmcgcmVxdWVzdCBsb2dzYCk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLmVycm9yKGBzdGFsZSBjbGVhbnVwIGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7OztBQWNBLE1BQU0sU0FBUyxVQUFVLENBQUMsU0FBUyxlQUFlLENBQUM7QUFDbkQsTUFBTSx5QkFBeUIsT0FBVTtBQUN6QyxNQUFNLDRCQUE0QixLQUFLO0FBQ3ZDLElBQUk7QUFDSixJQUFJLDRCQUE0QjtBQUVo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
|
|
190
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQtcnVuLWxpZmVjeWNsZS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvcWdyaWQtcnVuLWxpZmVjeWNsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuXG5pbXBvcnQgeyBSZXF1ZXN0TG9nTW9kZWwgfSBmcm9tIFwiLi4vcmVxdWVzdC1sb2cvcmVxdWVzdC1sb2cubW9kZWxcIjtcbmltcG9ydCB7XG4gIGVzdGltYXRlSW1hZ2VHZW5lcmF0aW9uQ29zdE1pY3JvVXNkLFxuICBpbWFnZUdlbmVyYXRpb25Db3N0TWV0aG9kLFxufSBmcm9tIFwiLi9xZ3JpZC1pbWFnZS1nZW5lcmF0aW9uXCI7XG5pbXBvcnQge1xuICBidWlsZEltYWdlR2VuZXJhdGlvblRvb2xTdGVwcyxcbiAgZm9ybWF0UmVzcG9uc2VGb3JMb2csXG4gIGdldEltYWdlUGFydHMsXG59IGZyb20gXCIuL3FncmlkLXJlc3BvbnNlLWZvcm1hdFwiO1xuaW1wb3J0IHsgdHlwZSBRZ3JpZFJ1bkNvbnRleHQsIHR5cGUgUXVlcnlJbnB1dCwgdHlwZSBRdWVyeU91dHB1dCB9IGZyb20gXCIuL3FncmlkLnR5cGVzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcihbXCJxZ3JpZFwiLCBcInJ1bi1saWZlY3ljbGVcIl0pO1xuY29uc3QgU1RBTEVfUlVOX1RIUkVTSE9MRF9NUyA9IDMwICogNjAgKiAxMDAwO1xuY29uc3QgU1RBTEVfQ0xFQU5VUF9JTlRFUlZBTF9NUyA9IDYwICogMTAwMDtcbmxldCBzdGFsZUNsZWFudXBJbkZsaWdodDogUHJvbWlzZTx2b2lkPiB8IHVuZGVmaW5lZDtcbmxldCBsYXN0U3RhbGVDbGVhbnVwU3RhcnRlZEF0ID0gMDtcblxuZnVuY3Rpb24gd2l0aFByb3ZpZGVyUHJlZml4KFxuICByb3V0ZU1vZGVsOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIG1vZGVsOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIW1vZGVsKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAobW9kZWwuaW5jbHVkZXMoXCIvXCIpKSByZXR1cm4gbW9kZWw7XG4gIGNvbnN0IHNsYXNoID0gcm91dGVNb2RlbD8uaW5kZXhPZihcIi9cIikgPz8gLTE7XG4gIGNvbnN0IHByb3ZpZGVyID0gc2xhc2ggPiAwID8gcm91dGVNb2RlbD8uc2xpY2UoMCwgc2xhc2gpIDogdW5kZWZpbmVkO1xuICByZXR1cm4gcHJvdmlkZXIgPyBgJHtwcm92aWRlcn0vJHttb2RlbH1gIDogbW9kZWw7XG59XG5cbi8qKlxuICogaGlzdG9yeeuKlCDsm5Drs7gg6re464yA66GcIOyggOyepe2VmOq4sOuztOuLpOuKlCwgcnVuIOu2hOyEneyXkCDtlYTsmpTtlZwgdXNlci9hc3Npc3RhbnQg7KCV67O066eMIO2VhO2EsOunge2VtOyEnCDsoIDsnqVcbiAqL1xuZnVuY3Rpb24gZmlsdGVySGlzdG9yeUZvclN0b3JhZ2UocmF3SGlzdG9yeTogc3RyaW5nIHwgdW5kZWZpbmVkKTogdW5rbm93biB7XG4gIGlmICghcmF3SGlzdG9yeSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgdHJ5IHtcbiAgICBjb25zdCBpdGVtcyA9IEpTT04ucGFyc2UocmF3SGlzdG9yeSkgYXMgdW5rbm93bltdO1xuICAgIGNvbnN0IGZpbHRlcmVkID0gaXRlbXMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICBpZiAoIWl0ZW0gfHwgdHlwZW9mIGl0ZW0gIT09IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IHJlY29yZCA9IGl0ZW0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICByZXR1cm4gcmVjb3JkLnR5cGUgPT09IFwibWVzc2FnZVwiICYmIChyZWNvcmQucm9sZSA9PT0gXCJ1c2VyXCIgfHwgcmVjb3JkLnJvbGUgPT09IFwiYXNzaXN0YW50XCIpO1xuICAgIH0pO1xuICAgIHJldHVybiBmaWx0ZXJlZC5sZW5ndGggPiAwID8gZmlsdGVyZWQgOiB1bmRlZmluZWQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgUnVuTGlmZWN5Y2xlUmVzdWx0ID0ge1xuICBydW5Db250ZXh0PzogUWdyaWRSdW5Db250ZXh0O1xufTtcblxuLyoqXG4gKiBsb2dnZXItZW5hYmxlZCBxdWVyeS9zdHJlYW0g7J2R64u1IOyghO2bhOyXkCDtmLjstpwuXG4gKlxuICogMSkgYmVmb3JlUXVlcnk6IHJ1biDsg53shLEv6rOE7IaNICsgdG9vbCByZXN1bHQg7JmE66OMICsgc3RhbGUgdG9vbC13YWl0IGNsZWFudXBcbiAqIDIpIGFmdGVyUXVlcnk6IGdlbmVyYXRlIHN0ZXAgKyB0b29sLWNhbGwgc3RlcCArIGZpbmlzaC9rZWVwLW9wZW5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJlZm9yZVF1ZXJ5KGFyZ3M6IFF1ZXJ5SW5wdXQpOiBQcm9taXNlPHtcbiAgcmVxdWVzdExvZ0lkOiBudW1iZXI7XG4gIHN0ZXBJbmRleDogbnVtYmVyO1xufT4ge1xuICBsZXQgcmVxdWVzdExvZ0lkOiBudW1iZXI7XG4gIGxldCBzdGVwSW5kZXggPSAwO1xuXG4gIC8vIHJlcXVlc3RMb2dJZCDqsIAg7J6I7J2EIOuVjOunjCDquLDsobQgcnVuIOyXsOyepS4gdGhyZWFkQ29vcmQg66eMIOyeiOuKlCBjb252IOuKlCDsg4ggcnVuIOycvOuhnCDsi5zsnpEuXG4gIC8vIGNvbnRpbnVhdGlvbiDsnYAgY3JlYXRlUnVuIOydhCDqsbTrhIjrm7Drr4DroZwgcnVuIOydmCB0b29scyDripQg7LKrIOyKpO2FnSDsnqXssKnrtoTsnLzroZwg6rOg7KCV65Cc64ukIOKAlFxuICAvLyBBSSBTREsgcHJlcGFyZVN0ZXAvYWN0aXZlVG9vbHMg66GcIOyKpO2FneuniOuLpCDtiLTshYvsnbQg67CU64CM7Ja064+EIOuhnOq3uOyXkOuKlCDrsJjsmIHrkJjsp4Ag7JWK64qU64ukLlxuICBpZiAoYXJncy5ydW5Db250ZXh0Py5yZXF1ZXN0TG9nSWQgIT09IHVuZGVmaW5lZCkge1xuICAgIHJlcXVlc3RMb2dJZCA9IGFyZ3MucnVuQ29udGV4dC5yZXF1ZXN0TG9nSWQ7XG4gICAgLy8gY2xlYW51cOqzvCDqsJnsnYAgREIgYWR2aXNvcnkgbG9ja+ydhCDsnqHqs6AgdG9vbCDqsrDqs7wg67CY7JiBICsg64uk7J2MIHN0ZXAg7JiI7JW97J2EIO2VnFxuICAgIC8vIHRyYW5zYWN0aW9u7JeQ7IScIOyymOumrO2VnOuLpC4g7Jes65+sIHFncmlkIO2UhOuhnOyEuOyKpCDsgqzsnbTsl5DshJzrj4Qgc3RhbGUgZXhwaXJ56rCAXG4gICAgLy8g64+E7LCpIOykkeyduCBmb2xsb3ctdXDsnYQgZXJyb3LroZwg642u7Ja07JOw7KeAIOuqu+2VnOuLpC5cbiAgICBzdGVwSW5kZXggPSBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuY29udGludWVUb29sUnVuKHJlcXVlc3RMb2dJZCwgYXJncy50b29sUmVzdWx0cyA/PyBbXSk7XG4gICAgYXdhaXQgY2xlYW51cFN0YWxlUnVucygpO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IGNsZWFudXBTdGFsZVJ1bnMoKTtcbiAgICByZXF1ZXN0TG9nSWQgPSBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuY3JlYXRlUnVuKHtcbiAgICAgIHVzZXJfcHJvbXB0OiBhcmdzLnByb21wdCxcbiAgICAgIHN5c3RlbV9wcm9tcHQ6IGFyZ3Muc3lzdGVtLFxuICAgICAgcmVxdWVzdGVkX21vZGVsX25hbWU6IGFyZ3MubW9kZWwsXG4gICAgICBlZmZvcnQ6IGFyZ3MuZWZmb3J0LFxuICAgICAgcHJvamVjdF9uYW1lOiBhcmdzLnByb2plY3ROYW1lLFxuICAgICAgaGlzdG9yeTogZmlsdGVySGlzdG9yeUZvclN0b3JhZ2UoYXJncy5oaXN0b3J5KSxcbiAgICAgIHRvb2xzOiBhcmdzLnRvb2xzPy5sZW5ndGggPyBhcmdzLnRvb2xzIDogdW5kZWZpbmVkLFxuICAgICAgaXNfaW1hZ2VfZ2VuZXJhdGlvbjogYXJncy5pbWFnZUdlbmVyYXRpb24sXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4geyByZXF1ZXN0TG9nSWQsIHN0ZXBJbmRleCB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWZ0ZXJRdWVyeShcbiAgcmVxdWVzdExvZ0lkOiBudW1iZXIsXG4gIHN0ZXBJbmRleDogbnVtYmVyLFxuICBhcmdzOiBRdWVyeUlucHV0LFxuICByZXN1bHQ6IFF1ZXJ5T3V0cHV0LFxuKTogUHJvbWlzZTxSdW5MaWZlY3ljbGVSZXN1bHQ+IHtcbiAgLy8gcHJvdmlkZXLqsIAgY2Fub25pY2FsIG1vZGVs7J2EIOuPjOugpOykmOuPhCDsmpTssq0gcm91dGUg7J6Q7LK0KFsxbV0g65OxKeuKlCDrs7TsobTtlZzri6QuXG4gIGNvbnN0IHJlcXVlc3RlZE1vZGVsTmFtZSA9IHdpdGhQcm92aWRlclByZWZpeChcbiAgICBhcmdzLm1vZGVsLFxuICAgIGFyZ3MubW9kZWwgPz8gcmVzdWx0LnJlcXVlc3RlZE1vZGVsID8/IHJlc3VsdC5tb2RlbCxcbiAgKTtcbiAgY29uc3Qgc2VydmVkTW9kZWxOYW1lID0gd2l0aFByb3ZpZGVyUHJlZml4KGFyZ3MubW9kZWwsIHJlc3VsdC5tb2RlbCk7XG5cbiAgLy8gZ2VuZXJhdGUgc3RlcCDquLDroZ1cbiAgYXdhaXQgUmVxdWVzdExvZ01vZGVsLmFwcGVuZFN0ZXAocmVxdWVzdExvZ0lkLCB7XG4gICAgc3RlcF9pbmRleDogc3RlcEluZGV4LFxuICAgIHR5cGU6IFwiZ2VuZXJhdGVcIixcbiAgICBtb2RlbF9uYW1lOiBzZXJ2ZWRNb2RlbE5hbWUsXG4gICAgcmVxdWVzdGVkX21vZGVsX25hbWU6IHJlcXVlc3RlZE1vZGVsTmFtZSxcbiAgICBmYWxsYmFja19jb3VudDogcmVzdWx0Lm1vZGVsRmFsbGJhY2tzPy5sZW5ndGggPz8gMCxcbiAgICBpbnB1dF90b2tlbnM6IHJlc3VsdC51c2FnZS5pbnB1dF90b2tlbnMsXG4gICAgb3V0cHV0X3Rva2VuczogcmVzdWx0LnVzYWdlLm91dHB1dF90b2tlbnMsXG4gICAgY2FjaGVfcmVhZF90b2tlbnM6IHJlc3VsdC51c2FnZS5jYWNoZV9yZWFkX2lucHV0X3Rva2VucyxcbiAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IHJlc3VsdC51c2FnZS5jYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMsXG4gICAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zOiByZXN1bHQudXNhZ2UuY2FjaGVfY3JlYXRpb25fNW1faW5wdXRfdG9rZW5zLFxuICAgIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2VuczogcmVzdWx0LnVzYWdlLmNhY2hlX2NyZWF0aW9uXzFoX2lucHV0X3Rva2VucyxcbiAgICBjb3N0X3VzZDogTWF0aC5yb3VuZChyZXN1bHQuY29zdFVzZCAqIDFfMDAwXzAwMCksXG4gICAgY29zdF9zb3VyY2U6IHJlc3VsdC5jb3N0U291cmNlLFxuICAgIGR1cmF0aW9uX21zOiByZXN1bHQuZHVyYXRpb25NcyxcbiAgICB0dGZ0X21zOiByZXN1bHQudHRmdE1zLFxuICAgIGZpbmlzaF9yZWFzb246IHJlc3VsdC5maW5pc2hSZWFzb24sXG4gIH0pO1xuXG4gIGNvbnN0IGltYWdlUGFydHMgPSBnZXRJbWFnZVBhcnRzKHJlc3VsdCk7XG4gIGNvbnN0IGltYWdlQ29zdE1pY3JvVXNkID0gZXN0aW1hdGVJbWFnZUdlbmVyYXRpb25Db3N0TWljcm9Vc2QoXG4gICAgcmVzdWx0LFxuICAgIGFyZ3MuaW1hZ2VHZW5lcmF0aW9uT3B0aW9ucyxcbiAgKTtcbiAgZm9yIChjb25zdCBzdGVwIG9mIGJ1aWxkSW1hZ2VHZW5lcmF0aW9uVG9vbFN0ZXBzKGFyZ3MsIGltYWdlUGFydHMsIHN0ZXBJbmRleCkpIHtcbiAgICBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuYXBwZW5kU3RlcChyZXF1ZXN0TG9nSWQsIHN0ZXApO1xuICB9XG5cbiAgaWYgKHJlc3VsdC5maW5pc2hSZWFzb24gPT09IFwidG9vbC1jYWxsc1wiKSB7XG4gICAgLy8gdG9vbC1jYWxsIHN0ZXDsnYQg7KaJ7IucIOq4sOuhne2VmOqzoCwg64uk7J2MIGZvbGxvdy11cOydtCDqsJnsnYAgcm937JeQIOqysOqzvOulvCDssYTsmrTri6QuXG4gICAgY29uc3QgdG9vbENhbGxzID0gcmVzdWx0LmNvbnRlbnQuZmlsdGVyKChjKSA9PiBjLnR5cGUgPT09IFwidG9vbC1jYWxsXCIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9vbENhbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB0YyA9IHRvb2xDYWxsc1tpXSE7XG4gICAgICBpZiAodGMudHlwZSAhPT0gXCJ0b29sLWNhbGxcIikgY29udGludWU7XG4gICAgICBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuYXBwZW5kU3RlcChyZXF1ZXN0TG9nSWQsIHtcbiAgICAgICAgc3RlcF9pbmRleDogc3RlcEluZGV4LFxuICAgICAgICB0eXBlOiBcInRvb2xfY2FsbFwiLFxuICAgICAgICB0b29sX2NhbGxfaW5kZXg6IGltYWdlUGFydHMubGVuZ3RoICsgaSxcbiAgICAgICAgdG9vbF9jYWxsX2lkOiB0Yy50b29sQ2FsbElkLFxuICAgICAgICB0b29sX25hbWU6IHRjLnRvb2xOYW1lLFxuICAgICAgICB0b29sX2FyZ3M6IHRjLmlucHV0LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcnVuQ29udGV4dDogeyByZXF1ZXN0TG9nSWQgfSB9O1xuICB9XG5cbiAgLy8gZmluaXNoUmVhc29uID09PSBcInN0b3BcIiDihpIgcnVuIOyiheujjCAo7KCE7LK0IHN0ZXAgdXNhZ2Ug7ZWp7IKwKVxuICBjb25zdCBhZ2cgPSBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuYWdncmVnYXRlU3RlcFVzYWdlKHJlcXVlc3RMb2dJZCk7XG4gIGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5maW5pc2hSdW4ocmVxdWVzdExvZ0lkLCB7XG4gICAgc3RhdHVzOiBcInN1Y2NlZWRlZFwiLFxuICAgIHJlc3BvbnNlOiBmb3JtYXRSZXNwb25zZUZvckxvZyhyZXN1bHQpLFxuICAgIHRva2VuX25hbWU6IHJlc3VsdC50b2tlbk5hbWUsXG4gICAgaW5wdXRfdG9rZW5zOiBhZ2cuaW5wdXRfdG9rZW5zLFxuICAgIG91dHB1dF90b2tlbnM6IGFnZy5vdXRwdXRfdG9rZW5zLFxuICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBhZ2cuY2FjaGVfcmVhZF90b2tlbnMsXG4gICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBhZ2cuY2FjaGVfY3JlYXRpb25fdG9rZW5zLFxuICAgIGNhY2hlX2NyZWF0aW9uXzVtX3Rva2VuczogYWdnLmNhY2hlX2NyZWF0aW9uXzVtX3Rva2VucyxcbiAgICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IGFnZy5jYWNoZV9jcmVhdGlvbl8xaF90b2tlbnMsXG4gICAgZHVyYXRpb25fbXM6IGFnZy5kdXJhdGlvbl9tcyxcbiAgICAvLyBtdWx0aS1zdGVwIHJ1biDrtoDrqqjsnZgg66qo64247J2AIOy1nOyihSB0dXJu7J2EIOyEnOu5me2VnCDrqqjrjbjsnbTri6QuXG4gICAgcmVxdWVzdGVkX21vZGVsX25hbWU6IHJlcXVlc3RlZE1vZGVsTmFtZSxcbiAgICBtb2RlbF9uYW1lOiBzZXJ2ZWRNb2RlbE5hbWUsXG4gICAgZmFsbGJhY2tfY291bnQ6IGFnZy5mYWxsYmFja19jb3VudCxcbiAgICBjb3N0X3VzZDogYWdnLmNvc3RfdXNkLFxuICAgIGNvc3Rfc291cmNlOiBhZ2cuY29zdF9zb3VyY2UsXG4gICAgaW1hZ2VfY29zdF91c2Q6IGltYWdlQ29zdE1pY3JvVXNkLFxuICAgIGltYWdlX2Nvc3RfbWV0aG9kOlxuICAgICAgaW1hZ2VDb3N0TWljcm9Vc2QgIT09IG51bGwgPyBpbWFnZUdlbmVyYXRpb25Db3N0TWV0aG9kKGFyZ3MuaW1hZ2VHZW5lcmF0aW9uT3B0aW9ucykgOiBudWxsLFxuICAgIGhpc3Rvcnk6IGZpbHRlckhpc3RvcnlGb3JTdG9yYWdlKGFyZ3MuaGlzdG9yeSksXG4gIH0pO1xuXG4gIHJldHVybiB7fTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbmlzaFJ1bldpdGhFcnJvcihcbiAgcmVxdWVzdExvZ0lkOiBudW1iZXIsXG4gIGVycm9yTWVzc2FnZTogc3RyaW5nLFxuICBhcmdzPzogUXVlcnlJbnB1dCxcbik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBmaW5pc2hUZXJtaW5hbFJ1bihyZXF1ZXN0TG9nSWQsIFwiZXJyb3JcIiwgZXJyb3JNZXNzYWdlLCBhcmdzKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbmlzaFJ1bkFib3J0ZWQocmVxdWVzdExvZ0lkOiBudW1iZXIsIGFyZ3M/OiBRdWVyeUlucHV0KTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGZpbmlzaFRlcm1pbmFsUnVuKHJlcXVlc3RMb2dJZCwgXCJhYm9ydGVkXCIsIFwiY2xpZW50IGRpc2Nvbm5lY3RlZFwiLCBhcmdzKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmluaXNoVGVybWluYWxSdW4oXG4gIHJlcXVlc3RMb2dJZDogbnVtYmVyLFxuICBzdGF0dXM6IFwiZXJyb3JcIiB8IFwiYWJvcnRlZFwiLFxuICBlcnJvck1lc3NhZ2U6IHN0cmluZyxcbiAgYXJncz86IFF1ZXJ5SW5wdXQsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBsZXQgYWdncmVnYXRlOiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIFJlcXVlc3RMb2dNb2RlbC5hZ2dyZWdhdGVTdGVwVXNhZ2U+PiB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgYWdncmVnYXRlID0gYXdhaXQgUmVxdWVzdExvZ01vZGVsLmFnZ3JlZ2F0ZVN0ZXBVc2FnZShyZXF1ZXN0TG9nSWQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgYWdncmVnYXRlU3RlcFVzYWdlIGZhaWxlZCB3aGlsZSBmaW5pc2hpbmcgJHtzdGF0dXN9OiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgIH1cblxuICAgIGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5maW5pc2hSdW4ocmVxdWVzdExvZ0lkLCB7XG4gICAgICBzdGF0dXMsXG4gICAgICBlcnJvcl9tZXNzYWdlOiBlcnJvck1lc3NhZ2UsXG4gICAgICBoaXN0b3J5OiBhcmdzID8gZmlsdGVySGlzdG9yeUZvclN0b3JhZ2UoYXJncy5oaXN0b3J5KSA6IHVuZGVmaW5lZCxcbiAgICAgIC4uLihhZ2dyZWdhdGVcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBpbnB1dF90b2tlbnM6IGFnZ3JlZ2F0ZS5pbnB1dF90b2tlbnMsXG4gICAgICAgICAgICBvdXRwdXRfdG9rZW5zOiBhZ2dyZWdhdGUub3V0cHV0X3Rva2VucyxcbiAgICAgICAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBhZ2dyZWdhdGUuY2FjaGVfcmVhZF90b2tlbnMsXG4gICAgICAgICAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IGFnZ3JlZ2F0ZS5jYWNoZV9jcmVhdGlvbl90b2tlbnMsXG4gICAgICAgICAgICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM6IGFnZ3JlZ2F0ZS5jYWNoZV9jcmVhdGlvbl81bV90b2tlbnMsXG4gICAgICAgICAgICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IGFnZ3JlZ2F0ZS5jYWNoZV9jcmVhdGlvbl8xaF90b2tlbnMsXG4gICAgICAgICAgICBkdXJhdGlvbl9tczogYWdncmVnYXRlLmR1cmF0aW9uX21zLFxuICAgICAgICAgICAgZmFsbGJhY2tfY291bnQ6IGFnZ3JlZ2F0ZS5mYWxsYmFja19jb3VudCxcbiAgICAgICAgICAgIGNvc3RfdXNkOiBhZ2dyZWdhdGUuY29zdF91c2QsXG4gICAgICAgICAgICBjb3N0X3NvdXJjZTogYWdncmVnYXRlLmNvc3Rfc291cmNlLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7fSksXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIuZXJyb3IoYGZpbmlzaFRlcm1pbmFsUnVuKCR7c3RhdHVzfSkgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNsZWFudXBTdGFsZVJ1bnMoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChzdGFsZUNsZWFudXBJbkZsaWdodCkge1xuICAgIGF3YWl0IHN0YWxlQ2xlYW51cEluRmxpZ2h0O1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGlmIChub3cgLSBsYXN0U3RhbGVDbGVhbnVwU3RhcnRlZEF0IDwgU1RBTEVfQ0xFQU5VUF9JTlRFUlZBTF9NUykgcmV0dXJuO1xuICBsYXN0U3RhbGVDbGVhbnVwU3RhcnRlZEF0ID0gbm93O1xuXG4gIGNvbnN0IGNsZWFudXAgPSBwZXJmb3JtU3RhbGVSdW5DbGVhbnVwKCk7XG4gIHN0YWxlQ2xlYW51cEluRmxpZ2h0ID0gY2xlYW51cDtcbiAgdHJ5IHtcbiAgICBhd2FpdCBjbGVhbnVwO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChzdGFsZUNsZWFudXBJbkZsaWdodCA9PT0gY2xlYW51cCkgc3RhbGVDbGVhbnVwSW5GbGlnaHQgPSB1bmRlZmluZWQ7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcGVyZm9ybVN0YWxlUnVuQ2xlYW51cCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBcInRvb2wtY2FsbCBydW46IG5vIGZvbGxvdy11cCB3aXRoaW4gMzAgbWludXRlc1wiO1xuICAgIGNvbnN0IHN0YWxlSWRzID0gYXdhaXQgUmVxdWVzdExvZ01vZGVsLmV4cGlyZVN0YWxlVG9vbFdhaXRpbmdSdW5zKFxuICAgICAgU1RBTEVfUlVOX1RIUkVTSE9MRF9NUyxcbiAgICAgIGVycm9yTWVzc2FnZSxcbiAgICApO1xuICAgIGNvbnN0IGNsZWFuZWRDb3VudCA9IHN0YWxlSWRzLmxlbmd0aDtcbiAgICBpZiAoY2xlYW5lZENvdW50ID4gMCkge1xuICAgICAgbG9nZ2VyLmluZm8oYGNsZWFuZWQgdXAgJHtjbGVhbmVkQ291bnR9IHN0YWxlIHJ1bm5pbmcgcmVxdWVzdCBsb2dzYCk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLmVycm9yKGBzdGFsZSBjbGVhbnVwIGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7OztBQWNBLE1BQU0sU0FBUyxVQUFVLENBQUMsU0FBUyxlQUFlLENBQUM7QUFDbkQsTUFBTSx5QkFBeUIsT0FBVTtBQUN6QyxNQUFNLDRCQUE0QixLQUFLO0FBQ3ZDLElBQUk7QUFDSixJQUFJLDRCQUE0QjtBQUVoQyxTQUFTLG1CQUNQLFlBQ0EsT0FDb0I7Q0FDcEIsSUFBSSxDQUFDLE9BQU8sT0FBTztDQUNuQixJQUFJLE1BQU0sU0FBUyxHQUFHLEdBQUcsT0FBTztDQUNoQyxNQUFNLFFBQVEsWUFBWSxRQUFRLEdBQUcsS0FBSztDQUMxQyxNQUFNLFdBQVcsUUFBUSxJQUFJLFlBQVksTUFBTSxHQUFHLEtBQUssSUFBSTtDQUMzRCxPQUFPLFdBQVcsR0FBRyxTQUFTLEdBQUcsVUFBVTtBQUM3Qzs7OztBQUtBLFNBQVMsd0JBQXdCLFlBQXlDO0NBQ3hFLElBQUksQ0FBQyxZQUFZLE9BQU87Q0FDeEIsSUFBSTtFQUVGLE1BQU0sV0FEUSxLQUFLLE1BQU0sVUFDUixDQUFBLENBQU0sUUFBUSxTQUFTO0dBQ3RDLElBQUksQ0FBQyxRQUFRLE9BQU8sU0FBUyxVQUFVLE9BQU87R0FDOUMsTUFBTSxTQUFTO0dBQ2YsT0FBTyxPQUFPLFNBQVMsY0FBYyxPQUFPLFNBQVMsVUFBVSxPQUFPLFNBQVM7RUFDakYsQ0FBQztFQUNELE9BQU8sU0FBUyxTQUFTLElBQUksV0FBVztDQUMxQyxRQUFRO0VBQ047Q0FDRjtBQUNGOzs7Ozs7O0FBWUEsZUFBc0IsWUFBWSxNQUcvQjtDQUNELElBQUk7Q0FDSixJQUFJLFlBQVk7Q0FLaEIsSUFBSSxLQUFLLFlBQVksaUJBQWlCLFFBQVc7RUFDL0MsZUFBZSxLQUFLLFdBQVc7RUFJL0IsWUFBWSxNQUFNLGdCQUFnQixnQkFBZ0IsY0FBYyxLQUFLLGVBQWUsQ0FBQyxDQUFDO0VBQ3RGLE1BQU0saUJBQWlCO0NBQ3pCLE9BQU87RUFDTCxNQUFNLGlCQUFpQjtFQUN2QixlQUFlLE1BQU0sZ0JBQWdCLFVBQVU7R0FDN0MsYUFBYSxLQUFLO0dBQ2xCLGVBQWUsS0FBSztHQUNwQixzQkFBc0IsS0FBSztHQUMzQixRQUFRLEtBQUs7R0FDYixjQUFjLEtBQUs7R0FDbkIsU0FBUyx3QkFBd0IsS0FBSyxPQUFPO0dBQzdDLE9BQU8sS0FBSyxPQUFPLFNBQVMsS0FBSyxRQUFRO0dBQ3pDLHFCQUFxQixLQUFLO0VBQzVCLENBQUM7Q0FDSDtDQUVBLE9BQU87RUFBRTtFQUFjO0NBQVU7QUFDbkM7QUFFQSxlQUFzQixXQUNwQixjQUNBLFdBQ0EsTUFDQSxRQUM2QjtDQUU3QixNQUFNLHFCQUFxQixtQkFDekIsS0FBSyxPQUNMLEtBQUssU0FBUyxPQUFPLGtCQUFrQixPQUFPLEtBQ2hEO0NBQ0EsTUFBTSxrQkFBa0IsbUJBQW1CLEtBQUssT0FBTyxPQUFPLEtBQUs7Q0FHbkUsTUFBTSxnQkFBZ0IsV0FBVyxjQUFjO0VBQzdDLFlBQVk7RUFDWixNQUFNO0VBQ04sWUFBWTtFQUNaLHNCQUFzQjtFQUN0QixnQkFBZ0IsT0FBTyxnQkFBZ0IsVUFBVTtFQUNqRCxjQUFjLE9BQU8sTUFBTTtFQUMzQixlQUFlLE9BQU8sTUFBTTtFQUM1QixtQkFBbUIsT0FBTyxNQUFNO0VBQ2hDLHVCQUF1QixPQUFPLE1BQU07RUFDcEMsMEJBQTBCLE9BQU8sTUFBTTtFQUN2QywwQkFBMEIsT0FBTyxNQUFNO0VBQ3ZDLFVBQVUsS0FBSyxNQUFNLE9BQU8sVUFBVSxHQUFTO0VBQy9DLGFBQWEsT0FBTztFQUNwQixhQUFhLE9BQU87RUFDcEIsU0FBUyxPQUFPO0VBQ2hCLGVBQWUsT0FBTztDQUN4QixDQUFDO0NBRUQsTUFBTSxhQUFhLGNBQWMsTUFBTTtDQUN2QyxNQUFNLG9CQUFvQixvQ0FDeEIsUUFDQSxLQUFLLHNCQUNQO0NBQ0EsS0FBSyxNQUFNLFFBQVEsOEJBQThCLE1BQU0sWUFBWSxTQUFTLEdBQzFFLE1BQU0sZ0JBQWdCLFdBQVcsY0FBYyxJQUFJO0NBR3JELElBQUksT0FBTyxpQkFBaUIsY0FBYztFQUV4QyxNQUFNLFlBQVksT0FBTyxRQUFRLFFBQVEsTUFBTSxFQUFFLFNBQVMsV0FBVztFQUNyRSxLQUFLLElBQUksSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUs7R0FDekMsTUFBTSxLQUFLLFVBQVU7R0FDckIsSUFBSSxHQUFHLFNBQVMsYUFBYTtHQUM3QixNQUFNLGdCQUFnQixXQUFXLGNBQWM7SUFDN0MsWUFBWTtJQUNaLE1BQU07SUFDTixpQkFBaUIsV0FBVyxTQUFTO0lBQ3JDLGNBQWMsR0FBRztJQUNqQixXQUFXLEdBQUc7SUFDZCxXQUFXLEdBQUc7R0FDaEIsQ0FBQztFQUNIO0VBRUEsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUU7Q0FDeEM7Q0FHQSxNQUFNLE1BQU0sTUFBTSxnQkFBZ0IsbUJBQW1CLFlBQVk7Q0FDakUsTUFBTSxnQkFBZ0IsVUFBVSxjQUFjO0VBQzVDLFFBQVE7RUFDUixVQUFVLHFCQUFxQixNQUFNO0VBQ3JDLFlBQVksT0FBTztFQUNuQixjQUFjLElBQUk7RUFDbEIsZUFBZSxJQUFJO0VBQ25CLG1CQUFtQixJQUFJO0VBQ3ZCLHVCQUF1QixJQUFJO0VBQzNCLDBCQUEwQixJQUFJO0VBQzlCLDBCQUEwQixJQUFJO0VBQzlCLGFBQWEsSUFBSTtFQUVqQixzQkFBc0I7RUFDdEIsWUFBWTtFQUNaLGdCQUFnQixJQUFJO0VBQ3BCLFVBQVUsSUFBSTtFQUNkLGFBQWEsSUFBSTtFQUNqQixnQkFBZ0I7RUFDaEIsbUJBQ0Usc0JBQXNCLE9BQU8sMEJBQTBCLEtBQUssc0JBQXNCLElBQUk7RUFDeEYsU0FBUyx3QkFBd0IsS0FBSyxPQUFPO0NBQy9DLENBQUM7Q0FFRCxPQUFPLENBQUM7QUFDVjtBQUVBLGVBQXNCLG1CQUNwQixjQUNBLGNBQ0EsTUFDZTtDQUNmLE1BQU0sa0JBQWtCLGNBQWMsU0FBUyxjQUFjLElBQUk7QUFDbkU7QUFFQSxlQUFzQixpQkFBaUIsY0FBc0IsTUFBa0M7Q0FDN0YsTUFBTSxrQkFBa0IsY0FBYyxXQUFXLHVCQUF1QixJQUFJO0FBQzlFO0FBRUEsZUFBZSxrQkFDYixjQUNBLFFBQ0EsY0FDQSxNQUNlO0NBQ2YsSUFBSTtFQUNGLElBQUk7RUFDSixJQUFJO0dBQ0YsWUFBWSxNQUFNLGdCQUFnQixtQkFBbUIsWUFBWTtFQUNuRSxTQUFTLEdBQUc7R0FDVixPQUFPLE1BQU0sNkNBQTZDLE9BQU8sSUFBSyxFQUFZLFNBQVM7RUFDN0Y7RUFFQSxNQUFNLGdCQUFnQixVQUFVLGNBQWM7R0FDNUM7R0FDQSxlQUFlO0dBQ2YsU0FBUyxPQUFPLHdCQUF3QixLQUFLLE9BQU8sSUFBSTtHQUN4RCxHQUFJLFlBQ0E7SUFDRSxjQUFjLFVBQVU7SUFDeEIsZUFBZSxVQUFVO0lBQ3pCLG1CQUFtQixVQUFVO0lBQzdCLHVCQUF1QixVQUFVO0lBQ2pDLDBCQUEwQixVQUFVO0lBQ3BDLDBCQUEwQixVQUFVO0lBQ3BDLGFBQWEsVUFBVTtJQUN2QixnQkFBZ0IsVUFBVTtJQUMxQixVQUFVLFVBQVU7SUFDcEIsYUFBYSxVQUFVO0dBQ3pCLElBQ0EsQ0FBQztFQUNQLENBQUM7Q0FDSCxTQUFTLEdBQUc7RUFDVixPQUFPLE1BQU0scUJBQXFCLE9BQU8sWUFBYSxFQUFZLFNBQVM7Q0FDN0U7QUFDRjtBQUVBLGVBQWUsbUJBQWtDO0NBQy9DLElBQUksc0JBQXNCO0VBQ3hCLE1BQU07RUFDTjtDQUNGO0NBRUEsTUFBTSxNQUFNLEtBQUssSUFBSTtDQUNyQixJQUFJLE1BQU0sNEJBQTRCLDJCQUEyQjtDQUNqRSw0QkFBNEI7Q0FFNUIsTUFBTSxVQUFVLHVCQUF1QjtDQUN2Qyx1QkFBdUI7Q0FDdkIsSUFBSTtFQUNGLE1BQU07Q0FDUixVQUFVO0VBQ1IsSUFBSSx5QkFBeUIsU0FBUyx1QkFBdUI7Q0FDL0Q7QUFDRjtBQUVBLGVBQWUseUJBQXdDO0NBQ3JELElBQUk7RUFNRixNQUFNLGdCQUFlLE1BSkUsZ0JBQWdCLDJCQUNyQyx3QkFDQSwrQ0FDRixFQUNxQixDQUFTO0VBQzlCLElBQUksZUFBZSxHQUNqQixPQUFPLEtBQUssY0FBYyxhQUFhLDRCQUE0QjtDQUV2RSxTQUFTLEdBQUc7RUFDVixPQUFPLE1BQU0seUJBQTBCLEVBQVksU0FBUztDQUM5RDtBQUNGIn0=
|
|
@@ -43,8 +43,17 @@ async function deleteOAuthState(state) {
|
|
|
43
43
|
await cache.delete({ key: `${OAUTH_STATE_PREFIX}${state}` });
|
|
44
44
|
}
|
|
45
45
|
function getOAuthRedirectUri() {
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
try {
|
|
47
|
+
const { headers, request } = Sonamu.getContext();
|
|
48
|
+
const origin = headers.origin;
|
|
49
|
+
if (typeof origin === "string" && /^https?:\/\//.test(origin)) return `${origin.replace(/\/+$/, "")}/callback`;
|
|
50
|
+
const forwardedHost = headers["x-forwarded-host"];
|
|
51
|
+
const host = (Array.isArray(forwardedHost) ? forwardedHost[0] : forwardedHost) ?? headers.host;
|
|
52
|
+
if (host) {
|
|
53
|
+
const forwardedProto = headers["x-forwarded-proto"];
|
|
54
|
+
return `${(Array.isArray(forwardedProto) ? forwardedProto[0] : forwardedProto)?.split(",")[0] ?? request.protocol}://${host}/callback`;
|
|
55
|
+
}
|
|
56
|
+
} catch {}
|
|
48
57
|
return `http://localhost:${process.env.PORT ?? "44900"}/callback`;
|
|
49
58
|
}
|
|
50
59
|
function rejectImageGenerationStream(args) {
|
|
@@ -653,4 +662,4 @@ function convertAnthropicUsage(raw) {
|
|
|
653
662
|
//#endregion
|
|
654
663
|
export { QgridFrame };
|
|
655
664
|
|
|
656
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQuZnJhbWUuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLmZyYW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcnlwdG8gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5cbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgeyB0eXBlIEZhc3RpZnlSZXBseSwgdHlwZSBGYXN0aWZ5UmVxdWVzdCB9IGZyb20gXCJmYXN0aWZ5XCI7XG5pbXBvcnQgeyBhcGksIEJhZFJlcXVlc3RFeGNlcHRpb24sIEJhc2VGcmFtZUNsYXNzLCBTb25hbXUsIHN0cmVhbSB9IGZyb20gXCJzb25hbXVcIjtcbmltcG9ydCB7IGdldENhY2hlTWFuYWdlclJlZiB9IGZyb20gXCJzb25hbXUvY2FjaGVcIjtcblxuaW1wb3J0IHsgdHlwZSBMb2NhbGl6ZWRTdHJpbmcgfSBmcm9tIFwiLi4vLi4vaTE4bi9zZC5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7XG4gIGdldEFjY2Vzc1Rva2VuLFxuICBnZXRFeHBpcmVzQXQsXG4gIGdldFJlZnJlc2hUb2tlbixcbn0gZnJvbSBcIi4uLy4uL3V0aWxzL3Byb3ZpZGVycy9jb21tb24vY3JlZGVudGlhbHNcIjtcbmltcG9ydCB7IENhbGxlclNjaGVtYVZhbGlkYXRpb25FcnJvciB9IGZyb20gXCIuLi8uLi91dGlscy9wcm92aWRlcnMvY29tbW9uL3NjaGVtYS12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBNSUNST19VU0QsIFJlcXVlc3RMb2dNb2RlbCB9IGZyb20gXCIuLi9yZXF1ZXN0LWxvZy9yZXF1ZXN0LWxvZy5tb2RlbFwiO1xuaW1wb3J0IHsgdHlwZSBUb2tlblN1YnNldEEgfSBmcm9tIFwiLi4vc29uYW11LmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgVG9rZW5Nb2RlbCwgdHlwZSBUb2tlblVwZGF0ZUZpZWxkcyB9IGZyb20gXCIuLi90b2tlbi90b2tlbi5tb2RlbFwiO1xuaW1wb3J0IHsgVG9rZW5DcmVkZW50aWFscyB9IGZyb20gXCIuLi90b2tlbi90b2tlbi50eXBlc1wiO1xuaW1wb3J0IHtcbiAgdHlwZSBBbnRocm9waWNVc2FnZVJhdyxcbiAgYnVpbGRBdXRoVXJsLFxuICBleGNoYW5nZUNvZGVGb3JUb2tlbnMsXG4gIGZldGNoVXNhZ2UsXG4gIGdlbmVyYXRlUEtDRSxcbiAgcmVmcmVzaEFjY2Vzc1Rva2VuLFxufSBmcm9tIFwiLi9vYXV0aFwiO1xuaW1wb3J0IHtcbiAgYWZ0ZXJRdWVyeSxcbiAgYmVmb3JlUXVlcnksXG4gIGZpbmlzaFJ1bkFib3J0ZWQsXG4gIGZpbmlzaFJ1bldpdGhFcnJvcixcbn0gZnJvbSBcIi4vcWdyaWQtcnVuLWxpZmVjeWNsZVwiO1xuaW1wb3J0IHsgYnVpbGRBbmRWYWxpZGF0ZVN0cmljdE91dHB1dFNjaGVtYSwgUWdyaWREaXNwYXRjaGVyIH0gZnJvbSBcIi4vcWdyaWQuZGlzcGF0Y2hlclwiO1xuaW1wb3J0IHtcbiAgdHlwZSBRdWVyeUlucHV0LFxuICB0eXBlIEFwcGVuZFN0ZXBJbnB1dCxcbiAgdHlwZSBDcmVhdGVSdW5JbnB1dCxcbiAgdHlwZSBGaW5pc2hSdW5JbnB1dCxcbiAgdHlwZSBIZWFsdGhSZXNwb25zZSxcbiAgdHlwZSBPQXV0aFN0YXJ0UmVzdWx0LFxuICB0eXBlIFF1ZXJ5T3V0cHV0LFxuICB0eXBlIFFncmlkUnVuQ29udGV4dCxcbiAgU3RyZWFtRXZlbnRzLFxuICB0eXBlIFRva2VuU3RhdHMsXG4gIHR5cGUgVXNhZ2VSZXNwb25zZSxcbn0gZnJvbSBcIi4vcWdyaWQudHlwZXNcIjtcbmltcG9ydCB7IFRvb2xTY2hlbWFDb21wb3NpdGlvbkVycm9yIH0gZnJvbSBcIi4vdG9vbC1lbXVsYXRpb24tc2NoZW1hXCI7XG5cbmNvbnN0IHBlbmRpbmdTdHJlYW1zID0gbmV3IE1hcDxzdHJpbmcsIFF1ZXJ5SW5wdXQ+KCk7XG5cbnR5cGUgUGVuZGluZ09BdXRoID0geyBjb2RlVmVyaWZpZXI6IHN0cmluZzsgbmFtZTogc3RyaW5nOyByZWRpcmVjdFVyaTogc3RyaW5nIH07XG5jb25zdCBPQVVUSF9TVEFURV9QUkVGSVggPSBcIm9hdXRoOnN0YXRlOlwiO1xuY29uc3QgT0FVVEhfU1RBVEVfVFRMID0gXCI1bVwiO1xuXG5mdW5jdGlvbiB1bml4U2Vjb25kc1RvSXNvKHNlY29uZHM6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCBudWxsIHtcbiAgcmV0dXJuIHR5cGVvZiBzZWNvbmRzID09PSBcIm51bWJlclwiID8gbmV3IERhdGUoc2Vjb25kcyAqIDEwMDApLnRvSVNPU3RyaW5nKCkgOiBudWxsO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzZXRPQXV0aFN0YXRlKHN0YXRlOiBzdHJpbmcsIGRhdGE6IFBlbmRpbmdPQXV0aCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjYWNoZSA9IGdldENhY2hlTWFuYWdlclJlZigpO1xuICBpZiAoIWNhY2hlKSB0aHJvdyBuZXcgRXJyb3IoXCJDYWNoZU1hbmFnZXIgbm90IGluaXRpYWxpemVkXCIpO1xuICBhd2FpdCBjYWNoZS5zZXQoe1xuICAgIGtleTogYCR7T0FVVEhfU1RBVEVfUFJFRklYfSR7c3RhdGV9YCxcbiAgICB2YWx1ZTogSlNPTi5zdHJpbmdpZnkoZGF0YSksXG4gICAgdHRsOiBPQVVUSF9TVEFURV9UVEwsXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRPQXV0aFN0YXRlKHN0YXRlOiBzdHJpbmcpOiBQcm9taXNlPFBlbmRpbmdPQXV0aCB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBjYWNoZSA9IGdldENhY2hlTWFuYWdlclJlZigpO1xuICBpZiAoIWNhY2hlKSB0aHJvdyBuZXcgRXJyb3IoXCJDYWNoZU1hbmFnZXIgbm90IGluaXRpYWxpemVkXCIpO1xuICBjb25zdCByYXcgPSBhd2FpdCBjYWNoZS5nZXQ8c3RyaW5nPih7IGtleTogYCR7T0FVVEhfU1RBVEVfUFJFRklYfSR7c3RhdGV9YCB9KTtcbiAgaWYgKCFyYXcpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBKU09OLnBhcnNlKHJhdykgYXMgUGVuZGluZ09BdXRoO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkZWxldGVPQXV0aFN0YXRlKHN0YXRlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY2FjaGUgPSBnZXRDYWNoZU1hbmFnZXJSZWYoKTtcbiAgaWYgKCFjYWNoZSkgcmV0dXJuO1xuICBhd2FpdCBjYWNoZS5kZWxldGUoeyBrZXk6IGAke09BVVRIX1NUQVRFX1BSRUZJWH0ke3N0YXRlfWAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldE9BdXRoUmVkaXJlY3RVcmkoKTogc3RyaW5nIHtcbiAgY29uc3QgcHVibGljQmFzZVVybCA9IHByb2Nlc3MuZW52LlFHUklEX1BVQkxJQ19CQVNFX1VSTD8ucmVwbGFjZSgvXFwvKyQvLCBcIlwiKTtcbiAgaWYgKHB1YmxpY0Jhc2VVcmwpIHJldHVybiBgJHtwdWJsaWNCYXNlVXJsfS9jYWxsYmFja2A7XG5cbiAgY29uc3Qgc2VydmVyUG9ydCA9IHByb2Nlc3MuZW52LlBPUlQgPz8gXCI0NDkwMFwiO1xuICByZXR1cm4gYGh0dHA6Ly9sb2NhbGhvc3Q6JHtzZXJ2ZXJQb3J0fS9jYWxsYmFja2A7XG59XG5cbmZ1bmN0aW9uIHJlamVjdEltYWdlR2VuZXJhdGlvblN0cmVhbShhcmdzOiBRdWVyeUlucHV0KTogdm9pZCB7XG4gIGlmICghYXJncy5pbWFnZUdlbmVyYXRpb24pIHJldHVybjtcbiAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oXG4gICAgXCJxZ3JpZDogaW1hZ2VHZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBzdHJlYW1pbmc7IHVzZSBxdWVyeS9nZW5lcmF0ZVRleHQgaW5zdGVhZC5cIiBhcyBMb2NhbGl6ZWRTdHJpbmcsXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlamVjdEludmFsaWRDYWxsZXJTY2hlbWFzKGFyZ3M6IFF1ZXJ5SW5wdXQpOiB2b2lkIHtcbiAgaWYgKGFyZ3MuanNvblNjaGVtYSA9PT0gdW5kZWZpbmVkICYmICFhcmdzLnRvb2xzPy5sZW5ndGgpIHJldHVybjtcblxuICB0cnkge1xuICAgIGJ1aWxkQW5kVmFsaWRhdGVTdHJpY3RPdXRwdXRTY2hlbWEoYXJncyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKFxuICAgICAgZXJyb3IgaW5zdGFuY2VvZiBDYWxsZXJTY2hlbWFWYWxpZGF0aW9uRXJyb3IgfHxcbiAgICAgIGVycm9yIGluc3RhbmNlb2YgVG9vbFNjaGVtYUNvbXBvc2l0aW9uRXJyb3JcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKGVycm9yLm1lc3NhZ2UgYXMgTG9jYWxpemVkU3RyaW5nKTtcbiAgICB9XG4gICAgLy8g7J6Y66q765CcIGtleXdvcmQg7ZiV7YOcKGFueU9mIOulvCDqsJ3ssrTroZwg67O064K064qUIOuTsSnripQg7YyM7J207ZSE65287J247JeQ7IScIHVudHlwZWQg7Jik66WY66GcIOuCmOyYpOuvgOuhnCxcbiAgICAvLyDtg4DsnoUg7KKB7Z6I6riwIOuMgOyLoCBFcnJvciDsoITssrTrpbwgY2FsbGVyLWZhdWx0IDQwMCDsnLzroZwg66ek7ZWR7ZWc64ukKOqzhOyVvSDthYzsiqTtirjroZwg6rOg7KCV65CoKS5cbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oXG4gICAgICAgIGBxZ3JpZDogY2FsbGVyIHNjaGVtYSBjYW5ub3QgYmUgbm9ybWFsaXplZDogJHtlcnJvci5tZXNzYWdlfWAgYXMgTG9jYWxpemVkU3RyaW5nLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlSHR0cERpc2Nvbm5lY3RIYW5kbGUoKToge1xuICBzaWduYWw6IEFib3J0U2lnbmFsO1xuICBkaXNwb3NlOiAoKSA9PiB2b2lkO1xufSB7XG4gIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgbGV0IHJlcXVlc3RSYXc6IEZhc3RpZnlSZXF1ZXN0W1wicmF3XCJdIHwgdW5kZWZpbmVkO1xuICBsZXQgcmVzcG9uc2VSYXc6IEZhc3RpZnlSZXBseVtcInJhd1wiXSB8IHVuZGVmaW5lZDtcblxuICB0cnkge1xuICAgIGNvbnN0IGN0eCA9IFNvbmFtdS5nZXRDb250ZXh0KCk7XG4gICAgcmVxdWVzdFJhdyA9IGN0eC5yZXF1ZXN0Py5yYXc7XG4gICAgaWYgKGN0eC50cmFuc3BvcnQgPT09IFwiaHR0cFwiKSByZXNwb25zZVJhdyA9IGN0eC5yZXBseS5yYXc7XG4gIH0gY2F0Y2gge1xuICAgIC8vIERpcmVjdCBmcmFtZSBjYWxscyAoZm9yIGV4YW1wbGUgdW5pdCB0ZXN0cykgZG8gbm90IGhhdmUgYW4gSFRUUCBjb250ZXh0LlxuICB9XG5cbiAgY29uc3QgYWJvcnQgPSAoKSA9PiBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgY29uc3QgYWJvcnRPbkluY29tcGxldGVSZXNwb25zZUNsb3NlID0gKCkgPT4ge1xuICAgIGlmICghcmVzcG9uc2VSYXc/LndyaXRhYmxlRW5kZWQpIGFib3J0KCk7XG4gIH07XG5cbiAgcmVxdWVzdFJhdz8ub25jZShcImFib3J0ZWRcIiwgYWJvcnQpO1xuICByZXNwb25zZVJhdz8ub25jZShcImNsb3NlXCIsIGFib3J0T25JbmNvbXBsZXRlUmVzcG9uc2VDbG9zZSk7XG5cbiAgaWYgKHJlcXVlc3RSYXc/LmFib3J0ZWQgfHwgKHJlc3BvbnNlUmF3Py5kZXN0cm95ZWQgJiYgIXJlc3BvbnNlUmF3LndyaXRhYmxlRW5kZWQpKSB7XG4gICAgYWJvcnQoKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc2lnbmFsOiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICAgIGRpc3Bvc2U6ICgpID0+IHtcbiAgICAgIHJlcXVlc3RSYXc/LnJlbW92ZUxpc3RlbmVyKFwiYWJvcnRlZFwiLCBhYm9ydCk7XG4gICAgICByZXNwb25zZVJhdz8ucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLCBhYm9ydE9uSW5jb21wbGV0ZVJlc3BvbnNlQ2xvc2UpO1xuICAgIH0sXG4gIH07XG59XG5cbmNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcihbXCJxZ3JpZFwiXSk7XG5jb25zdCBvYXV0aExvZ2dlciA9IGdldExvZ2dlcihbXCJxZ3JpZFwiLCBcIm9hdXRoXCJdKTtcblxuY2xhc3MgUWdyaWRGcmFtZUNsYXNzIGV4dGVuZHMgQmFzZUZyYW1lQ2xhc3Mge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIlFncmlkXCIpO1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIHF1ZXJ5KGFyZ3M6IFF1ZXJ5SW5wdXQpOiBQcm9taXNlPFF1ZXJ5T3V0cHV0PiB7XG4gICAgcmVqZWN0SW52YWxpZENhbGxlclNjaGVtYXMoYXJncyk7XG4gICAgY29uc3QgZGlzY29ubmVjdCA9IGNyZWF0ZUh0dHBEaXNjb25uZWN0SGFuZGxlKCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChhcmdzLmxvZ2dlciA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IFFncmlkRGlzcGF0Y2hlci5xdWVyeShhcmdzLCBkaXNjb25uZWN0LnNpZ25hbCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgcmVxdWVzdExvZ0lkLCBzdGVwSW5kZXggfSA9IGF3YWl0IGJlZm9yZVF1ZXJ5KGFyZ3MpO1xuICAgICAgbGV0IHJlc3VsdDogUXVlcnlPdXRwdXQ7XG4gICAgICB0cnkge1xuICAgICAgICByZXN1bHQgPSBhd2FpdCBRZ3JpZERpc3BhdGNoZXIucXVlcnkoYXJncywgZGlzY29ubmVjdC5zaWduYWwpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoZGlzY29ubmVjdC5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgIGF3YWl0IGZpbmlzaFJ1bkFib3J0ZWQocmVxdWVzdExvZ0lkLCBhcmdzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhd2FpdCBmaW5pc2hSdW5XaXRoRXJyb3IocmVxdWVzdExvZ0lkLCAoZSBhcyBFcnJvcikubWVzc2FnZSwgYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbGlmZWN5Y2xlID0gYXdhaXQgYWZ0ZXJRdWVyeShyZXF1ZXN0TG9nSWQsIHN0ZXBJbmRleCwgYXJncywgcmVzdWx0KTtcbiAgICAgICAgaWYgKGRpc2Nvbm5lY3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICBhd2FpdCBmaW5pc2hSdW5BYm9ydGVkKHJlcXVlc3RMb2dJZCwgYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdG9vbC1jYWxsIHJlcXVlc3RMb2dJZOyZgCBwcm92aWRlciB0aHJlYWRDb29yZOuKlCDshJzroZwg64+F66a97KCB7Jy866GcIOycoOyngO2VnOuLpC5cbiAgICAgICAgY29uc3QgdGhyZWFkQ29vcmQgPSByZXN1bHQucnVuQ29udGV4dD8udGhyZWFkQ29vcmQ7XG4gICAgICAgIGNvbnN0IHJ1bkNvbnRleHQgPVxuICAgICAgICAgIGxpZmVjeWNsZS5ydW5Db250ZXh0IHx8IHRocmVhZENvb3JkXG4gICAgICAgICAgICA/IHsgLi4ubGlmZWN5Y2xlLnJ1bkNvbnRleHQsIC4uLih0aHJlYWRDb29yZCA/IHsgdGhyZWFkQ29vcmQgfSA6IHt9KSB9XG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHsgLi4ucmVzdWx0LCBydW5Db250ZXh0IH07XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihgcXVlcnkgYWZ0ZXJRdWVyeSBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgICAgIGlmIChkaXNjb25uZWN0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgYXdhaXQgZmluaXNoUnVuQWJvcnRlZChyZXF1ZXN0TG9nSWQsIGFyZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF3YWl0IGZpbmlzaFJ1bldpdGhFcnJvcihyZXF1ZXN0TG9nSWQsIChlIGFzIEVycm9yKS5tZXNzYWdlLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBwcm92aWRlciDsnZHri7XsnYAg7ISx6rO17ZaI7Jy866+A66GcIOuhnOq5hSDsnqXslaDqsIAg7IOd7ISxIOqysOqzvOulvCDrja7slrTsk7Dsp4Ag7JWK64qU64ukLlxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBkaXNjb25uZWN0LmRpc3Bvc2UoKTtcbiAgICB9XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgcHJlcGFyZVN0cmVhbShhcmdzOiBRdWVyeUlucHV0KTogUHJvbWlzZTx7IHN0cmVhbUlkOiBzdHJpbmcgfT4ge1xuICAgIHJlamVjdEltYWdlR2VuZXJhdGlvblN0cmVhbShhcmdzKTtcbiAgICByZWplY3RJbnZhbGlkQ2FsbGVyU2NoZW1hcyhhcmdzKTtcbiAgICBjb25zdCBzdHJlYW1JZCA9IGNyeXB0by5yYW5kb21VVUlEKCk7XG4gICAgcGVuZGluZ1N0cmVhbXMuc2V0KHN0cmVhbUlkLCBhcmdzKTtcbiAgICBjb25zdCBleHBpcnkgPSBzZXRUaW1lb3V0KCgpID0+IHBlbmRpbmdTdHJlYW1zLmRlbGV0ZShzdHJlYW1JZCksIDMwXzAwMCk7XG4gICAgZXhwaXJ5LnVucmVmPy4oKTtcbiAgICByZXR1cm4geyBzdHJlYW1JZCB9O1xuICB9XG5cbiAgQHN0cmVhbSh7IHR5cGU6IFwic3NlXCIsIGV2ZW50czogU3RyZWFtRXZlbnRzIH0pXG4gIGFzeW5jIHF1ZXJ5U3RyZWFtKHN0cmVhbUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBhcmdzID0gcGVuZGluZ1N0cmVhbXMuZ2V0KHN0cmVhbUlkKTtcbiAgICBwZW5kaW5nU3RyZWFtcy5kZWxldGUoc3RyZWFtSWQpO1xuICAgIGlmICghYXJncykgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBvciBleHBpcmVkIHN0cmVhbUlkXCIpO1xuICAgIHJlamVjdEltYWdlR2VuZXJhdGlvblN0cmVhbShhcmdzKTtcblxuICAgIGNvbnN0IGN0eCA9IFNvbmFtdS5nZXRDb250ZXh0KCk7XG4gICAgY29uc3Qgc3NlID0gY3R4LmNyZWF0ZVNTRShTdHJlYW1FdmVudHMpO1xuICAgIGxldCB0aHJlYWRJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGxldCB0dXJuSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBsZXQgc3RyZWFtUmVzdWx0OiBRdWVyeU91dHB1dCB8IHVuZGVmaW5lZDtcbiAgICBsZXQgc3RyZWFtRXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkO1xuICAgIGxldCBjbGllbnRDbG9zZWQgPSBmYWxzZTtcbiAgICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBjb25zdCBpbnRlcnJ1cHRPcGVuQUkgPSAoKSA9PiB7XG4gICAgICBpZiAodGhyZWFkSWQgJiYgdHVybklkKSB7XG4gICAgICAgIFFncmlkRGlzcGF0Y2hlci5vcGVuYWlEaXNwYXRjaGVyPy5pbnRlcnJ1cHRXb3JrZXJUdXJuKHRocmVhZElkLCB0dXJuSWQpLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgc3NlLm9uQ2xvc2UoKCkgPT4ge1xuICAgICAgY2xpZW50Q2xvc2VkID0gdHJ1ZTtcbiAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgaW50ZXJydXB0T3BlbkFJKCk7XG4gICAgfSk7XG5cbiAgICBsZXQgcnVuSW5mbzogeyByZXF1ZXN0TG9nSWQ6IG51bWJlcjsgc3RlcEluZGV4OiBudW1iZXIgfSB8IHVuZGVmaW5lZDtcbiAgICBpZiAoYXJncy5sb2dnZXIgIT09IGZhbHNlKSB7XG4gICAgICAvLyBwcm92aWRlciDsi6Ttlokg7KCEIHJ1bm5pbmcgcm93IOyDneyEseyXkCDsi6TtjKjtlZjrqbQgbG9nZ2VkIOyalOyyreycvOuhnCDsp4TtlontlZjsp4Ag7JWK64qU64ukLlxuICAgICAgcnVuSW5mbyA9IGF3YWl0IGJlZm9yZVF1ZXJ5KGFyZ3MpO1xuICAgIH1cblxuICAgIC8vIGJlZm9yZVF1ZXJ5IERCIOyekeyXhSDspJEgY2xvc2Xrpbwg64aT7LmY7KeAIOyViuqzoCBwcm92aWRlciDsi6Ttlokg7KCE7JeQIOuniOqwkO2VnOuLpC5cbiAgICBpZiAoY2xpZW50Q2xvc2VkIHx8IHNzZS5jbG9zZWQpIHtcbiAgICAgIGlmIChydW5JbmZvKSBhd2FpdCBmaW5pc2hSdW5BYm9ydGVkKHJ1bkluZm8ucmVxdWVzdExvZ0lkLCBhcmdzKTtcbiAgICAgIGF3YWl0IHNzZS5lbmQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgUWdyaWREaXNwYXRjaGVyLnF1ZXJ5U3RyZWFtKFxuICAgICAgICBhcmdzLFxuICAgICAgICB7XG4gICAgICAgICAgb25EZWx0YTogKHRleHQpID0+IHtcbiAgICAgICAgICAgIGlmICghY2xpZW50Q2xvc2VkICYmICFzc2UuY2xvc2VkKSBzc2UucHVibGlzaChcImRlbHRhXCIsIHsgdGV4dCB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uVGhyZWFkSWQ6IChpZCkgPT4ge1xuICAgICAgICAgICAgdGhyZWFkSWQgPSBpZDtcbiAgICAgICAgICAgIGlmICgoY2xpZW50Q2xvc2VkIHx8IHNzZS5jbG9zZWQpICYmIHR1cm5JZCkge1xuICAgICAgICAgICAgICBpbnRlcnJ1cHRPcGVuQUkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uVHVybklkOiAoaWQpID0+IHtcbiAgICAgICAgICAgIHR1cm5JZCA9IGlkO1xuICAgICAgICAgICAgaWYgKChjbGllbnRDbG9zZWQgfHwgc3NlLmNsb3NlZCkgJiYgdGhyZWFkSWQpIHtcbiAgICAgICAgICAgICAgaW50ZXJydXB0T3BlbkFJKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkNvbXBsZXRlOiAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBzdHJlYW1SZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgICBzdHJlYW1FcnJvciA9IGVycjtcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBzdHJlYW1FcnJvciA9IGUgYXMgRXJyb3I7XG4gICAgfVxuXG4gICAgLy8gcHJvdmlkZXIg6rKw6rO86rCAIOyXhuuKlCBjbG9zZeuKlCDsponsi5wgYWJvcnRlZOuhnCDrp4jqsJDtlZzri6QuXG4gICAgaWYgKGNsaWVudENsb3NlZCAmJiAhc3RyZWFtUmVzdWx0KSB7XG4gICAgICBpZiAocnVuSW5mbykgYXdhaXQgZmluaXNoUnVuQWJvcnRlZChydW5JbmZvLnJlcXVlc3RMb2dJZCwgYXJncyk7XG4gICAgICBhd2FpdCBzc2UuZW5kKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZGlzcGF0Y2hlciDsmYTro4wg7ZuEIGxpZmVjeWNsZSDsspjrpqwgKGF3YWl0IOyViOyghClcbiAgICBpZiAoc3RyZWFtUmVzdWx0KSB7XG4gICAgICAvLyBkaXNwYXRjaGVyIOqwgCDsi6TsnYAgdGhyZWFkIOyerOyCrOyaqSDsooztkZzripQgbG9nZ2VyIOyEpOygleqzvCDrrLTqtIDtlZjqsowg7ZqM7Iah7ZWc64ukLlxuICAgICAgY29uc3QgdGhyZWFkQ29vcmQgPSBzdHJlYW1SZXN1bHQucnVuQ29udGV4dD8udGhyZWFkQ29vcmQ7XG4gICAgICBsZXQgcnVuQ29udGV4dDogUWdyaWRSdW5Db250ZXh0IHwgdW5kZWZpbmVkID1cbiAgICAgICAgdGhyZWFkQ29vcmQgIT09IHVuZGVmaW5lZCA/IHsgdGhyZWFkQ29vcmQgfSA6IHVuZGVmaW5lZDtcbiAgICAgIGlmIChydW5JbmZvKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gY2xvc2Ug7ZuEIOuPhOywqe2VnCDqsrDqs7zrj4Qgc3RlcC91c2FnZeuKlCDrgqjquLDrkJgsIOyVhOuemOyXkOyEnCDstZzsooUgc3RhdHVz66W8IGFib3J0ZWTroZwg642u7Ja07JO064ukLlxuICAgICAgICAgIGNvbnN0IGxpZmVjeWNsZSA9IGF3YWl0IGFmdGVyUXVlcnkoXG4gICAgICAgICAgICBydW5JbmZvLnJlcXVlc3RMb2dJZCxcbiAgICAgICAgICAgIHJ1bkluZm8uc3RlcEluZGV4LFxuICAgICAgICAgICAgYXJncyxcbiAgICAgICAgICAgIHN0cmVhbVJlc3VsdCxcbiAgICAgICAgICApO1xuICAgICAgICAgIHJ1bkNvbnRleHQgPVxuICAgICAgICAgICAgbGlmZWN5Y2xlLnJ1bkNvbnRleHQgfHwgdGhyZWFkQ29vcmRcbiAgICAgICAgICAgICAgPyB7IC4uLmxpZmVjeWNsZS5ydW5Db250ZXh0LCAuLi4odGhyZWFkQ29vcmQgPyB7IHRocmVhZENvb3JkIH0gOiB7fSkgfVxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgICAgIC8vIGFmdGVyUXVlcnnqsIAg7KeE7ZaJ65CY64qUIOyCrOydtCBjbGllbnTqsIAg64ur7Z6MIOqyveyasCDsmYTro4wg7IOB7YOc66W8IGFib3J0ZWTroZwg65CY64+M66aw64ukLlxuICAgICAgICAgIGlmIChjbGllbnRDbG9zZWQpIHtcbiAgICAgICAgICAgIGF3YWl0IGZpbmlzaFJ1bkFib3J0ZWQocnVuSW5mby5yZXF1ZXN0TG9nSWQsIGFyZ3MpO1xuICAgICAgICAgICAgYXdhaXQgc3NlLmVuZCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcihgc3RyZWFtIGFmdGVyUXVlcnkgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgICAgIGF3YWl0IGZpbmlzaFJ1bldpdGhFcnJvcihydW5JbmZvLnJlcXVlc3RMb2dJZCwgKGUgYXMgRXJyb3IpLm1lc3NhZ2UsIGFyZ3MpO1xuXG4gICAgICAgICAgaWYgKGNsaWVudENsb3NlZCkge1xuICAgICAgICAgICAgYXdhaXQgZmluaXNoUnVuQWJvcnRlZChydW5JbmZvLnJlcXVlc3RMb2dJZCwgYXJncyk7XG4gICAgICAgICAgICBhd2FpdCBzc2UuZW5kKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWNsaWVudENsb3NlZCAmJiAhc3NlLmNsb3NlZCkgc3NlLnB1Ymxpc2goXCJkb25lXCIsIHsgLi4uc3RyZWFtUmVzdWx0LCBydW5Db250ZXh0IH0pO1xuICAgIH0gZWxzZSBpZiAoc3RyZWFtRXJyb3IpIHtcbiAgICAgIGlmIChydW5JbmZvKSBhd2FpdCBmaW5pc2hSdW5XaXRoRXJyb3IocnVuSW5mby5yZXF1ZXN0TG9nSWQsIHN0cmVhbUVycm9yLm1lc3NhZ2UsIGFyZ3MpO1xuICAgICAgaWYgKCFjbGllbnRDbG9zZWQgJiYgIXNzZS5jbG9zZWQpIHNzZS5wdWJsaXNoKFwiZXJyb3JcIiwgeyBtZXNzYWdlOiBzdHJlYW1FcnJvci5tZXNzYWdlIH0pO1xuICAgIH0gZWxzZSBpZiAoKGNsaWVudENsb3NlZCB8fCBzc2UuY2xvc2VkKSAmJiBydW5JbmZvKSB7XG4gICAgICBhd2FpdCBmaW5pc2hSdW5BYm9ydGVkKHJ1bkluZm8ucmVxdWVzdExvZ0lkLCBhcmdzKTtcbiAgICB9XG5cbiAgICBhd2FpdCBzc2UuZW5kKCk7XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgY3JlYXRlUnVuKGlucHV0OiBDcmVhdGVSdW5JbnB1dCk6IFByb21pc2U8eyByZXF1ZXN0TG9nSWQ6IG51bWJlciB9PiB7XG4gICAgY29uc3QgcmVxdWVzdExvZ0lkID0gYXdhaXQgUmVxdWVzdExvZ01vZGVsLmNyZWF0ZVJ1bih7XG4gICAgICB1c2VyX3Byb21wdDogaW5wdXQudXNlclByb21wdCxcbiAgICAgIHJlcXVlc3RlZF9tb2RlbF9uYW1lOiBpbnB1dC5tb2RlbE5hbWUsXG4gICAgICBlZmZvcnQ6IGlucHV0LmVmZm9ydCxcbiAgICAgIHByb2plY3RfbmFtZTogaW5wdXQucHJvamVjdE5hbWUsXG4gICAgICBzeXN0ZW1fcHJvbXB0OiBpbnB1dC5zeXN0ZW1Qcm9tcHQsXG4gICAgICBoaXN0b3J5OiBpbnB1dC5oaXN0b3J5ID8gSlNPTi5wYXJzZShpbnB1dC5oaXN0b3J5KSA6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgICByZXR1cm4geyByZXF1ZXN0TG9nSWQgfTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyBhcHBlbmRTdGVwKGlucHV0OiBBcHBlbmRTdGVwSW5wdXQpOiBQcm9taXNlPHsgc3RlcElkOiBudW1iZXIgfT4ge1xuICAgIGNvbnN0IHN0ZXBJZCA9IGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5hcHBlbmRTdGVwKGlucHV0LnJlcXVlc3RMb2dJZCwge1xuICAgICAgc3RlcF9pbmRleDogaW5wdXQuc3RlcEluZGV4LFxuICAgICAgdHlwZTogaW5wdXQudHlwZSxcbiAgICAgIG1vZGVsX25hbWU6IGlucHV0Lm1vZGVsTmFtZSxcbiAgICAgIHJlcXVlc3RlZF9tb2RlbF9uYW1lOiBpbnB1dC5yZXF1ZXN0ZWRNb2RlbE5hbWUsXG4gICAgICBmYWxsYmFja19jb3VudDogaW5wdXQuZmFsbGJhY2tDb3VudCxcbiAgICAgIGlucHV0X3Rva2VuczogaW5wdXQuaW5wdXRUb2tlbnMsXG4gICAgICBvdXRwdXRfdG9rZW5zOiBpbnB1dC5vdXRwdXRUb2tlbnMsXG4gICAgICBjYWNoZV9yZWFkX3Rva2VuczogaW5wdXQuY2FjaGVSZWFkVG9rZW5zLFxuICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBpbnB1dC5jYWNoZUNyZWF0aW9uVG9rZW5zLFxuICAgICAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zOiBpbnB1dC5jYWNoZUNyZWF0aW9uNW1Ub2tlbnMsXG4gICAgICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IGlucHV0LmNhY2hlQ3JlYXRpb24xaFRva2VucyxcbiAgICAgIGNvc3RfdXNkOiBpbnB1dC5jb3N0VXNkID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBNYXRoLnJvdW5kKGlucHV0LmNvc3RVc2QgKiBNSUNST19VU0QpLFxuICAgICAgY29zdF9zb3VyY2U6IGlucHV0LmNvc3RTb3VyY2UsXG4gICAgICBkdXJhdGlvbl9tczogaW5wdXQuZHVyYXRpb25NcyxcbiAgICAgIHR0ZnRfbXM6IGlucHV0LnR0ZnRNcyA/PyBudWxsLFxuICAgICAgZmluaXNoX3JlYXNvbjogaW5wdXQuZmluaXNoUmVhc29uLFxuICAgICAgcmVhc29uaW5nX3RleHQ6IGlucHV0LnJlYXNvbmluZ1RleHQsXG4gICAgICByZWFzb25pbmdfdG9rZW5zOiBpbnB1dC5yZWFzb25pbmdUb2tlbnMsXG4gICAgICB0b29sX2NhbGxfaW5kZXg6IGlucHV0LnRvb2xDYWxsSW5kZXgsXG4gICAgICB0b29sX2NhbGxfaWQ6IGlucHV0LnRvb2xDYWxsSWQsXG4gICAgICB0b29sX25hbWU6IGlucHV0LnRvb2xOYW1lLFxuICAgICAgdG9vbF9hcmdzOiBpbnB1dC50b29sQXJncyxcbiAgICAgIHRvb2xfcmVzdWx0OiBpbnB1dC50b29sUmVzdWx0LFxuICAgICAgdG9vbF9kdXJhdGlvbl9tczogaW5wdXQudG9vbER1cmF0aW9uTXMsXG4gICAgICBlcnJvcjogaW5wdXQuZXJyb3IsXG4gICAgfSk7XG4gICAgcmV0dXJuIHsgc3RlcElkIH07XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgZmluaXNoUnVuKGlucHV0OiBGaW5pc2hSdW5JbnB1dCk6IFByb21pc2U8eyBvazogYm9vbGVhbiB9PiB7XG4gICAgYXdhaXQgUmVxdWVzdExvZ01vZGVsLmZpbmlzaFJ1bihpbnB1dC5yZXF1ZXN0TG9nSWQsIHtcbiAgICAgIHN0YXR1czogaW5wdXQuc3RhdHVzLFxuICAgICAgcmVzcG9uc2U6IGlucHV0LnJlc3BvbnNlLFxuICAgICAgdG9rZW5fbmFtZTogaW5wdXQudG9rZW5OYW1lLFxuICAgICAgbW9kZWxfbmFtZTogaW5wdXQubW9kZWxOYW1lLFxuICAgICAgcmVxdWVzdGVkX21vZGVsX25hbWU6IGlucHV0LnJlcXVlc3RlZE1vZGVsTmFtZSxcbiAgICAgIGZhbGxiYWNrX2NvdW50OiBpbnB1dC5mYWxsYmFja0NvdW50LFxuICAgICAgaW5wdXRfdG9rZW5zOiBpbnB1dC50b3RhbElucHV0VG9rZW5zLFxuICAgICAgb3V0cHV0X3Rva2VuczogaW5wdXQudG90YWxPdXRwdXRUb2tlbnMsXG4gICAgICBjYWNoZV9yZWFkX3Rva2VuczogaW5wdXQudG90YWxDYWNoZVJlYWRUb2tlbnMsXG4gICAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IGlucHV0LnRvdGFsQ2FjaGVDcmVhdGlvblRva2VucyxcbiAgICAgIGNhY2hlX2NyZWF0aW9uXzVtX3Rva2VuczogaW5wdXQudG90YWxDYWNoZUNyZWF0aW9uNW1Ub2tlbnMsXG4gICAgICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IGlucHV0LnRvdGFsQ2FjaGVDcmVhdGlvbjFoVG9rZW5zLFxuICAgICAgY29zdF91c2Q6IGlucHV0LmNvc3RVc2QgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IE1hdGgucm91bmQoaW5wdXQuY29zdFVzZCAqIE1JQ1JPX1VTRCksXG4gICAgICBjb3N0X3NvdXJjZTogaW5wdXQuY29zdFNvdXJjZSxcbiAgICAgIGR1cmF0aW9uX21zOiBpbnB1dC50b3RhbER1cmF0aW9uTXMsXG4gICAgICBoaXN0b3J5OiBpbnB1dC5oaXN0b3J5ID8gSlNPTi5wYXJzZShpbnB1dC5oaXN0b3J5KSA6IHVuZGVmaW5lZCxcbiAgICAgIGVycm9yX21lc3NhZ2U6IGlucHV0LmVycm9yTWVzc2FnZSxcbiAgICB9KTtcbiAgICByZXR1cm4geyBvazogdHJ1ZSB9O1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiR0VUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stcXVlcnlcIl0gfSlcbiAgYXN5bmMgc3RhdHMoKTogUHJvbWlzZTxUb2tlblN0YXRzW10+IHtcbiAgICByZXR1cm4gUWdyaWREaXNwYXRjaGVyLmdldFN0YXRzKCk7XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSB9KVxuICBhc3luYyB0b3RhbENvc3QodG9rZW5OYW1lPzogc3RyaW5nKTogUHJvbWlzZTx7IHVzZDogbnVtYmVyIH0+IHtcbiAgICByZXR1cm4geyB1c2Q6IGF3YWl0IFJlcXVlc3RMb2dNb2RlbC50b3RhbENvc3QoeyB0b2tlbl9uYW1lOiB0b2tlbk5hbWUgfSkgfTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIkdFVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLXF1ZXJ5XCJdIH0pXG4gIGFzeW5jIHByb2plY3ROYW1lcygpOiBQcm9taXNlPHsgbmFtZXM6IHN0cmluZ1tdIH0+IHtcbiAgICByZXR1cm4geyBuYW1lczogYXdhaXQgUmVxdWVzdExvZ01vZGVsLmRpc3RpbmN0UHJvamVjdE5hbWVzKCkgfTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyBhZGRUb2tlbihcbiAgICBwcm92aWRlcjogc3RyaW5nLFxuICAgIGNyZWRlbnRpYWxzOiBUb2tlbkNyZWRlbnRpYWxzLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgKTogUHJvbWlzZTx7IGFkZGVkOiBib29sZWFuIH0+IHtcbiAgICBhd2FpdCBUb2tlbk1vZGVsLnNhdmUoW1xuICAgICAge1xuICAgICAgICBwcm92aWRlcixcbiAgICAgICAgY3JlZGVudGlhbHMsXG4gICAgICAgIG5hbWUsXG4gICAgICB9LFxuICAgIF0pO1xuICAgIHJldHVybiB7IGFkZGVkOiB0cnVlIH07XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCJdIH0pXG4gIGFzeW5jIHVwZGF0ZVRva2VuKFxuICAgIGlkOiBudW1iZXIsXG4gICAgbmFtZT86IHN0cmluZyxcbiAgICBxdW90YVRocmVzaG9sZD86IG51bWJlciB8IG51bGwsXG4gICAgd2VpZ2h0PzogbnVtYmVyLFxuICApOiBQcm9taXNlPHsgdXBkYXRlZDogYm9vbGVhbiB9PiB7XG4gICAgaWYgKFxuICAgICAgcXVvdGFUaHJlc2hvbGQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgcXVvdGFUaHJlc2hvbGQgIT09IG51bGwgJiZcbiAgICAgICghTnVtYmVyLmlzSW50ZWdlcihxdW90YVRocmVzaG9sZCkgfHwgcXVvdGFUaHJlc2hvbGQgPCAxIHx8IHF1b3RhVGhyZXNob2xkID4gMTAwKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oXG4gICAgICAgIFwicXVvdGFUaHJlc2hvbGQgbXVzdCBiZSBhbiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgMTAwLCBvciBudWxsXCIgYXMgTG9jYWxpemVkU3RyaW5nLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHdlaWdodCAhPT0gdW5kZWZpbmVkICYmICghTnVtYmVyLmlzSW50ZWdlcih3ZWlnaHQpIHx8IHdlaWdodCA8IDEgfHwgd2VpZ2h0ID4gMTAwKSkge1xuICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oXG4gICAgICAgIFwid2VpZ2h0IG11c3QgYmUgYW4gaW50ZWdlciBiZXR3ZWVuIDEgYW5kIDEwMFwiIGFzIExvY2FsaXplZFN0cmluZyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcGF0Y2g6IFRva2VuVXBkYXRlRmllbGRzID0ge307XG4gICAgaWYgKG5hbWUgIT09IHVuZGVmaW5lZCkgcGF0Y2gubmFtZSA9IG5hbWU7XG4gICAgaWYgKHF1b3RhVGhyZXNob2xkICE9PSB1bmRlZmluZWQpIHBhdGNoLnF1b3RhX3RocmVzaG9sZCA9IHF1b3RhVGhyZXNob2xkO1xuICAgIGlmICh3ZWlnaHQgIT09IHVuZGVmaW5lZCkgcGF0Y2gud2VpZ2h0ID0gd2VpZ2h0O1xuICAgIGlmIChPYmplY3Qua2V5cyhwYXRjaCkubGVuZ3RoID09PSAwKSByZXR1cm4geyB1cGRhdGVkOiBmYWxzZSB9O1xuXG4gICAgY29uc3QgdXBkYXRlZCA9IGF3YWl0IFRva2VuTW9kZWwudXBkYXRlRmllbGRzKGlkLCBwYXRjaCk7XG4gICAgcmV0dXJuIHsgdXBkYXRlZDogdXBkYXRlZCA+IDAgfTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyByZW1vdmVUb2tlbihpZDogbnVtYmVyKTogUHJvbWlzZTx7IHJlbW92ZWQ6IGJvb2xlYW4gfT4ge1xuICAgIGNvbnN0IGVudHJ5ID0gYXdhaXQgVG9rZW5Nb2RlbC5maW5kT25lKFwiQVwiLCB7IGlkIH0pO1xuICAgIGlmICghZW50cnkpIHJldHVybiB7IHJlbW92ZWQ6IGZhbHNlIH07XG4gICAgYXdhaXQgVG9rZW5Nb2RlbC5kZWwoW2VudHJ5LmlkXSk7XG4gICAgcmV0dXJuIHsgcmVtb3ZlZDogdHJ1ZSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIO2GoO2BsCDtmZzshLHtmZQv67mE7Zmc7ISx7ZmUIO2GoOq4gCBEQuydmCBhY3RpdmUg7ZWE65OcIOyXheuNsOydtO2KuFxuICAgKi9cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIHRvZ2dsZVRva2VuKGlkOiBudW1iZXIpOiBQcm9taXNlPHsgYWN0aXZlOiBib29sZWFuIH0+IHtcbiAgICBjb25zdCBlbnRyeSA9IGF3YWl0IFRva2VuTW9kZWwuZmluZE9uZShcIkFcIiwgeyBpZCB9KTtcbiAgICBpZiAoIWVudHJ5KSByZXR1cm4geyBhY3RpdmU6IGZhbHNlIH07XG5cbiAgICBjb25zdCBuZXdBY3RpdmUgPSAhZW50cnkuYWN0aXZlO1xuICAgIGF3YWl0IFRva2VuTW9kZWwuc2F2ZShbXG4gICAgICB7XG4gICAgICAgIGlkLFxuICAgICAgICBwcm92aWRlcjogZW50cnkucHJvdmlkZXIsXG4gICAgICAgIGNyZWRlbnRpYWxzOiBlbnRyeS5jcmVkZW50aWFscyxcbiAgICAgICAgYWN0aXZlOiBuZXdBY3RpdmUsXG4gICAgICAgIG5hbWU6IGVudHJ5Lm5hbWUsXG4gICAgICB9LFxuICAgIF0pO1xuICAgIHJldHVybiB7IGFjdGl2ZTogbmV3QWN0aXZlIH07XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgb2F1dGhTdGFydChuYW1lOiBzdHJpbmcpOiBQcm9taXNlPE9BdXRoU3RhcnRSZXN1bHQ+IHtcbiAgICBjb25zdCB7IGNvZGVWZXJpZmllciwgY29kZUNoYWxsZW5nZSwgc3RhdGUgfSA9IGdlbmVyYXRlUEtDRSgpO1xuXG4gICAgY29uc3QgcmVkaXJlY3RVcmkgPSBnZXRPQXV0aFJlZGlyZWN0VXJpKCk7XG4gICAgY29uc3QgYXV0aFVybCA9IGJ1aWxkQXV0aFVybChjb2RlQ2hhbGxlbmdlLCBzdGF0ZSwgcmVkaXJlY3RVcmkpO1xuXG4gICAgYXdhaXQgc2V0T0F1dGhTdGF0ZShzdGF0ZSwgeyBjb2RlVmVyaWZpZXIsIG5hbWUsIHJlZGlyZWN0VXJpIH0pO1xuXG4gICAgcmV0dXJuIHsgYXV0aFVybCB9O1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlT0F1dGhDYWxsYmFjayhjb2RlOiBzdHJpbmcsIHN0YXRlOiBzdHJpbmcsIHJlcGx5OiBGYXN0aWZ5UmVwbHkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwZW5kaW5nID0gYXdhaXQgZ2V0T0F1dGhTdGF0ZShzdGF0ZSk7XG4gICAgaWYgKCFwZW5kaW5nKSB7XG4gICAgICBsb2dnZXIud2FybihcIm9hdXRoIGNhbGxiYWNrOiBpbnZhbGlkX3N0YXRlXCIpO1xuICAgICAgcmV0dXJuIHJlcGx5LnJlZGlyZWN0KFwiLz9vYXV0aD1lcnJvciZyZWFzb249aW52YWxpZF9zdGF0ZVwiKTtcbiAgICB9XG4gICAgYXdhaXQgZGVsZXRlT0F1dGhTdGF0ZShzdGF0ZSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdG9rZW5zID0gYXdhaXQgZXhjaGFuZ2VDb2RlRm9yVG9rZW5zKFxuICAgICAgICBjb2RlLFxuICAgICAgICBwZW5kaW5nLmNvZGVWZXJpZmllcixcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIHBlbmRpbmcucmVkaXJlY3RVcmksXG4gICAgICApO1xuXG4gICAgICBpZiAodG9rZW5zLmFjY291bnRVdWlkKSB7XG4gICAgICAgIGNvbnN0IG9sZEVudHJpZXMgPSBhd2FpdCBUb2tlbk1vZGVsLmZpbmRCeUFjY291bnRJZGVudGlmaWVyKFxuICAgICAgICAgIFwiQVwiLFxuICAgICAgICAgIFwiYW50aHJvcGljXCIsXG4gICAgICAgICAgdG9rZW5zLmFjY291bnRVdWlkLFxuICAgICAgICApO1xuICAgICAgICBpZiAob2xkRW50cmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgYXdhaXQgVG9rZW5Nb2RlbC5kZWwob2xkRW50cmllcy5tYXAoKG8pID0+IG8uaWQpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhd2FpdCBUb2tlbk1vZGVsLnNhdmUoW1xuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZXI6IFwiYW50aHJvcGljXCIsXG4gICAgICAgICAgY3JlZGVudGlhbHM6IHtcbiAgICAgICAgICAgIGFjY2Vzc1Rva2VuOiB0b2tlbnMuYWNjZXNzVG9rZW4sXG4gICAgICAgICAgICByZWZyZXNoVG9rZW46IHRva2Vucy5yZWZyZXNoVG9rZW4sXG4gICAgICAgICAgICBleHBpcmVzQXQ6IHRva2Vucy5leHBpcmVzQXQgPz8gMCxcbiAgICAgICAgICAgIGFjY291bnRVdWlkOiB0b2tlbnMuYWNjb3VudFV1aWQgPz8gXCJcIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5hbWU6IHBlbmRpbmcubmFtZSxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuXG4gICAgICByZXR1cm4gcmVwbHkucmVkaXJlY3QoYC8/b2F1dGg9c3VjY2VzcyZuYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBlbmRpbmcubmFtZSl9YCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHJlcGx5LnJlZGlyZWN0KGAvP29hdXRoPWVycm9yJnJlYXNvbj0ke2VuY29kZVVSSUNvbXBvbmVudCgoZSBhcyBFcnJvcikubWVzc2FnZSl9YCk7XG4gICAgfVxuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIG9hdXRoU3RhcnRPcGVuQUkobmFtZTogc3RyaW5nKTogUHJvbWlzZTxPQXV0aFN0YXJ0UmVzdWx0PiB7XG4gICAgaWYgKCFRZ3JpZERpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlcikgdGhyb3cgbmV3IEVycm9yKFwiT3BlbkFJIGRpc3BhdGNoZXIgbm90IGluaXRpYWxpemVkXCIpO1xuICAgIGNvbnN0IHsgYXV0aFVybCB9ID0gYXdhaXQgUWdyaWREaXNwYXRjaGVyLm9wZW5haURpc3BhdGNoZXIuc3RhcnRCcm93c2VyTG9naW4obmFtZSk7XG5cbiAgICAvLyBmaXJlLWFuZC1mb3JnZXQ6IGNvZGV4IGxvZ2luIOyZhOujjCDrjIDquLAg4oaSIO2GoO2BsCDsoIDsnqVcbiAgICBRZ3JpZERpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlclxuICAgICAgLmNvbXBsZXRlQnJvd3NlckxvZ2luKClcbiAgICAgIC50aGVuKGFzeW5jIChjcmVkcykgPT4ge1xuICAgICAgICBpZiAoY3JlZHMuYWNjb3VudElkKSB7XG4gICAgICAgICAgY29uc3Qgb2xkRW50cmllcyA9IGF3YWl0IFRva2VuTW9kZWwuZmluZEJ5QWNjb3VudElkZW50aWZpZXIoXG4gICAgICAgICAgICBcIkFcIixcbiAgICAgICAgICAgIFwib3BlbmFpXCIsXG4gICAgICAgICAgICBjcmVkcy5hY2NvdW50SWQsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAob2xkRW50cmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBhd2FpdCBUb2tlbk1vZGVsLmRlbChvbGRFbnRyaWVzLm1hcCgobykgPT4gby5pZCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBUb2tlbk1vZGVsLnNhdmUoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGVyOiBcIm9wZW5haVwiLFxuICAgICAgICAgICAgY3JlZGVudGlhbHM6IHtcbiAgICAgICAgICAgICAgYWNjZXNzVG9rZW46IGNyZWRzLmFjY2Vzc1Rva2VuLFxuICAgICAgICAgICAgICByZWZyZXNoVG9rZW46IGNyZWRzLnJlZnJlc2hUb2tlbixcbiAgICAgICAgICAgICAgaWRUb2tlbjogY3JlZHMuaWRUb2tlbixcbiAgICAgICAgICAgICAgYWNjZXNzVG9rZW5FeHBpcmVzQXQ6IERhdGUubm93KCkgKyAxMCAqIDI0ICogMzYwMCAqIDEwMDAsXG4gICAgICAgICAgICAgIGFjY291bnRJZDogY3JlZHMuYWNjb3VudElkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSk7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBPcGVuQUkgdG9rZW4gc2F2ZWQgZm9yICR7bmFtZX1gKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYE9wZW5BSSBicm93c2VyIGxvZ2luIGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHsgYXV0aFVybCB9O1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiR0VUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stcXVlcnlcIl0gfSlcbiAgYXN5bmMgdXNhZ2UodG9rZW5JZD86IG51bWJlcik6IFByb21pc2U8VXNhZ2VSZXNwb25zZT4ge1xuICAgIGNvbnN0IHsgcm93czogYWxsVG9rZW5zIH0gPSBhd2FpdCBUb2tlbk1vZGVsLmZpbmRNYW55KFwiQVwiKTtcbiAgICBjb25zdCBlbnRyeSA9IHRva2VuSWRcbiAgICAgID8gYWxsVG9rZW5zLmZpbmQoKGUpID0+IGUuaWQgPT09IHRva2VuSWQpXG4gICAgICA6IGFsbFRva2Vucy5maW5kTGFzdCgoZSkgPT4gZS5hY3RpdmUgJiYgZS5wcm92aWRlciA9PT0gXCJhbnRocm9waWNcIik7XG5cbiAgICBpZiAoIWVudHJ5KSByZXR1cm4geyBlcnJvcjogXCJOT1RfRk9VTkRcIiB9O1xuXG4gICAgaWYgKGVudHJ5LnByb3ZpZGVyID09PSBcIm9wZW5haVwiKSB7XG4gICAgICBpZiAoIWVudHJ5LmFjdGl2ZSkge1xuICAgICAgICByZXR1cm4geyBwcm92aWRlcjogXCJvcGVuYWlcIiwgZml2ZUhvdXI6IG51bGwsIHNldmVuRGF5OiBudWxsIH07XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJhdyA9IGF3YWl0IFFncmlkRGlzcGF0Y2hlci5vcGVuYWlEaXNwYXRjaGVyPy5nZXRSYXRlTGltaXRzQnlUb2tlbklkKGVudHJ5LmlkKTtcbiAgICAgICAgY29uc3QgcmwgPSByYXc/LmRhdGEucmF0ZUxpbWl0cztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwcm92aWRlcjogXCJvcGVuYWlcIixcbiAgICAgICAgICBmaXZlSG91cjogcmw/LnByaW1hcnlcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIHV0aWxpemF0aW9uOiBybC5wcmltYXJ5LnVzZWRQZXJjZW50LFxuICAgICAgICAgICAgICAgIHJlc2V0c0F0OiB1bml4U2Vjb25kc1RvSXNvKHJsLnByaW1hcnkucmVzZXRzQXQpLFxuICAgICAgICAgICAgICAgIHdpbmRvd0R1cmF0aW9uTWluczogcmwucHJpbWFyeS53aW5kb3dEdXJhdGlvbk1pbnMsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBzZXZlbkRheTogcmw/LnNlY29uZGFyeVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgdXRpbGl6YXRpb246IHJsLnNlY29uZGFyeS51c2VkUGVyY2VudCxcbiAgICAgICAgICAgICAgICByZXNldHNBdDogdW5peFNlY29uZHNUb0lzbyhybC5zZWNvbmRhcnkucmVzZXRzQXQpLFxuICAgICAgICAgICAgICAgIHdpbmRvd0R1cmF0aW9uTWluczogcmwuc2Vjb25kYXJ5LndpbmRvd0R1cmF0aW9uTWlucyxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICB9O1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4geyBlcnJvcjogYE9wZW5BSSB1c2FnZSBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlbnRyeS5wcm92aWRlciAhPT0gXCJhbnRocm9waWNcIikge1xuICAgICAgcmV0dXJuIHsgZXJyb3I6IGB1c2FnZSBBUEkgbm90IHN1cHBvcnRlZCBmb3IgcHJvdmlkZXI6ICR7ZW50cnkucHJvdmlkZXJ9YCB9O1xuICAgIH1cblxuICAgIGxldCBhY2Nlc3NUb2tlbiA9IGdldEFjY2Vzc1Rva2VuKGVudHJ5LmNyZWRlbnRpYWxzKTtcbiAgICBjb25zdCBpc0V4cGlyZWQgPSBnZXRFeHBpcmVzQXQoZW50cnkuY3JlZGVudGlhbHMpIDwgRGF0ZS5ub3coKTtcblxuICAgIGlmIChpc0V4cGlyZWQgJiYgZ2V0UmVmcmVzaFRva2VuKGVudHJ5LmNyZWRlbnRpYWxzKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYWNjZXNzVG9rZW4gPSBhd2FpdCB0aGlzLnJlZnJlc2hUb2tlbihlbnRyeSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIG9hdXRoTG9nZ2VyLndhcm4oYHJlZnJlc2ggZmFpbGVkIGZvciAke2VudHJ5Lm5hbWV9OiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgICByZXR1cm4geyBlcnJvcjogXCJyZS1sb2dpbiByZXF1aXJlZFwiIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcmF3ID0gYXdhaXQgZmV0Y2hVc2FnZShhY2Nlc3NUb2tlbik7XG4gICAgaWYgKHJhdy5lcnJvciAmJiBnZXRSZWZyZXNoVG9rZW4oZW50cnkuY3JlZGVudGlhbHMpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhY2Nlc3NUb2tlbiA9IGF3YWl0IHRoaXMucmVmcmVzaFRva2VuKGVudHJ5KTtcbiAgICAgICAgY29uc3QgcmV0cmllZCA9IGF3YWl0IGZldGNoVXNhZ2UoYWNjZXNzVG9rZW4pO1xuICAgICAgICBpZiAocmV0cmllZC5lcnJvcikgcmV0dXJuIHsgZXJyb3I6IHJldHJpZWQuZXJyb3IgfTtcbiAgICAgICAgcmV0dXJuIGNvbnZlcnRBbnRocm9waWNVc2FnZShyZXRyaWVkKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgb2F1dGhMb2dnZXIud2FybihgcmVmcmVzaCBmYWlsZWQgZm9yICR7ZW50cnkubmFtZX06ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgICAgIHJldHVybiB7IGVycm9yOiBcInJlLWxvZ2luIHJlcXVpcmVkXCIgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJhdy5lcnJvcikgcmV0dXJuIHsgZXJyb3I6IHJhdy5lcnJvciB9O1xuICAgIHJldHVybiBjb252ZXJ0QW50aHJvcGljVXNhZ2UocmF3KTtcbiAgfVxuXG4gIGFzeW5jIHJlZnJlc2hUb2tlbih0b2tlbjogVG9rZW5TdWJzZXRBKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBjcmVkcyA9IHRva2VuLmNyZWRlbnRpYWxzO1xuICAgIGNvbnN0IHJ0ID0gZ2V0UmVmcmVzaFRva2VuKGNyZWRzKTtcbiAgICBpZiAoIXJ0KSB0aHJvdyBuZXcgRXJyb3IoXCJObyByZWZyZXNoIHRva2VuXCIpO1xuICAgIGNvbnN0IHJlZnJlc2hlZCA9IGF3YWl0IHJlZnJlc2hBY2Nlc3NUb2tlbihydCk7XG4gICAgY29uc3QgdXBkYXRlZCA9IFRva2VuQ3JlZGVudGlhbHMucGFyc2Uoe1xuICAgICAgLi4uY3JlZHMsXG4gICAgICBhY2Nlc3NUb2tlbjogcmVmcmVzaGVkLmFjY2Vzc1Rva2VuLFxuICAgICAgcmVmcmVzaFRva2VuOiByZWZyZXNoZWQucmVmcmVzaFRva2VuLFxuICAgICAgZXhwaXJlc0F0OiByZWZyZXNoZWQuZXhwaXJlc0F0LFxuICAgIH0pO1xuICAgIGF3YWl0IFRva2VuTW9kZWwuc2F2ZShbXG4gICAgICB7XG4gICAgICAgIGlkOiB0b2tlbi5pZCxcbiAgICAgICAgcHJvdmlkZXI6IHRva2VuLnByb3ZpZGVyLFxuICAgICAgICBjcmVkZW50aWFsczogdXBkYXRlZCxcbiAgICAgICAgbmFtZTogdG9rZW4ubmFtZSxcbiAgICAgIH0sXG4gICAgXSk7XG4gICAgcmV0dXJuIHJlZnJlc2hlZC5hY2Nlc3NUb2tlbjtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIkdFVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLXF1ZXJ5XCJdIH0pXG4gIGFzeW5jIGhlYWx0aCgpOiBQcm9taXNlPEhlYWx0aFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogXCJva1wiLFxuICAgICAgYWN0aXZlVG9rZW5zOiBRZ3JpZERpc3BhdGNoZXIudG9rZW5zLnNpemUsXG4gICAgICBzdWJzY3JpYmVyOiBRZ3JpZERpc3BhdGNoZXIuc3Vic2NyaWJlcj8uc3RhdHVzKCkgPz8gbnVsbCxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBRZ3JpZEZyYW1lID0gbmV3IFFncmlkRnJhbWVDbGFzcygpO1xuXG5mdW5jdGlvbiBjb252ZXJ0QW50aHJvcGljVXNhZ2UocmF3OiBBbnRocm9waWNVc2FnZVJhdyk6IFVzYWdlUmVzcG9uc2Uge1xuICByZXR1cm4ge1xuICAgIHByb3ZpZGVyOiBcImFudGhyb3BpY1wiLFxuICAgIGZpdmVIb3VyOiByYXcuZml2ZV9ob3VyXG4gICAgICA/IHsgdXRpbGl6YXRpb246IHJhdy5maXZlX2hvdXIudXRpbGl6YXRpb24sIHJlc2V0c0F0OiByYXcuZml2ZV9ob3VyLnJlc2V0c19hdCB9XG4gICAgICA6IG51bGwsXG4gICAgc2V2ZW5EYXk6IHJhdy5zZXZlbl9kYXlcbiAgICAgID8geyB1dGlsaXphdGlvbjogcmF3LnNldmVuX2RheS51dGlsaXphdGlvbiwgcmVzZXRzQXQ6IHJhdy5zZXZlbl9kYXkucmVzZXRzX2F0IH1cbiAgICAgIDogbnVsbCxcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7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
|
|
665
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQuZnJhbWUuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLmZyYW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcnlwdG8gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5cbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgeyB0eXBlIEZhc3RpZnlSZXBseSwgdHlwZSBGYXN0aWZ5UmVxdWVzdCB9IGZyb20gXCJmYXN0aWZ5XCI7XG5pbXBvcnQgeyBhcGksIEJhZFJlcXVlc3RFeGNlcHRpb24sIEJhc2VGcmFtZUNsYXNzLCBTb25hbXUsIHN0cmVhbSB9IGZyb20gXCJzb25hbXVcIjtcbmltcG9ydCB7IGdldENhY2hlTWFuYWdlclJlZiB9IGZyb20gXCJzb25hbXUvY2FjaGVcIjtcblxuaW1wb3J0IHsgdHlwZSBMb2NhbGl6ZWRTdHJpbmcgfSBmcm9tIFwiLi4vLi4vaTE4bi9zZC5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7XG4gIGdldEFjY2Vzc1Rva2VuLFxuICBnZXRFeHBpcmVzQXQsXG4gIGdldFJlZnJlc2hUb2tlbixcbn0gZnJvbSBcIi4uLy4uL3V0aWxzL3Byb3ZpZGVycy9jb21tb24vY3JlZGVudGlhbHNcIjtcbmltcG9ydCB7IENhbGxlclNjaGVtYVZhbGlkYXRpb25FcnJvciB9IGZyb20gXCIuLi8uLi91dGlscy9wcm92aWRlcnMvY29tbW9uL3NjaGVtYS12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBNSUNST19VU0QsIFJlcXVlc3RMb2dNb2RlbCB9IGZyb20gXCIuLi9yZXF1ZXN0LWxvZy9yZXF1ZXN0LWxvZy5tb2RlbFwiO1xuaW1wb3J0IHsgdHlwZSBUb2tlblN1YnNldEEgfSBmcm9tIFwiLi4vc29uYW11LmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgVG9rZW5Nb2RlbCwgdHlwZSBUb2tlblVwZGF0ZUZpZWxkcyB9IGZyb20gXCIuLi90b2tlbi90b2tlbi5tb2RlbFwiO1xuaW1wb3J0IHsgVG9rZW5DcmVkZW50aWFscyB9IGZyb20gXCIuLi90b2tlbi90b2tlbi50eXBlc1wiO1xuaW1wb3J0IHtcbiAgdHlwZSBBbnRocm9waWNVc2FnZVJhdyxcbiAgYnVpbGRBdXRoVXJsLFxuICBleGNoYW5nZUNvZGVGb3JUb2tlbnMsXG4gIGZldGNoVXNhZ2UsXG4gIGdlbmVyYXRlUEtDRSxcbiAgcmVmcmVzaEFjY2Vzc1Rva2VuLFxufSBmcm9tIFwiLi9vYXV0aFwiO1xuaW1wb3J0IHtcbiAgYWZ0ZXJRdWVyeSxcbiAgYmVmb3JlUXVlcnksXG4gIGZpbmlzaFJ1bkFib3J0ZWQsXG4gIGZpbmlzaFJ1bldpdGhFcnJvcixcbn0gZnJvbSBcIi4vcWdyaWQtcnVuLWxpZmVjeWNsZVwiO1xuaW1wb3J0IHsgYnVpbGRBbmRWYWxpZGF0ZVN0cmljdE91dHB1dFNjaGVtYSwgUWdyaWREaXNwYXRjaGVyIH0gZnJvbSBcIi4vcWdyaWQuZGlzcGF0Y2hlclwiO1xuaW1wb3J0IHtcbiAgdHlwZSBRdWVyeUlucHV0LFxuICB0eXBlIEFwcGVuZFN0ZXBJbnB1dCxcbiAgdHlwZSBDcmVhdGVSdW5JbnB1dCxcbiAgdHlwZSBGaW5pc2hSdW5JbnB1dCxcbiAgdHlwZSBIZWFsdGhSZXNwb25zZSxcbiAgdHlwZSBPQXV0aFN0YXJ0UmVzdWx0LFxuICB0eXBlIFF1ZXJ5T3V0cHV0LFxuICB0eXBlIFFncmlkUnVuQ29udGV4dCxcbiAgU3RyZWFtRXZlbnRzLFxuICB0eXBlIFRva2VuU3RhdHMsXG4gIHR5cGUgVXNhZ2VSZXNwb25zZSxcbn0gZnJvbSBcIi4vcWdyaWQudHlwZXNcIjtcbmltcG9ydCB7IFRvb2xTY2hlbWFDb21wb3NpdGlvbkVycm9yIH0gZnJvbSBcIi4vdG9vbC1lbXVsYXRpb24tc2NoZW1hXCI7XG5cbmNvbnN0IHBlbmRpbmdTdHJlYW1zID0gbmV3IE1hcDxzdHJpbmcsIFF1ZXJ5SW5wdXQ+KCk7XG5cbnR5cGUgUGVuZGluZ09BdXRoID0geyBjb2RlVmVyaWZpZXI6IHN0cmluZzsgbmFtZTogc3RyaW5nOyByZWRpcmVjdFVyaTogc3RyaW5nIH07XG5jb25zdCBPQVVUSF9TVEFURV9QUkVGSVggPSBcIm9hdXRoOnN0YXRlOlwiO1xuY29uc3QgT0FVVEhfU1RBVEVfVFRMID0gXCI1bVwiO1xuXG5mdW5jdGlvbiB1bml4U2Vjb25kc1RvSXNvKHNlY29uZHM6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCBudWxsIHtcbiAgcmV0dXJuIHR5cGVvZiBzZWNvbmRzID09PSBcIm51bWJlclwiID8gbmV3IERhdGUoc2Vjb25kcyAqIDEwMDApLnRvSVNPU3RyaW5nKCkgOiBudWxsO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzZXRPQXV0aFN0YXRlKHN0YXRlOiBzdHJpbmcsIGRhdGE6IFBlbmRpbmdPQXV0aCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjYWNoZSA9IGdldENhY2hlTWFuYWdlclJlZigpO1xuICBpZiAoIWNhY2hlKSB0aHJvdyBuZXcgRXJyb3IoXCJDYWNoZU1hbmFnZXIgbm90IGluaXRpYWxpemVkXCIpO1xuICBhd2FpdCBjYWNoZS5zZXQoe1xuICAgIGtleTogYCR7T0FVVEhfU1RBVEVfUFJFRklYfSR7c3RhdGV9YCxcbiAgICB2YWx1ZTogSlNPTi5zdHJpbmdpZnkoZGF0YSksXG4gICAgdHRsOiBPQVVUSF9TVEFURV9UVEwsXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRPQXV0aFN0YXRlKHN0YXRlOiBzdHJpbmcpOiBQcm9taXNlPFBlbmRpbmdPQXV0aCB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBjYWNoZSA9IGdldENhY2hlTWFuYWdlclJlZigpO1xuICBpZiAoIWNhY2hlKSB0aHJvdyBuZXcgRXJyb3IoXCJDYWNoZU1hbmFnZXIgbm90IGluaXRpYWxpemVkXCIpO1xuICBjb25zdCByYXcgPSBhd2FpdCBjYWNoZS5nZXQ8c3RyaW5nPih7IGtleTogYCR7T0FVVEhfU1RBVEVfUFJFRklYfSR7c3RhdGV9YCB9KTtcbiAgaWYgKCFyYXcpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBKU09OLnBhcnNlKHJhdykgYXMgUGVuZGluZ09BdXRoO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkZWxldGVPQXV0aFN0YXRlKHN0YXRlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY2FjaGUgPSBnZXRDYWNoZU1hbmFnZXJSZWYoKTtcbiAgaWYgKCFjYWNoZSkgcmV0dXJuO1xuICBhd2FpdCBjYWNoZS5kZWxldGUoeyBrZXk6IGAke09BVVRIX1NUQVRFX1BSRUZJWH0ke3N0YXRlfWAgfSk7XG59XG5cbi8vIE9BdXRoIGNhbGxiYWNrIOydgCDrjIDsi5zrs7Trk5zqsIAg7KCR7IaN7ZWcIHFncmlkIOyjvOyGjOuhnCDrj4zslYTsmKjri6QuIOu4jOudvOyasOyggOqwgCDrs7Trgrhcbi8vIE9yaWdpbijsmrDshKApIOuYkOuKlCBIb3N0IO2XpOuNlOyXkOyEnCBiYXNlIFVSTCDsnYQg7YyM7IOd7ZWY66+A66GcIOuzhOuPhCBlbnYg7ISk7KCV7J20IO2VhOyalCDsl4bri6QuXG4vLyBIVFRQIGNvbnRleHQg6rCAIOyXhuuKlCDsp4HsoJEg7Zi47LacKO2FjOyKpO2KuCDrk7Ep66eMIGxvY2FsaG9zdCDroZwg7Y+067Cx7ZWc64ukLlxuZnVuY3Rpb24gZ2V0T0F1dGhSZWRpcmVjdFVyaSgpOiBzdHJpbmcge1xuICB0cnkge1xuICAgIGNvbnN0IHsgaGVhZGVycywgcmVxdWVzdCB9ID0gU29uYW11LmdldENvbnRleHQoKTtcbiAgICBjb25zdCBvcmlnaW4gPSBoZWFkZXJzLm9yaWdpbjtcbiAgICBpZiAodHlwZW9mIG9yaWdpbiA9PT0gXCJzdHJpbmdcIiAmJiAvXmh0dHBzPzpcXC9cXC8vLnRlc3Qob3JpZ2luKSkge1xuICAgICAgcmV0dXJuIGAke29yaWdpbi5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpfS9jYWxsYmFja2A7XG4gICAgfVxuICAgIGNvbnN0IGZvcndhcmRlZEhvc3QgPSBoZWFkZXJzW1wieC1mb3J3YXJkZWQtaG9zdFwiXTtcbiAgICBjb25zdCBob3N0ID0gKEFycmF5LmlzQXJyYXkoZm9yd2FyZGVkSG9zdCkgPyBmb3J3YXJkZWRIb3N0WzBdIDogZm9yd2FyZGVkSG9zdCkgPz8gaGVhZGVycy5ob3N0O1xuICAgIGlmIChob3N0KSB7XG4gICAgICBjb25zdCBmb3J3YXJkZWRQcm90byA9IGhlYWRlcnNbXCJ4LWZvcndhcmRlZC1wcm90b1wiXTtcbiAgICAgIGNvbnN0IHByb3RvID1cbiAgICAgICAgKEFycmF5LmlzQXJyYXkoZm9yd2FyZGVkUHJvdG8pID8gZm9yd2FyZGVkUHJvdG9bMF0gOiBmb3J3YXJkZWRQcm90byk/LnNwbGl0KFwiLFwiKVswXSA/P1xuICAgICAgICByZXF1ZXN0LnByb3RvY29sO1xuICAgICAgcmV0dXJuIGAke3Byb3RvfTovLyR7aG9zdH0vY2FsbGJhY2tgO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gZGlyZWN0IGZyYW1lIGNhbGwg4oCUIEhUVFAgY29udGV4dCDsl4bsnYxcbiAgfVxuICByZXR1cm4gYGh0dHA6Ly9sb2NhbGhvc3Q6JHtwcm9jZXNzLmVudi5QT1JUID8/IFwiNDQ5MDBcIn0vY2FsbGJhY2tgO1xufVxuXG5mdW5jdGlvbiByZWplY3RJbWFnZUdlbmVyYXRpb25TdHJlYW0oYXJnczogUXVlcnlJbnB1dCk6IHZvaWQge1xuICBpZiAoIWFyZ3MuaW1hZ2VHZW5lcmF0aW9uKSByZXR1cm47XG4gIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKFxuICAgIFwicWdyaWQ6IGltYWdlR2VuZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIHdpdGggc3RyZWFtaW5nOyB1c2UgcXVlcnkvZ2VuZXJhdGVUZXh0IGluc3RlYWQuXCIgYXMgTG9jYWxpemVkU3RyaW5nLFxuICApO1xufVxuXG5mdW5jdGlvbiByZWplY3RJbnZhbGlkQ2FsbGVyU2NoZW1hcyhhcmdzOiBRdWVyeUlucHV0KTogdm9pZCB7XG4gIGlmIChhcmdzLmpzb25TY2hlbWEgPT09IHVuZGVmaW5lZCAmJiAhYXJncy50b29scz8ubGVuZ3RoKSByZXR1cm47XG5cbiAgdHJ5IHtcbiAgICBidWlsZEFuZFZhbGlkYXRlU3RyaWN0T3V0cHV0U2NoZW1hKGFyZ3MpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChcbiAgICAgIGVycm9yIGluc3RhbmNlb2YgQ2FsbGVyU2NoZW1hVmFsaWRhdGlvbkVycm9yIHx8XG4gICAgICBlcnJvciBpbnN0YW5jZW9mIFRvb2xTY2hlbWFDb21wb3NpdGlvbkVycm9yXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbihlcnJvci5tZXNzYWdlIGFzIExvY2FsaXplZFN0cmluZyk7XG4gICAgfVxuICAgIC8vIOyemOuqu+uQnCBrZXl3b3JkIO2Yle2DnChhbnlPZiDrpbwg6rCd7LK066GcIOuztOuCtOuKlCDrk7Ep64qUIO2MjOydtO2UhOudvOyduOyXkOyEnCB1bnR5cGVkIOyYpOulmOuhnCDrgpjsmKTrr4DroZwsXG4gICAgLy8g7YOA7J6FIOyige2eiOq4sCDrjIDsi6AgRXJyb3Ig7KCE7LK066W8IGNhbGxlci1mYXVsdCA0MDAg7Jy866GcIOunpO2Vke2VnOuLpCjqs4Tslb0g7YWM7Iqk7Yq466GcIOqzoOygleuQqCkuXG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKFxuICAgICAgICBgcWdyaWQ6IGNhbGxlciBzY2hlbWEgY2Fubm90IGJlIG5vcm1hbGl6ZWQ6ICR7ZXJyb3IubWVzc2FnZX1gIGFzIExvY2FsaXplZFN0cmluZyxcbiAgICAgICk7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUh0dHBEaXNjb25uZWN0SGFuZGxlKCk6IHtcbiAgc2lnbmFsOiBBYm9ydFNpZ25hbDtcbiAgZGlzcG9zZTogKCkgPT4gdm9pZDtcbn0ge1xuICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIGxldCByZXF1ZXN0UmF3OiBGYXN0aWZ5UmVxdWVzdFtcInJhd1wiXSB8IHVuZGVmaW5lZDtcbiAgbGV0IHJlc3BvbnNlUmF3OiBGYXN0aWZ5UmVwbHlbXCJyYXdcIl0gfCB1bmRlZmluZWQ7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBjdHggPSBTb25hbXUuZ2V0Q29udGV4dCgpO1xuICAgIHJlcXVlc3RSYXcgPSBjdHgucmVxdWVzdD8ucmF3O1xuICAgIGlmIChjdHgudHJhbnNwb3J0ID09PSBcImh0dHBcIikgcmVzcG9uc2VSYXcgPSBjdHgucmVwbHkucmF3O1xuICB9IGNhdGNoIHtcbiAgICAvLyBEaXJlY3QgZnJhbWUgY2FsbHMgKGZvciBleGFtcGxlIHVuaXQgdGVzdHMpIGRvIG5vdCBoYXZlIGFuIEhUVFAgY29udGV4dC5cbiAgfVxuXG4gIGNvbnN0IGFib3J0ID0gKCkgPT4gYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gIGNvbnN0IGFib3J0T25JbmNvbXBsZXRlUmVzcG9uc2VDbG9zZSA9ICgpID0+IHtcbiAgICBpZiAoIXJlc3BvbnNlUmF3Py53cml0YWJsZUVuZGVkKSBhYm9ydCgpO1xuICB9O1xuXG4gIHJlcXVlc3RSYXc/Lm9uY2UoXCJhYm9ydGVkXCIsIGFib3J0KTtcbiAgcmVzcG9uc2VSYXc/Lm9uY2UoXCJjbG9zZVwiLCBhYm9ydE9uSW5jb21wbGV0ZVJlc3BvbnNlQ2xvc2UpO1xuXG4gIGlmIChyZXF1ZXN0UmF3Py5hYm9ydGVkIHx8IChyZXNwb25zZVJhdz8uZGVzdHJveWVkICYmICFyZXNwb25zZVJhdy53cml0YWJsZUVuZGVkKSkge1xuICAgIGFib3J0KCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHNpZ25hbDogYWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICBkaXNwb3NlOiAoKSA9PiB7XG4gICAgICByZXF1ZXN0UmF3Py5yZW1vdmVMaXN0ZW5lcihcImFib3J0ZWRcIiwgYWJvcnQpO1xuICAgICAgcmVzcG9uc2VSYXc/LnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIiwgYWJvcnRPbkluY29tcGxldGVSZXNwb25zZUNsb3NlKTtcbiAgICB9LFxuICB9O1xufVxuXG5jb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wicWdyaWRcIl0pO1xuY29uc3Qgb2F1dGhMb2dnZXIgPSBnZXRMb2dnZXIoW1wicWdyaWRcIiwgXCJvYXV0aFwiXSk7XG5cbmNsYXNzIFFncmlkRnJhbWVDbGFzcyBleHRlbmRzIEJhc2VGcmFtZUNsYXNzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJRZ3JpZFwiKTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyBxdWVyeShhcmdzOiBRdWVyeUlucHV0KTogUHJvbWlzZTxRdWVyeU91dHB1dD4ge1xuICAgIHJlamVjdEludmFsaWRDYWxsZXJTY2hlbWFzKGFyZ3MpO1xuICAgIGNvbnN0IGRpc2Nvbm5lY3QgPSBjcmVhdGVIdHRwRGlzY29ubmVjdEhhbmRsZSgpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoYXJncy5sb2dnZXIgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBRZ3JpZERpc3BhdGNoZXIucXVlcnkoYXJncywgZGlzY29ubmVjdC5zaWduYWwpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IHJlcXVlc3RMb2dJZCwgc3RlcEluZGV4IH0gPSBhd2FpdCBiZWZvcmVRdWVyeShhcmdzKTtcbiAgICAgIGxldCByZXN1bHQ6IFF1ZXJ5T3V0cHV0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgUWdyaWREaXNwYXRjaGVyLnF1ZXJ5KGFyZ3MsIGRpc2Nvbm5lY3Quc2lnbmFsKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGRpc2Nvbm5lY3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICBhd2FpdCBmaW5pc2hSdW5BYm9ydGVkKHJlcXVlc3RMb2dJZCwgYXJncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXdhaXQgZmluaXNoUnVuV2l0aEVycm9yKHJlcXVlc3RMb2dJZCwgKGUgYXMgRXJyb3IpLm1lc3NhZ2UsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGxpZmVjeWNsZSA9IGF3YWl0IGFmdGVyUXVlcnkocmVxdWVzdExvZ0lkLCBzdGVwSW5kZXgsIGFyZ3MsIHJlc3VsdCk7XG4gICAgICAgIGlmIChkaXNjb25uZWN0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgYXdhaXQgZmluaXNoUnVuQWJvcnRlZChyZXF1ZXN0TG9nSWQsIGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRvb2wtY2FsbCByZXF1ZXN0TG9nSWTsmYAgcHJvdmlkZXIgdGhyZWFkQ29vcmTripQg7ISc66GcIOuPheumveyggeycvOuhnCDsnKDsp4DtlZzri6QuXG4gICAgICAgIGNvbnN0IHRocmVhZENvb3JkID0gcmVzdWx0LnJ1bkNvbnRleHQ/LnRocmVhZENvb3JkO1xuICAgICAgICBjb25zdCBydW5Db250ZXh0ID1cbiAgICAgICAgICBsaWZlY3ljbGUucnVuQ29udGV4dCB8fCB0aHJlYWRDb29yZFxuICAgICAgICAgICAgPyB7IC4uLmxpZmVjeWNsZS5ydW5Db250ZXh0LCAuLi4odGhyZWFkQ29vcmQgPyB7IHRocmVhZENvb3JkIH0gOiB7fSkgfVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB7IC4uLnJlc3VsdCwgcnVuQ29udGV4dCB9O1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoYHF1ZXJ5IGFmdGVyUXVlcnkgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgICBpZiAoZGlzY29ubmVjdC5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgIGF3YWl0IGZpbmlzaFJ1bkFib3J0ZWQocmVxdWVzdExvZ0lkLCBhcmdzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhd2FpdCBmaW5pc2hSdW5XaXRoRXJyb3IocmVxdWVzdExvZ0lkLCAoZSBhcyBFcnJvcikubWVzc2FnZSwgYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcHJvdmlkZXIg7J2R64u17J2AIOyEseqzte2WiOycvOuvgOuhnCDroZzquYUg7J6l7JWg6rCAIOyDneyEsSDqsrDqs7zrpbwg642u7Ja07JOw7KeAIOyViuuKlOuLpC5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgZGlzY29ubmVjdC5kaXNwb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIHByZXBhcmVTdHJlYW0oYXJnczogUXVlcnlJbnB1dCk6IFByb21pc2U8eyBzdHJlYW1JZDogc3RyaW5nIH0+IHtcbiAgICByZWplY3RJbWFnZUdlbmVyYXRpb25TdHJlYW0oYXJncyk7XG4gICAgcmVqZWN0SW52YWxpZENhbGxlclNjaGVtYXMoYXJncyk7XG4gICAgY29uc3Qgc3RyZWFtSWQgPSBjcnlwdG8ucmFuZG9tVVVJRCgpO1xuICAgIHBlbmRpbmdTdHJlYW1zLnNldChzdHJlYW1JZCwgYXJncyk7XG4gICAgY29uc3QgZXhwaXJ5ID0gc2V0VGltZW91dCgoKSA9PiBwZW5kaW5nU3RyZWFtcy5kZWxldGUoc3RyZWFtSWQpLCAzMF8wMDApO1xuICAgIGV4cGlyeS51bnJlZj8uKCk7XG4gICAgcmV0dXJuIHsgc3RyZWFtSWQgfTtcbiAgfVxuXG4gIEBzdHJlYW0oeyB0eXBlOiBcInNzZVwiLCBldmVudHM6IFN0cmVhbUV2ZW50cyB9KVxuICBhc3luYyBxdWVyeVN0cmVhbShzdHJlYW1JZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYXJncyA9IHBlbmRpbmdTdHJlYW1zLmdldChzdHJlYW1JZCk7XG4gICAgcGVuZGluZ1N0cmVhbXMuZGVsZXRlKHN0cmVhbUlkKTtcbiAgICBpZiAoIWFyZ3MpIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgb3IgZXhwaXJlZCBzdHJlYW1JZFwiKTtcbiAgICByZWplY3RJbWFnZUdlbmVyYXRpb25TdHJlYW0oYXJncyk7XG5cbiAgICBjb25zdCBjdHggPSBTb25hbXUuZ2V0Q29udGV4dCgpO1xuICAgIGNvbnN0IHNzZSA9IGN0eC5jcmVhdGVTU0UoU3RyZWFtRXZlbnRzKTtcbiAgICBsZXQgdGhyZWFkSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBsZXQgdHVybklkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGV0IHN0cmVhbVJlc3VsdDogUXVlcnlPdXRwdXQgfCB1bmRlZmluZWQ7XG4gICAgbGV0IHN0cmVhbUVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgICBsZXQgY2xpZW50Q2xvc2VkID0gZmFsc2U7XG4gICAgY29uc3QgYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgY29uc3QgaW50ZXJydXB0T3BlbkFJID0gKCkgPT4ge1xuICAgICAgaWYgKHRocmVhZElkICYmIHR1cm5JZCkge1xuICAgICAgICBRZ3JpZERpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlcj8uaW50ZXJydXB0V29ya2VyVHVybih0aHJlYWRJZCwgdHVybklkKS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHNzZS5vbkNsb3NlKCgpID0+IHtcbiAgICAgIGNsaWVudENsb3NlZCA9IHRydWU7XG4gICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgIGludGVycnVwdE9wZW5BSSgpO1xuICAgIH0pO1xuXG4gICAgbGV0IHJ1bkluZm86IHsgcmVxdWVzdExvZ0lkOiBudW1iZXI7IHN0ZXBJbmRleDogbnVtYmVyIH0gfCB1bmRlZmluZWQ7XG4gICAgaWYgKGFyZ3MubG9nZ2VyICE9PSBmYWxzZSkge1xuICAgICAgLy8gcHJvdmlkZXIg7Iuk7ZaJIOyghCBydW5uaW5nIHJvdyDsg53shLHsl5Ag7Iuk7Yyo7ZWY66m0IGxvZ2dlZCDsmpTssq3snLzroZwg7KeE7ZaJ7ZWY7KeAIOyViuuKlOuLpC5cbiAgICAgIHJ1bkluZm8gPSBhd2FpdCBiZWZvcmVRdWVyeShhcmdzKTtcbiAgICB9XG5cbiAgICAvLyBiZWZvcmVRdWVyeSBEQiDsnpHsl4Ug7KSRIGNsb3Nl66W8IOuGk+y5mOyngCDslYrqs6AgcHJvdmlkZXIg7Iuk7ZaJIOyghOyXkCDrp4jqsJDtlZzri6QuXG4gICAgaWYgKGNsaWVudENsb3NlZCB8fCBzc2UuY2xvc2VkKSB7XG4gICAgICBpZiAocnVuSW5mbykgYXdhaXQgZmluaXNoUnVuQWJvcnRlZChydW5JbmZvLnJlcXVlc3RMb2dJZCwgYXJncyk7XG4gICAgICBhd2FpdCBzc2UuZW5kKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IFFncmlkRGlzcGF0Y2hlci5xdWVyeVN0cmVhbShcbiAgICAgICAgYXJncyxcbiAgICAgICAge1xuICAgICAgICAgIG9uRGVsdGE6ICh0ZXh0KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWNsaWVudENsb3NlZCAmJiAhc3NlLmNsb3NlZCkgc3NlLnB1Ymxpc2goXCJkZWx0YVwiLCB7IHRleHQgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvblRocmVhZElkOiAoaWQpID0+IHtcbiAgICAgICAgICAgIHRocmVhZElkID0gaWQ7XG4gICAgICAgICAgICBpZiAoKGNsaWVudENsb3NlZCB8fCBzc2UuY2xvc2VkKSAmJiB0dXJuSWQpIHtcbiAgICAgICAgICAgICAgaW50ZXJydXB0T3BlbkFJKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvblR1cm5JZDogKGlkKSA9PiB7XG4gICAgICAgICAgICB0dXJuSWQgPSBpZDtcbiAgICAgICAgICAgIGlmICgoY2xpZW50Q2xvc2VkIHx8IHNzZS5jbG9zZWQpICYmIHRocmVhZElkKSB7XG4gICAgICAgICAgICAgIGludGVycnVwdE9wZW5BSSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25Db21wbGV0ZTogKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgc3RyZWFtUmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb25FcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgICAgc3RyZWFtRXJyb3IgPSBlcnI7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgYWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc3RyZWFtRXJyb3IgPSBlIGFzIEVycm9yO1xuICAgIH1cblxuICAgIC8vIHByb3ZpZGVyIOqysOqzvOqwgCDsl4bripQgY2xvc2XripQg7KaJ7IucIGFib3J0ZWTroZwg66eI6rCQ7ZWc64ukLlxuICAgIGlmIChjbGllbnRDbG9zZWQgJiYgIXN0cmVhbVJlc3VsdCkge1xuICAgICAgaWYgKHJ1bkluZm8pIGF3YWl0IGZpbmlzaFJ1bkFib3J0ZWQocnVuSW5mby5yZXF1ZXN0TG9nSWQsIGFyZ3MpO1xuICAgICAgYXdhaXQgc3NlLmVuZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGRpc3BhdGNoZXIg7JmE66OMIO2bhCBsaWZlY3ljbGUg7LKY66asIChhd2FpdCDslYjsoIQpXG4gICAgaWYgKHN0cmVhbVJlc3VsdCkge1xuICAgICAgLy8gZGlzcGF0Y2hlciDqsIAg7Iuk7J2AIHRocmVhZCDsnqzsgqzsmqkg7KKM7ZGc64qUIGxvZ2dlciDshKTsoJXqs7wg66y06rSA7ZWY6rKMIO2ajOyGoe2VnOuLpC5cbiAgICAgIGNvbnN0IHRocmVhZENvb3JkID0gc3RyZWFtUmVzdWx0LnJ1bkNvbnRleHQ/LnRocmVhZENvb3JkO1xuICAgICAgbGV0IHJ1bkNvbnRleHQ6IFFncmlkUnVuQ29udGV4dCB8IHVuZGVmaW5lZCA9XG4gICAgICAgIHRocmVhZENvb3JkICE9PSB1bmRlZmluZWQgPyB7IHRocmVhZENvb3JkIH0gOiB1bmRlZmluZWQ7XG4gICAgICBpZiAocnVuSW5mbykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIGNsb3NlIO2bhCDrj4TssKntlZwg6rKw6rO864+EIHN0ZXAvdXNhZ2XripQg64Ko6riw65CYLCDslYTrnpjsl5DshJwg7LWc7KKFIHN0YXR1c+ulvCBhYm9ydGVk66GcIOuNruyWtOyTtOuLpC5cbiAgICAgICAgICBjb25zdCBsaWZlY3ljbGUgPSBhd2FpdCBhZnRlclF1ZXJ5KFxuICAgICAgICAgICAgcnVuSW5mby5yZXF1ZXN0TG9nSWQsXG4gICAgICAgICAgICBydW5JbmZvLnN0ZXBJbmRleCxcbiAgICAgICAgICAgIGFyZ3MsXG4gICAgICAgICAgICBzdHJlYW1SZXN1bHQsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBydW5Db250ZXh0ID1cbiAgICAgICAgICAgIGxpZmVjeWNsZS5ydW5Db250ZXh0IHx8IHRocmVhZENvb3JkXG4gICAgICAgICAgICAgID8geyAuLi5saWZlY3ljbGUucnVuQ29udGV4dCwgLi4uKHRocmVhZENvb3JkID8geyB0aHJlYWRDb29yZCB9IDoge30pIH1cbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAvLyBhZnRlclF1ZXJ56rCAIOynhO2WieuQmOuKlCDsgqzsnbQgY2xpZW506rCAIOuLq+2ejCDqsr3smrAg7JmE66OMIOyDge2DnOulvCBhYm9ydGVk66GcIOuQmOuPjOumsOuLpC5cbiAgICAgICAgICBpZiAoY2xpZW50Q2xvc2VkKSB7XG4gICAgICAgICAgICBhd2FpdCBmaW5pc2hSdW5BYm9ydGVkKHJ1bkluZm8ucmVxdWVzdExvZ0lkLCBhcmdzKTtcbiAgICAgICAgICAgIGF3YWl0IHNzZS5lbmQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoYHN0cmVhbSBhZnRlclF1ZXJ5IGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICAgICAgICBhd2FpdCBmaW5pc2hSdW5XaXRoRXJyb3IocnVuSW5mby5yZXF1ZXN0TG9nSWQsIChlIGFzIEVycm9yKS5tZXNzYWdlLCBhcmdzKTtcblxuICAgICAgICAgIGlmIChjbGllbnRDbG9zZWQpIHtcbiAgICAgICAgICAgIGF3YWl0IGZpbmlzaFJ1bkFib3J0ZWQocnVuSW5mby5yZXF1ZXN0TG9nSWQsIGFyZ3MpO1xuICAgICAgICAgICAgYXdhaXQgc3NlLmVuZCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFjbGllbnRDbG9zZWQgJiYgIXNzZS5jbG9zZWQpIHNzZS5wdWJsaXNoKFwiZG9uZVwiLCB7IC4uLnN0cmVhbVJlc3VsdCwgcnVuQ29udGV4dCB9KTtcbiAgICB9IGVsc2UgaWYgKHN0cmVhbUVycm9yKSB7XG4gICAgICBpZiAocnVuSW5mbykgYXdhaXQgZmluaXNoUnVuV2l0aEVycm9yKHJ1bkluZm8ucmVxdWVzdExvZ0lkLCBzdHJlYW1FcnJvci5tZXNzYWdlLCBhcmdzKTtcbiAgICAgIGlmICghY2xpZW50Q2xvc2VkICYmICFzc2UuY2xvc2VkKSBzc2UucHVibGlzaChcImVycm9yXCIsIHsgbWVzc2FnZTogc3RyZWFtRXJyb3IubWVzc2FnZSB9KTtcbiAgICB9IGVsc2UgaWYgKChjbGllbnRDbG9zZWQgfHwgc3NlLmNsb3NlZCkgJiYgcnVuSW5mbykge1xuICAgICAgYXdhaXQgZmluaXNoUnVuQWJvcnRlZChydW5JbmZvLnJlcXVlc3RMb2dJZCwgYXJncyk7XG4gICAgfVxuXG4gICAgYXdhaXQgc3NlLmVuZCgpO1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIGNyZWF0ZVJ1bihpbnB1dDogQ3JlYXRlUnVuSW5wdXQpOiBQcm9taXNlPHsgcmVxdWVzdExvZ0lkOiBudW1iZXIgfT4ge1xuICAgIGNvbnN0IHJlcXVlc3RMb2dJZCA9IGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5jcmVhdGVSdW4oe1xuICAgICAgdXNlcl9wcm9tcHQ6IGlucHV0LnVzZXJQcm9tcHQsXG4gICAgICByZXF1ZXN0ZWRfbW9kZWxfbmFtZTogaW5wdXQubW9kZWxOYW1lLFxuICAgICAgZWZmb3J0OiBpbnB1dC5lZmZvcnQsXG4gICAgICBwcm9qZWN0X25hbWU6IGlucHV0LnByb2plY3ROYW1lLFxuICAgICAgc3lzdGVtX3Byb21wdDogaW5wdXQuc3lzdGVtUHJvbXB0LFxuICAgICAgaGlzdG9yeTogaW5wdXQuaGlzdG9yeSA/IEpTT04ucGFyc2UoaW5wdXQuaGlzdG9yeSkgOiB1bmRlZmluZWQsXG4gICAgfSk7XG4gICAgcmV0dXJuIHsgcmVxdWVzdExvZ0lkIH07XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgYXBwZW5kU3RlcChpbnB1dDogQXBwZW5kU3RlcElucHV0KTogUHJvbWlzZTx7IHN0ZXBJZDogbnVtYmVyIH0+IHtcbiAgICBjb25zdCBzdGVwSWQgPSBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwuYXBwZW5kU3RlcChpbnB1dC5yZXF1ZXN0TG9nSWQsIHtcbiAgICAgIHN0ZXBfaW5kZXg6IGlucHV0LnN0ZXBJbmRleCxcbiAgICAgIHR5cGU6IGlucHV0LnR5cGUsXG4gICAgICBtb2RlbF9uYW1lOiBpbnB1dC5tb2RlbE5hbWUsXG4gICAgICByZXF1ZXN0ZWRfbW9kZWxfbmFtZTogaW5wdXQucmVxdWVzdGVkTW9kZWxOYW1lLFxuICAgICAgZmFsbGJhY2tfY291bnQ6IGlucHV0LmZhbGxiYWNrQ291bnQsXG4gICAgICBpbnB1dF90b2tlbnM6IGlucHV0LmlucHV0VG9rZW5zLFxuICAgICAgb3V0cHV0X3Rva2VuczogaW5wdXQub3V0cHV0VG9rZW5zLFxuICAgICAgY2FjaGVfcmVhZF90b2tlbnM6IGlucHV0LmNhY2hlUmVhZFRva2VucyxcbiAgICAgIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogaW5wdXQuY2FjaGVDcmVhdGlvblRva2VucyxcbiAgICAgIGNhY2hlX2NyZWF0aW9uXzVtX3Rva2VuczogaW5wdXQuY2FjaGVDcmVhdGlvbjVtVG9rZW5zLFxuICAgICAgY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zOiBpbnB1dC5jYWNoZUNyZWF0aW9uMWhUb2tlbnMsXG4gICAgICBjb3N0X3VzZDogaW5wdXQuY29zdFVzZCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogTWF0aC5yb3VuZChpbnB1dC5jb3N0VXNkICogTUlDUk9fVVNEKSxcbiAgICAgIGNvc3Rfc291cmNlOiBpbnB1dC5jb3N0U291cmNlLFxuICAgICAgZHVyYXRpb25fbXM6IGlucHV0LmR1cmF0aW9uTXMsXG4gICAgICB0dGZ0X21zOiBpbnB1dC50dGZ0TXMgPz8gbnVsbCxcbiAgICAgIGZpbmlzaF9yZWFzb246IGlucHV0LmZpbmlzaFJlYXNvbixcbiAgICAgIHJlYXNvbmluZ190ZXh0OiBpbnB1dC5yZWFzb25pbmdUZXh0LFxuICAgICAgcmVhc29uaW5nX3Rva2VuczogaW5wdXQucmVhc29uaW5nVG9rZW5zLFxuICAgICAgdG9vbF9jYWxsX2luZGV4OiBpbnB1dC50b29sQ2FsbEluZGV4LFxuICAgICAgdG9vbF9jYWxsX2lkOiBpbnB1dC50b29sQ2FsbElkLFxuICAgICAgdG9vbF9uYW1lOiBpbnB1dC50b29sTmFtZSxcbiAgICAgIHRvb2xfYXJnczogaW5wdXQudG9vbEFyZ3MsXG4gICAgICB0b29sX3Jlc3VsdDogaW5wdXQudG9vbFJlc3VsdCxcbiAgICAgIHRvb2xfZHVyYXRpb25fbXM6IGlucHV0LnRvb2xEdXJhdGlvbk1zLFxuICAgICAgZXJyb3I6IGlucHV0LmVycm9yLFxuICAgIH0pO1xuICAgIHJldHVybiB7IHN0ZXBJZCB9O1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIGZpbmlzaFJ1bihpbnB1dDogRmluaXNoUnVuSW5wdXQpOiBQcm9taXNlPHsgb2s6IGJvb2xlYW4gfT4ge1xuICAgIGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5maW5pc2hSdW4oaW5wdXQucmVxdWVzdExvZ0lkLCB7XG4gICAgICBzdGF0dXM6IGlucHV0LnN0YXR1cyxcbiAgICAgIHJlc3BvbnNlOiBpbnB1dC5yZXNwb25zZSxcbiAgICAgIHRva2VuX25hbWU6IGlucHV0LnRva2VuTmFtZSxcbiAgICAgIG1vZGVsX25hbWU6IGlucHV0Lm1vZGVsTmFtZSxcbiAgICAgIHJlcXVlc3RlZF9tb2RlbF9uYW1lOiBpbnB1dC5yZXF1ZXN0ZWRNb2RlbE5hbWUsXG4gICAgICBmYWxsYmFja19jb3VudDogaW5wdXQuZmFsbGJhY2tDb3VudCxcbiAgICAgIGlucHV0X3Rva2VuczogaW5wdXQudG90YWxJbnB1dFRva2VucyxcbiAgICAgIG91dHB1dF90b2tlbnM6IGlucHV0LnRvdGFsT3V0cHV0VG9rZW5zLFxuICAgICAgY2FjaGVfcmVhZF90b2tlbnM6IGlucHV0LnRvdGFsQ2FjaGVSZWFkVG9rZW5zLFxuICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBpbnB1dC50b3RhbENhY2hlQ3JlYXRpb25Ub2tlbnMsXG4gICAgICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM6IGlucHV0LnRvdGFsQ2FjaGVDcmVhdGlvbjVtVG9rZW5zLFxuICAgICAgY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zOiBpbnB1dC50b3RhbENhY2hlQ3JlYXRpb24xaFRva2VucyxcbiAgICAgIGNvc3RfdXNkOiBpbnB1dC5jb3N0VXNkID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBNYXRoLnJvdW5kKGlucHV0LmNvc3RVc2QgKiBNSUNST19VU0QpLFxuICAgICAgY29zdF9zb3VyY2U6IGlucHV0LmNvc3RTb3VyY2UsXG4gICAgICBkdXJhdGlvbl9tczogaW5wdXQudG90YWxEdXJhdGlvbk1zLFxuICAgICAgaGlzdG9yeTogaW5wdXQuaGlzdG9yeSA/IEpTT04ucGFyc2UoaW5wdXQuaGlzdG9yeSkgOiB1bmRlZmluZWQsXG4gICAgICBlcnJvcl9tZXNzYWdlOiBpbnB1dC5lcnJvck1lc3NhZ2UsXG4gICAgfSk7XG4gICAgcmV0dXJuIHsgb2s6IHRydWUgfTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIkdFVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLXF1ZXJ5XCJdIH0pXG4gIGFzeW5jIHN0YXRzKCk6IFByb21pc2U8VG9rZW5TdGF0c1tdPiB7XG4gICAgcmV0dXJuIFFncmlkRGlzcGF0Y2hlci5nZXRTdGF0cygpO1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiR0VUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stcXVlcnlcIl0gfSlcbiAgYXN5bmMgdG90YWxDb3N0KHRva2VuTmFtZT86IHN0cmluZyk6IFByb21pc2U8eyB1c2Q6IG51bWJlciB9PiB7XG4gICAgcmV0dXJuIHsgdXNkOiBhd2FpdCBSZXF1ZXN0TG9nTW9kZWwudG90YWxDb3N0KHsgdG9rZW5fbmFtZTogdG9rZW5OYW1lIH0pIH07XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSB9KVxuICBhc3luYyBwcm9qZWN0TmFtZXMoKTogUHJvbWlzZTx7IG5hbWVzOiBzdHJpbmdbXSB9PiB7XG4gICAgcmV0dXJuIHsgbmFtZXM6IGF3YWl0IFJlcXVlc3RMb2dNb2RlbC5kaXN0aW5jdFByb2plY3ROYW1lcygpIH07XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgYWRkVG9rZW4oXG4gICAgcHJvdmlkZXI6IHN0cmluZyxcbiAgICBjcmVkZW50aWFsczogVG9rZW5DcmVkZW50aWFscyxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICk6IFByb21pc2U8eyBhZGRlZDogYm9vbGVhbiB9PiB7XG4gICAgYXdhaXQgVG9rZW5Nb2RlbC5zYXZlKFtcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZXIsXG4gICAgICAgIGNyZWRlbnRpYWxzLFxuICAgICAgICBuYW1lLFxuICAgICAgfSxcbiAgICBdKTtcbiAgICByZXR1cm4geyBhZGRlZDogdHJ1ZSB9O1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiXSB9KVxuICBhc3luYyB1cGRhdGVUb2tlbihcbiAgICBpZDogbnVtYmVyLFxuICAgIG5hbWU/OiBzdHJpbmcsXG4gICAgcXVvdGFUaHJlc2hvbGQ/OiBudW1iZXIgfCBudWxsLFxuICAgIHdlaWdodD86IG51bWJlcixcbiAgKTogUHJvbWlzZTx7IHVwZGF0ZWQ6IGJvb2xlYW4gfT4ge1xuICAgIGlmIChcbiAgICAgIHF1b3RhVGhyZXNob2xkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHF1b3RhVGhyZXNob2xkICE9PSBudWxsICYmXG4gICAgICAoIU51bWJlci5pc0ludGVnZXIocXVvdGFUaHJlc2hvbGQpIHx8IHF1b3RhVGhyZXNob2xkIDwgMSB8fCBxdW90YVRocmVzaG9sZCA+IDEwMClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKFxuICAgICAgICBcInF1b3RhVGhyZXNob2xkIG11c3QgYmUgYW4gaW50ZWdlciBiZXR3ZWVuIDEgYW5kIDEwMCwgb3IgbnVsbFwiIGFzIExvY2FsaXplZFN0cmluZyxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh3ZWlnaHQgIT09IHVuZGVmaW5lZCAmJiAoIU51bWJlci5pc0ludGVnZXIod2VpZ2h0KSB8fCB3ZWlnaHQgPCAxIHx8IHdlaWdodCA+IDEwMCkpIHtcbiAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKFxuICAgICAgICBcIndlaWdodCBtdXN0IGJlIGFuIGludGVnZXIgYmV0d2VlbiAxIGFuZCAxMDBcIiBhcyBMb2NhbGl6ZWRTdHJpbmcsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHBhdGNoOiBUb2tlblVwZGF0ZUZpZWxkcyA9IHt9O1xuICAgIGlmIChuYW1lICE9PSB1bmRlZmluZWQpIHBhdGNoLm5hbWUgPSBuYW1lO1xuICAgIGlmIChxdW90YVRocmVzaG9sZCAhPT0gdW5kZWZpbmVkKSBwYXRjaC5xdW90YV90aHJlc2hvbGQgPSBxdW90YVRocmVzaG9sZDtcbiAgICBpZiAod2VpZ2h0ICE9PSB1bmRlZmluZWQpIHBhdGNoLndlaWdodCA9IHdlaWdodDtcbiAgICBpZiAoT2JqZWN0LmtleXMocGF0Y2gpLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHsgdXBkYXRlZDogZmFsc2UgfTtcblxuICAgIGNvbnN0IHVwZGF0ZWQgPSBhd2FpdCBUb2tlbk1vZGVsLnVwZGF0ZUZpZWxkcyhpZCwgcGF0Y2gpO1xuICAgIHJldHVybiB7IHVwZGF0ZWQ6IHVwZGF0ZWQgPiAwIH07XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgcmVtb3ZlVG9rZW4oaWQ6IG51bWJlcik6IFByb21pc2U8eyByZW1vdmVkOiBib29sZWFuIH0+IHtcbiAgICBjb25zdCBlbnRyeSA9IGF3YWl0IFRva2VuTW9kZWwuZmluZE9uZShcIkFcIiwgeyBpZCB9KTtcbiAgICBpZiAoIWVudHJ5KSByZXR1cm4geyByZW1vdmVkOiBmYWxzZSB9O1xuICAgIGF3YWl0IFRva2VuTW9kZWwuZGVsKFtlbnRyeS5pZF0pO1xuICAgIHJldHVybiB7IHJlbW92ZWQ6IHRydWUgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiDthqDtgbAg7Zmc7ISx7ZmUL+u5hO2ZnOyEse2ZlCDthqDquIAgRELsnZggYWN0aXZlIO2VhOuTnCDsl4XrjbDsnbTtirhcbiAgICovXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyB0b2dnbGVUb2tlbihpZDogbnVtYmVyKTogUHJvbWlzZTx7IGFjdGl2ZTogYm9vbGVhbiB9PiB7XG4gICAgY29uc3QgZW50cnkgPSBhd2FpdCBUb2tlbk1vZGVsLmZpbmRPbmUoXCJBXCIsIHsgaWQgfSk7XG4gICAgaWYgKCFlbnRyeSkgcmV0dXJuIHsgYWN0aXZlOiBmYWxzZSB9O1xuXG4gICAgY29uc3QgbmV3QWN0aXZlID0gIWVudHJ5LmFjdGl2ZTtcbiAgICBhd2FpdCBUb2tlbk1vZGVsLnNhdmUoW1xuICAgICAge1xuICAgICAgICBpZCxcbiAgICAgICAgcHJvdmlkZXI6IGVudHJ5LnByb3ZpZGVyLFxuICAgICAgICBjcmVkZW50aWFsczogZW50cnkuY3JlZGVudGlhbHMsXG4gICAgICAgIGFjdGl2ZTogbmV3QWN0aXZlLFxuICAgICAgICBuYW1lOiBlbnRyeS5uYW1lLFxuICAgICAgfSxcbiAgICBdKTtcbiAgICByZXR1cm4geyBhY3RpdmU6IG5ld0FjdGl2ZSB9O1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIG9hdXRoU3RhcnQobmFtZTogc3RyaW5nKTogUHJvbWlzZTxPQXV0aFN0YXJ0UmVzdWx0PiB7XG4gICAgY29uc3QgeyBjb2RlVmVyaWZpZXIsIGNvZGVDaGFsbGVuZ2UsIHN0YXRlIH0gPSBnZW5lcmF0ZVBLQ0UoKTtcblxuICAgIGNvbnN0IHJlZGlyZWN0VXJpID0gZ2V0T0F1dGhSZWRpcmVjdFVyaSgpO1xuICAgIGNvbnN0IGF1dGhVcmwgPSBidWlsZEF1dGhVcmwoY29kZUNoYWxsZW5nZSwgc3RhdGUsIHJlZGlyZWN0VXJpKTtcblxuICAgIGF3YWl0IHNldE9BdXRoU3RhdGUoc3RhdGUsIHsgY29kZVZlcmlmaWVyLCBuYW1lLCByZWRpcmVjdFVyaSB9KTtcblxuICAgIHJldHVybiB7IGF1dGhVcmwgfTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZU9BdXRoQ2FsbGJhY2soY29kZTogc3RyaW5nLCBzdGF0ZTogc3RyaW5nLCByZXBseTogRmFzdGlmeVJlcGx5KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGVuZGluZyA9IGF3YWl0IGdldE9BdXRoU3RhdGUoc3RhdGUpO1xuICAgIGlmICghcGVuZGluZykge1xuICAgICAgbG9nZ2VyLndhcm4oXCJvYXV0aCBjYWxsYmFjazogaW52YWxpZF9zdGF0ZVwiKTtcbiAgICAgIHJldHVybiByZXBseS5yZWRpcmVjdChcIi8/b2F1dGg9ZXJyb3ImcmVhc29uPWludmFsaWRfc3RhdGVcIik7XG4gICAgfVxuICAgIGF3YWl0IGRlbGV0ZU9BdXRoU3RhdGUoc3RhdGUpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRva2VucyA9IGF3YWl0IGV4Y2hhbmdlQ29kZUZvclRva2VucyhcbiAgICAgICAgY29kZSxcbiAgICAgICAgcGVuZGluZy5jb2RlVmVyaWZpZXIsXG4gICAgICAgIHN0YXRlLFxuICAgICAgICBwZW5kaW5nLnJlZGlyZWN0VXJpLFxuICAgICAgKTtcblxuICAgICAgaWYgKHRva2Vucy5hY2NvdW50VXVpZCkge1xuICAgICAgICBjb25zdCBvbGRFbnRyaWVzID0gYXdhaXQgVG9rZW5Nb2RlbC5maW5kQnlBY2NvdW50SWRlbnRpZmllcihcbiAgICAgICAgICBcIkFcIixcbiAgICAgICAgICBcImFudGhyb3BpY1wiLFxuICAgICAgICAgIHRva2Vucy5hY2NvdW50VXVpZCxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG9sZEVudHJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGF3YWl0IFRva2VuTW9kZWwuZGVsKG9sZEVudHJpZXMubWFwKChvKSA9PiBvLmlkKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXdhaXQgVG9rZW5Nb2RlbC5zYXZlKFtcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGVyOiBcImFudGhyb3BpY1wiLFxuICAgICAgICAgIGNyZWRlbnRpYWxzOiB7XG4gICAgICAgICAgICBhY2Nlc3NUb2tlbjogdG9rZW5zLmFjY2Vzc1Rva2VuLFxuICAgICAgICAgICAgcmVmcmVzaFRva2VuOiB0b2tlbnMucmVmcmVzaFRva2VuLFxuICAgICAgICAgICAgZXhwaXJlc0F0OiB0b2tlbnMuZXhwaXJlc0F0ID8/IDAsXG4gICAgICAgICAgICBhY2NvdW50VXVpZDogdG9rZW5zLmFjY291bnRVdWlkID8/IFwiXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBuYW1lOiBwZW5kaW5nLm5hbWUsXG4gICAgICAgIH0sXG4gICAgICBdKTtcblxuICAgICAgcmV0dXJuIHJlcGx5LnJlZGlyZWN0KGAvP29hdXRoPXN1Y2Nlc3MmbmFtZT0ke2VuY29kZVVSSUNvbXBvbmVudChwZW5kaW5nLm5hbWUpfWApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiByZXBseS5yZWRpcmVjdChgLz9vYXV0aD1lcnJvciZyZWFzb249JHtlbmNvZGVVUklDb21wb25lbnQoKGUgYXMgRXJyb3IpLm1lc3NhZ2UpfWApO1xuICAgIH1cbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyBvYXV0aFN0YXJ0T3BlbkFJKG5hbWU6IHN0cmluZyk6IFByb21pc2U8T0F1dGhTdGFydFJlc3VsdD4ge1xuICAgIGlmICghUWdyaWREaXNwYXRjaGVyLm9wZW5haURpc3BhdGNoZXIpIHRocm93IG5ldyBFcnJvcihcIk9wZW5BSSBkaXNwYXRjaGVyIG5vdCBpbml0aWFsaXplZFwiKTtcbiAgICBjb25zdCB7IGF1dGhVcmwgfSA9IGF3YWl0IFFncmlkRGlzcGF0Y2hlci5vcGVuYWlEaXNwYXRjaGVyLnN0YXJ0QnJvd3NlckxvZ2luKG5hbWUpO1xuXG4gICAgLy8gZmlyZS1hbmQtZm9yZ2V0OiBjb2RleCBsb2dpbiDsmYTro4wg64yA6riwIOKGkiDthqDtgbAg7KCA7J6lXG4gICAgUWdyaWREaXNwYXRjaGVyLm9wZW5haURpc3BhdGNoZXJcbiAgICAgIC5jb21wbGV0ZUJyb3dzZXJMb2dpbigpXG4gICAgICAudGhlbihhc3luYyAoY3JlZHMpID0+IHtcbiAgICAgICAgaWYgKGNyZWRzLmFjY291bnRJZCkge1xuICAgICAgICAgIGNvbnN0IG9sZEVudHJpZXMgPSBhd2FpdCBUb2tlbk1vZGVsLmZpbmRCeUFjY291bnRJZGVudGlmaWVyKFxuICAgICAgICAgICAgXCJBXCIsXG4gICAgICAgICAgICBcIm9wZW5haVwiLFxuICAgICAgICAgICAgY3JlZHMuYWNjb3VudElkLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG9sZEVudHJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgYXdhaXQgVG9rZW5Nb2RlbC5kZWwob2xkRW50cmllcy5tYXAoKG8pID0+IG8uaWQpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgVG9rZW5Nb2RlbC5zYXZlKFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlcjogXCJvcGVuYWlcIixcbiAgICAgICAgICAgIGNyZWRlbnRpYWxzOiB7XG4gICAgICAgICAgICAgIGFjY2Vzc1Rva2VuOiBjcmVkcy5hY2Nlc3NUb2tlbixcbiAgICAgICAgICAgICAgcmVmcmVzaFRva2VuOiBjcmVkcy5yZWZyZXNoVG9rZW4sXG4gICAgICAgICAgICAgIGlkVG9rZW46IGNyZWRzLmlkVG9rZW4sXG4gICAgICAgICAgICAgIGFjY2Vzc1Rva2VuRXhwaXJlc0F0OiBEYXRlLm5vdygpICsgMTAgKiAyNCAqIDM2MDAgKiAxMDAwLFxuICAgICAgICAgICAgICBhY2NvdW50SWQ6IGNyZWRzLmFjY291bnRJZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuICAgICAgICBsb2dnZXIuaW5mbyhgT3BlbkFJIHRva2VuIHNhdmVkIGZvciAke25hbWV9YCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBPcGVuQUkgYnJvd3NlciBsb2dpbiBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgICB9KTtcblxuICAgIHJldHVybiB7IGF1dGhVcmwgfTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIkdFVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLXF1ZXJ5XCJdIH0pXG4gIGFzeW5jIHVzYWdlKHRva2VuSWQ/OiBudW1iZXIpOiBQcm9taXNlPFVzYWdlUmVzcG9uc2U+IHtcbiAgICBjb25zdCB7IHJvd3M6IGFsbFRva2VucyB9ID0gYXdhaXQgVG9rZW5Nb2RlbC5maW5kTWFueShcIkFcIik7XG4gICAgY29uc3QgZW50cnkgPSB0b2tlbklkXG4gICAgICA/IGFsbFRva2Vucy5maW5kKChlKSA9PiBlLmlkID09PSB0b2tlbklkKVxuICAgICAgOiBhbGxUb2tlbnMuZmluZExhc3QoKGUpID0+IGUuYWN0aXZlICYmIGUucHJvdmlkZXIgPT09IFwiYW50aHJvcGljXCIpO1xuXG4gICAgaWYgKCFlbnRyeSkgcmV0dXJuIHsgZXJyb3I6IFwiTk9UX0ZPVU5EXCIgfTtcblxuICAgIGlmIChlbnRyeS5wcm92aWRlciA9PT0gXCJvcGVuYWlcIikge1xuICAgICAgaWYgKCFlbnRyeS5hY3RpdmUpIHtcbiAgICAgICAgcmV0dXJuIHsgcHJvdmlkZXI6IFwib3BlbmFpXCIsIGZpdmVIb3VyOiBudWxsLCBzZXZlbkRheTogbnVsbCB9O1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByYXcgPSBhd2FpdCBRZ3JpZERpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlcj8uZ2V0UmF0ZUxpbWl0c0J5VG9rZW5JZChlbnRyeS5pZCk7XG4gICAgICAgIGNvbnN0IHJsID0gcmF3Py5kYXRhLnJhdGVMaW1pdHM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcHJvdmlkZXI6IFwib3BlbmFpXCIsXG4gICAgICAgICAgZml2ZUhvdXI6IHJsPy5wcmltYXJ5XG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICB1dGlsaXphdGlvbjogcmwucHJpbWFyeS51c2VkUGVyY2VudCxcbiAgICAgICAgICAgICAgICByZXNldHNBdDogdW5peFNlY29uZHNUb0lzbyhybC5wcmltYXJ5LnJlc2V0c0F0KSxcbiAgICAgICAgICAgICAgICB3aW5kb3dEdXJhdGlvbk1pbnM6IHJsLnByaW1hcnkud2luZG93RHVyYXRpb25NaW5zLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgc2V2ZW5EYXk6IHJsPy5zZWNvbmRhcnlcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIHV0aWxpemF0aW9uOiBybC5zZWNvbmRhcnkudXNlZFBlcmNlbnQsXG4gICAgICAgICAgICAgICAgcmVzZXRzQXQ6IHVuaXhTZWNvbmRzVG9Jc28ocmwuc2Vjb25kYXJ5LnJlc2V0c0F0KSxcbiAgICAgICAgICAgICAgICB3aW5kb3dEdXJhdGlvbk1pbnM6IHJsLnNlY29uZGFyeS53aW5kb3dEdXJhdGlvbk1pbnMsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgfTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHsgZXJyb3I6IGBPcGVuQUkgdXNhZ2UgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZW50cnkucHJvdmlkZXIgIT09IFwiYW50aHJvcGljXCIpIHtcbiAgICAgIHJldHVybiB7IGVycm9yOiBgdXNhZ2UgQVBJIG5vdCBzdXBwb3J0ZWQgZm9yIHByb3ZpZGVyOiAke2VudHJ5LnByb3ZpZGVyfWAgfTtcbiAgICB9XG5cbiAgICBsZXQgYWNjZXNzVG9rZW4gPSBnZXRBY2Nlc3NUb2tlbihlbnRyeS5jcmVkZW50aWFscyk7XG4gICAgY29uc3QgaXNFeHBpcmVkID0gZ2V0RXhwaXJlc0F0KGVudHJ5LmNyZWRlbnRpYWxzKSA8IERhdGUubm93KCk7XG5cbiAgICBpZiAoaXNFeHBpcmVkICYmIGdldFJlZnJlc2hUb2tlbihlbnRyeS5jcmVkZW50aWFscykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGFjY2Vzc1Rva2VuID0gYXdhaXQgdGhpcy5yZWZyZXNoVG9rZW4oZW50cnkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBvYXV0aExvZ2dlci53YXJuKGByZWZyZXNoIGZhaWxlZCBmb3IgJHtlbnRyeS5uYW1lfTogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICAgICAgcmV0dXJuIHsgZXJyb3I6IFwicmUtbG9naW4gcmVxdWlyZWRcIiB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJhdyA9IGF3YWl0IGZldGNoVXNhZ2UoYWNjZXNzVG9rZW4pO1xuICAgIGlmIChyYXcuZXJyb3IgJiYgZ2V0UmVmcmVzaFRva2VuKGVudHJ5LmNyZWRlbnRpYWxzKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYWNjZXNzVG9rZW4gPSBhd2FpdCB0aGlzLnJlZnJlc2hUb2tlbihlbnRyeSk7XG4gICAgICAgIGNvbnN0IHJldHJpZWQgPSBhd2FpdCBmZXRjaFVzYWdlKGFjY2Vzc1Rva2VuKTtcbiAgICAgICAgaWYgKHJldHJpZWQuZXJyb3IpIHJldHVybiB7IGVycm9yOiByZXRyaWVkLmVycm9yIH07XG4gICAgICAgIHJldHVybiBjb252ZXJ0QW50aHJvcGljVXNhZ2UocmV0cmllZCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIG9hdXRoTG9nZ2VyLndhcm4oYHJlZnJlc2ggZmFpbGVkIGZvciAke2VudHJ5Lm5hbWV9OiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgICByZXR1cm4geyBlcnJvcjogXCJyZS1sb2dpbiByZXF1aXJlZFwiIH07XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyYXcuZXJyb3IpIHJldHVybiB7IGVycm9yOiByYXcuZXJyb3IgfTtcbiAgICByZXR1cm4gY29udmVydEFudGhyb3BpY1VzYWdlKHJhdyk7XG4gIH1cblxuICBhc3luYyByZWZyZXNoVG9rZW4odG9rZW46IFRva2VuU3Vic2V0QSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgY3JlZHMgPSB0b2tlbi5jcmVkZW50aWFscztcbiAgICBjb25zdCBydCA9IGdldFJlZnJlc2hUb2tlbihjcmVkcyk7XG4gICAgaWYgKCFydCkgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVmcmVzaCB0b2tlblwiKTtcbiAgICBjb25zdCByZWZyZXNoZWQgPSBhd2FpdCByZWZyZXNoQWNjZXNzVG9rZW4ocnQpO1xuICAgIGNvbnN0IHVwZGF0ZWQgPSBUb2tlbkNyZWRlbnRpYWxzLnBhcnNlKHtcbiAgICAgIC4uLmNyZWRzLFxuICAgICAgYWNjZXNzVG9rZW46IHJlZnJlc2hlZC5hY2Nlc3NUb2tlbixcbiAgICAgIHJlZnJlc2hUb2tlbjogcmVmcmVzaGVkLnJlZnJlc2hUb2tlbixcbiAgICAgIGV4cGlyZXNBdDogcmVmcmVzaGVkLmV4cGlyZXNBdCxcbiAgICB9KTtcbiAgICBhd2FpdCBUb2tlbk1vZGVsLnNhdmUoW1xuICAgICAge1xuICAgICAgICBpZDogdG9rZW4uaWQsXG4gICAgICAgIHByb3ZpZGVyOiB0b2tlbi5wcm92aWRlcixcbiAgICAgICAgY3JlZGVudGlhbHM6IHVwZGF0ZWQsXG4gICAgICAgIG5hbWU6IHRva2VuLm5hbWUsXG4gICAgICB9LFxuICAgIF0pO1xuICAgIHJldHVybiByZWZyZXNoZWQuYWNjZXNzVG9rZW47XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSB9KVxuICBhc3luYyBoZWFsdGgoKTogUHJvbWlzZTxIZWFsdGhSZXNwb25zZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IFwib2tcIixcbiAgICAgIGFjdGl2ZVRva2VuczogUWdyaWREaXNwYXRjaGVyLnRva2Vucy5zaXplLFxuICAgICAgc3Vic2NyaWJlcjogUWdyaWREaXNwYXRjaGVyLnN1YnNjcmliZXI/LnN0YXR1cygpID8/IG51bGwsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgUWdyaWRGcmFtZSA9IG5ldyBRZ3JpZEZyYW1lQ2xhc3MoKTtcblxuZnVuY3Rpb24gY29udmVydEFudGhyb3BpY1VzYWdlKHJhdzogQW50aHJvcGljVXNhZ2VSYXcpOiBVc2FnZVJlc3BvbnNlIHtcbiAgcmV0dXJuIHtcbiAgICBwcm92aWRlcjogXCJhbnRocm9waWNcIixcbiAgICBmaXZlSG91cjogcmF3LmZpdmVfaG91clxuICAgICAgPyB7IHV0aWxpemF0aW9uOiByYXcuZml2ZV9ob3VyLnV0aWxpemF0aW9uLCByZXNldHNBdDogcmF3LmZpdmVfaG91ci5yZXNldHNfYXQgfVxuICAgICAgOiBudWxsLFxuICAgIHNldmVuRGF5OiByYXcuc2V2ZW5fZGF5XG4gICAgICA/IHsgdXRpbGl6YXRpb246IHJhdy5zZXZlbl9kYXkudXRpbGl6YXRpb24sIHJlc2V0c0F0OiByYXcuc2V2ZW5fZGF5LnJlc2V0c19hdCB9XG4gICAgICA6IG51bGwsXG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0RBLE1BQU0saUNBQWlCLElBQUksSUFBd0I7QUFHbkQs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
|