@cartanova/qgrid-cli 2.7.4 → 2.7.6
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/bundle/dist/application/qgrid/qgrid.dispatcher.js +7 -3
- package/bundle/dist/application/qgrid/qgrid.frame.js +27 -11
- package/bundle/dist/application/qgrid/qgrid.types.js +2 -1
- package/bundle/dist/application/qgrid/token-subscriber.js +19 -1
- package/bundle/dist/application/qgrid/token-window-keepalive.js +153 -0
- package/bundle/dist/application/setting/setting.constant.js +11 -1
- package/bundle/dist/application/token/token.model.js +18 -1
- package/bundle/dist/migrations/20260819102011_alter_tokens_alter1.js +13 -0
- package/bundle/dist/sonamu.config.js +9 -1
- package/bundle/dist/utils/providers/anthropic/anthropic-dispatcher.js +7 -4
- package/bundle/dist/utils/providers/openai/openai-dispatcher.js +11 -3
- package/bundle/src/application/qgrid/qgrid.dispatcher.test.ts +51 -0
- package/bundle/src/application/qgrid/qgrid.dispatcher.ts +14 -4
- package/bundle/src/application/qgrid/qgrid.frame.test.ts +58 -0
- package/bundle/src/application/qgrid/qgrid.frame.ts +39 -12
- package/bundle/src/application/qgrid/qgrid.types.ts +2 -0
- package/bundle/src/application/qgrid/token-subscriber.test.ts +112 -0
- package/bundle/src/application/qgrid/token-subscriber.ts +35 -0
- package/bundle/src/application/qgrid/token-window-keepalive.test.ts +223 -0
- package/bundle/src/application/qgrid/token-window-keepalive.ts +227 -0
- package/bundle/src/application/setting/setting.constant.test.ts +10 -0
- package/bundle/src/application/setting/setting.constant.ts +11 -1
- package/bundle/src/application/sonamu.generated.http +2 -0
- package/bundle/src/application/token/token.entity.json +8 -1
- package/bundle/src/application/token/token.model.test.ts +37 -0
- package/bundle/src/application/token/token.model.ts +20 -0
- package/bundle/src/migrations/20260819102011_alter_tokens_alter1.ts +13 -0
- package/bundle/src/sonamu.config.ts +14 -0
- package/bundle/src/utils/providers/anthropic/anthropic-dispatcher.test.ts +46 -0
- package/bundle/src/utils/providers/anthropic/anthropic-dispatcher.ts +13 -4
- package/bundle/src/utils/providers/common/provider-dispatcher.ts +2 -0
- package/bundle/src/utils/providers/openai/openai-dispatcher.test.ts +30 -0
- package/bundle/src/utils/providers/openai/openai-dispatcher.ts +17 -1
- package/bundle/web-dist/client/assets/index-BbOyk01G.js +106 -0
- package/bundle/web-dist/client/assets/{logs-UlTjUAUB.js → logs-B7Pc88bf.js} +1 -1
- package/bundle/web-dist/client/assets/{monit-CVNZnd8j.js → monit-CzMV4lZf.js} +1 -1
- package/bundle/web-dist/client/assets/{routes-CF7Jlmfi.js → routes-COWTRxZo.js} +1 -1
- package/bundle/web-dist/client/assets/settings-Dpaosy-o.js +1 -0
- package/bundle/web-dist/client/assets/{show-CGhg0fbn.js → show-YvdybkKd.js} +1 -1
- package/bundle/web-dist/client/assets/{tokens-DaEtcsoL.js → tokens-DynVDx0c.js} +1 -1
- package/bundle/web-dist/client/assets/{use-oauth-login-flow-Eovfx07A.js → use-oauth-login-flow-OzmHElsE.js} +1 -1
- package/bundle/web-dist/client/index.html +1 -1
- package/bundle/web-dist/server/assets/{settings-nCv71sax.js → settings-CIYR7h3G.js} +1 -0
- package/bundle/web-dist/server/entry-server.generated.js +96 -51
- package/package.json +3 -2
- package/bundle/web-dist/client/assets/index-CPYQIUqO.js +0 -106
- package/bundle/web-dist/client/assets/settings-N-8sXHl6.js +0 -1
|
@@ -94,6 +94,7 @@ const QueryInput = z.looseObject({
|
|
|
94
94
|
serviceTier: ServiceTier.optional(),
|
|
95
95
|
history: z.string().optional(),
|
|
96
96
|
projectName: z.string().optional(),
|
|
97
|
+
tokenName: z.string().optional(),
|
|
97
98
|
cacheAffinityKey: z.string().regex(/^[0-9a-f]{64}$/).optional(),
|
|
98
99
|
logger: z.boolean().optional(),
|
|
99
100
|
runContext: QgridRunContext.optional(),
|
|
@@ -288,4 +289,4 @@ function maskToken(token) {
|
|
|
288
289
|
//#endregion
|
|
289
290
|
export { AppendStepInput, CostSource, CreateRunInput, Effort, FinishReason, FinishRunInput, HealthResponse, ImageGenerationOptions, ImageGenerationQuality, ImageGenerationSize, MAX_QUERY_TIMEOUT_MS, ModelFallback, OAuthStartResult, ProcessError, ProviderStartupState, QgridContent, QgridInputPart, QgridRunContext, QgridThreadCoord, QgridTool, QgridToolResultInput, QueryInput, QueryOutput, QueryTimeoutMs, QuotaError, QuotaThresholdExceededError, ReasoningSummary, ServiceTier, StreamEvents, SubscriberStatus, TimeoutError, TokenStats, UsageResponse, Verbosity, maskToken };
|
|
290
291
|
|
|
291
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQudHlwZXMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLnR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbi8vIOKUgOKUgOKUgCBRdWVyeSDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IEVmZm9ydCA9IHouZW51bShbXCJsb3dcIiwgXCJtZWRpdW1cIiwgXCJoaWdoXCJdKTtcbmV4cG9ydCB0eXBlIEVmZm9ydCA9IHouaW5mZXI8dHlwZW9mIEVmZm9ydD47XG5cbmV4cG9ydCBjb25zdCBRZ3JpZFRvb2wgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGlucHV0U2NoZW1hOiB6LnVua25vd24oKSxcbn0pO1xuZXhwb3J0IHR5cGUgUWdyaWRUb29sID0gei5pbmZlcjx0eXBlb2YgUWdyaWRUb29sPjtcblxuZXhwb3J0IGNvbnN0IFFncmlkQ29udGVudCA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIHoub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJ0ZXh0XCIpLFxuICAgIHRleHQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwidG9vbC1jYWxsXCIpLFxuICAgIHRvb2xDYWxsSWQ6IHouc3RyaW5nKCksXG4gICAgdG9vbE5hbWU6IHouc3RyaW5nKCksXG4gICAgaW5wdXQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwiaW1hZ2VcIiksXG4gICAgLy8gQ29kZXggaW1hZ2VfZ2VuZXJhdGlvbiByZXN1bHQgYmFzZTY0LiBxZ3JpZCDripQg7Y+s66e3L+2ZleyepeyekCDssYXsnoTsnYQg7KeA7KeAIOyViuuKlOuLpC5cbiAgICBkYXRhOiB6LnN0cmluZygpLFxuICAgIHJldmlzZWRQcm9tcHQ6IHouc3RyaW5nKCkubnVsbGlzaCgpLFxuICB9KSxcbl0pO1xuZXhwb3J0IHR5cGUgUWdyaWRDb250ZW50ID0gei5pbmZlcjx0eXBlb2YgUWdyaWRDb250ZW50PjtcblxuZXhwb3J0IGNvbnN0IEZpbmlzaFJlYXNvbiA9IHouZW51bShbXCJzdG9wXCIsIFwidG9vbC1jYWxsc1wiXSk7XG5leHBvcnQgdHlwZSBGaW5pc2hSZWFzb24gPSB6LmluZmVyPHR5cGVvZiBGaW5pc2hSZWFzb24+O1xuXG5leHBvcnQgY29uc3QgVmVyYm9zaXR5ID0gei5lbnVtKFtcImxvd1wiLCBcIm1lZGl1bVwiLCBcImhpZ2hcIl0pO1xuZXhwb3J0IHR5cGUgVmVyYm9zaXR5ID0gei5pbmZlcjx0eXBlb2YgVmVyYm9zaXR5PjtcblxuZXhwb3J0IGNvbnN0IFJlYXNvbmluZ1N1bW1hcnkgPSB6LmVudW0oW1wiYXV0b1wiLCBcImNvbmNpc2VcIiwgXCJkZXRhaWxlZFwiLCBcIm5vbmVcIl0pO1xuZXhwb3J0IHR5cGUgUmVhc29uaW5nU3VtbWFyeSA9IHouaW5mZXI8dHlwZW9mIFJlYXNvbmluZ1N1bW1hcnk+O1xuXG5leHBvcnQgY29uc3QgU2VydmljZVRpZXIgPSB6LmVudW0oW1wiZmFzdFwiLCBcImZsZXhcIl0pO1xuZXhwb3J0IHR5cGUgU2VydmljZVRpZXIgPSB6LmluZmVyPHR5cGVvZiBTZXJ2aWNlVGllcj47XG5cbmV4cG9ydCBjb25zdCBJbWFnZUdlbmVyYXRpb25RdWFsaXR5ID0gei5lbnVtKFtcImxvd1wiLCBcIm1lZGl1bVwiLCBcImhpZ2hcIl0pO1xuZXhwb3J0IHR5cGUgSW1hZ2VHZW5lcmF0aW9uUXVhbGl0eSA9IHouaW5mZXI8dHlwZW9mIEltYWdlR2VuZXJhdGlvblF1YWxpdHk+O1xuXG5leHBvcnQgY29uc3QgSW1hZ2VHZW5lcmF0aW9uU2l6ZSA9IHouZW51bShbXCIxMDI0eDEwMjRcIiwgXCIxMDI0eDE1MzZcIiwgXCIxNTM2eDEwMjRcIl0pO1xuZXhwb3J0IHR5cGUgSW1hZ2VHZW5lcmF0aW9uU2l6ZSA9IHouaW5mZXI8dHlwZW9mIEltYWdlR2VuZXJhdGlvblNpemU+O1xuXG5leHBvcnQgY29uc3QgSW1hZ2VHZW5lcmF0aW9uT3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgcXVhbGl0eTogSW1hZ2VHZW5lcmF0aW9uUXVhbGl0eS5vcHRpb25hbCgpLFxuICBzaXplOiBJbWFnZUdlbmVyYXRpb25TaXplLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIEltYWdlR2VuZXJhdGlvbk9wdGlvbnMgPSB6LmluZmVyPHR5cGVvZiBJbWFnZUdlbmVyYXRpb25PcHRpb25zPjtcblxuZXhwb3J0IGNvbnN0IFFncmlkSW5wdXRQYXJ0ID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgei5vYmplY3Qoe1xuICAgIHR5cGU6IHoubGl0ZXJhbChcInRleHRcIiksXG4gICAgdGV4dDogei5zdHJpbmcoKSxcbiAgICB0ZXh0X2VsZW1lbnRzOiB6LmFycmF5KHoubmV2ZXIoKSkuZGVmYXVsdChbXSksXG4gIH0pLFxuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwiaW1hZ2VcIiksXG4gICAgdXJsOiB6LnN0cmluZygpLFxuICB9KSxcbl0pO1xuZXhwb3J0IHR5cGUgUWdyaWRJbnB1dFBhcnQgPSB6LmluZmVyPHR5cGVvZiBRZ3JpZElucHV0UGFydD47XG5cbmV4cG9ydCBjb25zdCBNQVhfUVVFUllfVElNRU9VVF9NUyA9IDMwICogNjBfMDAwO1xuZXhwb3J0IGNvbnN0IFF1ZXJ5VGltZW91dE1zID0gei5udW1iZXIoKS5pbnQoKS5wb3NpdGl2ZSgpLm1heChNQVhfUVVFUllfVElNRU9VVF9NUyk7XG5cbi8vIOKUgOKUgOKUgCBSdW4gTGlmZWN5Y2xlIENvbnRleHQgKFNESyDihpQgU2VydmVyIGNvbnRyYWN0KSDilIDilIDilIBcblxuLy8gT3BlbkFJIGNhY2hlIGFmZmluaXR5IOyijO2RnCjqtawgY29kZXggdGhyZWFkIOyijO2RnCkuIHByb21wdF9jYWNoZV9rZXkg66W8IOqzoOygle2VtFxuLy8gT3BlbkFJIHByb21wdCBjYWNoaW5nIOydhCDsgrTrpqzquLAg7JyE7ZWcIO2VuOuTpC4g7ISc67KE6rCAIOuwnOq4ie2VmOqzoCDtgbTrnbzqsIAg64uk7J2MIOyalOyyreyXkCDqt7jrjIDroZwg7ZqM7Iah7ZWc64ukLlxuLy8g7ZW465OkIOuvuOyghOyGoSDsi5wg6riw7KG0IFwi66ekIHR1cm4g7IOIIHRocmVhZCArIGhpc3RvcnkgaW5qZWN0XCIg64+Z7J6R7Jy866GcIO2PtOuwsShRZ3JpZFJ1bkNvbnRleHQg7LC47KGwKS5cbmV4cG9ydCBjb25zdCBRZ3JpZFRocmVhZENvb3JkID0gei5vYmplY3Qoe1xuICB3b3JrZXJJZDogei5udW1iZXIoKSwgLy8g6rOg7KCVIOudvOyasO2MhSAodGhyZWFkIOuKlCB3b3JrZXIg7ZSE66Gc7IS47IqkIOuplOuqqOumrOyXkOunjCDsobTsnqwpXG4gIHRocmVhZElkOiB6LnN0cmluZygpLCAvLyBvcGFxdWUgY2FjaGUgYWZmaW5pdHkga2V5ID0gcHJvbXB0X2NhY2hlX2tleVxuICBlcG9jaDogei5udW1iZXIoKSwgLy8gd29ya2VyIHNwYXduIOy5tOyatO2EsC4gcmVzdGFydCDroZwgdGhyZWFkIOymneuwnCDqsJDsp4BcbiAgc3lzdGVtSGFzaDogei5zdHJpbmcoKSwgLy8gc3lzdGVtX3Byb21wdCDtlbTsi5wuIOuLpOuluCDrjIDtmZQg7Jik7KCR7IaNIOuwqeyngFxufSk7XG5leHBvcnQgdHlwZSBRZ3JpZFRocmVhZENvb3JkID0gei5pbmZlcjx0eXBlb2YgUWdyaWRUaHJlYWRDb29yZD47XG5cbmV4cG9ydCBjb25zdCBRZ3JpZFJ1bkNvbnRleHQgPSB6Lm9iamVjdCh7XG4gIC8vIHRvb2wtY2FsbCBydW7snYQg6rOE7IaN7ZWgIOuVjOunjCDrsJzquIkuIOydvOuwmCDrjIDtmZTripQgdGhyZWFkQ29vcmQg66eMIOyZleuztS5cbiAgcmVxdWVzdExvZ0lkOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRocmVhZENvb3JkOiBRZ3JpZFRocmVhZENvb3JkLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIFFncmlkUnVuQ29udGV4dCA9IHouaW5mZXI8dHlwZW9mIFFncmlkUnVuQ29udGV4dD47XG5cbmV4cG9ydCBjb25zdCBRZ3JpZFRvb2xSZXN1bHRJbnB1dCA9IHoub2JqZWN0KHtcbiAgdG9vbENhbGxJZDogei5zdHJpbmcoKSxcbiAgdG9vbE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgb3V0cHV0OiB6LnN0cmluZygpLFxuICBpc0Vycm9yOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBRZ3JpZFRvb2xSZXN1bHRJbnB1dCA9IHouaW5mZXI8dHlwZW9mIFFncmlkVG9vbFJlc3VsdElucHV0PjtcblxuZXhwb3J0IGNvbnN0IFF1ZXJ5SW5wdXQgPSB6Lmxvb3NlT2JqZWN0KHtcbiAgc3lzdGVtOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHByb21wdDogei5zdHJpbmcoKSxcbiAgaW5wdXQ6IHouYXJyYXkoUWdyaWRJbnB1dFBhcnQpLm9wdGlvbmFsKCksXG4gIG1vZGVsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRpbWVvdXQ6IFF1ZXJ5VGltZW91dE1zLm9wdGlvbmFsKCksXG4gIGpzb25TY2hlbWE6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdG9vbHM6IHouYXJyYXkoUWdyaWRUb29sKS5vcHRpb25hbCgpLFxuICBlZmZvcnQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdmVyYm9zaXR5OiBWZXJib3NpdHkub3B0aW9uYWwoKSxcbiAgcmVhc29uaW5nU3VtbWFyeTogUmVhc29uaW5nU3VtbWFyeS5vcHRpb25hbCgpLFxuICBzZXJ2aWNlVGllcjogU2VydmljZVRpZXIub3B0aW9uYWwoKSxcbiAgaGlzdG9yeTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBwcm9qZWN0TmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvLyBTREstZGVyaXZlZCBvcGFxdWUgYWZmaW5pdHkuIEl0IGlzIGludGVudGlvbmFsbHkgZGlzdGluY3QgZnJvbSB0aGUgY2FsbGVyJ3Mgc2Vzc2lvbktleS5cbiAgY2FjaGVBZmZpbml0eUtleTogelxuICAgIC5zdHJpbmcoKVxuICAgIC5yZWdleCgvXlswLTlhLWZdezY0fSQvKVxuICAgIC5vcHRpb25hbCgpLFxuICAvLyDsg53rnrXtlZjrqbQg66Gc6rmF7ZWc64ukLiBmYWxzZeuKlCByZXF1ZXN0IGxvZyDsk7DquLDrp4wg64GE6rOgIGRpc3BhdGNoL3RocmVhZOuKlCDsnKDsp4DtlZzri6QuXG4gIGxvZ2dlcjogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgcnVuQ29udGV4dDogUWdyaWRSdW5Db250ZXh0Lm9wdGlvbmFsKCksXG4gIHRvb2xSZXN1bHRzOiB6LmFycmF5KFFncmlkVG9vbFJlc3VsdElucHV0KS5vcHRpb25hbCgpLFxuICAvLyBPcGVuQUkgUmVzcG9uc2VzIGltYWdlX2dlbmVyYXRpb24gdG9vbCDsnYQg7Lyg64ukKE9wZW5BSSDqsr3roZwg7KCE7JqpLCBvcHQtaW4sIG5vbi1zdHJlYW0pLlxuICBpbWFnZUdlbmVyYXRpb246IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIC8vIHFncmlkIOqwgOqyqSDstpTsoJUg67CPIENvZGV4IOydtOuvuOyngCDsmpTssq0g7Z6M7Yq4LiDsnbTrr7jsp4Ag66qo64247J2AIGdwdC1pbWFnZS0yIOuhnCDqs6DsoJUg6rCA7KCV7ZWc64ukLlxuICBpbWFnZUdlbmVyYXRpb25PcHRpb25zOiBJbWFnZUdlbmVyYXRpb25PcHRpb25zLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIFF1ZXJ5SW5wdXQgPSB6LmluZmVyPHR5cGVvZiBRdWVyeUlucHV0PjtcblxuZXhwb3J0IGNvbnN0IE1vZGVsRmFsbGJhY2sgPSB6Lm9iamVjdCh7XG4gIHRyaWdnZXI6IHoubGl0ZXJhbChcInJlZnVzYWxcIiksXG4gIGZyb21Nb2RlbDogei5zdHJpbmcoKSxcbiAgdG9Nb2RlbDogei5zdHJpbmcoKSxcbiAgY2F0ZWdvcnk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZXhwbGFuYXRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgTW9kZWxGYWxsYmFjayA9IHouaW5mZXI8dHlwZW9mIE1vZGVsRmFsbGJhY2s+O1xuXG5leHBvcnQgY29uc3QgQ29zdFNvdXJjZSA9IHouZW51bShbXCJwcm92aWRlclwiLCBcInByaWNpbmdfdGFibGVcIiwgXCJtaXhlZFwiXSk7XG5leHBvcnQgdHlwZSBDb3N0U291cmNlID0gei5pbmZlcjx0eXBlb2YgQ29zdFNvdXJjZT47XG5cbmV4cG9ydCBjb25zdCBRdWVyeU91dHB1dCA9IHoub2JqZWN0KHtcbiAgdGV4dDogei5zdHJpbmcoKSxcbiAgY29udGVudDogei5hcnJheShRZ3JpZENvbnRlbnQpLFxuICBmaW5pc2hSZWFzb246IEZpbmlzaFJlYXNvbixcbiAgdG9rZW5OYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG1vZGVsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHJlcXVlc3RlZE1vZGVsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG1vZGVsRmFsbGJhY2tzOiB6LmFycmF5KE1vZGVsRmFsbGJhY2spLm9wdGlvbmFsKCksXG4gIHVzYWdlOiB6Lm9iamVjdCh7XG4gICAgaW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgIG91dHB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gICAgcmVhc29uaW5nX3Rva2Vuczogei5udW1iZXIoKSxcbiAgICBjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gICAgY2FjaGVfY3JlYXRpb25fNW1faW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgY2FjaGVfY3JlYXRpb25fMWhfaW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgY2FjaGVfcmVhZF9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gIH0pLFxuICBkdXJhdGlvbk1zOiB6Lm51bWJlcigpLFxuICB0dGZ0TXM6IHoubnVtYmVyKCksXG4gIGNvc3RVc2Q6IHoubnVtYmVyKCksXG4gIGNvc3RTb3VyY2U6IENvc3RTb3VyY2UsXG4gIHJ1bkNvbnRleHQ6IFFncmlkUnVuQ29udGV4dC5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBRdWVyeU91dHB1dCA9IHouaW5mZXI8dHlwZW9mIFF1ZXJ5T3V0cHV0PjtcblxuLy8g4pSA4pSA4pSAIFN0cmVhbSBFdmVudHMg4pSA4pSA4pSAXG5cbmV4cG9ydCBjb25zdCBTdHJlYW1FdmVudHMgPSB6Lm9iamVjdCh7XG4gIGRlbHRhOiB6Lm9iamVjdCh7IHRleHQ6IHouc3RyaW5nKCkgfSksXG4gIHRvb2xDYWxsOiB6Lm9iamVjdCh7XG4gICAgdG9vbENhbGxJZDogei5zdHJpbmcoKSxcbiAgICB0b29sTmFtZTogei5zdHJpbmcoKSxcbiAgICBpbnB1dDogei5zdHJpbmcoKSxcbiAgfSksXG4gIGRvbmU6IHoub2JqZWN0KHtcbiAgICB0ZXh0OiB6LnN0cmluZygpLFxuICAgIG1vZGVsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgcmVxdWVzdGVkTW9kZWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBtb2RlbEZhbGxiYWNrczogei5hcnJheShNb2RlbEZhbGxiYWNrKS5vcHRpb25hbCgpLFxuICAgIHRva2VuTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGZpbmlzaFJlYXNvbjogRmluaXNoUmVhc29uLFxuICAgIHVzYWdlOiB6Lm9iamVjdCh7XG4gICAgICBpbnB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gICAgICBvdXRwdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgICAgcmVhc29uaW5nX3Rva2Vuczogei5udW1iZXIoKSxcbiAgICAgIGNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgICAgIGNhY2hlX2NyZWF0aW9uXzVtX2lucHV0X3Rva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgICAgY2FjaGVfY3JlYXRpb25fMWhfaW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgICBjYWNoZV9yZWFkX2lucHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgICB9KSxcbiAgICBkdXJhdGlvbk1zOiB6Lm51bWJlcigpLFxuICAgIHR0ZnRNczogei5udW1iZXIoKSxcbiAgICBjb3N0VXNkOiB6Lm51bWJlcigpLFxuICAgIGNvc3RTb3VyY2U6IENvc3RTb3VyY2UsXG4gICAgY29udGVudDogei5hcnJheShRZ3JpZENvbnRlbnQpLFxuICAgIHJ1bkNvbnRleHQ6IFFncmlkUnVuQ29udGV4dC5vcHRpb25hbCgpLFxuICB9KSxcbiAgZXJyb3I6IHoub2JqZWN0KHsgbWVzc2FnZTogei5zdHJpbmcoKSB9KSxcbn0pO1xuZXhwb3J0IHR5cGUgU3RyZWFtRXZlbnRzID0gei5pbmZlcjx0eXBlb2YgU3RyZWFtRXZlbnRzPjtcblxuLy8g4pSA4pSA4pSAIFJ1biBMaWZlY3ljbGUg4pSA4pSA4pSAXG5cbmV4cG9ydCBjb25zdCBDcmVhdGVSdW5JbnB1dCA9IHoub2JqZWN0KHtcbiAgdXNlclByb21wdDogei5zdHJpbmcoKSxcbiAgc3lzdGVtUHJvbXB0OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG1vZGVsTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBlZmZvcnQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcHJvamVjdE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgaGlzdG9yeTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBDcmVhdGVSdW5JbnB1dCA9IHouaW5mZXI8dHlwZW9mIENyZWF0ZVJ1bklucHV0PjtcblxuZXhwb3J0IGNvbnN0IEFwcGVuZFN0ZXBJbnB1dCA9IHoub2JqZWN0KHtcbiAgcmVxdWVzdExvZ0lkOiB6Lm51bWJlcigpLFxuICBzdGVwSW5kZXg6IHoubnVtYmVyKCksXG4gIHR5cGU6IHouZW51bShbXCJnZW5lcmF0ZVwiLCBcInRvb2xfY2FsbFwiXSksXG4gIG1vZGVsTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICByZXF1ZXN0ZWRNb2RlbE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZmFsbGJhY2tDb3VudDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBpbnB1dFRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBvdXRwdXRUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgY2FjaGVSZWFkVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGNhY2hlQ3JlYXRpb25Ub2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgY2FjaGVDcmVhdGlvbjVtVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGNhY2hlQ3JlYXRpb24xaFRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjb3N0VXNkOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGNvc3RTb3VyY2U6IENvc3RTb3VyY2Uub3B0aW9uYWwoKSxcbiAgZHVyYXRpb25Nczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB0dGZ0TXM6IHoubnVtYmVyKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxuICBmaW5pc2hSZWFzb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcmVhc29uaW5nVGV4dDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICByZWFzb25pbmdUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG9vbENhbGxJbmRleDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB0b29sQ2FsbElkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRvb2xOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRvb2xBcmdzOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRvb2xSZXN1bHQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdG9vbER1cmF0aW9uTXM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgZXJyb3I6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgQXBwZW5kU3RlcElucHV0ID0gei5pbmZlcjx0eXBlb2YgQXBwZW5kU3RlcElucHV0PjtcblxuZXhwb3J0IGNvbnN0IEZpbmlzaFJ1bklucHV0ID0gei5vYmplY3Qoe1xuICByZXF1ZXN0TG9nSWQ6IHoubnVtYmVyKCksXG4gIHN0YXR1czogei5lbnVtKFtcInN1Y2NlZWRlZFwiLCBcImVycm9yXCIsIFwiYWJvcnRlZFwiXSksXG4gIHJlc3BvbnNlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRva2VuTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtb2RlbE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcmVxdWVzdGVkTW9kZWxOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGZhbGxiYWNrQ291bnQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG90YWxJbnB1dFRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB0b3RhbE91dHB1dFRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB0b3RhbENhY2hlUmVhZFRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB0b3RhbENhY2hlQ3JlYXRpb25Ub2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG90YWxDYWNoZUNyZWF0aW9uNW1Ub2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG90YWxDYWNoZUNyZWF0aW9uMWhUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgY29zdFVzZDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjb3N0U291cmNlOiBDb3N0U291cmNlLm9wdGlvbmFsKCksXG4gIHRvdGFsRHVyYXRpb25Nczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBoaXN0b3J5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGVycm9yTWVzc2FnZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBGaW5pc2hSdW5JbnB1dCA9IHouaW5mZXI8dHlwZW9mIEZpbmlzaFJ1bklucHV0PjtcblxuLy8g4pSA4pSA4pSAIFRva2VuIE1hbmFnZW1lbnQg4pSA4pSA4pSAXG5cbmV4cG9ydCBjb25zdCBUb2tlblN0YXRzID0gei5vYmplY3Qoe1xuICB0b2tlbjogei5zdHJpbmcoKSxcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIHJlcXVlc3RzOiB6Lm51bWJlcigpLFxufSk7XG5leHBvcnQgdHlwZSBUb2tlblN0YXRzID0gei5pbmZlcjx0eXBlb2YgVG9rZW5TdGF0cz47XG5cbi8vIOKUgOKUgOKUgCBPQXV0aCDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IE9BdXRoU3RhcnRSZXN1bHQgPSB6Lm9iamVjdCh7XG4gIGF1dGhVcmw6IHouc3RyaW5nKCksXG4gIC8vIHJlZGlyZWN0OiDruIzrnbzsmrDsoIAg7J6Q64+ZIOuzteq3gCjro6jtlITrsLEg7KCR7IaNKS4gY29kZTog7L2Y7IaUIOy9nOuwsSArIOy9lOuTnCDrtpnsl6zrhKPquLAo7JuQ6rKpIOygkeyGjSkuXG4gIC8vIE9wZW5BSSDqsr3roZzripQg6rOg7KCVIGxvb3BiYWNrIOy9nOuwseydmCDsp4HsoJEgUEtDRSDrnbwg7ZWt7IOBIHJlZGlyZWN0IOulvCDrsJjtmZjtlZzri6QuXG4gIG1vZGU6IHouZW51bShbXCJyZWRpcmVjdFwiLCBcImNvZGVcIl0pLFxufSk7XG5leHBvcnQgdHlwZSBPQXV0aFN0YXJ0UmVzdWx0ID0gei5pbmZlcjx0eXBlb2YgT0F1dGhTdGFydFJlc3VsdD47XG5cbmNvbnN0IFJhdGVXaW5kb3cgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHV0aWxpemF0aW9uOiB6Lm51bWJlcigpLm51bGxhYmxlKCksXG4gICAgcmVzZXRzQXQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgICB3aW5kb3dEdXJhdGlvbk1pbnM6IHoubnVtYmVyKCkubnVsbGFibGUoKS5vcHRpb25hbCgpLFxuICB9KVxuICAubnVsbGFibGUoKTtcblxuZXhwb3J0IGNvbnN0IFVzYWdlUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIGVycm9yOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGZpdmVIb3VyOiBSYXRlV2luZG93Lm9wdGlvbmFsKCksXG4gIHNldmVuRGF5OiBSYXRlV2luZG93Lm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIFVzYWdlUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBVc2FnZVJlc3BvbnNlPjtcblxuLy8g4pSA4pSA4pSAIEhlYWx0aCDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IFN1YnNjcmliZXJTdGF0dXMgPSB6Lm9iamVjdCh7XG4gIGNvbm5lY3RlZDogei5ib29sZWFuKCksXG4gIGNvbm5lY3RlZEF0OiB6LmRhdGUoKS5udWxsYWJsZSgpLFxuICBsYXN0UmVjb25jaWxlQXQ6IHouZGF0ZSgpLm51bGxhYmxlKCksXG4gIGF0dGVtcHQ6IHoubnVtYmVyKCksXG59KTtcbmV4cG9ydCB0eXBlIFN1YnNjcmliZXJTdGF0dXMgPSB6LmluZmVyPHR5cGVvZiBTdWJzY3JpYmVyU3RhdHVzPjtcblxuZXhwb3J0IGNvbnN0IFByb3ZpZGVyU3RhcnR1cFN0YXRlID0gei5lbnVtKFtcInN0YXJ0aW5nXCIsIFwicmVhZHlcIiwgXCJmYWlsZWRcIl0pO1xuZXhwb3J0IHR5cGUgUHJvdmlkZXJTdGFydHVwU3RhdGUgPSB6LmluZmVyPHR5cGVvZiBQcm92aWRlclN0YXJ0dXBTdGF0ZT47XG5cbmV4cG9ydCBjb25zdCBIZWFsdGhSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LnN0cmluZygpLFxuICBhY3RpdmVUb2tlbnM6IHoubnVtYmVyKCksXG4gIHN1YnNjcmliZXI6IFN1YnNjcmliZXJTdGF0dXMubnVsbGFibGUoKSxcbiAgLy8gSFRUUCDrpqzsiqTri53snYAgZGlzcGF0Y2hlciDquLDrj5nrs7Tri6Qg66i87KCAIOyXtOumsOuLpC4gMjAwIOydkeuLteunjOycvOuhnOuKlCDsmpTssq3snYQg7LKY66as7ZWgIOyImFxuICAvLyDsnojripTsp4Ag7JWMIOyImCDsl4bslrQgcHJvdmlkZXIg67OEIOykgOu5hCDsg4Htg5zrpbwg7ZWo6ruYIOuFuOy2nO2VnOuLpC5cbiAgcmVhZHk6IHouYm9vbGVhbigpLFxuICBwcm92aWRlcnM6IHoub2JqZWN0KHtcbiAgICBvcGVuYWk6IFByb3ZpZGVyU3RhcnR1cFN0YXRlLFxuICAgIGFudGhyb3BpYzogUHJvdmlkZXJTdGFydHVwU3RhdGUsXG4gIH0pLFxufSk7XG5leHBvcnQgdHlwZSBIZWFsdGhSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIEhlYWx0aFJlc3BvbnNlPjtcblxuLy8g4pSA4pSA4pSAIEVycm9ycyDilIDilIDilIBcblxuZXhwb3J0IGNsYXNzIFF1b3RhRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IGNvZGUgPSBcIlFVT1RBX0VYSEFVU1RFRFwiIGFzIGNvbnN0O1xufVxuZXhwb3J0IGNsYXNzIFF1b3RhVGhyZXNob2xkRXhjZWVkZWRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcmVhZG9ubHkgY29kZSA9IFwiUVVPVEFfVEhSRVNIT0xEX0VYQ0VFREVEXCIgYXMgY29uc3Q7XG59XG5leHBvcnQgY2xhc3MgVGltZW91dEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICByZWFkb25seSBjb2RlID0gXCJUSU1FT1VUXCIgYXMgY29uc3Q7XG59XG5leHBvcnQgY2xhc3MgUHJvY2Vzc0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICByZWFkb25seSBjb2RlID0gXCJQUk9DRVNTX0VSUk9SXCIgYXMgY29uc3Q7XG59XG5cbi8vIOKUgOKUgOKUgCBVdGlscyDilIDilIDilIBcblxuZXhwb3J0IGZ1bmN0aW9uIG1hc2tUb2tlbih0b2tlbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRva2VuLmxlbmd0aCA+IDQgPyBgLi4uJHt0b2tlbi5zbGljZSgtNCl9YCA6IHRva2VuO1xufVxuIl0sIm1hcHBpbmdzIjoiOztBQUlBLE1BQWEsU0FBUyxFQUFFLEtBQUs7Q0FBQztDQUFPO0NBQVU7QUFBTSxDQUFDO0FBR3RELE1BQWEsWUFBWSxFQUFFLE9BQU87Q0FDaEMsTUFBTSxFQUFFLE9BQU87Q0FDZixhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUNqQyxhQUFhLEVBQUUsUUFBUTtBQUN6QixDQUFDO0FBR0QsTUFBYSxlQUFlLEVBQUUsbUJBQW1CLFFBQVE7Q0FDdkQsRUFBRSxPQUFPO0VBQ1AsTUFBTSxFQUFFLFFBQVEsTUFBTTtFQUN0QixNQUFNLEVBQUUsT0FBTztDQUNqQixDQUFDO0NBQ0QsRUFBRSxPQUFPO0VBQ1AsTUFBTSxFQUFFLFFBQVEsV0FBVztFQUMzQixZQUFZLEVBQUUsT0FBTztFQUNyQixVQUFVLEVBQUUsT0FBTztFQUNuQixPQUFPLEVBQUUsT0FBTztDQUNsQixDQUFDO0NBQ0QsRUFBRSxPQUFPO0VBQ1AsTUFBTSxFQUFFLFFBQVEsT0FBTztFQUV2QixNQUFNLEVBQUUsT0FBTztFQUNmLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQyxRQUFRO0NBQ3BDLENBQUM7QUFDSCxDQUFDO0FBR0QsTUFBYSxlQUFlLEVBQUUsS0FBSyxDQUFDLFFBQVEsWUFBWSxDQUFDO0FBR3pELE1BQWEsWUFBWSxFQUFFLEtBQUs7Q0FBQztDQUFPO0NBQVU7QUFBTSxDQUFDO0FBR3pELE1BQWEsbUJBQW1CLEVBQUUsS0FBSztDQUFDO0NBQVE7Q0FBVztDQUFZO0FBQU0sQ0FBQztBQUc5RSxNQUFhLGNBQWMsRUFBRSxLQUFLLENBQUMsUUFBUSxNQUFNLENBQUM7QUFHbEQsTUFB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
|
|
292
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQudHlwZXMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLnR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbi8vIOKUgOKUgOKUgCBRdWVyeSDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IEVmZm9ydCA9IHouZW51bShbXCJsb3dcIiwgXCJtZWRpdW1cIiwgXCJoaWdoXCJdKTtcbmV4cG9ydCB0eXBlIEVmZm9ydCA9IHouaW5mZXI8dHlwZW9mIEVmZm9ydD47XG5cbmV4cG9ydCBjb25zdCBRZ3JpZFRvb2wgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGlucHV0U2NoZW1hOiB6LnVua25vd24oKSxcbn0pO1xuZXhwb3J0IHR5cGUgUWdyaWRUb29sID0gei5pbmZlcjx0eXBlb2YgUWdyaWRUb29sPjtcblxuZXhwb3J0IGNvbnN0IFFncmlkQ29udGVudCA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIHoub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJ0ZXh0XCIpLFxuICAgIHRleHQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwidG9vbC1jYWxsXCIpLFxuICAgIHRvb2xDYWxsSWQ6IHouc3RyaW5nKCksXG4gICAgdG9vbE5hbWU6IHouc3RyaW5nKCksXG4gICAgaW5wdXQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwiaW1hZ2VcIiksXG4gICAgLy8gQ29kZXggaW1hZ2VfZ2VuZXJhdGlvbiByZXN1bHQgYmFzZTY0LiBxZ3JpZCDripQg7Y+s66e3L+2ZleyepeyekCDssYXsnoTsnYQg7KeA7KeAIOyViuuKlOuLpC5cbiAgICBkYXRhOiB6LnN0cmluZygpLFxuICAgIHJldmlzZWRQcm9tcHQ6IHouc3RyaW5nKCkubnVsbGlzaCgpLFxuICB9KSxcbl0pO1xuZXhwb3J0IHR5cGUgUWdyaWRDb250ZW50ID0gei5pbmZlcjx0eXBlb2YgUWdyaWRDb250ZW50PjtcblxuZXhwb3J0IGNvbnN0IEZpbmlzaFJlYXNvbiA9IHouZW51bShbXCJzdG9wXCIsIFwidG9vbC1jYWxsc1wiXSk7XG5leHBvcnQgdHlwZSBGaW5pc2hSZWFzb24gPSB6LmluZmVyPHR5cGVvZiBGaW5pc2hSZWFzb24+O1xuXG5leHBvcnQgY29uc3QgVmVyYm9zaXR5ID0gei5lbnVtKFtcImxvd1wiLCBcIm1lZGl1bVwiLCBcImhpZ2hcIl0pO1xuZXhwb3J0IHR5cGUgVmVyYm9zaXR5ID0gei5pbmZlcjx0eXBlb2YgVmVyYm9zaXR5PjtcblxuZXhwb3J0IGNvbnN0IFJlYXNvbmluZ1N1bW1hcnkgPSB6LmVudW0oW1wiYXV0b1wiLCBcImNvbmNpc2VcIiwgXCJkZXRhaWxlZFwiLCBcIm5vbmVcIl0pO1xuZXhwb3J0IHR5cGUgUmVhc29uaW5nU3VtbWFyeSA9IHouaW5mZXI8dHlwZW9mIFJlYXNvbmluZ1N1bW1hcnk+O1xuXG5leHBvcnQgY29uc3QgU2VydmljZVRpZXIgPSB6LmVudW0oW1wiZmFzdFwiLCBcImZsZXhcIl0pO1xuZXhwb3J0IHR5cGUgU2VydmljZVRpZXIgPSB6LmluZmVyPHR5cGVvZiBTZXJ2aWNlVGllcj47XG5cbmV4cG9ydCBjb25zdCBJbWFnZUdlbmVyYXRpb25RdWFsaXR5ID0gei5lbnVtKFtcImxvd1wiLCBcIm1lZGl1bVwiLCBcImhpZ2hcIl0pO1xuZXhwb3J0IHR5cGUgSW1hZ2VHZW5lcmF0aW9uUXVhbGl0eSA9IHouaW5mZXI8dHlwZW9mIEltYWdlR2VuZXJhdGlvblF1YWxpdHk+O1xuXG5leHBvcnQgY29uc3QgSW1hZ2VHZW5lcmF0aW9uU2l6ZSA9IHouZW51bShbXCIxMDI0eDEwMjRcIiwgXCIxMDI0eDE1MzZcIiwgXCIxNTM2eDEwMjRcIl0pO1xuZXhwb3J0IHR5cGUgSW1hZ2VHZW5lcmF0aW9uU2l6ZSA9IHouaW5mZXI8dHlwZW9mIEltYWdlR2VuZXJhdGlvblNpemU+O1xuXG5leHBvcnQgY29uc3QgSW1hZ2VHZW5lcmF0aW9uT3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgcXVhbGl0eTogSW1hZ2VHZW5lcmF0aW9uUXVhbGl0eS5vcHRpb25hbCgpLFxuICBzaXplOiBJbWFnZUdlbmVyYXRpb25TaXplLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIEltYWdlR2VuZXJhdGlvbk9wdGlvbnMgPSB6LmluZmVyPHR5cGVvZiBJbWFnZUdlbmVyYXRpb25PcHRpb25zPjtcblxuZXhwb3J0IGNvbnN0IFFncmlkSW5wdXRQYXJ0ID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgei5vYmplY3Qoe1xuICAgIHR5cGU6IHoubGl0ZXJhbChcInRleHRcIiksXG4gICAgdGV4dDogei5zdHJpbmcoKSxcbiAgICB0ZXh0X2VsZW1lbnRzOiB6LmFycmF5KHoubmV2ZXIoKSkuZGVmYXVsdChbXSksXG4gIH0pLFxuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwiaW1hZ2VcIiksXG4gICAgdXJsOiB6LnN0cmluZygpLFxuICB9KSxcbl0pO1xuZXhwb3J0IHR5cGUgUWdyaWRJbnB1dFBhcnQgPSB6LmluZmVyPHR5cGVvZiBRZ3JpZElucHV0UGFydD47XG5cbmV4cG9ydCBjb25zdCBNQVhfUVVFUllfVElNRU9VVF9NUyA9IDMwICogNjBfMDAwO1xuZXhwb3J0IGNvbnN0IFF1ZXJ5VGltZW91dE1zID0gei5udW1iZXIoKS5pbnQoKS5wb3NpdGl2ZSgpLm1heChNQVhfUVVFUllfVElNRU9VVF9NUyk7XG5cbi8vIOKUgOKUgOKUgCBSdW4gTGlmZWN5Y2xlIENvbnRleHQgKFNESyDihpQgU2VydmVyIGNvbnRyYWN0KSDilIDilIDilIBcblxuLy8gT3BlbkFJIGNhY2hlIGFmZmluaXR5IOyijO2RnCjqtawgY29kZXggdGhyZWFkIOyijO2RnCkuIHByb21wdF9jYWNoZV9rZXkg66W8IOqzoOygle2VtFxuLy8gT3BlbkFJIHByb21wdCBjYWNoaW5nIOydhCDsgrTrpqzquLAg7JyE7ZWcIO2VuOuTpC4g7ISc67KE6rCAIOuwnOq4ie2VmOqzoCDtgbTrnbzqsIAg64uk7J2MIOyalOyyreyXkCDqt7jrjIDroZwg7ZqM7Iah7ZWc64ukLlxuLy8g7ZW465OkIOuvuOyghOyGoSDsi5wg6riw7KG0IFwi66ekIHR1cm4g7IOIIHRocmVhZCArIGhpc3RvcnkgaW5qZWN0XCIg64+Z7J6R7Jy866GcIO2PtOuwsShRZ3JpZFJ1bkNvbnRleHQg7LC47KGwKS5cbmV4cG9ydCBjb25zdCBRZ3JpZFRocmVhZENvb3JkID0gei5vYmplY3Qoe1xuICB3b3JrZXJJZDogei5udW1iZXIoKSwgLy8g6rOg7KCVIOudvOyasO2MhSAodGhyZWFkIOuKlCB3b3JrZXIg7ZSE66Gc7IS47IqkIOuplOuqqOumrOyXkOunjCDsobTsnqwpXG4gIHRocmVhZElkOiB6LnN0cmluZygpLCAvLyBvcGFxdWUgY2FjaGUgYWZmaW5pdHkga2V5ID0gcHJvbXB0X2NhY2hlX2tleVxuICBlcG9jaDogei5udW1iZXIoKSwgLy8gd29ya2VyIHNwYXduIOy5tOyatO2EsC4gcmVzdGFydCDroZwgdGhyZWFkIOymneuwnCDqsJDsp4BcbiAgc3lzdGVtSGFzaDogei5zdHJpbmcoKSwgLy8gc3lzdGVtX3Byb21wdCDtlbTsi5wuIOuLpOuluCDrjIDtmZQg7Jik7KCR7IaNIOuwqeyngFxufSk7XG5leHBvcnQgdHlwZSBRZ3JpZFRocmVhZENvb3JkID0gei5pbmZlcjx0eXBlb2YgUWdyaWRUaHJlYWRDb29yZD47XG5cbmV4cG9ydCBjb25zdCBRZ3JpZFJ1bkNvbnRleHQgPSB6Lm9iamVjdCh7XG4gIC8vIHRvb2wtY2FsbCBydW7snYQg6rOE7IaN7ZWgIOuVjOunjCDrsJzquIkuIOydvOuwmCDrjIDtmZTripQgdGhyZWFkQ29vcmQg66eMIOyZleuztS5cbiAgcmVxdWVzdExvZ0lkOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRocmVhZENvb3JkOiBRZ3JpZFRocmVhZENvb3JkLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIFFncmlkUnVuQ29udGV4dCA9IHouaW5mZXI8dHlwZW9mIFFncmlkUnVuQ29udGV4dD47XG5cbmV4cG9ydCBjb25zdCBRZ3JpZFRvb2xSZXN1bHRJbnB1dCA9IHoub2JqZWN0KHtcbiAgdG9vbENhbGxJZDogei5zdHJpbmcoKSxcbiAgdG9vbE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgb3V0cHV0OiB6LnN0cmluZygpLFxuICBpc0Vycm9yOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBRZ3JpZFRvb2xSZXN1bHRJbnB1dCA9IHouaW5mZXI8dHlwZW9mIFFncmlkVG9vbFJlc3VsdElucHV0PjtcblxuZXhwb3J0IGNvbnN0IFF1ZXJ5SW5wdXQgPSB6Lmxvb3NlT2JqZWN0KHtcbiAgc3lzdGVtOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHByb21wdDogei5zdHJpbmcoKSxcbiAgaW5wdXQ6IHouYXJyYXkoUWdyaWRJbnB1dFBhcnQpLm9wdGlvbmFsKCksXG4gIG1vZGVsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRpbWVvdXQ6IFF1ZXJ5VGltZW91dE1zLm9wdGlvbmFsKCksXG4gIGpzb25TY2hlbWE6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdG9vbHM6IHouYXJyYXkoUWdyaWRUb29sKS5vcHRpb25hbCgpLFxuICBlZmZvcnQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdmVyYm9zaXR5OiBWZXJib3NpdHkub3B0aW9uYWwoKSxcbiAgcmVhc29uaW5nU3VtbWFyeTogUmVhc29uaW5nU3VtbWFyeS5vcHRpb25hbCgpLFxuICBzZXJ2aWNlVGllcjogU2VydmljZVRpZXIub3B0aW9uYWwoKSxcbiAgaGlzdG9yeTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBwcm9qZWN0TmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvLyDrgrTrtoDCt+uMgOyLnOuztOuTnCDtmLjstpzsmqkg7KeA7KCVIOyjvOyGjC4g6rO16rCcIEFJIFNESyBwcm92aWRlciBvcHRpb25zIOyXkOuKlCDrhbjstpztlZjsp4Ag7JWK64qU64ukLlxuICB0b2tlbk5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLy8gU0RLLWRlcml2ZWQgb3BhcXVlIGFmZmluaXR5LiBJdCBpcyBpbnRlbnRpb25hbGx5IGRpc3RpbmN0IGZyb20gdGhlIGNhbGxlcidzIHNlc3Npb25LZXkuXG4gIGNhY2hlQWZmaW5pdHlLZXk6IHpcbiAgICAuc3RyaW5nKClcbiAgICAucmVnZXgoL15bMC05YS1mXXs2NH0kLylcbiAgICAub3B0aW9uYWwoKSxcbiAgLy8g7IOd65617ZWY66m0IOuhnOq5he2VnOuLpC4gZmFsc2XripQgcmVxdWVzdCBsb2cg7JOw6riw66eMIOuBhOqzoCBkaXNwYXRjaC90aHJlYWTripQg7Jyg7KeA7ZWc64ukLlxuICBsb2dnZXI6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHJ1bkNvbnRleHQ6IFFncmlkUnVuQ29udGV4dC5vcHRpb25hbCgpLFxuICB0b29sUmVzdWx0czogei5hcnJheShRZ3JpZFRvb2xSZXN1bHRJbnB1dCkub3B0aW9uYWwoKSxcbiAgLy8gT3BlbkFJIFJlc3BvbnNlcyBpbWFnZV9nZW5lcmF0aW9uIHRvb2wg7J2EIOy8oOuLpChPcGVuQUkg6rK966GcIOyghOyaqSwgb3B0LWluLCBub24tc3RyZWFtKS5cbiAgaW1hZ2VHZW5lcmF0aW9uOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAvLyBxZ3JpZCDqsIDqsqkg7LaU7KCVIOuwjyBDb2RleCDsnbTrr7jsp4Ag7JqU7LKtIO2ejO2KuC4g7J2066+47KeAIOuqqOuNuOydgCBncHQtaW1hZ2UtMiDroZwg6rOg7KCVIOqwgOygle2VnOuLpC5cbiAgaW1hZ2VHZW5lcmF0aW9uT3B0aW9uczogSW1hZ2VHZW5lcmF0aW9uT3B0aW9ucy5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBRdWVyeUlucHV0ID0gei5pbmZlcjx0eXBlb2YgUXVlcnlJbnB1dD47XG5cbmV4cG9ydCBjb25zdCBNb2RlbEZhbGxiYWNrID0gei5vYmplY3Qoe1xuICB0cmlnZ2VyOiB6LmxpdGVyYWwoXCJyZWZ1c2FsXCIpLFxuICBmcm9tTW9kZWw6IHouc3RyaW5nKCksXG4gIHRvTW9kZWw6IHouc3RyaW5nKCksXG4gIGNhdGVnb3J5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGV4cGxhbmF0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIE1vZGVsRmFsbGJhY2sgPSB6LmluZmVyPHR5cGVvZiBNb2RlbEZhbGxiYWNrPjtcblxuZXhwb3J0IGNvbnN0IENvc3RTb3VyY2UgPSB6LmVudW0oW1wicHJvdmlkZXJcIiwgXCJwcmljaW5nX3RhYmxlXCIsIFwibWl4ZWRcIl0pO1xuZXhwb3J0IHR5cGUgQ29zdFNvdXJjZSA9IHouaW5mZXI8dHlwZW9mIENvc3RTb3VyY2U+O1xuXG5leHBvcnQgY29uc3QgUXVlcnlPdXRwdXQgPSB6Lm9iamVjdCh7XG4gIHRleHQ6IHouc3RyaW5nKCksXG4gIGNvbnRlbnQ6IHouYXJyYXkoUWdyaWRDb250ZW50KSxcbiAgZmluaXNoUmVhc29uOiBGaW5pc2hSZWFzb24sXG4gIHRva2VuTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtb2RlbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICByZXF1ZXN0ZWRNb2RlbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtb2RlbEZhbGxiYWNrczogei5hcnJheShNb2RlbEZhbGxiYWNrKS5vcHRpb25hbCgpLFxuICB1c2FnZTogei5vYmplY3Qoe1xuICAgIGlucHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgICBvdXRwdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgIHJlYXNvbmluZ190b2tlbnM6IHoubnVtYmVyKCksXG4gICAgY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgIGNhY2hlX2NyZWF0aW9uXzVtX2lucHV0X3Rva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIGNhY2hlX2NyZWF0aW9uXzFoX2lucHV0X3Rva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIGNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICB9KSxcbiAgZHVyYXRpb25Nczogei5udW1iZXIoKSxcbiAgdHRmdE1zOiB6Lm51bWJlcigpLFxuICBjb3N0VXNkOiB6Lm51bWJlcigpLFxuICBjb3N0U291cmNlOiBDb3N0U291cmNlLFxuICBydW5Db250ZXh0OiBRZ3JpZFJ1bkNvbnRleHQub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgUXVlcnlPdXRwdXQgPSB6LmluZmVyPHR5cGVvZiBRdWVyeU91dHB1dD47XG5cbi8vIOKUgOKUgOKUgCBTdHJlYW0gRXZlbnRzIOKUgOKUgOKUgFxuXG5leHBvcnQgY29uc3QgU3RyZWFtRXZlbnRzID0gei5vYmplY3Qoe1xuICBkZWx0YTogei5vYmplY3QoeyB0ZXh0OiB6LnN0cmluZygpIH0pLFxuICB0b29sQ2FsbDogei5vYmplY3Qoe1xuICAgIHRvb2xDYWxsSWQ6IHouc3RyaW5nKCksXG4gICAgdG9vbE5hbWU6IHouc3RyaW5nKCksXG4gICAgaW5wdXQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICBkb25lOiB6Lm9iamVjdCh7XG4gICAgdGV4dDogei5zdHJpbmcoKSxcbiAgICBtb2RlbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHJlcXVlc3RlZE1vZGVsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgbW9kZWxGYWxsYmFja3M6IHouYXJyYXkoTW9kZWxGYWxsYmFjaykub3B0aW9uYWwoKSxcbiAgICB0b2tlbk5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBmaW5pc2hSZWFzb246IEZpbmlzaFJlYXNvbixcbiAgICB1c2FnZTogei5vYmplY3Qoe1xuICAgICAgaW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgICAgb3V0cHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgICAgIHJlYXNvbmluZ190b2tlbnM6IHoubnVtYmVyKCksXG4gICAgICBjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gICAgICBjYWNoZV9jcmVhdGlvbl81bV9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICAgIGNhY2hlX2NyZWF0aW9uXzFoX2lucHV0X3Rva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgICAgY2FjaGVfcmVhZF9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gICAgfSksXG4gICAgZHVyYXRpb25Nczogei5udW1iZXIoKSxcbiAgICB0dGZ0TXM6IHoubnVtYmVyKCksXG4gICAgY29zdFVzZDogei5udW1iZXIoKSxcbiAgICBjb3N0U291cmNlOiBDb3N0U291cmNlLFxuICAgIGNvbnRlbnQ6IHouYXJyYXkoUWdyaWRDb250ZW50KSxcbiAgICBydW5Db250ZXh0OiBRZ3JpZFJ1bkNvbnRleHQub3B0aW9uYWwoKSxcbiAgfSksXG4gIGVycm9yOiB6Lm9iamVjdCh7IG1lc3NhZ2U6IHouc3RyaW5nKCkgfSksXG59KTtcbmV4cG9ydCB0eXBlIFN0cmVhbUV2ZW50cyA9IHouaW5mZXI8dHlwZW9mIFN0cmVhbUV2ZW50cz47XG5cbi8vIOKUgOKUgOKUgCBSdW4gTGlmZWN5Y2xlIOKUgOKUgOKUgFxuXG5leHBvcnQgY29uc3QgQ3JlYXRlUnVuSW5wdXQgPSB6Lm9iamVjdCh7XG4gIHVzZXJQcm9tcHQ6IHouc3RyaW5nKCksXG4gIHN5c3RlbVByb21wdDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtb2RlbE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZWZmb3J0OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHByb2plY3ROYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGhpc3Rvcnk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgQ3JlYXRlUnVuSW5wdXQgPSB6LmluZmVyPHR5cGVvZiBDcmVhdGVSdW5JbnB1dD47XG5cbmV4cG9ydCBjb25zdCBBcHBlbmRTdGVwSW5wdXQgPSB6Lm9iamVjdCh7XG4gIHJlcXVlc3RMb2dJZDogei5udW1iZXIoKSxcbiAgc3RlcEluZGV4OiB6Lm51bWJlcigpLFxuICB0eXBlOiB6LmVudW0oW1wiZ2VuZXJhdGVcIiwgXCJ0b29sX2NhbGxcIl0pLFxuICBtb2RlbE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcmVxdWVzdGVkTW9kZWxOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGZhbGxiYWNrQ291bnQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgaW5wdXRUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgb3V0cHV0VG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGNhY2hlUmVhZFRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjYWNoZUNyZWF0aW9uVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGNhY2hlQ3JlYXRpb241bVRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjYWNoZUNyZWF0aW9uMWhUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgY29zdFVzZDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjb3N0U291cmNlOiBDb3N0U291cmNlLm9wdGlvbmFsKCksXG4gIGR1cmF0aW9uTXM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdHRmdE1zOiB6Lm51bWJlcigpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgZmluaXNoUmVhc29uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHJlYXNvbmluZ1RleHQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcmVhc29uaW5nVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvb2xDYWxsSW5kZXg6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG9vbENhbGxJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sQXJnczogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sUmVzdWx0OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRvb2xEdXJhdGlvbk1zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGVycm9yOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIEFwcGVuZFN0ZXBJbnB1dCA9IHouaW5mZXI8dHlwZW9mIEFwcGVuZFN0ZXBJbnB1dD47XG5cbmV4cG9ydCBjb25zdCBGaW5pc2hSdW5JbnB1dCA9IHoub2JqZWN0KHtcbiAgcmVxdWVzdExvZ0lkOiB6Lm51bWJlcigpLFxuICBzdGF0dXM6IHouZW51bShbXCJzdWNjZWVkZWRcIiwgXCJlcnJvclwiLCBcImFib3J0ZWRcIl0pLFxuICByZXNwb25zZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b2tlbk5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbW9kZWxOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHJlcXVlc3RlZE1vZGVsTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBmYWxsYmFja0NvdW50OiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvdGFsSW5wdXRUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG90YWxPdXRwdXRUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG90YWxDYWNoZVJlYWRUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG90YWxDYWNoZUNyZWF0aW9uVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvdGFsQ2FjaGVDcmVhdGlvbjVtVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvdGFsQ2FjaGVDcmVhdGlvbjFoVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGNvc3RVc2Q6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgY29zdFNvdXJjZTogQ29zdFNvdXJjZS5vcHRpb25hbCgpLFxuICB0b3RhbER1cmF0aW9uTXM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgaGlzdG9yeTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBlcnJvck1lc3NhZ2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgRmluaXNoUnVuSW5wdXQgPSB6LmluZmVyPHR5cGVvZiBGaW5pc2hSdW5JbnB1dD47XG5cbi8vIOKUgOKUgOKUgCBUb2tlbiBNYW5hZ2VtZW50IOKUgOKUgOKUgFxuXG5leHBvcnQgY29uc3QgVG9rZW5TdGF0cyA9IHoub2JqZWN0KHtcbiAgdG9rZW46IHouc3RyaW5nKCksXG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICByZXF1ZXN0czogei5udW1iZXIoKSxcbn0pO1xuZXhwb3J0IHR5cGUgVG9rZW5TdGF0cyA9IHouaW5mZXI8dHlwZW9mIFRva2VuU3RhdHM+O1xuXG4vLyDilIDilIDilIAgT0F1dGgg4pSA4pSA4pSAXG5cbmV4cG9ydCBjb25zdCBPQXV0aFN0YXJ0UmVzdWx0ID0gei5vYmplY3Qoe1xuICBhdXRoVXJsOiB6LnN0cmluZygpLFxuICAvLyByZWRpcmVjdDog67iM65287Jqw7KCAIOyekOuPmSDrs7Xqt4Ao66Oo7ZSE67CxIOygkeyGjSkuIGNvZGU6IOy9mOyGlCDsvZzrsLEgKyDsvZTrk5wg67aZ7Jes64Sj6riwKOybkOqyqSDsoJHsho0pLlxuICAvLyBPcGVuQUkg6rK966Gc64qUIOqzoOyglSBsb29wYmFjayDsvZzrsLHsnZgg7KeB7KCRIFBLQ0Ug6528IO2VreyDgSByZWRpcmVjdCDrpbwg67CY7ZmY7ZWc64ukLlxuICBtb2RlOiB6LmVudW0oW1wicmVkaXJlY3RcIiwgXCJjb2RlXCJdKSxcbn0pO1xuZXhwb3J0IHR5cGUgT0F1dGhTdGFydFJlc3VsdCA9IHouaW5mZXI8dHlwZW9mIE9BdXRoU3RhcnRSZXN1bHQ+O1xuXG5jb25zdCBSYXRlV2luZG93ID0gelxuICAub2JqZWN0KHtcbiAgICB1dGlsaXphdGlvbjogei5udW1iZXIoKS5udWxsYWJsZSgpLFxuICAgIHJlc2V0c0F0OiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gICAgd2luZG93RHVyYXRpb25NaW5zOiB6Lm51bWJlcigpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgfSlcbiAgLm51bGxhYmxlKCk7XG5cbmV4cG9ydCBjb25zdCBVc2FnZVJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBlcnJvcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBwcm92aWRlcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBmaXZlSG91cjogUmF0ZVdpbmRvdy5vcHRpb25hbCgpLFxuICBzZXZlbkRheTogUmF0ZVdpbmRvdy5vcHRpb25hbCgpLFxufSk7XG5leHBvcnQgdHlwZSBVc2FnZVJlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgVXNhZ2VSZXNwb25zZT47XG5cbi8vIOKUgOKUgOKUgCBIZWFsdGgg4pSA4pSA4pSAXG5cbmV4cG9ydCBjb25zdCBTdWJzY3JpYmVyU3RhdHVzID0gei5vYmplY3Qoe1xuICBjb25uZWN0ZWQ6IHouYm9vbGVhbigpLFxuICBjb25uZWN0ZWRBdDogei5kYXRlKCkubnVsbGFibGUoKSxcbiAgbGFzdFJlY29uY2lsZUF0OiB6LmRhdGUoKS5udWxsYWJsZSgpLFxuICBhdHRlbXB0OiB6Lm51bWJlcigpLFxufSk7XG5leHBvcnQgdHlwZSBTdWJzY3JpYmVyU3RhdHVzID0gei5pbmZlcjx0eXBlb2YgU3Vic2NyaWJlclN0YXR1cz47XG5cbmV4cG9ydCBjb25zdCBQcm92aWRlclN0YXJ0dXBTdGF0ZSA9IHouZW51bShbXCJzdGFydGluZ1wiLCBcInJlYWR5XCIsIFwiZmFpbGVkXCJdKTtcbmV4cG9ydCB0eXBlIFByb3ZpZGVyU3RhcnR1cFN0YXRlID0gei5pbmZlcjx0eXBlb2YgUHJvdmlkZXJTdGFydHVwU3RhdGU+O1xuXG5leHBvcnQgY29uc3QgSGVhbHRoUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5zdHJpbmcoKSxcbiAgYWN0aXZlVG9rZW5zOiB6Lm51bWJlcigpLFxuICBzdWJzY3JpYmVyOiBTdWJzY3JpYmVyU3RhdHVzLm51bGxhYmxlKCksXG4gIC8vIEhUVFAg66as7Iqk64ud7J2AIGRpc3BhdGNoZXIg6riw64+Z67O064ukIOuovOyggCDsl7TrprDri6QuIDIwMCDsnZHri7Xrp4zsnLzroZzripQg7JqU7LKt7J2EIOyymOumrO2VoCDsiJhcbiAgLy8g7J6I64qU7KeAIOyVjCDsiJgg7JeG7Ja0IHByb3ZpZGVyIOuzhCDspIDruYQg7IOB7YOc66W8IO2VqOq7mCDrhbjstpztlZzri6QuXG4gIHJlYWR5OiB6LmJvb2xlYW4oKSxcbiAgcHJvdmlkZXJzOiB6Lm9iamVjdCh7XG4gICAgb3BlbmFpOiBQcm92aWRlclN0YXJ0dXBTdGF0ZSxcbiAgICBhbnRocm9waWM6IFByb3ZpZGVyU3RhcnR1cFN0YXRlLFxuICB9KSxcbn0pO1xuZXhwb3J0IHR5cGUgSGVhbHRoUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBIZWFsdGhSZXNwb25zZT47XG5cbi8vIOKUgOKUgOKUgCBFcnJvcnMg4pSA4pSA4pSAXG5cbmV4cG9ydCBjbGFzcyBRdW90YUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICByZWFkb25seSBjb2RlID0gXCJRVU9UQV9FWEhBVVNURURcIiBhcyBjb25zdDtcbn1cbmV4cG9ydCBjbGFzcyBRdW90YVRocmVzaG9sZEV4Y2VlZGVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IGNvZGUgPSBcIlFVT1RBX1RIUkVTSE9MRF9FWENFRURFRFwiIGFzIGNvbnN0O1xufVxuZXhwb3J0IGNsYXNzIFRpbWVvdXRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcmVhZG9ubHkgY29kZSA9IFwiVElNRU9VVFwiIGFzIGNvbnN0O1xufVxuZXhwb3J0IGNsYXNzIFByb2Nlc3NFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcmVhZG9ubHkgY29kZSA9IFwiUFJPQ0VTU19FUlJPUlwiIGFzIGNvbnN0O1xufVxuXG4vLyDilIDilIDilIAgVXRpbHMg4pSA4pSA4pSAXG5cbmV4cG9ydCBmdW5jdGlvbiBtYXNrVG9rZW4odG9rZW46IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0b2tlbi5sZW5ndGggPiA0ID8gYC4uLiR7dG9rZW4uc2xpY2UoLTQpfWAgOiB0b2tlbjtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7QUFJQSxNQUFhLFNBQVMsRUFBRSxLQUFLO0NBQUM7Q0FBTztDQUFVO0FBQU0sQ0FBQztBQUd0RCxNQUFhLFlBQVksRUFBRSxPQUFPO0NBQ2hDLE1BQU0sRUFBRSxPQUFPO0NBQ2YsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDakMsYUFBYSxFQUFFLFFBQVE7QUFDekIsQ0FBQztBQUdELE1BQWEsZUFBZSxFQUFFLG1CQUFtQixRQUFRO0NBQ3ZELEVBQUUsT0FBTztFQUNQLE1BQU0sRUFBRSxRQUFRLE1BQU07RUFDdEIsTUFBTSxFQUFFLE9BQU87Q0FDakIsQ0FBQztDQUNELEVBQUUsT0FBTztFQUNQLE1BQU0sRUFBRSxRQUFRLFdBQVc7RUFDM0IsWUFBWSxFQUFFLE9BQU87RUFDckIsVUFBVSxFQUFFLE9BQU87RUFDbkIsT0FBTyxFQUFFLE9BQU87Q0FDbEIsQ0FBQztDQUNELEVBQUUsT0FBTztFQUNQLE1BQU0sRUFBRSxRQUFRLE9BQU87RUFFdkIsTUFBTSxFQUFFLE9BQU87RUFDZixlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUTtDQUNwQyxDQUFDO0FBQ0gsQ0FBQztBQUdELE1BQWEsZUFBZSxFQUFFLEtBQUssQ0FBQyxRQUFRLFlBQVksQ0FBQztBQUd6RCxNQUFhLFlB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
|
|
@@ -20,10 +20,21 @@ var TokenSubscriber = class {
|
|
|
20
20
|
connectedAt = null;
|
|
21
21
|
lastReconcileAt = null;
|
|
22
22
|
operationChain = Promise.resolve();
|
|
23
|
+
tokenChangeHandler = null;
|
|
23
24
|
constructor(connConfig, dispatcher) {
|
|
24
25
|
this.connConfig = connConfig;
|
|
25
26
|
this.dispatcher = dispatcher;
|
|
26
27
|
}
|
|
28
|
+
setTokenChangeHandler(handler) {
|
|
29
|
+
this.tokenChangeHandler = handler;
|
|
30
|
+
}
|
|
31
|
+
notifyTokensChanged() {
|
|
32
|
+
try {
|
|
33
|
+
this.tokenChangeHandler?.();
|
|
34
|
+
} catch (error) {
|
|
35
|
+
logger.warn(`token change handler failed: ${error.message}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
27
38
|
async start() {
|
|
28
39
|
this.shutdownRequested = false;
|
|
29
40
|
this.ensureReconcileTimer();
|
|
@@ -128,11 +139,14 @@ var TokenSubscriber = class {
|
|
|
128
139
|
}
|
|
129
140
|
async handleNotificationNow(payloadJson) {
|
|
130
141
|
const payload = JSON.parse(payloadJson);
|
|
142
|
+
const previousRow = this.tokenChangeHandler ? this.dispatcher.tokens.get(payload.id) : void 0;
|
|
143
|
+
const wasKeepaliveTarget = previousRow?.active === true && previousRow.provider === "anthropic";
|
|
131
144
|
if (payload.op === "DELETE") {
|
|
132
145
|
this.dispatcher.removeCache(payload.id);
|
|
133
146
|
await this.dispatcher.openaiDispatcher?.onTokenRemoved(payload.id).catch((e) => logger.warn(`openai token remove failed: ${e.message}`));
|
|
134
147
|
this.dispatcher.anthropicDispatcher?.onTokenRemoved(payload.id);
|
|
135
148
|
logger.info(`NOTIFY ${payload.op} id=${payload.id} → removed from cache`);
|
|
149
|
+
if (previousRow === void 0 || wasKeepaliveTarget) this.notifyTokensChanged();
|
|
136
150
|
return;
|
|
137
151
|
}
|
|
138
152
|
const row = await TokenModel.findOne("A", { id: payload.id });
|
|
@@ -141,6 +155,7 @@ var TokenSubscriber = class {
|
|
|
141
155
|
await this.dispatcher.openaiDispatcher?.onTokenRemoved(payload.id).catch((e) => logger.warn(`openai token remove failed: ${e.message}`));
|
|
142
156
|
this.dispatcher.anthropicDispatcher?.onTokenRemoved(payload.id);
|
|
143
157
|
logger.info(`NOTIFY ${payload.op} id=${payload.id} → missing, removed from cache`);
|
|
158
|
+
if (previousRow === void 0 || wasKeepaliveTarget) this.notifyTokensChanged();
|
|
144
159
|
return;
|
|
145
160
|
}
|
|
146
161
|
this.dispatcher.upsertCache(payload.id, row);
|
|
@@ -158,11 +173,13 @@ var TokenSubscriber = class {
|
|
|
158
173
|
else this.dispatcher.anthropicDispatcher?.onTokenRemoved(payload.id);
|
|
159
174
|
}
|
|
160
175
|
logger.info(`NOTIFY ${payload.op} id=${payload.id} (${row.name}) active=${row.active}`);
|
|
176
|
+
if (wasKeepaliveTarget !== (row.active && row.provider === "anthropic")) this.notifyTokensChanged();
|
|
161
177
|
}
|
|
162
178
|
async reconcile() {
|
|
163
179
|
return this.enqueueOperation(() => this.reconcileNow());
|
|
164
180
|
}
|
|
165
181
|
async reconcileNow() {
|
|
182
|
+
const previousAnthropicIds = this.tokenChangeHandler ? new Set([...this.dispatcher.tokens.values()].filter((row) => row.active && row.provider === "anthropic").map((row) => row.id)) : null;
|
|
166
183
|
const rows = await TokenModel.findActive("A");
|
|
167
184
|
this.dispatcher.replaceCache(rows);
|
|
168
185
|
const anthropicRows = rows.filter((r) => r.provider === "anthropic").map((r) => ({
|
|
@@ -182,6 +199,7 @@ var TokenSubscriber = class {
|
|
|
182
199
|
}));
|
|
183
200
|
await this.dispatcher.openaiDispatcher?.replaceTokens(openaiRows).catch((e) => logger.warn(`openai reconcile failed: ${e.message}`));
|
|
184
201
|
this.lastReconcileAt = /* @__PURE__ */ new Date();
|
|
202
|
+
if (previousAnthropicIds && (previousAnthropicIds.size !== anthropicRows.length || anthropicRows.some((row) => !previousAnthropicIds.has(row.id)))) this.notifyTokensChanged();
|
|
185
203
|
}
|
|
186
204
|
enqueueOperation(operation) {
|
|
187
205
|
const next = this.operationChain.then(operation, operation);
|
|
@@ -192,4 +210,4 @@ var TokenSubscriber = class {
|
|
|
192
210
|
//#endregion
|
|
193
211
|
export { TokenSubscriber };
|
|
194
212
|
|
|
195
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tc3Vic2NyaWJlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvdG9rZW4tc3Vic2NyaWJlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogdG9rZW5zX2NoYW5nZWQgTElTVEVOIHN1YnNjcmliZXIuICovXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuaW1wb3J0IHsgQ2xpZW50LCB0eXBlIENsaWVudENvbmZpZyB9IGZyb20gXCJwZ1wiO1xuXG5pbXBvcnQgeyBUb2tlbk1vZGVsIH0gZnJvbSBcIi4uL3Rva2VuL3Rva2VuLm1vZGVsXCI7XG5pbXBvcnQgeyB0eXBlIEFudGhyb3BpY0NyZWRlbnRpYWxzLCB0eXBlIE9wZW5BSUNyZWRlbnRpYWxzIH0gZnJvbSBcIi4uL3Rva2VuL3Rva2VuLnR5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIFFncmlkRGlzcGF0Y2hlckNsYXNzIH0gZnJvbSBcIi4vcWdyaWQuZGlzcGF0Y2hlclwiO1xuaW1wb3J0IHsgdHlwZSBTdWJzY3JpYmVyU3RhdHVzIH0gZnJvbSBcIi4vcWdyaWQudHlwZXNcIjtcblxuY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCIsIFwic3Vic2NyaWJlclwiXSk7XG5cbmNvbnN0IFRPS0VOU19DSEFOR0VEID0gXCJ0b2tlbnNfY2hhbmdlZFwiO1xuY29uc3QgUkVDT05DSUxFX0lOVEVSVkFMX01TID0gMTAgKiA2MCAqIDEwMDA7XG5jb25zdCBDT05ORUNUSU9OX1RJTUVPVVRfTVMgPSA1XzAwMDtcbmNvbnN0IEJBQ0tPRkZfQkFTRV9NUyA9IDUwMDtcbmNvbnN0IEJBQ0tPRkZfQ0FQX01TID0gMzBfMDAwO1xuXG50eXBlIFBheWxvYWQgPSB7IG9wOiBcIklOU0VSVFwiIHwgXCJVUERBVEVcIiB8IFwiREVMRVRFXCI7IGlkOiBudW1iZXIgfTtcblxuZXhwb3J0IGNsYXNzIFRva2VuU3Vic2NyaWJlciB7XG4gIGNsaWVudDogQ2xpZW50IHwgbnVsbCA9IG51bGw7XG4gIHJlY29uY2lsZVRpbWVyOiBOb2RlSlMuVGltZW91dCB8IG51bGwgPSBudWxsO1xuICByZWNvbm5lY3RUaW1lcjogTm9kZUpTLlRpbWVvdXQgfCBudWxsID0gbnVsbDtcbiAgc2h1dGRvd25SZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgYXR0ZW1wdCA9IDA7XG4gIGNvbm5lY3RlZEF0OiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gIGxhc3RSZWNvbmNpbGVBdDogRGF0ZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIG9wZXJhdGlvbkNoYWluOiBQcm9taXNlPHZvaWQ+ID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGNvbm5Db25maWc6IENsaWVudENvbmZpZyxcbiAgICBwdWJsaWMgZGlzcGF0Y2hlcjogUWdyaWREaXNwYXRjaGVyQ2xhc3MsXG4gICkge31cblxuICBhc3luYyBzdGFydCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0aGlzLnNodXRkb3duUmVxdWVzdGVkID0gZmFsc2U7XG4gICAgdGhpcy5lbnN1cmVSZWNvbmNpbGVUaW1lcigpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuY29ubmVjdEFuZFJlY29uY2lsZSgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLndhcm4oYHN1YnNjcmliZXIgc3RhcnQgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfSwgc2NoZWR1bGluZyByZXRyeWApO1xuICAgICAgdGhpcy5yZXRyeUxhdGVyKCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnNodXRkb3duUmVxdWVzdGVkID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5yZWNvbmNpbGVUaW1lcikge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnJlY29uY2lsZVRpbWVyKTtcbiAgICAgIHRoaXMucmVjb25jaWxlVGltZXIgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5yZWNvbm5lY3RUaW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVjb25uZWN0VGltZXIpO1xuICAgICAgdGhpcy5yZWNvbm5lY3RUaW1lciA9IG51bGw7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuY2xvc2VDbGllbnQoKTtcbiAgfVxuXG4gIHN0YXR1cygpOiBTdWJzY3JpYmVyU3RhdHVzIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29ubmVjdGVkOiB0aGlzLmNsaWVudCAhPT0gbnVsbCAmJiB0aGlzLnJlY29ubmVjdFRpbWVyID09PSBudWxsLFxuICAgICAgY29ubmVjdGVkQXQ6IHRoaXMuY29ubmVjdGVkQXQsXG4gICAgICBsYXN0UmVjb25jaWxlQXQ6IHRoaXMubGFzdFJlY29uY2lsZUF0LFxuICAgICAgYXR0ZW1wdDogdGhpcy5hdHRlbXB0LFxuICAgIH07XG4gIH1cblxuICBlbnN1cmVSZWNvbmNpbGVUaW1lcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvbmNpbGVUaW1lcikgcmV0dXJuO1xuXG4gICAgLy8gTElTVEVOL05PVElGWSDripQg64GK6ri0IOuPmeyViCDsnKDsi6TrkKAg7IiYIOyeiOyWtCDso7zquLDsoIHsnLzroZwgREIg6riw7KSA7Jy866GcIOunnuy2mOuLpC5cbiAgICB0aGlzLnJlY29uY2lsZVRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5yZWNvbmNpbGUoKS5jYXRjaCgoZSkgPT5cbiAgICAgICAgbG9nZ2VyLndhcm4oYHBlcmlvZGljIHJlY29uY2lsZSBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCksXG4gICAgICApO1xuICAgIH0sIFJFQ09OQ0lMRV9JTlRFUlZBTF9NUyk7XG4gIH1cblxuICBhc3luYyBjb25uZWN0QW5kUmVjb25jaWxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuY29ubmVjdEFuZExpc3RlbigpO1xuICAgIGF3YWl0IHRoaXMucmVjb25jaWxlKCk7XG4gICAgdGhpcy5hdHRlbXB0ID0gMDtcbiAgfVxuXG4gIGFzeW5jIGNvbm5lY3RBbmRMaXN0ZW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IENsaWVudCh7XG4gICAgICAuLi50aGlzLmNvbm5Db25maWcsXG4gICAgICBjb25uZWN0aW9uVGltZW91dE1pbGxpczogQ09OTkVDVElPTl9USU1FT1VUX01TLFxuICAgICAga2VlcEFsaXZlOiB0cnVlLFxuICAgICAga2VlcEFsaXZlSW5pdGlhbERlbGF5TWlsbGlzOiAxMF8wMDAsXG4gICAgICBhcHBsaWNhdGlvbl9uYW1lOiBcInFncmlkLWxpc3RlbmVyXCIsXG4gICAgfSk7XG5cbiAgICBjbGllbnQub24oXCJlcnJvclwiLCAoZSkgPT4ge1xuICAgICAgbG9nZ2VyLndhcm4oYHN1YnNjcmliZXIgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgdGhpcy5yZXRyeUxhdGVyKCk7XG4gICAgfSk7XG4gICAgY2xpZW50Lm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5zaHV0ZG93blJlcXVlc3RlZCkgdGhpcy5yZXRyeUxhdGVyKCk7XG4gICAgfSk7XG4gICAgY2xpZW50Lm9uKFwibm90aWZpY2F0aW9uXCIsIChtc2cpID0+IHtcbiAgICAgIGlmIChtc2cuY2hhbm5lbCAhPT0gVE9LRU5TX0NIQU5HRUQgfHwgIW1zZy5wYXlsb2FkKSByZXR1cm47XG4gICAgICB0aGlzLmhhbmRsZU5vdGlmaWNhdGlvbihtc2cucGF5bG9hZCkuY2F0Y2goKGUpID0+XG4gICAgICAgIGxvZ2dlci53YXJuKGBoYW5kbGUgTk9USUZZIGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKSxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgY2xpZW50LmNvbm5lY3QoKTtcbiAgICAgIGF3YWl0IGNsaWVudC5xdWVyeShcIlNFVCBzdGF0ZW1lbnRfdGltZW91dCA9IDBcIik7XG4gICAgICBhd2FpdCBjbGllbnQucXVlcnkoXCJTRVQgaWRsZV9pbl90cmFuc2FjdGlvbl9zZXNzaW9uX3RpbWVvdXQgPSAwXCIpO1xuICAgICAgYXdhaXQgY2xpZW50LnF1ZXJ5KGBMSVNURU4gJHtjbGllbnQuZXNjYXBlSWRlbnRpZmllcihUT0tFTlNfQ0hBTkdFRCl9YCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY2xpZW50LnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgYXdhaXQgY2xpZW50LmVuZCgpLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuXG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XG4gICAgdGhpcy5jb25uZWN0ZWRBdCA9IG5ldyBEYXRlKCk7XG4gICAgbG9nZ2VyLmluZm8oYHN1YnNjcmliZWQgdG8gJHtUT0tFTlNfQ0hBTkdFRH1gKTtcbiAgfVxuXG4gIHJldHJ5TGF0ZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2h1dGRvd25SZXF1ZXN0ZWQpIHJldHVybjtcbiAgICBpZiAodGhpcy5yZWNvbm5lY3RUaW1lcikgcmV0dXJuO1xuXG4gICAgdm9pZCB0aGlzLmNsb3NlQ2xpZW50KCk7XG4gICAgdGhpcy5hdHRlbXB0ICs9IDE7XG4gICAgY29uc3QgY2FwID0gTWF0aC5taW4oQkFDS09GRl9CQVNFX01TICogMiAqKiB0aGlzLmF0dGVtcHQsIEJBQ0tPRkZfQ0FQX01TKTtcbiAgICBjb25zdCBkZWxheSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNhcCk7XG4gICAgbG9nZ2VyLmluZm8oYHJlY29ubmVjdGluZyBpbiAke2RlbGF5fW1zIChhdHRlbXB0ICR7dGhpcy5hdHRlbXB0fSlgKTtcbiAgICB0aGlzLnJlY29ubmVjdFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnJlY29ubmVjdFRpbWVyID0gbnVsbDtcbiAgICAgIHRoaXMuY29ubmVjdEFuZFJlY29uY2lsZSgpLmNhdGNoKChlKSA9PiB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBzdWJzY3JpYmVyIHJlY29ubmVjdCBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgICAgIHRoaXMucmV0cnlMYXRlcigpO1xuICAgICAgfSk7XG4gICAgfSwgZGVsYXkpO1xuICB9XG5cbiAgYXN5bmMgY2xvc2VDbGllbnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5jbGllbnQ7XG4gICAgaWYgKCFjbGllbnQpIHJldHVybjtcblxuICAgIHRoaXMuY2xpZW50ID0gbnVsbDtcbiAgICBjbGllbnQucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgYXdhaXQgY2xpZW50LmVuZCgpLmNhdGNoKCgpID0+IHt9KTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZU5vdGlmaWNhdGlvbihwYXlsb2FkSnNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZW5xdWV1ZU9wZXJhdGlvbigoKSA9PiB0aGlzLmhhbmRsZU5vdGlmaWNhdGlvbk5vdyhwYXlsb2FkSnNvbikpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVOb3RpZmljYXRpb25Ob3cocGF5bG9hZEpzb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBheWxvYWQgPSBKU09OLnBhcnNlKHBheWxvYWRKc29uKSBhcyBQYXlsb2FkO1xuICAgIGlmIChwYXlsb2FkLm9wID09PSBcIkRFTEVURVwiKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoZXIucmVtb3ZlQ2FjaGUocGF5bG9hZC5pZCk7XG4gICAgICBhd2FpdCB0aGlzLmRpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlclxuICAgICAgICA/Lm9uVG9rZW5SZW1vdmVkKHBheWxvYWQuaWQpXG4gICAgICAgIC5jYXRjaCgoZSkgPT4gbG9nZ2VyLndhcm4oYG9wZW5haSB0b2tlbiByZW1vdmUgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApKTtcbiAgICAgIC8vIGFudGhyb3BpYyDthqDtgbAg7J2067Kk7Yq464qUIOuPmeq4sCh2b2lkKSDigJQgcHJvdmlkZXIg66W8IOuqqOultOuvgOuhnCDrrLTtlbTtlZjqsowg7ZWt7IOBIOygnOqxsCDsi5zrj4QuXG4gICAgICB0aGlzLmRpc3BhdGNoZXIuYW50aHJvcGljRGlzcGF0Y2hlcj8ub25Ub2tlblJlbW92ZWQocGF5bG9hZC5pZCk7XG4gICAgICBsb2dnZXIuaW5mbyhgTk9USUZZICR7cGF5bG9hZC5vcH0gaWQ9JHtwYXlsb2FkLmlkfSDihpIgcmVtb3ZlZCBmcm9tIGNhY2hlYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJvdyA9IGF3YWl0IFRva2VuTW9kZWwuZmluZE9uZShcIkFcIiwgeyBpZDogcGF5bG9hZC5pZCB9KTtcbiAgICBpZiAoIXJvdykge1xuICAgICAgdGhpcy5kaXNwYXRjaGVyLnJlbW92ZUNhY2hlKHBheWxvYWQuaWQpO1xuICAgICAgYXdhaXQgdGhpcy5kaXNwYXRjaGVyLm9wZW5haURpc3BhdGNoZXJcbiAgICAgICAgPy5vblRva2VuUmVtb3ZlZChwYXlsb2FkLmlkKVxuICAgICAgICAuY2F0Y2goKGUpID0+IGxvZ2dlci53YXJuKGBvcGVuYWkgdG9rZW4gcmVtb3ZlIGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKSk7XG4gICAgICB0aGlzLmRpc3BhdGNoZXIuYW50aHJvcGljRGlzcGF0Y2hlcj8ub25Ub2tlblJlbW92ZWQocGF5bG9hZC5pZCk7XG4gICAgICBsb2dnZXIuaW5mbyhgTk9USUZZICR7cGF5bG9hZC5vcH0gaWQ9JHtwYXlsb2FkLmlkfSDihpIgbWlzc2luZywgcmVtb3ZlZCBmcm9tIGNhY2hlYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kaXNwYXRjaGVyLnVwc2VydENhY2hlKHBheWxvYWQuaWQsIHJvdyk7XG5cbiAgICBpZiAocm93LnByb3ZpZGVyID09PSBcIm9wZW5haVwiKSB7XG4gICAgICBjb25zdCBjcmVkcyA9IHJvdy5jcmVkZW50aWFscyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIGNvbnN0IG9wZW5haURpc3BhdGNoZXIgPSB0aGlzLmRpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlcjtcbiAgICAgIGlmIChwYXlsb2FkLm9wID09PSBcIklOU0VSVFwiICYmIHJvdy5hY3RpdmUpIHtcbiAgICAgICAgYXdhaXQgb3BlbmFpRGlzcGF0Y2hlclxuICAgICAgICAgID8ub25Ub2tlbkFkZGVkKFxuICAgICAgICAgICAgcGF5bG9hZC5pZCxcbiAgICAgICAgICAgIHJvdy5uYW1lLFxuICAgICAgICAgICAgY3JlZHMgYXMgT3BlbkFJQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICByb3cucXVvdGFfdGhyZXNob2xkLFxuICAgICAgICAgICAgcm93LndlaWdodCxcbiAgICAgICAgICApXG4gICAgICAgICAgLmNhdGNoKChlKSA9PiBsb2dnZXIud2Fybihgb3BlbmFpIHRva2VuIGFkZCBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCkpO1xuICAgICAgfSBlbHNlIGlmIChyb3cuYWN0aXZlKSB7XG4gICAgICAgIGlmIChvcGVuYWlEaXNwYXRjaGVyKSB7XG4gICAgICAgICAgYXdhaXQgb3BlbmFpRGlzcGF0Y2hlclxuICAgICAgICAgICAgLm9uVG9rZW5VcGRhdGVkKFxuICAgICAgICAgICAgICBwYXlsb2FkLmlkLFxuICAgICAgICAgICAgICByb3cubmFtZSxcbiAgICAgICAgICAgICAgY3JlZHMgYXMgT3BlbkFJQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgIHJvdy5xdW90YV90aHJlc2hvbGQsXG4gICAgICAgICAgICAgIHJvdy53ZWlnaHQsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAudGhlbigoKSA9PiBvcGVuYWlEaXNwYXRjaGVyLm9uVG9rZW5BY3RpdmF0ZWQocGF5bG9hZC5pZCkpXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IGxvZ2dlci53YXJuKGBvcGVuYWkgdG9rZW4gdXBkYXRlIGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wZW5haURpc3BhdGNoZXI/Lm9uVG9rZW5EZWFjdGl2YXRlZChwYXlsb2FkLmlkKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJvdy5wcm92aWRlciA9PT0gXCJhbnRocm9waWNcIikge1xuICAgICAgLy8gYW50aHJvcGljIO2GoO2BsCDsnbTrsqTtirjripQg64+Z6riwKHZvaWQpLiB3b3JrZXIg6rCAIOyXhuqzoCDtkoAoTWFwKeunjCDqtIDrpqztlZjrr4DroZwg64uo7IicOlxuICAgICAgLy8gIElOU0VSVCDihpIg7LaU6rCALCBhY3RpdmUg66m0IOqwseyLoChvblRva2VuVXBkYXRlZCDqsIAgaWRlbnRpdHkg67OA6rK964+EIOyymOumrCksIGluYWN0aXZlIOuptCDtkoDsl5DshJwg7KCc6rGwLlxuICAgICAgLy8gICjrs4Trj4QgYWN0aXZhdGUvZGVhY3RpdmF0ZSDsvZzrsLHsnbQg7JeG7Ja0IGFjdGl2ZSDthqDquIDsnYQgYWRkL3JlbW92ZSDroZwg66ek7ZWRLilcbiAgICAgIGNvbnN0IGNyZWRzID0gcm93LmNyZWRlbnRpYWxzIGFzIEFudGhyb3BpY0NyZWRlbnRpYWxzO1xuICAgICAgaWYgKHBheWxvYWQub3AgPT09IFwiSU5TRVJUXCIgJiYgcm93LmFjdGl2ZSkge1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIuYW50aHJvcGljRGlzcGF0Y2hlcj8ub25Ub2tlbkFkZGVkKFxuICAgICAgICAgIHBheWxvYWQuaWQsXG4gICAgICAgICAgcm93Lm5hbWUsXG4gICAgICAgICAgY3JlZHMsXG4gICAgICAgICAgcm93LnF1b3RhX3RocmVzaG9sZCxcbiAgICAgICAgICByb3cud2VpZ2h0LFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChyb3cuYWN0aXZlKSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlci5hbnRocm9waWNEaXNwYXRjaGVyPy5vblRva2VuVXBkYXRlZChcbiAgICAgICAgICBwYXlsb2FkLmlkLFxuICAgICAgICAgIHJvdy5uYW1lLFxuICAgICAgICAgIGNyZWRzLFxuICAgICAgICAgIHJvdy5xdW90YV90aHJlc2hvbGQsXG4gICAgICAgICAgcm93LndlaWdodCxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGluYWN0aXZlIOuptCBJTlNFUlQg65OgIFVQREFURSDrk6Ag7ZKA7JeQIOuEo+yngCDslYrripTri6QuXG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlci5hbnRocm9waWNEaXNwYXRjaGVyPy5vblRva2VuUmVtb3ZlZChwYXlsb2FkLmlkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbG9nZ2VyLmluZm8oYE5PVElGWSAke3BheWxvYWQub3B9IGlkPSR7cGF5bG9hZC5pZH0gKCR7cm93Lm5hbWV9KSBhY3RpdmU9JHtyb3cuYWN0aXZlfWApO1xuICB9XG5cbiAgYXN5bmMgcmVjb25jaWxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmVucXVldWVPcGVyYXRpb24oKCkgPT4gdGhpcy5yZWNvbmNpbGVOb3coKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlY29uY2lsZU5vdygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByb3dzID0gYXdhaXQgVG9rZW5Nb2RlbC5maW5kQWN0aXZlKFwiQVwiKTtcbiAgICB0aGlzLmRpc3BhdGNoZXIucmVwbGFjZUNhY2hlKHJvd3MpO1xuICAgIC8vIE5PVElGWSDsnKDsi6Qg64yA67mEOiBBbnRocm9waWNEaXNwYXRjaGVyIO2SgOuPhCBEQiBhY3RpdmUgYW50aHJvcGljIO2GoO2BsCDquLDspIDsnLzroZwg7J6s64+Z6riw7ZmULlxuICAgIC8vIChyb3dzIOuKlCBhY3RpdmUg66eMIOKAlCBpbmFjdGl2ZS/sgq3soJzrkJwg7Yag7YGw7J2AIOyXrOq4sCDsl4bsnLzrr4DroZwgcmVwbGFjZVRva2VucyDqsIAg7ZKA7JeQ7IScIOygnOqxsO2VnOuLpC4pXG4gICAgY29uc3QgYW50aHJvcGljUm93cyA9IHJvd3NcbiAgICAgIC5maWx0ZXIoKHIpID0+IHIucHJvdmlkZXIgPT09IFwiYW50aHJvcGljXCIpXG4gICAgICAubWFwKChyKSA9PiAoe1xuICAgICAgICBpZDogci5pZCxcbiAgICAgICAgbmFtZTogci5uYW1lLFxuICAgICAgICBjcmVkZW50aWFsczogci5jcmVkZW50aWFscyBhcyBBbnRocm9waWNDcmVkZW50aWFscyxcbiAgICAgICAgcXVvdGFUaHJlc2hvbGQ6IHIucXVvdGFfdGhyZXNob2xkLFxuICAgICAgICB3ZWlnaHQ6IHIud2VpZ2h0LFxuICAgICAgfSkpO1xuICAgIHRoaXMuZGlzcGF0Y2hlci5hbnRocm9waWNEaXNwYXRjaGVyPy5yZXBsYWNlVG9rZW5zKGFudGhyb3BpY1Jvd3MpO1xuICAgIGNvbnN0IG9wZW5haVJvd3MgPSByb3dzXG4gICAgICAuZmlsdGVyKChyKSA9PiByLnByb3ZpZGVyID09PSBcIm9wZW5haVwiKVxuICAgICAgLm1hcCgocikgPT4gKHtcbiAgICAgICAgaWQ6IHIuaWQsXG4gICAgICAgIG5hbWU6IHIubmFtZSxcbiAgICAgICAgY3JlZGVudGlhbHM6IHIuY3JlZGVudGlhbHMgYXMgT3BlbkFJQ3JlZGVudGlhbHMsXG4gICAgICAgIHF1b3RhVGhyZXNob2xkOiByLnF1b3RhX3RocmVzaG9sZCxcbiAgICAgICAgd2VpZ2h0OiByLndlaWdodCxcbiAgICAgIH0pKTtcbiAgICBhd2FpdCB0aGlzLmRpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlclxuICAgICAgPy5yZXBsYWNlVG9rZW5zKG9wZW5haVJvd3MpXG4gICAgICAuY2F0Y2goKGUpID0+IGxvZ2dlci53YXJuKGBvcGVuYWkgcmVjb25jaWxlIGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKSk7XG4gICAgdGhpcy5sYXN0UmVjb25jaWxlQXQgPSBuZXcgRGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbnF1ZXVlT3BlcmF0aW9uKG9wZXJhdGlvbjogKCkgPT4gUHJvbWlzZTx2b2lkPik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG5leHQgPSB0aGlzLm9wZXJhdGlvbkNoYWluLnRoZW4ob3BlcmF0aW9uLCBvcGVyYXRpb24pO1xuICAgIHRoaXMub3BlcmF0aW9uQ2hhaW4gPSBuZXh0LmNhdGNoKCgpID0+IHt9KTtcbiAgICByZXR1cm4gbmV4dDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7OztBQVNBLE1BQU0sU0FBUyxVQUFVLENBQUMsU0FBUyxZQUFZLENBQUM7QUFFaEQsTUFBTSxpQkFBaUI7QUFDdkIsTUFBTSx3QkFBd0IsTUFBVTtBQUN4QyxNQUFNLHdCQUF3QjtBQUM5QixNQUFNLGtCQUFrQjtBQUN4QixNQUFNLGlCQUFpQjtBQUl2QixJQUFhLGtCQUFiLE1BQTZCO0NBV2xCO0NBQ0E7Q0FYVCxTQUF3QjtDQUN4QixpQkFBd0M7Q0FDeEMsaUJBQXdDO0NBQ3hDLG9CQUFvQjtDQUNwQixVQUFVO0NBQ1YsY0FBMkI7Q0FDM0Isa0JBQStCO0NBQy9CLGlCQUF3QyxRQUFRLFFBQVE7Q0FFeEQsWUFDRSxZQUNBLFlBQ0E7RUFGTyxLQUFBLGFBQUE7RUFDQSxLQUFBLGFBQUE7Q0FDTjtDQUVILE1BQU0sUUFBMEI7RUFDOUIsS0FBSyxvQkFBb0I7RUFDekIsS0FBSyxxQkFBcUI7RUFFMUIsSUFBSTtHQUNGLE1BQU0sS0FBSyxvQkFBb0I7R0FDL0IsT0FBTztFQUNULFNBQVMsR0FBRztHQUNWLE9BQU8sS0FBSyw0QkFBNkIsRUFBWSxRQUFRLG1CQUFtQjtHQUNoRixLQUFLLFdBQVc7R0FDaEIsT0FBTztFQUNUO0NBQ0Y7Q0FFQSxNQUFNLE9BQXNCO0VBQzFCLEtBQUssb0JBQW9CO0VBQ3pCLElBQUksS0FBSyxnQkFBZ0I7R0FDdkIsY0FBYyxLQUFLLGNBQWM7R0FDakMsS0FB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
|
|
213
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tc3Vic2NyaWJlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvdG9rZW4tc3Vic2NyaWJlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogdG9rZW5zX2NoYW5nZWQgTElTVEVOIHN1YnNjcmliZXIuICovXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuaW1wb3J0IHsgQ2xpZW50LCB0eXBlIENsaWVudENvbmZpZyB9IGZyb20gXCJwZ1wiO1xuXG5pbXBvcnQgeyBUb2tlbk1vZGVsIH0gZnJvbSBcIi4uL3Rva2VuL3Rva2VuLm1vZGVsXCI7XG5pbXBvcnQgeyB0eXBlIEFudGhyb3BpY0NyZWRlbnRpYWxzLCB0eXBlIE9wZW5BSUNyZWRlbnRpYWxzIH0gZnJvbSBcIi4uL3Rva2VuL3Rva2VuLnR5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIFFncmlkRGlzcGF0Y2hlckNsYXNzIH0gZnJvbSBcIi4vcWdyaWQuZGlzcGF0Y2hlclwiO1xuaW1wb3J0IHsgdHlwZSBTdWJzY3JpYmVyU3RhdHVzIH0gZnJvbSBcIi4vcWdyaWQudHlwZXNcIjtcblxuY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCIsIFwic3Vic2NyaWJlclwiXSk7XG5cbmNvbnN0IFRPS0VOU19DSEFOR0VEID0gXCJ0b2tlbnNfY2hhbmdlZFwiO1xuY29uc3QgUkVDT05DSUxFX0lOVEVSVkFMX01TID0gMTAgKiA2MCAqIDEwMDA7XG5jb25zdCBDT05ORUNUSU9OX1RJTUVPVVRfTVMgPSA1XzAwMDtcbmNvbnN0IEJBQ0tPRkZfQkFTRV9NUyA9IDUwMDtcbmNvbnN0IEJBQ0tPRkZfQ0FQX01TID0gMzBfMDAwO1xuXG50eXBlIFBheWxvYWQgPSB7IG9wOiBcIklOU0VSVFwiIHwgXCJVUERBVEVcIiB8IFwiREVMRVRFXCI7IGlkOiBudW1iZXIgfTtcblxuZXhwb3J0IGNsYXNzIFRva2VuU3Vic2NyaWJlciB7XG4gIGNsaWVudDogQ2xpZW50IHwgbnVsbCA9IG51bGw7XG4gIHJlY29uY2lsZVRpbWVyOiBOb2RlSlMuVGltZW91dCB8IG51bGwgPSBudWxsO1xuICByZWNvbm5lY3RUaW1lcjogTm9kZUpTLlRpbWVvdXQgfCBudWxsID0gbnVsbDtcbiAgc2h1dGRvd25SZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgYXR0ZW1wdCA9IDA7XG4gIGNvbm5lY3RlZEF0OiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gIGxhc3RSZWNvbmNpbGVBdDogRGF0ZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIG9wZXJhdGlvbkNoYWluOiBQcm9taXNlPHZvaWQ+ID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIHByaXZhdGUgdG9rZW5DaGFuZ2VIYW5kbGVyOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgY29ubkNvbmZpZzogQ2xpZW50Q29uZmlnLFxuICAgIHB1YmxpYyBkaXNwYXRjaGVyOiBRZ3JpZERpc3BhdGNoZXJDbGFzcyxcbiAgKSB7fVxuXG4gIHNldFRva2VuQ2hhbmdlSGFuZGxlcihoYW5kbGVyOiAoKCkgPT4gdm9pZCkgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy50b2tlbkNoYW5nZUhhbmRsZXIgPSBoYW5kbGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBub3RpZnlUb2tlbnNDaGFuZ2VkKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnRva2VuQ2hhbmdlSGFuZGxlcj8uKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKGB0b2tlbiBjaGFuZ2UgaGFuZGxlciBmYWlsZWQ6ICR7KGVycm9yIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRoaXMuc2h1dGRvd25SZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmVuc3VyZVJlY29uY2lsZVRpbWVyKCk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jb25uZWN0QW5kUmVjb25jaWxlKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIud2Fybihgc3Vic2NyaWJlciBzdGFydCBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9LCBzY2hlZHVsaW5nIHJldHJ5YCk7XG4gICAgICB0aGlzLnJldHJ5TGF0ZXIoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc2h1dGRvd25SZXF1ZXN0ZWQgPSB0cnVlO1xuICAgIGlmICh0aGlzLnJlY29uY2lsZVRpbWVyKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMucmVjb25jaWxlVGltZXIpO1xuICAgICAgdGhpcy5yZWNvbmNpbGVUaW1lciA9IG51bGw7XG4gICAgfVxuICAgIGlmICh0aGlzLnJlY29ubmVjdFRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5yZWNvbm5lY3RUaW1lcik7XG4gICAgICB0aGlzLnJlY29ubmVjdFRpbWVyID0gbnVsbDtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5jbG9zZUNsaWVudCgpO1xuICB9XG5cbiAgc3RhdHVzKCk6IFN1YnNjcmliZXJTdGF0dXMge1xuICAgIHJldHVybiB7XG4gICAgICBjb25uZWN0ZWQ6IHRoaXMuY2xpZW50ICE9PSBudWxsICYmIHRoaXMucmVjb25uZWN0VGltZXIgPT09IG51bGwsXG4gICAgICBjb25uZWN0ZWRBdDogdGhpcy5jb25uZWN0ZWRBdCxcbiAgICAgIGxhc3RSZWNvbmNpbGVBdDogdGhpcy5sYXN0UmVjb25jaWxlQXQsXG4gICAgICBhdHRlbXB0OiB0aGlzLmF0dGVtcHQsXG4gICAgfTtcbiAgfVxuXG4gIGVuc3VyZVJlY29uY2lsZVRpbWVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29uY2lsZVRpbWVyKSByZXR1cm47XG5cbiAgICAvLyBMSVNURU4vTk9USUZZIOuKlCDrgYrquLQg64+Z7JWIIOycoOyLpOuQoCDsiJgg7J6I7Ja0IOyjvOq4sOyggeycvOuhnCBEQiDquLDspIDsnLzroZwg66ee7LaY64ukLlxuICAgIHRoaXMucmVjb25jaWxlVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICB0aGlzLnJlY29uY2lsZSgpLmNhdGNoKChlKSA9PlxuICAgICAgICBsb2dnZXIud2FybihgcGVyaW9kaWMgcmVjb25jaWxlIGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKSxcbiAgICAgICk7XG4gICAgfSwgUkVDT05DSUxFX0lOVEVSVkFMX01TKTtcbiAgfVxuXG4gIGFzeW5jIGNvbm5lY3RBbmRSZWNvbmNpbGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5jb25uZWN0QW5kTGlzdGVuKCk7XG4gICAgYXdhaXQgdGhpcy5yZWNvbmNpbGUoKTtcbiAgICB0aGlzLmF0dGVtcHQgPSAwO1xuICB9XG5cbiAgYXN5bmMgY29ubmVjdEFuZExpc3RlbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgQ2xpZW50KHtcbiAgICAgIC4uLnRoaXMuY29ubkNvbmZpZyxcbiAgICAgIGNvbm5lY3Rpb25UaW1lb3V0TWlsbGlzOiBDT05ORUNUSU9OX1RJTUVPVVRfTVMsXG4gICAgICBrZWVwQWxpdmU6IHRydWUsXG4gICAgICBrZWVwQWxpdmVJbml0aWFsRGVsYXlNaWxsaXM6IDEwXzAwMCxcbiAgICAgIGFwcGxpY2F0aW9uX25hbWU6IFwicWdyaWQtbGlzdGVuZXJcIixcbiAgICB9KTtcblxuICAgIGNsaWVudC5vbihcImVycm9yXCIsIChlKSA9PiB7XG4gICAgICBsb2dnZXIud2Fybihgc3Vic2NyaWJlciBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB0aGlzLnJldHJ5TGF0ZXIoKTtcbiAgICB9KTtcbiAgICBjbGllbnQub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLnNodXRkb3duUmVxdWVzdGVkKSB0aGlzLnJldHJ5TGF0ZXIoKTtcbiAgICB9KTtcbiAgICBjbGllbnQub24oXCJub3RpZmljYXRpb25cIiwgKG1zZykgPT4ge1xuICAgICAgaWYgKG1zZy5jaGFubmVsICE9PSBUT0tFTlNfQ0hBTkdFRCB8fCAhbXNnLnBheWxvYWQpIHJldHVybjtcbiAgICAgIHRoaXMuaGFuZGxlTm90aWZpY2F0aW9uKG1zZy5wYXlsb2FkKS5jYXRjaCgoZSkgPT5cbiAgICAgICAgbG9nZ2VyLndhcm4oYGhhbmRsZSBOT1RJRlkgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjbGllbnQuY29ubmVjdCgpO1xuICAgICAgYXdhaXQgY2xpZW50LnF1ZXJ5KFwiU0VUIHN0YXRlbWVudF90aW1lb3V0ID0gMFwiKTtcbiAgICAgIGF3YWl0IGNsaWVudC5xdWVyeShcIlNFVCBpZGxlX2luX3RyYW5zYWN0aW9uX3Nlc3Npb25fdGltZW91dCA9IDBcIik7XG4gICAgICBhd2FpdCBjbGllbnQucXVlcnkoYExJU1RFTiAke2NsaWVudC5lc2NhcGVJZGVudGlmaWVyKFRPS0VOU19DSEFOR0VEKX1gKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjbGllbnQucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICBhd2FpdCBjbGllbnQuZW5kKCkuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcbiAgICB0aGlzLmNvbm5lY3RlZEF0ID0gbmV3IERhdGUoKTtcbiAgICBsb2dnZXIuaW5mbyhgc3Vic2NyaWJlZCB0byAke1RPS0VOU19DSEFOR0VEfWApO1xuICB9XG5cbiAgcmV0cnlMYXRlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zaHV0ZG93blJlcXVlc3RlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLnJlY29ubmVjdFRpbWVyKSByZXR1cm47XG5cbiAgICB2b2lkIHRoaXMuY2xvc2VDbGllbnQoKTtcbiAgICB0aGlzLmF0dGVtcHQgKz0gMTtcbiAgICBjb25zdCBjYXAgPSBNYXRoLm1pbihCQUNLT0ZGX0JBU0VfTVMgKiAyICoqIHRoaXMuYXR0ZW1wdCwgQkFDS09GRl9DQVBfTVMpO1xuICAgIGNvbnN0IGRlbGF5ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2FwKTtcbiAgICBsb2dnZXIuaW5mbyhgcmVjb25uZWN0aW5nIGluICR7ZGVsYXl9bXMgKGF0dGVtcHQgJHt0aGlzLmF0dGVtcHR9KWApO1xuICAgIHRoaXMucmVjb25uZWN0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucmVjb25uZWN0VGltZXIgPSBudWxsO1xuICAgICAgdGhpcy5jb25uZWN0QW5kUmVjb25jaWxlKCkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYHN1YnNjcmliZXIgcmVjb25uZWN0IGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICAgICAgdGhpcy5yZXRyeUxhdGVyKCk7XG4gICAgICB9KTtcbiAgICB9LCBkZWxheSk7XG4gIH1cblxuICBhc3luYyBjbG9zZUNsaWVudCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmNsaWVudDtcbiAgICBpZiAoIWNsaWVudCkgcmV0dXJuO1xuXG4gICAgdGhpcy5jbGllbnQgPSBudWxsO1xuICAgIGNsaWVudC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICBhd2FpdCBjbGllbnQuZW5kKCkuY2F0Y2goKCkgPT4ge30pO1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlTm90aWZpY2F0aW9uKHBheWxvYWRKc29uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5lbnF1ZXVlT3BlcmF0aW9uKCgpID0+IHRoaXMuaGFuZGxlTm90aWZpY2F0aW9uTm93KHBheWxvYWRKc29uKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZU5vdGlmaWNhdGlvbk5vdyhwYXlsb2FkSnNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGF5bG9hZCA9IEpTT04ucGFyc2UocGF5bG9hZEpzb24pIGFzIFBheWxvYWQ7XG4gICAgY29uc3QgcHJldmlvdXNSb3cgPSB0aGlzLnRva2VuQ2hhbmdlSGFuZGxlclxuICAgICAgPyB0aGlzLmRpc3BhdGNoZXIudG9rZW5zLmdldChwYXlsb2FkLmlkKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgd2FzS2VlcGFsaXZlVGFyZ2V0ID0gcHJldmlvdXNSb3c/LmFjdGl2ZSA9PT0gdHJ1ZSAmJiBwcmV2aW91c1Jvdy5wcm92aWRlciA9PT0gXCJhbnRocm9waWNcIjtcbiAgICBpZiAocGF5bG9hZC5vcCA9PT0gXCJERUxFVEVcIikge1xuICAgICAgdGhpcy5kaXNwYXRjaGVyLnJlbW92ZUNhY2hlKHBheWxvYWQuaWQpO1xuICAgICAgYXdhaXQgdGhpcy5kaXNwYXRjaGVyLm9wZW5haURpc3BhdGNoZXJcbiAgICAgICAgPy5vblRva2VuUmVtb3ZlZChwYXlsb2FkLmlkKVxuICAgICAgICAuY2F0Y2goKGUpID0+IGxvZ2dlci53YXJuKGBvcGVuYWkgdG9rZW4gcmVtb3ZlIGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKSk7XG4gICAgICAvLyBhbnRocm9waWMg7Yag7YGwIOydtOuypO2KuOuKlCDrj5nquLAodm9pZCkg4oCUIHByb3ZpZGVyIOulvCDrqqjrpbTrr4DroZwg66y07ZW07ZWY6rKMIO2VreyDgSDsoJzqsbAg7Iuc64+ELlxuICAgICAgdGhpcy5kaXNwYXRjaGVyLmFudGhyb3BpY0Rpc3BhdGNoZXI/Lm9uVG9rZW5SZW1vdmVkKHBheWxvYWQuaWQpO1xuICAgICAgbG9nZ2VyLmluZm8oYE5PVElGWSAke3BheWxvYWQub3B9IGlkPSR7cGF5bG9hZC5pZH0g4oaSIHJlbW92ZWQgZnJvbSBjYWNoZWApO1xuICAgICAgaWYgKHByZXZpb3VzUm93ID09PSB1bmRlZmluZWQgfHwgd2FzS2VlcGFsaXZlVGFyZ2V0KSB0aGlzLm5vdGlmeVRva2Vuc0NoYW5nZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgcm93ID0gYXdhaXQgVG9rZW5Nb2RlbC5maW5kT25lKFwiQVwiLCB7IGlkOiBwYXlsb2FkLmlkIH0pO1xuICAgIGlmICghcm93KSB7XG4gICAgICB0aGlzLmRpc3BhdGNoZXIucmVtb3ZlQ2FjaGUocGF5bG9hZC5pZCk7XG4gICAgICBhd2FpdCB0aGlzLmRpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlclxuICAgICAgICA/Lm9uVG9rZW5SZW1vdmVkKHBheWxvYWQuaWQpXG4gICAgICAgIC5jYXRjaCgoZSkgPT4gbG9nZ2VyLndhcm4oYG9wZW5haSB0b2tlbiByZW1vdmUgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApKTtcbiAgICAgIHRoaXMuZGlzcGF0Y2hlci5hbnRocm9waWNEaXNwYXRjaGVyPy5vblRva2VuUmVtb3ZlZChwYXlsb2FkLmlkKTtcbiAgICAgIGxvZ2dlci5pbmZvKGBOT1RJRlkgJHtwYXlsb2FkLm9wfSBpZD0ke3BheWxvYWQuaWR9IOKGkiBtaXNzaW5nLCByZW1vdmVkIGZyb20gY2FjaGVgKTtcbiAgICAgIGlmIChwcmV2aW91c1JvdyA9PT0gdW5kZWZpbmVkIHx8IHdhc0tlZXBhbGl2ZVRhcmdldCkgdGhpcy5ub3RpZnlUb2tlbnNDaGFuZ2VkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kaXNwYXRjaGVyLnVwc2VydENhY2hlKHBheWxvYWQuaWQsIHJvdyk7XG5cbiAgICBpZiAocm93LnByb3ZpZGVyID09PSBcIm9wZW5haVwiKSB7XG4gICAgICBjb25zdCBjcmVkcyA9IHJvdy5jcmVkZW50aWFscyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIGNvbnN0IG9wZW5haURpc3BhdGNoZXIgPSB0aGlzLmRpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlcjtcbiAgICAgIGlmIChwYXlsb2FkLm9wID09PSBcIklOU0VSVFwiICYmIHJvdy5hY3RpdmUpIHtcbiAgICAgICAgYXdhaXQgb3BlbmFpRGlzcGF0Y2hlclxuICAgICAgICAgID8ub25Ub2tlbkFkZGVkKFxuICAgICAgICAgICAgcGF5bG9hZC5pZCxcbiAgICAgICAgICAgIHJvdy5uYW1lLFxuICAgICAgICAgICAgY3JlZHMgYXMgT3BlbkFJQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICByb3cucXVvdGFfdGhyZXNob2xkLFxuICAgICAgICAgICAgcm93LndlaWdodCxcbiAgICAgICAgICApXG4gICAgICAgICAgLmNhdGNoKChlKSA9PiBsb2dnZXIud2Fybihgb3BlbmFpIHRva2VuIGFkZCBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCkpO1xuICAgICAgfSBlbHNlIGlmIChyb3cuYWN0aXZlKSB7XG4gICAgICAgIGlmIChvcGVuYWlEaXNwYXRjaGVyKSB7XG4gICAgICAgICAgYXdhaXQgb3BlbmFpRGlzcGF0Y2hlclxuICAgICAgICAgICAgLm9uVG9rZW5VcGRhdGVkKFxuICAgICAgICAgICAgICBwYXlsb2FkLmlkLFxuICAgICAgICAgICAgICByb3cubmFtZSxcbiAgICAgICAgICAgICAgY3JlZHMgYXMgT3BlbkFJQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgIHJvdy5xdW90YV90aHJlc2hvbGQsXG4gICAgICAgICAgICAgIHJvdy53ZWlnaHQsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAudGhlbigoKSA9PiBvcGVuYWlEaXNwYXRjaGVyLm9uVG9rZW5BY3RpdmF0ZWQocGF5bG9hZC5pZCkpXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IGxvZ2dlci53YXJuKGBvcGVuYWkgdG9rZW4gdXBkYXRlIGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wZW5haURpc3BhdGNoZXI/Lm9uVG9rZW5EZWFjdGl2YXRlZChwYXlsb2FkLmlkKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJvdy5wcm92aWRlciA9PT0gXCJhbnRocm9waWNcIikge1xuICAgICAgLy8gYW50aHJvcGljIO2GoO2BsCDsnbTrsqTtirjripQg64+Z6riwKHZvaWQpLiB3b3JrZXIg6rCAIOyXhuqzoCDtkoAoTWFwKeunjCDqtIDrpqztlZjrr4DroZwg64uo7IicOlxuICAgICAgLy8gIElOU0VSVCDihpIg7LaU6rCALCBhY3RpdmUg66m0IOqwseyLoChvblRva2VuVXBkYXRlZCDqsIAgaWRlbnRpdHkg67OA6rK964+EIOyymOumrCksIGluYWN0aXZlIOuptCDtkoDsl5DshJwg7KCc6rGwLlxuICAgICAgLy8gICjrs4Trj4QgYWN0aXZhdGUvZGVhY3RpdmF0ZSDsvZzrsLHsnbQg7JeG7Ja0IGFjdGl2ZSDthqDquIDsnYQgYWRkL3JlbW92ZSDroZwg66ek7ZWRLilcbiAgICAgIGNvbnN0IGNyZWRzID0gcm93LmNyZWRlbnRpYWxzIGFzIEFudGhyb3BpY0NyZWRlbnRpYWxzO1xuICAgICAgaWYgKHBheWxvYWQub3AgPT09IFwiSU5TRVJUXCIgJiYgcm93LmFjdGl2ZSkge1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIuYW50aHJvcGljRGlzcGF0Y2hlcj8ub25Ub2tlbkFkZGVkKFxuICAgICAgICAgIHBheWxvYWQuaWQsXG4gICAgICAgICAgcm93Lm5hbWUsXG4gICAgICAgICAgY3JlZHMsXG4gICAgICAgICAgcm93LnF1b3RhX3RocmVzaG9sZCxcbiAgICAgICAgICByb3cud2VpZ2h0LFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChyb3cuYWN0aXZlKSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlci5hbnRocm9waWNEaXNwYXRjaGVyPy5vblRva2VuVXBkYXRlZChcbiAgICAgICAgICBwYXlsb2FkLmlkLFxuICAgICAgICAgIHJvdy5uYW1lLFxuICAgICAgICAgIGNyZWRzLFxuICAgICAgICAgIHJvdy5xdW90YV90aHJlc2hvbGQsXG4gICAgICAgICAgcm93LndlaWdodCxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGluYWN0aXZlIOuptCBJTlNFUlQg65OgIFVQREFURSDrk6Ag7ZKA7JeQIOuEo+yngCDslYrripTri6QuXG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlci5hbnRocm9waWNEaXNwYXRjaGVyPy5vblRva2VuUmVtb3ZlZChwYXlsb2FkLmlkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbG9nZ2VyLmluZm8oYE5PVElGWSAke3BheWxvYWQub3B9IGlkPSR7cGF5bG9hZC5pZH0gKCR7cm93Lm5hbWV9KSBhY3RpdmU9JHtyb3cuYWN0aXZlfWApO1xuICAgIGNvbnN0IGlzS2VlcGFsaXZlVGFyZ2V0ID0gcm93LmFjdGl2ZSAmJiByb3cucHJvdmlkZXIgPT09IFwiYW50aHJvcGljXCI7XG4gICAgaWYgKHdhc0tlZXBhbGl2ZVRhcmdldCAhPT0gaXNLZWVwYWxpdmVUYXJnZXQpIHRoaXMubm90aWZ5VG9rZW5zQ2hhbmdlZCgpO1xuICB9XG5cbiAgYXN5bmMgcmVjb25jaWxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmVucXVldWVPcGVyYXRpb24oKCkgPT4gdGhpcy5yZWNvbmNpbGVOb3coKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlY29uY2lsZU5vdygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwcmV2aW91c0FudGhyb3BpY0lkcyA9IHRoaXMudG9rZW5DaGFuZ2VIYW5kbGVyXG4gICAgICA/IG5ldyBTZXQoXG4gICAgICAgICAgWy4uLnRoaXMuZGlzcGF0Y2hlci50b2tlbnMudmFsdWVzKCldXG4gICAgICAgICAgICAuZmlsdGVyKChyb3cpID0+IHJvdy5hY3RpdmUgJiYgcm93LnByb3ZpZGVyID09PSBcImFudGhyb3BpY1wiKVxuICAgICAgICAgICAgLm1hcCgocm93KSA9PiByb3cuaWQpLFxuICAgICAgICApXG4gICAgICA6IG51bGw7XG4gICAgY29uc3Qgcm93cyA9IGF3YWl0IFRva2VuTW9kZWwuZmluZEFjdGl2ZShcIkFcIik7XG4gICAgdGhpcy5kaXNwYXRjaGVyLnJlcGxhY2VDYWNoZShyb3dzKTtcbiAgICAvLyBOT1RJRlkg7Jyg7IukIOuMgOu5hDogQW50aHJvcGljRGlzcGF0Y2hlciDtkoDrj4QgREIgYWN0aXZlIGFudGhyb3BpYyDthqDtgbAg6riw7KSA7Jy866GcIOyerOuPmeq4sO2ZlC5cbiAgICAvLyAocm93cyDripQgYWN0aXZlIOunjCDigJQgaW5hY3RpdmUv7IKt7KCc65CcIO2GoO2BsOydgCDsl6zquLAg7JeG7Jy866+A66GcIHJlcGxhY2VUb2tlbnMg6rCAIO2SgOyXkOyEnCDsoJzqsbDtlZzri6QuKVxuICAgIGNvbnN0IGFudGhyb3BpY1Jvd3MgPSByb3dzXG4gICAgICAuZmlsdGVyKChyKSA9PiByLnByb3ZpZGVyID09PSBcImFudGhyb3BpY1wiKVxuICAgICAgLm1hcCgocikgPT4gKHtcbiAgICAgICAgaWQ6IHIuaWQsXG4gICAgICAgIG5hbWU6IHIubmFtZSxcbiAgICAgICAgY3JlZGVudGlhbHM6IHIuY3JlZGVudGlhbHMgYXMgQW50aHJvcGljQ3JlZGVudGlhbHMsXG4gICAgICAgIHF1b3RhVGhyZXNob2xkOiByLnF1b3RhX3RocmVzaG9sZCxcbiAgICAgICAgd2VpZ2h0OiByLndlaWdodCxcbiAgICAgIH0pKTtcbiAgICB0aGlzLmRpc3BhdGNoZXIuYW50aHJvcGljRGlzcGF0Y2hlcj8ucmVwbGFjZVRva2VucyhhbnRocm9waWNSb3dzKTtcbiAgICBjb25zdCBvcGVuYWlSb3dzID0gcm93c1xuICAgICAgLmZpbHRlcigocikgPT4gci5wcm92aWRlciA9PT0gXCJvcGVuYWlcIilcbiAgICAgIC5tYXAoKHIpID0+ICh7XG4gICAgICAgIGlkOiByLmlkLFxuICAgICAgICBuYW1lOiByLm5hbWUsXG4gICAgICAgIGNyZWRlbnRpYWxzOiByLmNyZWRlbnRpYWxzIGFzIE9wZW5BSUNyZWRlbnRpYWxzLFxuICAgICAgICBxdW90YVRocmVzaG9sZDogci5xdW90YV90aHJlc2hvbGQsXG4gICAgICAgIHdlaWdodDogci53ZWlnaHQsXG4gICAgICB9KSk7XG4gICAgYXdhaXQgdGhpcy5kaXNwYXRjaGVyLm9wZW5haURpc3BhdGNoZXJcbiAgICAgID8ucmVwbGFjZVRva2VucyhvcGVuYWlSb3dzKVxuICAgICAgLmNhdGNoKChlKSA9PiBsb2dnZXIud2Fybihgb3BlbmFpIHJlY29uY2lsZSBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCkpO1xuICAgIHRoaXMubGFzdFJlY29uY2lsZUF0ID0gbmV3IERhdGUoKTtcbiAgICBpZiAoXG4gICAgICBwcmV2aW91c0FudGhyb3BpY0lkcyAmJlxuICAgICAgKHByZXZpb3VzQW50aHJvcGljSWRzLnNpemUgIT09IGFudGhyb3BpY1Jvd3MubGVuZ3RoIHx8XG4gICAgICAgIGFudGhyb3BpY1Jvd3Muc29tZSgocm93KSA9PiAhcHJldmlvdXNBbnRocm9waWNJZHMuaGFzKHJvdy5pZCkpKVxuICAgICkge1xuICAgICAgdGhpcy5ub3RpZnlUb2tlbnNDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbnF1ZXVlT3BlcmF0aW9uKG9wZXJhdGlvbjogKCkgPT4gUHJvbWlzZTx2b2lkPik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG5leHQgPSB0aGlzLm9wZXJhdGlvbkNoYWluLnRoZW4ob3BlcmF0aW9uLCBvcGVyYXRpb24pO1xuICAgIHRoaXMub3BlcmF0aW9uQ2hhaW4gPSBuZXh0LmNhdGNoKCgpID0+IHt9KTtcbiAgICByZXR1cm4gbmV4dDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7OztBQVNBLE1BQU0sU0FBUyxVQUFVLENBQUMsU0FBUyxZQUFZLENBQUM7QUFFaEQsTUFBTSxpQkFBaUI7QUFDdkIsTUFBTSx3QkFBd0IsTUFBVTtBQUN4QyxNQUFN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
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { getSetting } from "../setting/setting.store.js";
|
|
2
|
+
import { TokenModel } from "../token/token.model.js";
|
|
3
|
+
import { QgridFrame } from "./qgrid.frame.js";
|
|
4
|
+
import { getLogger } from "@logtape/logtape";
|
|
5
|
+
//#region src/application/qgrid/token-window-keepalive.ts
|
|
6
|
+
const logger = getLogger(["qgrid", "token-window-keepalive"]);
|
|
7
|
+
const FIVE_HOURS_MS = 300 * 60 * 1e3;
|
|
8
|
+
const RESET_GRACE_MS = 1e3;
|
|
9
|
+
const POST_KEEPALIVE_USAGE_DELAY_MS = 61e3;
|
|
10
|
+
const KEEPALIVE_MODEL = "anthropic/claude-haiku-4-5";
|
|
11
|
+
const KEEPALIVE_PROJECT_NAME = "qgrid-token-window-keepalive";
|
|
12
|
+
const KEEPALIVE_SETTING_KEY = "qgrid.tokenWindowKeepaliveEnabled";
|
|
13
|
+
const KEEPALIVE_ENV_KEY = "QGRID_TOKEN_WINDOW_KEEPALIVE_ENABLED";
|
|
14
|
+
const defaultDeps = {
|
|
15
|
+
findTokens: () => TokenModel.findActiveByProvider("A", "anthropic"),
|
|
16
|
+
readUsage: (tokenId) => QgridFrame.usage(tokenId),
|
|
17
|
+
dispatch: (input) => QgridFrame.query(input),
|
|
18
|
+
readSetting: getSetting,
|
|
19
|
+
now: () => Date.now(),
|
|
20
|
+
setTimer: (callback, delayMs) => setTimeout(callback, delayMs),
|
|
21
|
+
clearTimer: (handle) => clearTimeout(handle)
|
|
22
|
+
};
|
|
23
|
+
const timers = /* @__PURE__ */ new Map();
|
|
24
|
+
const fireGuards = /* @__PURE__ */ new Map();
|
|
25
|
+
let generation = 0;
|
|
26
|
+
function clearTokenTimer(tokenId) {
|
|
27
|
+
const timer = timers.get(tokenId);
|
|
28
|
+
if (!timer) return;
|
|
29
|
+
timer.clear(timer.handle);
|
|
30
|
+
timers.delete(tokenId);
|
|
31
|
+
}
|
|
32
|
+
function scheduleToken(token, deps, expectedGeneration, delayMs, allowFire) {
|
|
33
|
+
if (generation !== expectedGeneration) return;
|
|
34
|
+
clearTokenTimer(token.id);
|
|
35
|
+
const handle = deps.setTimer(() => {
|
|
36
|
+
timers.delete(token.id);
|
|
37
|
+
if (generation !== expectedGeneration) return;
|
|
38
|
+
inspectToken(token, deps, expectedGeneration, allowFire).catch((error) => {
|
|
39
|
+
logger.warn(`keepalive cycle failed for ${token.name}: ${error.message}`);
|
|
40
|
+
scheduleFallback(token, deps, expectedGeneration);
|
|
41
|
+
});
|
|
42
|
+
}, Math.max(0, delayMs));
|
|
43
|
+
timers.set(token.id, {
|
|
44
|
+
handle,
|
|
45
|
+
clear: deps.clearTimer
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
function deferToken(token, deps, expectedGeneration, delayMs, allowFireAtExpiry) {
|
|
49
|
+
const untilMs = deps.now() + delayMs;
|
|
50
|
+
fireGuards.set(token.id, {
|
|
51
|
+
untilMs,
|
|
52
|
+
allowFireAtExpiry
|
|
53
|
+
});
|
|
54
|
+
scheduleToken(token, deps, expectedGeneration, delayMs, allowFireAtExpiry);
|
|
55
|
+
}
|
|
56
|
+
function scheduleFallback(token, deps, expectedGeneration) {
|
|
57
|
+
deferToken(token, deps, expectedGeneration, FIVE_HOURS_MS, true);
|
|
58
|
+
}
|
|
59
|
+
async function inspectToken(token, deps, expectedGeneration, allowFire) {
|
|
60
|
+
const now = deps.now();
|
|
61
|
+
const guard = fireGuards.get(token.id);
|
|
62
|
+
if (guard && guard.untilMs > now) {
|
|
63
|
+
scheduleToken(token, deps, expectedGeneration, guard.untilMs - now, guard.allowFireAtExpiry);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
if (guard) fireGuards.delete(token.id);
|
|
67
|
+
let usage;
|
|
68
|
+
try {
|
|
69
|
+
usage = await deps.readUsage(token.id);
|
|
70
|
+
} catch (error) {
|
|
71
|
+
logger.warn(`usage lookup failed for ${token.name}: ${error.message}`);
|
|
72
|
+
scheduleFallback(token, deps, expectedGeneration);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (generation !== expectedGeneration) return;
|
|
76
|
+
if (usage.error) {
|
|
77
|
+
logger.warn(`usage lookup failed for ${token.name}: ${usage.error}`);
|
|
78
|
+
scheduleFallback(token, deps, expectedGeneration);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
const resetsAt = usage.fiveHour?.resetsAt;
|
|
82
|
+
if (resetsAt) {
|
|
83
|
+
const resetMs = Date.parse(resetsAt);
|
|
84
|
+
if (!Number.isFinite(resetMs)) {
|
|
85
|
+
logger.warn(`invalid five-hour reset for ${token.name}: ${resetsAt}`);
|
|
86
|
+
scheduleFallback(token, deps, expectedGeneration);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const inspectedAt = deps.now();
|
|
90
|
+
if (resetMs > inspectedAt) {
|
|
91
|
+
fireGuards.delete(token.id);
|
|
92
|
+
scheduleToken(token, deps, expectedGeneration, resetMs - inspectedAt + RESET_GRACE_MS, true);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
if (!allowFire) {
|
|
97
|
+
scheduleFallback(token, deps, expectedGeneration);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
deferToken(token, deps, expectedGeneration, POST_KEEPALIVE_USAGE_DELAY_MS, false);
|
|
101
|
+
try {
|
|
102
|
+
await deps.dispatch({
|
|
103
|
+
prompt: "Reply OK.",
|
|
104
|
+
model: KEEPALIVE_MODEL,
|
|
105
|
+
effort: "low",
|
|
106
|
+
projectName: KEEPALIVE_PROJECT_NAME,
|
|
107
|
+
preferredTokenId: token.id
|
|
108
|
+
});
|
|
109
|
+
logger.info(`keepalive sent for ${token.name}`);
|
|
110
|
+
} catch (error) {
|
|
111
|
+
logger.warn(`keepalive failed for ${token.name}: ${error.message}`);
|
|
112
|
+
scheduleFallback(token, deps, expectedGeneration);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const postFireGuard = fireGuards.get(token.id);
|
|
116
|
+
if (postFireGuard) scheduleToken(token, deps, expectedGeneration, Math.max(0, postFireGuard.untilMs - deps.now()), postFireGuard.allowFireAtExpiry);
|
|
117
|
+
}
|
|
118
|
+
function clearScheduledTimers() {
|
|
119
|
+
generation++;
|
|
120
|
+
for (const tokenId of timers.keys()) clearTokenTimer(tokenId);
|
|
121
|
+
}
|
|
122
|
+
async function startTokenWindowKeepalive(deps = defaultDeps) {
|
|
123
|
+
clearScheduledTimers();
|
|
124
|
+
if (deps.readSetting("qgrid.tokenWindowKeepaliveEnabled", "QGRID_TOKEN_WINDOW_KEEPALIVE_ENABLED") === "false") {
|
|
125
|
+
logger.info("token window keepalive disabled");
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
const expectedGeneration = generation;
|
|
129
|
+
let tokens;
|
|
130
|
+
try {
|
|
131
|
+
tokens = await deps.findTokens();
|
|
132
|
+
} catch (error) {
|
|
133
|
+
logger.warn(`token discovery failed: ${error.message}`);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
if (generation !== expectedGeneration) return;
|
|
137
|
+
const targets = tokens.filter((token) => token.active && token.provider === "anthropic");
|
|
138
|
+
const targetIds = new Set(targets.map((token) => token.id));
|
|
139
|
+
for (const tokenId of fireGuards.keys()) if (!targetIds.has(tokenId)) fireGuards.delete(tokenId);
|
|
140
|
+
logger.info(`token window keepalive scheduling ${targets.length} token(s)`);
|
|
141
|
+
await Promise.all(targets.map((token) => inspectToken(token, deps, expectedGeneration, true)));
|
|
142
|
+
}
|
|
143
|
+
function rescheduleTokenWindowKeepalive(deps = defaultDeps) {
|
|
144
|
+
return startTokenWindowKeepalive(deps);
|
|
145
|
+
}
|
|
146
|
+
function stopTokenWindowKeepalive() {
|
|
147
|
+
clearScheduledTimers();
|
|
148
|
+
fireGuards.clear();
|
|
149
|
+
}
|
|
150
|
+
//#endregion
|
|
151
|
+
export { KEEPALIVE_ENV_KEY, KEEPALIVE_MODEL, KEEPALIVE_PROJECT_NAME, KEEPALIVE_SETTING_KEY, POST_KEEPALIVE_USAGE_DELAY_MS, rescheduleTokenWindowKeepalive, startTokenWindowKeepalive, stopTokenWindowKeepalive };
|
|
152
|
+
|
|
153
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4td2luZG93LWtlZXBhbGl2ZS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvdG9rZW4td2luZG93LWtlZXBhbGl2ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuXG5pbXBvcnQgeyBnZXRTZXR0aW5nIH0gZnJvbSBcIi4uL3NldHRpbmcvc2V0dGluZy5zdG9yZVwiO1xuaW1wb3J0IHsgVG9rZW5Nb2RlbCB9IGZyb20gXCIuLi90b2tlbi90b2tlbi5tb2RlbFwiO1xuaW1wb3J0IHsgdHlwZSBJbnRlcm5hbFF1ZXJ5SW5wdXQgfSBmcm9tIFwiLi9xZ3JpZC5kaXNwYXRjaGVyXCI7XG5pbXBvcnQgeyBRZ3JpZEZyYW1lIH0gZnJvbSBcIi4vcWdyaWQuZnJhbWVcIjtcbmltcG9ydCB7IHR5cGUgVXNhZ2VSZXNwb25zZSB9IGZyb20gXCIuL3FncmlkLnR5cGVzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcihbXCJxZ3JpZFwiLCBcInRva2VuLXdpbmRvdy1rZWVwYWxpdmVcIl0pO1xuXG5jb25zdCBGSVZFX0hPVVJTX01TID0gNSAqIDYwICogNjAgKiAxXzAwMDtcbmNvbnN0IFJFU0VUX0dSQUNFX01TID0gMV8wMDA7XG5cbi8vIHVzYWdlIEFQSSDshLHqs7Ug7J2R64u17J2AIDHrtoQg7LqQ7Iuc65Cc64ukLiBrZWVwYWxpdmUg7KeB7ZuEIOymieyLnCDsnqzsobDtmoztlZjrqbQg7J207KCEIOyciOuPhOyasOulvFxuLy8g64uk7IucIOuztOuvgOuhnCDsupDsi5zqsIAg7KeA64KcIOuSpCDtlZwg67KIIO2ZleyduO2VmOqzoCwg6re465WM64+EIOyDiCDsnIjrj4TsmrDqsIAg7JeG7Jy866m0IOuLpOydjCA1aOq5jOyngCDquLDri6TrprDri6QuXG5leHBvcnQgY29uc3QgUE9TVF9LRUVQQUxJVkVfVVNBR0VfREVMQVlfTVMgPSA2MV8wMDA7XG5leHBvcnQgY29uc3QgS0VFUEFMSVZFX01PREVMID0gXCJhbnRocm9waWMvY2xhdWRlLWhhaWt1LTQtNVwiO1xuZXhwb3J0IGNvbnN0IEtFRVBBTElWRV9QUk9KRUNUX05BTUUgPSBcInFncmlkLXRva2VuLXdpbmRvdy1rZWVwYWxpdmVcIjtcbmV4cG9ydCBjb25zdCBLRUVQQUxJVkVfU0VUVElOR19LRVkgPSBcInFncmlkLnRva2VuV2luZG93S2VlcGFsaXZlRW5hYmxlZFwiO1xuZXhwb3J0IGNvbnN0IEtFRVBBTElWRV9FTlZfS0VZID0gXCJRR1JJRF9UT0tFTl9XSU5ET1dfS0VFUEFMSVZFX0VOQUJMRURcIjtcblxudHlwZSBLZWVwYWxpdmVUb2tlbiA9IHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBwcm92aWRlcjogc3RyaW5nO1xuICBhY3RpdmU6IGJvb2xlYW47XG59O1xuXG50eXBlIFRpbWVySGFuZGxlID0gUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG5cbmV4cG9ydCB0eXBlIFRva2VuV2luZG93S2VlcGFsaXZlRGVwcyA9IHtcbiAgZmluZFRva2VuczogKCkgPT4gUHJvbWlzZTxLZWVwYWxpdmVUb2tlbltdPjtcbiAgcmVhZFVzYWdlOiAodG9rZW5JZDogbnVtYmVyKSA9PiBQcm9taXNlPFVzYWdlUmVzcG9uc2U+O1xuICBkaXNwYXRjaDogKGlucHV0OiBJbnRlcm5hbFF1ZXJ5SW5wdXQpID0+IFByb21pc2U8dW5rbm93bj47XG4gIHJlYWRTZXR0aW5nOiB0eXBlb2YgZ2V0U2V0dGluZztcbiAgbm93OiAoKSA9PiBudW1iZXI7XG4gIHNldFRpbWVyOiAoY2FsbGJhY2s6ICgpID0+IHZvaWQsIGRlbGF5TXM6IG51bWJlcikgPT4gVGltZXJIYW5kbGU7XG4gIGNsZWFyVGltZXI6IChoYW5kbGU6IFRpbWVySGFuZGxlKSA9PiB2b2lkO1xufTtcblxuY29uc3QgZGVmYXVsdERlcHM6IFRva2VuV2luZG93S2VlcGFsaXZlRGVwcyA9IHtcbiAgZmluZFRva2VuczogKCkgPT4gVG9rZW5Nb2RlbC5maW5kQWN0aXZlQnlQcm92aWRlcihcIkFcIiwgXCJhbnRocm9waWNcIiksXG4gIHJlYWRVc2FnZTogKHRva2VuSWQpID0+IFFncmlkRnJhbWUudXNhZ2UodG9rZW5JZCksXG4gIGRpc3BhdGNoOiAoaW5wdXQpID0+IFFncmlkRnJhbWUucXVlcnkoaW5wdXQpLFxuICByZWFkU2V0dGluZzogZ2V0U2V0dGluZyxcbiAgbm93OiAoKSA9PiBEYXRlLm5vdygpLFxuICBzZXRUaW1lcjogKGNhbGxiYWNrLCBkZWxheU1zKSA9PiBzZXRUaW1lb3V0KGNhbGxiYWNrLCBkZWxheU1zKSxcbiAgY2xlYXJUaW1lcjogKGhhbmRsZSkgPT4gY2xlYXJUaW1lb3V0KGhhbmRsZSksXG59O1xuXG5jb25zdCB0aW1lcnMgPSBuZXcgTWFwPG51bWJlciwgeyBoYW5kbGU6IFRpbWVySGFuZGxlOyBjbGVhcjogKGhhbmRsZTogVGltZXJIYW5kbGUpID0+IHZvaWQgfT4oKTtcbmNvbnN0IGZpcmVHdWFyZHMgPSBuZXcgTWFwPG51bWJlciwgeyB1bnRpbE1zOiBudW1iZXI7IGFsbG93RmlyZUF0RXhwaXJ5OiBib29sZWFuIH0+KCk7XG5sZXQgZ2VuZXJhdGlvbiA9IDA7XG5cbmZ1bmN0aW9uIGNsZWFyVG9rZW5UaW1lcih0b2tlbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgY29uc3QgdGltZXIgPSB0aW1lcnMuZ2V0KHRva2VuSWQpO1xuICBpZiAoIXRpbWVyKSByZXR1cm47XG4gIHRpbWVyLmNsZWFyKHRpbWVyLmhhbmRsZSk7XG4gIHRpbWVycy5kZWxldGUodG9rZW5JZCk7XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlVG9rZW4oXG4gIHRva2VuOiBLZWVwYWxpdmVUb2tlbixcbiAgZGVwczogVG9rZW5XaW5kb3dLZWVwYWxpdmVEZXBzLFxuICBleHBlY3RlZEdlbmVyYXRpb246IG51bWJlcixcbiAgZGVsYXlNczogbnVtYmVyLFxuICBhbGxvd0ZpcmU6IGJvb2xlYW4sXG4pOiB2b2lkIHtcbiAgaWYgKGdlbmVyYXRpb24gIT09IGV4cGVjdGVkR2VuZXJhdGlvbikgcmV0dXJuO1xuICBjbGVhclRva2VuVGltZXIodG9rZW4uaWQpO1xuICBjb25zdCBoYW5kbGUgPSBkZXBzLnNldFRpbWVyKFxuICAgICgpID0+IHtcbiAgICAgIHRpbWVycy5kZWxldGUodG9rZW4uaWQpO1xuICAgICAgaWYgKGdlbmVyYXRpb24gIT09IGV4cGVjdGVkR2VuZXJhdGlvbikgcmV0dXJuO1xuICAgICAgdm9pZCBpbnNwZWN0VG9rZW4odG9rZW4sIGRlcHMsIGV4cGVjdGVkR2VuZXJhdGlvbiwgYWxsb3dGaXJlKS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYGtlZXBhbGl2ZSBjeWNsZSBmYWlsZWQgZm9yICR7dG9rZW4ubmFtZX06ICR7KGVycm9yIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgICBzY2hlZHVsZUZhbGxiYWNrKHRva2VuLCBkZXBzLCBleHBlY3RlZEdlbmVyYXRpb24pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBNYXRoLm1heCgwLCBkZWxheU1zKSxcbiAgKTtcbiAgdGltZXJzLnNldCh0b2tlbi5pZCwgeyBoYW5kbGUsIGNsZWFyOiBkZXBzLmNsZWFyVGltZXIgfSk7XG59XG5cbmZ1bmN0aW9uIGRlZmVyVG9rZW4oXG4gIHRva2VuOiBLZWVwYWxpdmVUb2tlbixcbiAgZGVwczogVG9rZW5XaW5kb3dLZWVwYWxpdmVEZXBzLFxuICBleHBlY3RlZEdlbmVyYXRpb246IG51bWJlcixcbiAgZGVsYXlNczogbnVtYmVyLFxuICBhbGxvd0ZpcmVBdEV4cGlyeTogYm9vbGVhbixcbik6IHZvaWQge1xuICBjb25zdCB1bnRpbE1zID0gZGVwcy5ub3coKSArIGRlbGF5TXM7XG4gIGZpcmVHdWFyZHMuc2V0KHRva2VuLmlkLCB7IHVudGlsTXMsIGFsbG93RmlyZUF0RXhwaXJ5IH0pO1xuICBzY2hlZHVsZVRva2VuKHRva2VuLCBkZXBzLCBleHBlY3RlZEdlbmVyYXRpb24sIGRlbGF5TXMsIGFsbG93RmlyZUF0RXhwaXJ5KTtcbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVGYWxsYmFjayhcbiAgdG9rZW46IEtlZXBhbGl2ZVRva2VuLFxuICBkZXBzOiBUb2tlbldpbmRvd0tlZXBhbGl2ZURlcHMsXG4gIGV4cGVjdGVkR2VuZXJhdGlvbjogbnVtYmVyLFxuKTogdm9pZCB7XG4gIGRlZmVyVG9rZW4odG9rZW4sIGRlcHMsIGV4cGVjdGVkR2VuZXJhdGlvbiwgRklWRV9IT1VSU19NUywgdHJ1ZSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGluc3BlY3RUb2tlbihcbiAgdG9rZW46IEtlZXBhbGl2ZVRva2VuLFxuICBkZXBzOiBUb2tlbldpbmRvd0tlZXBhbGl2ZURlcHMsXG4gIGV4cGVjdGVkR2VuZXJhdGlvbjogbnVtYmVyLFxuICBhbGxvd0ZpcmU6IGJvb2xlYW4sXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgbm93ID0gZGVwcy5ub3coKTtcbiAgY29uc3QgZ3VhcmQgPSBmaXJlR3VhcmRzLmdldCh0b2tlbi5pZCk7XG4gIGlmIChndWFyZCAmJiBndWFyZC51bnRpbE1zID4gbm93KSB7XG4gICAgc2NoZWR1bGVUb2tlbih0b2tlbiwgZGVwcywgZXhwZWN0ZWRHZW5lcmF0aW9uLCBndWFyZC51bnRpbE1zIC0gbm93LCBndWFyZC5hbGxvd0ZpcmVBdEV4cGlyeSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChndWFyZCkgZmlyZUd1YXJkcy5kZWxldGUodG9rZW4uaWQpO1xuXG4gIGxldCB1c2FnZTogVXNhZ2VSZXNwb25zZTtcbiAgdHJ5IHtcbiAgICB1c2FnZSA9IGF3YWl0IGRlcHMucmVhZFVzYWdlKHRva2VuLmlkKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIud2FybihgdXNhZ2UgbG9va3VwIGZhaWxlZCBmb3IgJHt0b2tlbi5uYW1lfTogJHsoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgc2NoZWR1bGVGYWxsYmFjayh0b2tlbiwgZGVwcywgZXhwZWN0ZWRHZW5lcmF0aW9uKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGdlbmVyYXRpb24gIT09IGV4cGVjdGVkR2VuZXJhdGlvbikgcmV0dXJuO1xuXG4gIGlmICh1c2FnZS5lcnJvcikge1xuICAgIGxvZ2dlci53YXJuKGB1c2FnZSBsb29rdXAgZmFpbGVkIGZvciAke3Rva2VuLm5hbWV9OiAke3VzYWdlLmVycm9yfWApO1xuICAgIHNjaGVkdWxlRmFsbGJhY2sodG9rZW4sIGRlcHMsIGV4cGVjdGVkR2VuZXJhdGlvbik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcmVzZXRzQXQgPSB1c2FnZS5maXZlSG91cj8ucmVzZXRzQXQ7XG4gIGlmIChyZXNldHNBdCkge1xuICAgIGNvbnN0IHJlc2V0TXMgPSBEYXRlLnBhcnNlKHJlc2V0c0F0KTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShyZXNldE1zKSkge1xuICAgICAgbG9nZ2VyLndhcm4oYGludmFsaWQgZml2ZS1ob3VyIHJlc2V0IGZvciAke3Rva2VuLm5hbWV9OiAke3Jlc2V0c0F0fWApO1xuICAgICAgc2NoZWR1bGVGYWxsYmFjayh0b2tlbiwgZGVwcywgZXhwZWN0ZWRHZW5lcmF0aW9uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5zcGVjdGVkQXQgPSBkZXBzLm5vdygpO1xuICAgIGlmIChyZXNldE1zID4gaW5zcGVjdGVkQXQpIHtcbiAgICAgIGZpcmVHdWFyZHMuZGVsZXRlKHRva2VuLmlkKTtcbiAgICAgIHNjaGVkdWxlVG9rZW4odG9rZW4sIGRlcHMsIGV4cGVjdGVkR2VuZXJhdGlvbiwgcmVzZXRNcyAtIGluc3BlY3RlZEF0ICsgUkVTRVRfR1JBQ0VfTVMsIHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIC8vIOuwnOyCrCDsp4Htm4Qg7ZmV7J247JeQ7ISc64qUIOy6kOyLnOuQnCBudWxsL+qzvOqxsCByZXNldOydhCDrtJDrj4Qg64uk7IucIOuwnOyCrO2VmOyngCDslYrripTri6QuXG4gIGlmICghYWxsb3dGaXJlKSB7XG4gICAgc2NoZWR1bGVGYWxsYmFjayh0b2tlbiwgZGVwcywgZXhwZWN0ZWRHZW5lcmF0aW9uKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBkZWZlclRva2VuKHRva2VuLCBkZXBzLCBleHBlY3RlZEdlbmVyYXRpb24sIFBPU1RfS0VFUEFMSVZFX1VTQUdFX0RFTEFZX01TLCBmYWxzZSk7XG4gIHRyeSB7XG4gICAgYXdhaXQgZGVwcy5kaXNwYXRjaCh7XG4gICAgICBwcm9tcHQ6IFwiUmVwbHkgT0suXCIsXG4gICAgICBtb2RlbDogS0VFUEFMSVZFX01PREVMLFxuICAgICAgZWZmb3J0OiBcImxvd1wiLFxuICAgICAgcHJvamVjdE5hbWU6IEtFRVBBTElWRV9QUk9KRUNUX05BTUUsXG4gICAgICBwcmVmZXJyZWRUb2tlbklkOiB0b2tlbi5pZCxcbiAgICB9KTtcbiAgICBsb2dnZXIuaW5mbyhga2VlcGFsaXZlIHNlbnQgZm9yICR7dG9rZW4ubmFtZX1gKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIud2Fybihga2VlcGFsaXZlIGZhaWxlZCBmb3IgJHt0b2tlbi5uYW1lfTogJHsoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgc2NoZWR1bGVGYWxsYmFjayh0b2tlbiwgZGVwcywgZXhwZWN0ZWRHZW5lcmF0aW9uKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwb3N0RmlyZUd1YXJkID0gZmlyZUd1YXJkcy5nZXQodG9rZW4uaWQpO1xuICBpZiAocG9zdEZpcmVHdWFyZCkge1xuICAgIHNjaGVkdWxlVG9rZW4oXG4gICAgICB0b2tlbixcbiAgICAgIGRlcHMsXG4gICAgICBleHBlY3RlZEdlbmVyYXRpb24sXG4gICAgICBNYXRoLm1heCgwLCBwb3N0RmlyZUd1YXJkLnVudGlsTXMgLSBkZXBzLm5vdygpKSxcbiAgICAgIHBvc3RGaXJlR3VhcmQuYWxsb3dGaXJlQXRFeHBpcnksXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjbGVhclNjaGVkdWxlZFRpbWVycygpOiB2b2lkIHtcbiAgZ2VuZXJhdGlvbisrO1xuICBmb3IgKGNvbnN0IHRva2VuSWQgb2YgdGltZXJzLmtleXMoKSkgY2xlYXJUb2tlblRpbWVyKHRva2VuSWQpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnRUb2tlbldpbmRvd0tlZXBhbGl2ZShcbiAgZGVwczogVG9rZW5XaW5kb3dLZWVwYWxpdmVEZXBzID0gZGVmYXVsdERlcHMsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY2xlYXJTY2hlZHVsZWRUaW1lcnMoKTtcbiAgaWYgKGRlcHMucmVhZFNldHRpbmcoS0VFUEFMSVZFX1NFVFRJTkdfS0VZLCBLRUVQQUxJVkVfRU5WX0tFWSkgPT09IFwiZmFsc2VcIikge1xuICAgIGxvZ2dlci5pbmZvKFwidG9rZW4gd2luZG93IGtlZXBhbGl2ZSBkaXNhYmxlZFwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZXhwZWN0ZWRHZW5lcmF0aW9uID0gZ2VuZXJhdGlvbjtcblxuICBsZXQgdG9rZW5zOiBLZWVwYWxpdmVUb2tlbltdO1xuICB0cnkge1xuICAgIHRva2VucyA9IGF3YWl0IGRlcHMuZmluZFRva2VucygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ2dlci53YXJuKGB0b2tlbiBkaXNjb3ZlcnkgZmFpbGVkOiAkeyhlcnJvciBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGdlbmVyYXRpb24gIT09IGV4cGVjdGVkR2VuZXJhdGlvbikgcmV0dXJuO1xuXG4gIGNvbnN0IHRhcmdldHMgPSB0b2tlbnMuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4uYWN0aXZlICYmIHRva2VuLnByb3ZpZGVyID09PSBcImFudGhyb3BpY1wiKTtcbiAgY29uc3QgdGFyZ2V0SWRzID0gbmV3IFNldCh0YXJnZXRzLm1hcCgodG9rZW4pID0+IHRva2VuLmlkKSk7XG4gIGZvciAoY29uc3QgdG9rZW5JZCBvZiBmaXJlR3VhcmRzLmtleXMoKSkge1xuICAgIGlmICghdGFyZ2V0SWRzLmhhcyh0b2tlbklkKSkgZmlyZUd1YXJkcy5kZWxldGUodG9rZW5JZCk7XG4gIH1cbiAgbG9nZ2VyLmluZm8oYHRva2VuIHdpbmRvdyBrZWVwYWxpdmUgc2NoZWR1bGluZyAke3RhcmdldHMubGVuZ3RofSB0b2tlbihzKWApO1xuICBhd2FpdCBQcm9taXNlLmFsbCh0YXJnZXRzLm1hcCgodG9rZW4pID0+IGluc3BlY3RUb2tlbih0b2tlbiwgZGVwcywgZXhwZWN0ZWRHZW5lcmF0aW9uLCB0cnVlKSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzY2hlZHVsZVRva2VuV2luZG93S2VlcGFsaXZlKFxuICBkZXBzOiBUb2tlbldpbmRvd0tlZXBhbGl2ZURlcHMgPSBkZWZhdWx0RGVwcyxcbik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gc3RhcnRUb2tlbldpbmRvd0tlZXBhbGl2ZShkZXBzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0b3BUb2tlbldpbmRvd0tlZXBhbGl2ZSgpOiB2b2lkIHtcbiAgY2xlYXJTY2hlZHVsZWRUaW1lcnMoKTtcbiAgZmlyZUd1YXJkcy5jbGVhcigpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7OztBQVFBLE1BQU0sU0FBUyxVQUFVLENBQUMsU0FBUyx3QkFBd0IsQ0FBQztBQUU1RCxNQUFNLGdCQUFnQixNQUFTLEtBQUs7QUFDcEMsTUFBTSxpQkFBaUI7QUFJdkIsTUFBYSxnQ0FBZ0M7QUFDN0MsTUFBYSxrQkFBa0I7QUFDL0IsTUFBYSx5QkFBeUI7QUFDdEMsTUFBYSx3QkFBd0I7QUFDckMsTUFBYSxvQkFBb0I7QUFxQmpDLE1BQU0sY0FBd0M7Q0FDNUMsa0JBQWtCLFdBQVcscUJBQXFCLEtBQUssV0FBVztDQUNsRSxZQUFZLFlBQVksV0FBVyxNQUFNLE9BQU87Q0FDaEQsV0FBVyxVQUFVLFdBQVcsTUFBTSxLQUFLO0NBQzNDLGFBQWE7Q0FDYixX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
|
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
//#region src/application/setting/setting.constant.ts
|
|
2
2
|
const SETTING_DEFS = [
|
|
3
|
+
{
|
|
4
|
+
key: "qgrid.tokenWindowKeepaliveEnabled",
|
|
5
|
+
fallback: "true",
|
|
6
|
+
group: "qgrid",
|
|
7
|
+
envKey: "QGRID_TOKEN_WINDOW_KEEPALIVE_ENABLED",
|
|
8
|
+
label: "토큰 윈도우 keepalive",
|
|
9
|
+
kind: "boolean",
|
|
10
|
+
applies: "immediate",
|
|
11
|
+
help: "끄면 활성 Anthropic 토큰의 5시간 윈도우 자동 유지 요청을 중단합니다"
|
|
12
|
+
},
|
|
3
13
|
{
|
|
4
14
|
key: "slack.enabled",
|
|
5
15
|
fallback: "true",
|
|
@@ -163,4 +173,4 @@ function maskSecret(value) {
|
|
|
163
173
|
//#endregion
|
|
164
174
|
export { SETTING_DEFS, findSettingDef, maskSecret, validateSettingValue };
|
|
165
175
|
|
|
166
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZy5jb25zdGFudC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vc2V0dGluZy9zZXR0aW5nLmNvbnN0YW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog6rSA66asIOqwgOuKpe2VnCDrn7Dtg4DsnoQg7ISk7KCVIOuqqeuhnS5cbiAqXG4gKiDtgqTCt2VudiDsnbTrpoTCt+2DgOyehcK36rKA7Kad7J2EIO2VnCDqs7Psl5Ag66qo7JWEIEFQSSDsmYAgVUkg6rCAIOqwmeydgCDsoJXsnZjrpbwg67O464ukLiDsl6zquLAg7JeG64qUIGVudiDripRcbiAqIO2ZlOuptOyXkOyEnCDrsJTqv4Ag7IiYIOyXhuuLpCDigJQgREIg7KCR7IaNIOygleuztOuCmCDtj6ztirjsspjrn7wg7ISc67KE6rCAIOucqOq4sCDsoITsl5Ag7ZWE7JqU7ZWcIOqwkuuTpOydtOuLpC5cbiAqXG4gKiBgc2V0dGluZ3NgIO2FjOydtOu4lOydgCBgKGtleSwgdmFsdWUpYCDrrLjsnpDsl7Qg7IyN66eMIOuLtOuKlCDqt7jrpofsnbTrnbwoYHNldHRpbmcuZW50aXR5Lmpzb25gKSxcbiAqIFwi7J20IO2CpOqwgCDsoJXsiJjsnbjsp4DCt+uylOychOqwgCDslrzrp4jsnbjsp4DCt+2ZlOuptOyXkCDrrZDrnbzqs6Ag7JO47KeAXCLrpbwg64u07J2EIOqzs+ydtCDrlLDroZwg7ZWE7JqU7ZWY64ukLlxuICog6re4IOuplO2DgOuNsOydtO2EsOqwgCDsl6zquLAg7J6I64ukIOKAlCBEQiDsiqTtgqTrp4jqsIAg7JWE64uI6528IOyVseydtCDslYTripQg7IOB7IiYIOuqqeuhneydtOuLpC5cbiAqL1xuXG5leHBvcnQgdHlwZSBTZXR0aW5nS2luZCA9IFwiYm9vbGVhblwiIHwgXCJpbnRlZ2VyXCIgfCBcIm51bWJlclwiIHwgXCJzdHJpbmdcIiB8IFwic2VjcmV0XCIgfCBcInByZXNldFwiO1xuXG4vKipcbiAqIO2ZlOuptOyXkOyEnCDrrLbslrQg67O07Jes7KSEIOuLqOychC4g7Y+J7Y+J7ZWY6rKMIOuCmOyXtO2VmOuptCDslrTrlJTrpbwg67SQ7JW8IO2VoOyngCDslYwg7IiYIOyXhuuLpC5cbiAqXG4gKiBTbGFjayDsnYAgXCLslrjsoJwg67O064K86rmMXCIoc2xhY2sp7JmAIFwi7Ja065SU66GcIOuztOuCvOq5jFwiKHNsYWNrQ29ubmVjdGlvbinrpbwg64KY64iI64ukIOKAlCDslZ7snYAg7Jq07JiBXG4gKiDspJEg7J6Q7KO8IOunjOyngOqzoCDrkqTripQg7ZWcIOuyiCDrp57stpTrqbQg64Gd7J206528IOyImOuqheydtCDri6TrpbTri6QuXG4gKi9cbmV4cG9ydCB0eXBlIFNldHRpbmdHcm91cCA9IFwic2xhY2tcIiB8IFwic2xhY2tDb25uZWN0aW9uXCI7XG5cbmV4cG9ydCB0eXBlIFNldHRpbmdEZWYgPSB7XG4gIGtleTogc3RyaW5nO1xuICBncm91cDogU2V0dGluZ0dyb3VwO1xuICBlbnZLZXk6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAga2luZDogU2V0dGluZ0tpbmQ7XG4gIC8qKiDsoIHsmqkg7Iuc7KCQLiDrtoDtjIUg7IucIO2VnCDrsojrp4wg7J297Z6I64qUIOqwkuydgCDsnqzsi5zsnpHsnbQg7ZWE7JqU7ZWY64ukLiAqL1xuICBhcHBsaWVzOiBcImltbWVkaWF0ZVwiIHwgXCJyZXN0YXJ0XCI7XG4gIG1pbj86IG51bWJlcjtcbiAgbWF4PzogbnVtYmVyO1xuICAvKiogYHByZXNldGAg7KKF66WY7JeQ7IScIOqzoOulvCDsiJgg7J6I64qUIOqwki4g7J20IOuqqeuhnSDrsJbsnZgg6rCS7J2AIOyggOyepeuQmOyngCDslYrripTri6QuICovXG4gIHByZXNldHM/OiBudW1iZXJbXTtcbiAgLyoqXG4gICAqIOyggOyepeqwkuuPhCBlbnYg64+EIOyXhuydhCDrlYwg7Iuk7KCc66GcIOyggeyaqeuQmOuKlCDqsJIuIO2ZlOuptOydhCDruYTsm4zrkZDrqbQgXCLshKTsoJUg7JWIIOuQqFwi7Jy866GcIOydve2eiOyngOunjFxuICAgKiDsi6TsoJzroZzripQg7J20IOqwkuydtCDrj4zqs6Ag7J6I64ukIOKAlCDshozruYTsspjsnZgg6riw67O46rCS6rO8IOuwmOuTnOyLnCDqsJnslYTslbwg7ZWc64ukLlxuICAgKi9cbiAgZmFsbGJhY2s6IHN0cmluZztcbiAgaGVscD86IHN0cmluZztcbn07XG5cbmV4cG9ydCBjb25zdCBTRVRUSU5HX0RFRlM6IFNldHRpbmdEZWZbXSA9IFtcbiAge1xuICAgIGtleTogXCJzbGFjay5lbmFibGVkXCIsXG4gICAgZmFsbGJhY2s6IFwidHJ1ZVwiLFxuICAgIGdyb3VwOiBcInNsYWNrXCIsXG4gICAgZW52S2V5OiBcIlNMQUNLX0VOQUJMRURcIixcbiAgICBsYWJlbDogXCJTbGFjayDslYzrprxcIixcbiAgICBraW5kOiBcImJvb2xlYW5cIixcbiAgICBhcHBsaWVzOiBcImltbWVkaWF0ZVwiLFxuICAgIGhlbHA6IFwi7Jew7Zy07LKY65+8IOq3nOy5meycvOuhnCDsnqHsnYQg7IiYIOyXhuuKlCDquLDqsITsl5Ag64GV64uI64ukLiDshJzruYTsiqQg7KCV7KeA6riJIOyepeyVoCDslYzrprzsnYAg6rq864+EIOyghOuLrOuQqeuLiOuLpFwiLFxuICB9LFxuICB7XG4gICAga2V5OiBcInNsYWNrLnJlbWluZGVyc0VuYWJsZWRcIixcbiAgICBmYWxsYmFjazogXCJ0cnVlXCIsXG4gICAgZ3JvdXA6IFwic2xhY2tcIixcbiAgICBlbnZLZXk6IFwiU0xBQ0tfUkVNSU5ERVJTX0VOQUJMRURcIixcbiAgICBsYWJlbDogXCLrp4zro4wg7JWM66a8IOuwmOuztVwiLFxuICAgIGtpbmQ6IFwiYm9vbGVhblwiLFxuICAgIGFwcGxpZXM6IFwiaW1tZWRpYXRlXCIsXG4gICAgaGVscDogXCLrgYTrqbQg67CY67O166eMIOupiOy2lOqzoCDrp4zro4wg7Iic6rCE7J2YIOyVjOumvOydgCDqt7jrjIDroZwg6rCR64uI64ukXCIsXG4gIH0sXG4gIHtcbiAgICBrZXk6IFwic2xhY2suZXhwaXJ5UmVtaW5kZXJNaW51dGVzXCIsXG4gICAgZmFsbGJhY2s6IFwiNjBcIixcbiAgICBncm91cDogXCJzbGFja1wiLFxuICAgIGVudktleTogXCJTTEFDS19FWFBJUllfUkVNSU5ERVJfSU5URVJWQUxfTUlOVVRFU1wiLFxuICAgIGxhYmVsOiBcIuuwmOuztSDso7zquLBcIixcbiAgICBraW5kOiBcInByZXNldFwiLFxuICAgIGFwcGxpZXM6IFwiaW1tZWRpYXRlXCIsXG4gICAgLy8g7J6Q7JygIOyeheugpSDrjIDsi6Ag6rOg7KCVIOyEoO2DneyngOulvCDsk7Tri6Qg4oCUIFwi7Ja866eI64KYIOyekOyjvCDsnqzstIntlaDquYxcIuudvOyEnCAx67aEIOuLqOychCDsoJXrsIDrj4TqsIBcbiAgICAvLyDsnZjrr7gg7JeG6rOgLCDsnpjrqrsg64Sj7Jy866m0IOyxhOuEkOydtCDsi5zrgYTrn6zsm4zsp4Tri6QuIOuBhOuKlCDqsoPsnYAgcmVtaW5kZXJzRW5hYmxlZCDqsIAg66eh64qU64ukLlxuICAgIHByZXNldHM6IFsxMCwgMzAsIDYwLCAxODBdLFxuICAgIGhlbHA6IFwi7J6s66Gc6re47J247J20IO2VhOyalO2VnCDthqDtgbDsnbQg64Ko7JWEIOyeiOuKlCDrj5nslYgg7J20IOyjvOq4sOuhnCDri6Tsi5wg7JWM66a964uI64ukXCIsXG4gIH0sXG4gIHtcbiAgICBrZXk6IFwic2xhY2sucXVpZXRGcm9tSG91clwiLFxuICAgIGZhbGxiYWNrOiBcIjIwXCIsXG4gICAgZ3JvdXA6IFwic2xhY2tcIixcbiAgICBlbnZLZXk6IFwiU0xBQ0tfUVVJRVRfRlJPTV9IT1VSXCIsXG4gICAgbGFiZWw6IFwi7KGw7JqpIOyLnOqwhCDsi5zsnpFcIixcbiAgICBraW5kOiBcImludGVnZXJcIixcbiAgICBhcHBsaWVzOiBcImltbWVkaWF0ZVwiLFxuICAgIG1pbjogMCxcbiAgICBtYXg6IDIzLFxuICAgIGhlbHA6IFwi7J20IOyLnOqwgeu2gO2EsCDslYzrpqzsp4Ag7JWK7Iq164uI64ukICjtlZzqta0g7Iuc6rCEKVwiLFxuICB9LFxuICB7XG4gICAga2V5OiBcInNsYWNrLnF1aWV0VW50aWxIb3VyXCIsXG4gICAgZmFsbGJhY2s6IFwiOFwiLFxuICAgIGdyb3VwOiBcInNsYWNrXCIsXG4gICAgZW52S2V5OiBcIlNMQUNLX1FVSUVUX1VOVElMX0hPVVJcIixcbiAgICBsYWJlbDogXCLsobDsmqkg7Iuc6rCEIOyiheujjFwiLFxuICAgIGtpbmQ6IFwiaW50ZWdlclwiLFxuICAgIGFwcGxpZXM6IFwiaW1tZWRpYXRlXCIsXG4gICAgbWluOiAwLFxuICAgIG1heDogMjMsXG4gICAgaGVscDogXCLsnbQg7Iuc6rCB67aA7YSwIOuLpOyLnCDslYzrpr3ri4jri6QuIOyLnOyekeuztOuLpCDruaDrpbTrqbQg7J6Q7KCV7J2EIOuEmOuKlCDqtazqsITsnbQg65Cp64uI64ukXCIsXG4gIH0sXG4gIHtcbiAgICBrZXk6IFwic2xhY2subm90aWZ5T25XZWVrZW5kc1wiLFxuICAgIGZhbGxiYWNrOiBcImZhbHNlXCIsXG4gICAgZ3JvdXA6IFwic2xhY2tcIixcbiAgICBlbnZLZXk6IFwiU0xBQ0tfTk9USUZZX09OX1dFRUtFTkRTXCIsXG4gICAgbGFiZWw6IFwi7KO866eQ7JeQ64+EIOyVjOumvFwiLFxuICAgIGtpbmQ6IFwiYm9vbGVhblwiLFxuICAgIGFwcGxpZXM6IFwiaW1tZWRpYXRlXCIsXG4gICAgaGVscDogXCLsvJzrqbQg7KO866eQ7JeQ64+EIOychOydmCDsobDsmqkg7Iuc6rCEIOq3nOy5meunjCDsoIHsmqnrkKnri4jri6RcIixcbiAgfSxcbiAge1xuICAgIGtleTogXCJzbGFjay5jaGFubmVsSWRcIixcbiAgICBmYWxsYmFjazogXCJcIixcbiAgICBncm91cDogXCJzbGFja0Nvbm5lY3Rpb25cIixcbiAgICBlbnZLZXk6IFwiU0xBQ0tfQ0hBTk5FTF9JRFwiLFxuICAgIGxhYmVsOiBcIlNsYWNrIOyxhOuEkCBJRFwiLFxuICAgIGtpbmQ6IFwic3RyaW5nXCIsXG4gICAgYXBwbGllczogXCJpbW1lZGlhdGVcIixcbiAgICBoZWxwOiBcIuyCrOyaqeyekCBJRChVLi4uKeulvCDrhKPsnLzrqbQg6re4IOyCrOuejCBETSDsnLzroZwg6rCR64uI64ukXCIsXG4gIH0sXG4gIHtcbiAgICBrZXk6IFwic2xhY2sudXNlck1hcFwiLFxuICAgIGZhbGxiYWNrOiBcIlwiLFxuICAgIGdyb3VwOiBcInNsYWNrQ29ubmVjdGlvblwiLFxuICAgIGVudktleTogXCJTTEFDS19VU0VSX01BUFwiLFxuICAgIGxhYmVsOiBcIlNsYWNrIOyCrOyaqeyekCDrp6TtlZFcIixcbiAgICBraW5kOiBcInN0cmluZ1wiLFxuICAgIGFwcGxpZXM6IFwiaW1tZWRpYXRlXCIsXG4gICAgaGVscDogXCLthqDtgbDrqoU6U2xhY2tVc2VySWQg66W8IOyJvO2RnOuhnC4g6rO17JqpIOqzhOygleydgCDrhKPsp4Ag7JWK7Iq164uI64ukXCIsXG4gIH0sXG4gIHtcbiAgICBrZXk6IFwic2xhY2suYm90VG9rZW5cIixcbiAgICBmYWxsYmFjazogXCJcIixcbiAgICBncm91cDogXCJzbGFja0Nvbm5lY3Rpb25cIixcbiAgICBlbnZLZXk6IFwiU0xBQ0tfQk9UX1RPS0VOXCIsXG4gICAgbGFiZWw6IFwiU2xhY2sg67SHIO2GoO2BsFwiLFxuICAgIGtpbmQ6IFwic2VjcmV0XCIsXG4gICAgYXBwbGllczogXCJpbW1lZGlhdGVcIixcbiAgfSxcbl07XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kU2V0dGluZ0RlZihrZXk6IHN0cmluZyk6IFNldHRpbmdEZWYgfCB1bmRlZmluZWQge1xuICByZXR1cm4gU0VUVElOR19ERUZTLmZpbmQoKGQpID0+IGQua2V5ID09PSBrZXkpO1xufVxuXG4vKiog7KCA7J6lIOyghCDqsoDspp0uIOyemOuqu+uQnCDqsJLsnbQg65Ok7Ja06rCA66m0IOufsO2DgOyehOyXkOyEnCDsobDsmqntnogg6riw67O46rCS7Jy866GcIOuWqOyWtOyguCDsm5DsnbjsnYQg7LC+6riwIOyWtOugteuLpC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNldHRpbmdWYWx1ZShcbiAgZGVmOiBTZXR0aW5nRGVmLFxuICByYXc6IHN0cmluZyxcbik6IHsgb2s6IHRydWU7IHZhbHVlOiBzdHJpbmcgfSB8IHsgb2s6IGZhbHNlOyBlcnJvcjogc3RyaW5nIH0ge1xuICBjb25zdCB0cmltbWVkID0gcmF3LnRyaW0oKTtcblxuICBpZiAoZGVmLmtpbmQgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgaWYgKCFbXCJ0cnVlXCIsIFwiZmFsc2VcIl0uaW5jbHVkZXModHJpbW1lZCkpIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6IFwidHJ1ZSDrmJDripQgZmFsc2VcIiB9O1xuICAgIHJldHVybiB7IG9rOiB0cnVlLCB2YWx1ZTogdHJpbW1lZCB9O1xuICB9XG5cbiAgaWYgKGRlZi5raW5kID09PSBcInByZXNldFwiKSB7XG4gICAgLy8g7ZmU66m07J2AIOuyhO2KvOunjCDso7zsp4Drp4wgQVBJIOuKlCDslYTrrLQg6rCS7J2064KYIOuwm+ydhCDsiJgg7J6I64ukLiDrqqnroZ0g67CW7J2YIOqwkuydtCDrk6TslrTsmKTrqbRcbiAgICAvLyDtmZTrqbTsl5DshJwg7JWE66y0IOuyhO2KvOuPhCDshKDtg53rj7wg67O07J207KeAIOyViuyVhCBcIuyZnCDslYgg67CU64CM7KeAXCLqsIAg65Cc64ukLlxuICAgIGNvbnN0IHBhcnNlZCA9IE51bWJlcih0cmltbWVkKTtcbiAgICBpZiAoIWRlZi5wcmVzZXRzPy5pbmNsdWRlcyhwYXJzZWQpKSB7XG4gICAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiBgJHtkZWYucHJlc2V0cz8uam9pbihcIiwgXCIpID8/IFwiXCJ9IOykkSDtlZjrgpjsl6zslbwg7ZWp64uI64ukYCB9O1xuICAgIH1cbiAgICByZXR1cm4geyBvazogdHJ1ZSwgdmFsdWU6IFN0cmluZyhwYXJzZWQpIH07XG4gIH1cblxuICBpZiAoZGVmLmtpbmQgPT09IFwiaW50ZWdlclwiIHx8IGRlZi5raW5kID09PSBcIm51bWJlclwiKSB7XG4gICAgY29uc3QgcGFyc2VkID0gTnVtYmVyKHRyaW1tZWQpO1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkpIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6IFwi7Iir7J6Q66W8IOyeheugpe2VmOyEuOyalFwiIH07XG4gICAgaWYgKGRlZi5raW5kID09PSBcImludGVnZXJcIiAmJiAhTnVtYmVyLmlzSW50ZWdlcihwYXJzZWQpKSB7XG4gICAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiBcIuygleyImOulvCDsnoXroKXtlZjshLjsmpRcIiB9O1xuICAgIH1cbiAgICBpZiAoZGVmLm1pbiAhPT0gdW5kZWZpbmVkICYmIHBhcnNlZCA8IGRlZi5taW4pIHtcbiAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6IGAke2RlZi5taW59IOydtOyDgeydtOyWtOyVvCDtlanri4jri6RgIH07XG4gICAgfVxuICAgIGlmIChkZWYubWF4ICE9PSB1bmRlZmluZWQgJiYgcGFyc2VkID4gZGVmLm1heCkge1xuICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogYCR7ZGVmLm1heH0g7J207ZWY7Jes7JW8IO2VqeuLiOuLpGAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgb2s6IHRydWUsIHZhbHVlOiBTdHJpbmcocGFyc2VkKSB9O1xuICB9XG5cbiAgcmV0dXJuIHsgb2s6IHRydWUsIHZhbHVlOiB0cmltbWVkIH07XG59XG5cbi8qKiDtmZTrqbTsl5Ag6re464yA66GcIOuCtOugpOuztOuCtOuptCDslYgg65CY64qUIOqwki4g7JWe65Kk66eMIOuCqOq4tOuLpC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXNrU2VjcmV0KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAodmFsdWUubGVuZ3RoIDw9IDEyKSByZXR1cm4gXCIqKipcIjtcbiAgcmV0dXJuIGAke3ZhbHVlLnNsaWNlKDAsIDgpfS4uLiR7dmFsdWUuc2xpY2UoLTQpfWA7XG59XG4iXSwibWFwcGlu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
|
|
176
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZy5jb25zdGFudC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vc2V0dGluZy9zZXR0aW5nLmNvbnN0YW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog6rSA66asIOqwgOuKpe2VnCDrn7Dtg4DsnoQg7ISk7KCVIOuqqeuhnS5cbiAqXG4gKiDtgqTCt2VudiDsnbTrpoTCt+2DgOyehcK36rKA7Kad7J2EIO2VnCDqs7Psl5Ag66qo7JWEIEFQSSDsmYAgVUkg6rCAIOqwmeydgCDsoJXsnZjrpbwg67O464ukLiDsl6zquLAg7JeG64qUIGVudiDripRcbiAqIO2ZlOuptOyXkOyEnCDrsJTqv4Ag7IiYIOyXhuuLpCDigJQgREIg7KCR7IaNIOygleuztOuCmCDtj6ztirjsspjrn7wg7ISc67KE6rCAIOucqOq4sCDsoITsl5Ag7ZWE7JqU7ZWcIOqwkuuTpOydtOuLpC5cbiAqXG4gKiBgc2V0dGluZ3NgIO2FjOydtOu4lOydgCBgKGtleSwgdmFsdWUpYCDrrLjsnpDsl7Qg7IyN66eMIOuLtOuKlCDqt7jrpofsnbTrnbwoYHNldHRpbmcuZW50aXR5Lmpzb25gKSxcbiAqIFwi7J20IO2CpOqwgCDsoJXsiJjsnbjsp4DCt+uylOychOqwgCDslrzrp4jsnbjsp4DCt+2ZlOuptOyXkCDrrZDrnbzqs6Ag7JO47KeAXCLrpbwg64u07J2EIOqzs+ydtCDrlLDroZwg7ZWE7JqU7ZWY64ukLlxuICog6re4IOuplO2DgOuNsOydtO2EsOqwgCDsl6zquLAg7J6I64ukIOKAlCBEQiDsiqTtgqTrp4jqsIAg7JWE64uI6528IOyVseydtCDslYTripQg7IOB7IiYIOuqqeuhneydtOuLpC5cbiAqL1xuXG5leHBvcnQgdHlwZSBTZXR0aW5nS2luZCA9IFwiYm9vbGVhblwiIHwgXCJpbnRlZ2VyXCIgfCBcIm51bWJlclwiIHwgXCJzdHJpbmdcIiB8IFwic2VjcmV0XCIgfCBcInByZXNldFwiO1xuXG4vKipcbiAqIO2ZlOuptOyXkOyEnCDrrLbslrQg67O07Jes7KSEIOuLqOychC4g7Y+J7Y+J7ZWY6rKMIOuCmOyXtO2VmOuptCDslrTrlJTrpbwg67SQ7JW8IO2VoOyngCDslYwg7IiYIOyXhuuLpC5cbiAqXG4gKiBTbGFjayDsnYAgXCLslrjsoJwg67O064K86rmMXCIoc2xhY2sp7JmAIFwi7Ja065SU66GcIOuztOuCvOq5jFwiKHNsYWNrQ29ubmVjdGlvbinrpbwg64KY64iI64ukIOKAlCDslZ7snYAg7Jq07JiBXG4gKiDspJEg7J6Q7KO8IOunjOyngOqzoCDrkqTripQg7ZWcIOuyiCDrp57stpTrqbQg64Gd7J206528IOyImOuqheydtCDri6TrpbTri6QuXG4gKi9cbmV4cG9ydCB0eXBlIFNldHRpbmdHcm91cCA9IFwicWdyaWRcIiB8IFwic2xhY2tcIiB8IFwic2xhY2tDb25uZWN0aW9uXCI7XG5cbmV4cG9ydCB0eXBlIFNldHRpbmdEZWYgPSB7XG4gIGtleTogc3RyaW5nO1xuICBncm91cDogU2V0dGluZ0dyb3VwO1xuICBlbnZLZXk6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAga2luZDogU2V0dGluZ0tpbmQ7XG4gIC8qKiDsoIHsmqkg7Iuc7KCQLiDrtoDtjIUg7IucIO2VnCDrsojrp4wg7J297Z6I64qUIOqwkuydgCDsnqzsi5zsnpHsnbQg7ZWE7JqU7ZWY64ukLiAqL1xuICBhcHBsaWVzOiBcImltbWVkaWF0ZVwiIHwgXCJyZXN0YXJ0XCI7XG4gIG1pbj86IG51bWJlcjtcbiAgbWF4PzogbnVtYmVyO1xuICAvKiogYHByZXNldGAg7KKF66WY7JeQ7IScIOqzoOulvCDsiJgg7J6I64qUIOqwki4g7J20IOuqqeuhnSDrsJbsnZgg6rCS7J2AIOyggOyepeuQmOyngCDslYrripTri6QuICovXG4gIHByZXNldHM/OiBudW1iZXJbXTtcbiAgLyoqXG4gICAqIOyggOyepeqwkuuPhCBlbnYg64+EIOyXhuydhCDrlYwg7Iuk7KCc66GcIOyggeyaqeuQmOuKlCDqsJIuIO2ZlOuptOydhCDruYTsm4zrkZDrqbQgXCLshKTsoJUg7JWIIOuQqFwi7Jy866GcIOydve2eiOyngOunjFxuICAgKiDsi6TsoJzroZzripQg7J20IOqwkuydtCDrj4zqs6Ag7J6I64ukIOKAlCDshozruYTsspjsnZgg6riw67O46rCS6rO8IOuwmOuTnOyLnCDqsJnslYTslbwg7ZWc64ukLlxuICAgKi9cbiAgZmFsbGJhY2s6IHN0cmluZztcbiAgaGVscD86IHN0cmluZztcbn07XG5cbmV4cG9ydCBjb25zdCBTRVRUSU5HX0RFRlM6IFNldHRpbmdEZWZbXSA9IFtcbiAge1xuICAgIGtleTogXCJxZ3JpZC50b2tlbldpbmRvd0tlZXBhbGl2ZUVuYWJsZWRcIixcbiAgICBmYWxsYmFjazogXCJ0cnVlXCIsXG4gICAgZ3JvdXA6IFwicWdyaWRcIixcbiAgICBlbnZLZXk6IFwiUUdSSURfVE9LRU5fV0lORE9XX0tFRVBBTElWRV9FTkFCTEVEXCIsXG4gICAgbGFiZWw6IFwi7Yag7YGwIOyciOuPhOyasCBrZWVwYWxpdmVcIixcbiAgICBraW5kOiBcImJvb2xlYW5cIixcbiAgICBhcHBsaWVzOiBcImltbWVkaWF0ZVwiLFxuICAgIGhlbHA6IFwi64GE66m0IO2ZnOyEsSBBbnRocm9waWMg7Yag7YGw7J2YIDXsi5zqsIQg7JyI64+E7JqwIOyekOuPmSDsnKDsp4Ag7JqU7LKt7J2EIOykkeuLqO2VqeuLiOuLpFwiLFxuICB9LFxuICB7XG4gICAga2V5OiBcInNsYWNrLmVuYWJsZWRcIixcbiAgICBmYWxsYmFjazogXCJ0cnVlXCIsXG4gICAgZ3JvdXA6IFwic2xhY2tcIixcbiAgICBlbnZLZXk6IFwiU0xBQ0tfRU5BQkxFRFwiLFxuICAgIGxhYmVsOiBcIlNsYWNrIOyVjOumvFwiLFxuICAgIGtpbmQ6IFwiYm9vbGVhblwiLFxuICAgIGFwcGxpZXM6IFwiaW1tZWRpYXRlXCIsXG4gICAgaGVscDogXCLsl7DtnLTsspjrn7wg6rec7LmZ7Jy866GcIOyeoeydhCDsiJgg7JeG64qUIOq4sOqwhOyXkCDrgZXri4jri6QuIOyEnOu5hOyKpCDsoJXsp4DquIkg7J6l7JWgIOyVjOumvOydgCDqurzrj4Qg7KCE64us65Cp64uI64ukXCIsXG4gIH0sXG4gIHtcbiAgICBrZXk6IFwic2xhY2sucmVtaW5kZXJzRW5hYmxlZFwiLFxuICAgIGZhbGxiYWNrOiBcInRydWVcIixcbiAgICBncm91cDogXCJzbGFja1wiLFxuICAgIGVudktleTogXCJTTEFDS19SRU1JTkRFUlNfRU5BQkxFRFwiLFxuICAgIGxhYmVsOiBcIuunjOujjCDslYzrprwg67CY67O1XCIsXG4gICAga2luZDogXCJib29sZWFuXCIsXG4gICAgYXBwbGllczogXCJpbW1lZGlhdGVcIixcbiAgICBoZWxwOiBcIuuBhOuptCDrsJjrs7Xrp4wg66mI7LaU6rOgIOunjOujjCDsiJzqsITsnZgg7JWM66a87J2AIOq3uOuMgOuhnCDqsJHri4jri6RcIixcbiAgfSxcbiAge1xuICAgIGtleTogXCJzbGFjay5leHBpcnlSZW1pbmRlck1pbnV0ZXNcIixcbiAgICBmYWxsYmFjazogXCI2MFwiLFxuICAgIGdyb3VwOiBcInNsYWNrXCIsXG4gICAgZW52S2V5OiBcIlNMQUNLX0VYUElSWV9SRU1JTkRFUl9JTlRFUlZBTF9NSU5VVEVTXCIsXG4gICAgbGFiZWw6IFwi67CY67O1IOyjvOq4sFwiLFxuICAgIGtpbmQ6IFwicHJlc2V0XCIsXG4gICAgYXBwbGllczogXCJpbW1lZGlhdGVcIixcbiAgICAvLyDsnpDsnKAg7J6F66ClIOuMgOyLoCDqs6DsoJUg7ISg7YOd7KeA66W8IOyTtOuLpCDigJQgXCLslrzrp4jrgpgg7J6Q7KO8IOyerOy0ie2VoOq5jFwi65287IScIDHrtoQg64uo7JyEIOygleuwgOuPhOqwgFxuICAgIC8vIOydmOuvuCDsl4bqs6AsIOyemOuquyDrhKPsnLzrqbQg7LGE64SQ7J20IOyLnOuBhOufrOybjOynhOuLpC4g64GE64qUIOqyg+ydgCByZW1pbmRlcnNFbmFibGVkIOqwgCDrp6HripTri6QuXG4gICAgcHJlc2V0czogWzEwLCAzMCwgNjAsIDE4MF0sXG4gICAgaGVscDogXCLsnqzroZzqt7jsnbjsnbQg7ZWE7JqU7ZWcIO2GoO2BsOydtCDrgqjslYQg7J6I64qUIOuPmeyViCDsnbQg7KO86riw66GcIOuLpOyLnCDslYzrpr3ri4jri6RcIixcbiAgfSxcbiAge1xuICAgIGtleTogXCJzbGFjay5xdWlldEZyb21Ib3VyXCIsXG4gICAgZmFsbGJhY2s6IFwiMjBcIixcbiAgICBncm91cDogXCJzbGFja1wiLFxuICAgIGVudktleTogXCJTTEFDS19RVUlFVF9GUk9NX0hPVVJcIixcbiAgICBsYWJlbDogXCLsobDsmqkg7Iuc6rCEIOyLnOyekVwiLFxuICAgIGtpbmQ6IFwiaW50ZWdlclwiLFxuICAgIGFwcGxpZXM6IFwiaW1tZWRpYXRlXCIsXG4gICAgbWluOiAwLFxuICAgIG1heDogMjMsXG4gICAgaGVscDogXCLsnbQg7Iuc6rCB67aA7YSwIOyVjOumrOyngCDslYrsirXri4jri6QgKO2VnOq1rSDsi5zqsIQpXCIsXG4gIH0sXG4gIHtcbiAgICBrZXk6IFwic2xhY2sucXVpZXRVbnRpbEhvdXJcIixcbiAgICBmYWxsYmFjazogXCI4XCIsXG4gICAgZ3JvdXA6IFwic2xhY2tcIixcbiAgICBlbnZLZXk6IFwiU0xBQ0tfUVVJRVRfVU5USUxfSE9VUlwiLFxuICAgIGxhYmVsOiBcIuyhsOyaqSDsi5zqsIQg7KKF66OMXCIsXG4gICAga2luZDogXCJpbnRlZ2VyXCIsXG4gICAgYXBwbGllczogXCJpbW1lZGlhdGVcIixcbiAgICBtaW46IDAsXG4gICAgbWF4OiAyMyxcbiAgICBoZWxwOiBcIuydtCDsi5zqsIHrtoDthLAg64uk7IucIOyVjOumveuLiOuLpC4g7Iuc7J6R67O064ukIOu5oOultOuptCDsnpDsoJXsnYQg64SY64qUIOq1rOqwhOydtCDrkKnri4jri6RcIixcbiAgfSxcbiAge1xuICAgIGtleTogXCJzbGFjay5ub3RpZnlPbldlZWtlbmRzXCIsXG4gICAgZmFsbGJhY2s6IFwiZmFsc2VcIixcbiAgICBncm91cDogXCJzbGFja1wiLFxuICAgIGVudktleTogXCJTTEFDS19OT1RJRllfT05fV0VFS0VORFNcIixcbiAgICBsYWJlbDogXCLso7zrp5Dsl5Drj4Qg7JWM66a8XCIsXG4gICAga2luZDogXCJib29sZWFuXCIsXG4gICAgYXBwbGllczogXCJpbW1lZGlhdGVcIixcbiAgICBoZWxwOiBcIuy8nOuptCDso7zrp5Dsl5Drj4Qg7JyE7J2YIOyhsOyaqSDsi5zqsIQg6rec7LmZ66eMIOyggeyaqeuQqeuLiOuLpFwiLFxuICB9LFxuICB7XG4gICAga2V5OiBcInNsYWNrLmNoYW5uZWxJZFwiLFxuICAgIGZhbGxiYWNrOiBcIlwiLFxuICAgIGdyb3VwOiBcInNsYWNrQ29ubmVjdGlvblwiLFxuICAgIGVudktleTogXCJTTEFDS19DSEFOTkVMX0lEXCIsXG4gICAgbGFiZWw6IFwiU2xhY2sg7LGE64SQIElEXCIsXG4gICAga2luZDogXCJzdHJpbmdcIixcbiAgICBhcHBsaWVzOiBcImltbWVkaWF0ZVwiLFxuICAgIGhlbHA6IFwi7IKs7Jqp7J6QIElEKFUuLi4p66W8IOuEo+ycvOuptCDqt7gg7IKs656MIERNIOycvOuhnCDqsJHri4jri6RcIixcbiAgfSxcbiAge1xuICAgIGtleTogXCJzbGFjay51c2VyTWFwXCIsXG4gICAgZmFsbGJhY2s6IFwiXCIsXG4gICAgZ3JvdXA6IFwic2xhY2tDb25uZWN0aW9uXCIsXG4gICAgZW52S2V5OiBcIlNMQUNLX1VTRVJfTUFQXCIsXG4gICAgbGFiZWw6IFwiU2xhY2sg7IKs7Jqp7J6QIOunpO2VkVwiLFxuICAgIGtpbmQ6IFwic3RyaW5nXCIsXG4gICAgYXBwbGllczogXCJpbW1lZGlhdGVcIixcbiAgICBoZWxwOiBcIu2GoO2BsOuqhTpTbGFja1VzZXJJZCDrpbwg7Im87ZGc66GcLiDqs7Xsmqkg6rOE7KCV7J2AIOuEo+yngCDslYrsirXri4jri6RcIixcbiAgfSxcbiAge1xuICAgIGtleTogXCJzbGFjay5ib3RUb2tlblwiLFxuICAgIGZhbGxiYWNrOiBcIlwiLFxuICAgIGdyb3VwOiBcInNsYWNrQ29ubmVjdGlvblwiLFxuICAgIGVudktleTogXCJTTEFDS19CT1RfVE9LRU5cIixcbiAgICBsYWJlbDogXCJTbGFjayDrtIcg7Yag7YGwXCIsXG4gICAga2luZDogXCJzZWNyZXRcIixcbiAgICBhcHBsaWVzOiBcImltbWVkaWF0ZVwiLFxuICB9LFxuXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRTZXR0aW5nRGVmKGtleTogc3RyaW5nKTogU2V0dGluZ0RlZiB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBTRVRUSU5HX0RFRlMuZmluZCgoZCkgPT4gZC5rZXkgPT09IGtleSk7XG59XG5cbi8qKiDsoIDsnqUg7KCEIOqygOymnS4g7J6Y66q765CcIOqwkuydtCDrk6TslrTqsIDrqbQg65+w7YOA7J6E7JeQ7IScIOyhsOyaqe2eiCDquLDrs7jqsJLsnLzroZwg65ao7Ja07KC4IOybkOyduOydhCDssL7quLAg7Ja066C164ukLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2V0dGluZ1ZhbHVlKFxuICBkZWY6IFNldHRpbmdEZWYsXG4gIHJhdzogc3RyaW5nLFxuKTogeyBvazogdHJ1ZTsgdmFsdWU6IHN0cmluZyB9IHwgeyBvazogZmFsc2U7IGVycm9yOiBzdHJpbmcgfSB7XG4gIGNvbnN0IHRyaW1tZWQgPSByYXcudHJpbSgpO1xuXG4gIGlmIChkZWYua2luZCA9PT0gXCJib29sZWFuXCIpIHtcbiAgICBpZiAoIVtcInRydWVcIiwgXCJmYWxzZVwiXS5pbmNsdWRlcyh0cmltbWVkKSkgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogXCJ0cnVlIOuYkOuKlCBmYWxzZVwiIH07XG4gICAgcmV0dXJuIHsgb2s6IHRydWUsIHZhbHVlOiB0cmltbWVkIH07XG4gIH1cblxuICBpZiAoZGVmLmtpbmQgPT09IFwicHJlc2V0XCIpIHtcbiAgICAvLyDtmZTrqbTsnYAg67KE7Yq866eMIOyjvOyngOunjCBBUEkg64qUIOyVhOustCDqsJLsnbTrgpgg67Cb7J2EIOyImCDsnojri6QuIOuqqeuhnSDrsJbsnZgg6rCS7J20IOuTpOyWtOyYpOuptFxuICAgIC8vIO2ZlOuptOyXkOyEnCDslYTrrLQg67KE7Yq864+EIOyEoO2DneuPvCDrs7TsnbTsp4Ag7JWK7JWEIFwi7JmcIOyViCDrsJTrgIzsp4BcIuqwgCDrkJzri6QuXG4gICAgY29uc3QgcGFyc2VkID0gTnVtYmVyKHRyaW1tZWQpO1xuICAgIGlmICghZGVmLnByZXNldHM/LmluY2x1ZGVzKHBhcnNlZCkpIHtcbiAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6IGAke2RlZi5wcmVzZXRzPy5qb2luKFwiLCBcIikgPz8gXCJcIn0g7KSRIO2VmOuCmOyXrOyVvCDtlanri4jri6RgIH07XG4gICAgfVxuICAgIHJldHVybiB7IG9rOiB0cnVlLCB2YWx1ZTogU3RyaW5nKHBhcnNlZCkgfTtcbiAgfVxuXG4gIGlmIChkZWYua2luZCA9PT0gXCJpbnRlZ2VyXCIgfHwgZGVmLmtpbmQgPT09IFwibnVtYmVyXCIpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBOdW1iZXIodHJpbW1lZCk7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUocGFyc2VkKSkgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogXCLsiKvsnpDrpbwg7J6F66Cl7ZWY7IS47JqUXCIgfTtcbiAgICBpZiAoZGVmLmtpbmQgPT09IFwiaW50ZWdlclwiICYmICFOdW1iZXIuaXNJbnRlZ2VyKHBhcnNlZCkpIHtcbiAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgZXJyb3I6IFwi7KCV7IiY66W8IOyeheugpe2VmOyEuOyalFwiIH07XG4gICAgfVxuICAgIGlmIChkZWYubWluICE9PSB1bmRlZmluZWQgJiYgcGFyc2VkIDwgZGVmLm1pbikge1xuICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBlcnJvcjogYCR7ZGVmLm1pbn0g7J207IOB7J207Ja07JW8IO2VqeuLiOuLpGAgfTtcbiAgICB9XG4gICAgaWYgKGRlZi5tYXggIT09IHVuZGVmaW5lZCAmJiBwYXJzZWQgPiBkZWYubWF4KSB7XG4gICAgICByZXR1cm4geyBvazogZmFsc2UsIGVycm9yOiBgJHtkZWYubWF4fSDsnbTtlZjsl6zslbwg7ZWp64uI64ukYCB9O1xuICAgIH1cbiAgICByZXR1cm4geyBvazogdHJ1ZSwgdmFsdWU6IFN0cmluZyhwYXJzZWQpIH07XG4gIH1cblxuICByZXR1cm4geyBvazogdHJ1ZSwgdmFsdWU6IHRyaW1tZWQgfTtcbn1cblxuLyoqIO2ZlOuptOyXkCDqt7jrjIDroZwg64K066Ck67O064K066m0IOyViCDrkJjripQg6rCSLiDslZ7rkqTrp4wg64Ko6ri064ukLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hc2tTZWNyZXQodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICh2YWx1ZS5sZW5ndGggPD0gMTIpIHJldHVybiBcIioqKlwiO1xuICByZXR1cm4gYCR7dmFsdWUuc2xpY2UoMCwgOCl9Li4uJHt2YWx1ZS5zbGljZSgtNCl9YDtcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQXlDQSxNQUFhLGVBQTZCO0NBQ3hDO0VBQ0UsS0FBSztFQUNMLFVBQVU7RUFDVixPQUFPO0VBQ1AsUUFBUTtFQUNSLE9BQU87RUFDUCxNQUFNO0VBQ04sU0FBUztFQUNULE1BQU07Q0FDUjtDQUNBO0VBQ0UsS0FBSztFQUNMLFVBQVU7RUFDVixPQUFPO0VBQ1AsUUFBUTtFQUNSLE9BQU87RUFDUCxNQUFNO0VBQ04sU0FBUztFQUNULE1BQU07Q0FDUjtDQUNBO0VBQ0UsS0FBSztFQUNMLFVBQVU7RUFDVixPQUFPO0VBQ1AsUUFBUTtFQUNSLE9BQU87RUFDUCxNQUFNO0VBQ04sU0FBUztFQUNULE1BQU07Q0FDUjtDQUNBO0VBQ0UsS0FBSztFQUNMLFVBQVU7RUFDVixPQUFPO0VBQ1AsUUFBUTtFQUNSLE9BQU87RUFDUCxNQUFNO0VBQ04sU0FBUztFQUdULFNBQVM7R0FBQztHQUFJO0dBQUk7R0FBSTtFQUFHO0VBQ3pCLE1BQU07Q0FDUjtDQUNBO0VBQ0UsS0FBSztFQUNMLFVBQVU7RUFDVixPQUFPO0VBQ1AsUUFBUTtFQUNSLE9BQU87RUFDUCxNQUFNO0VBQ04sU0FBUztFQUNULEtBQUs7RUFDTCxLQUFLO0VBQ0ws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
|