@bitblit/ratchet-aws 4.0.130-alpha → 4.0.132-alpha

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/lib/index.d.ts CHANGED
@@ -61,16 +61,13 @@ export * from './runtime-parameter/runtime-parameter-provider.js';
61
61
  export * from './runtime-parameter/runtime-parameter-ratchet.js';
62
62
  export * from './runtime-parameter/stored-runtime-parameter.js';
63
63
  export * from './s3/s3-cache-ratchet.js';
64
- export * from './s3/s3-cache-to-local-disk-ratchet.js';
65
64
  export * from './s3/s3-location-sync-ratchet.js';
66
65
  export * from './s3/s3-ratchet.js';
67
66
  export * from './ses/email-attachment.js';
68
67
  export * from './ses/mailer-config.js';
69
68
  export * from './ses/mailer-like.js';
70
69
  export * from './ses/mailer.js';
71
- export * from './ses/ratchet-template-renderer.js';
72
70
  export * from './ses/ready-to-send-email.js';
73
- export * from './ses/remote-handlebars-template-renderer.js';
74
71
  export * from './ses/resolved-ready-to-send-email.js';
75
72
  export * from './sns/sns-ratchet.js';
76
73
  export * from './sync-lock/dynamo-db-sync-lock.js';
package/lib/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import{DateTime as e}from"luxon";import{RequireRatchet as t,StringRatchet as s,ErrorRatchet as a,Logger as n,StopWatch as i,PromiseRatchet as r,StreamRatchet as o,MapRatchet as c,DurationRatchet as l,NumberRatchet as h,Base64Ratchet as u}from"@bitblit/ratchet-common";import{SubmitJobCommand as d,ListJobsCommand as m}from"@aws-sdk/client-batch";import{CloudWatchLogsClient as f,DescribeLogStreamsCommand as g,FilterLogEventsCommand as p,DeleteLogStreamCommand as y,DescribeLogGroupsCommand as w,DeleteLogGroupCommand as b,StartQueryCommand as T,GetQueryResultsCommand as E,StopQueryCommand as C}from"@aws-sdk/client-cloudwatch-logs";import{CloudWatchClient as S,PutMetricDataCommand as N}from"@aws-sdk/client-cloudwatch";import{PutObjectCommand as x,GetObjectCommand as v,NoSuchKey as k,DeleteObjectCommand as D,HeadObjectCommand as O,CopyObjectCommand as F,ListObjectsCommand as A,S3Client as P,ListObjectsV2Command as M}from"@aws-sdk/client-s3";import{Upload as j}from"@aws-sdk/lib-storage";import{getSignedUrl as U}from"@aws-sdk/s3-request-presigner";import{ScanCommand as I,QueryCommand as B,BatchWriteCommand as R,BatchGetCommand as K,PutCommand as L,GetCommand as V,DeleteCommand as _}from"@aws-sdk/lib-dynamodb";import{UpdateItemCommand as G,DeleteTableCommand as W,CreateTableCommand as q,DescribeTableCommand as z,PutItemCommand as J}from"@aws-sdk/client-dynamodb";import{EC2Client as Q,StopInstancesCommand as H,StartInstancesCommand as $,DescribeInstancesCommand as Y}from"@aws-sdk/client-ec2";import{EC2InstanceConnectClient as Z,SendSSHPublicKeyCommand as X}from"@aws-sdk/client-ec2-instance-connect";import{SSMClient as ee,GetParameterCommand as te}from"@aws-sdk/client-ssm";import{ChangeResourceRecordSetsCommand as se,waitUntilResourceRecordSetsChanged as ae}from"@aws-sdk/client-route-53";import{WaiterState as ne}from"@aws-sdk/util-waiter";import ie from"crypto";import re from"fs";import oe from"path";import ce from"lodash";import{SendRawEmailCommand as le}from"@aws-sdk/client-ses";import he from"handlebars";import ue from"cross-fetch";import de from"handlebars-layouts";import{SNSClient as me,PublishCommand as fe}from"@aws-sdk/client-sns";class ge{batchRatchet;validTaskNames;constructor(e,s){this.batchRatchet=e,this.validTaskNames=s,t.notNullOrUndefined(this.batchRatchet,"batchRatchet"),t.notNullOrUndefined(this.batchRatchet.batchClient,"batchRatchet.batchClient"),t.notNullOrUndefined(this.batchRatchet.defaultJobDefinition,"batchRatchet.defaultJobDefinition"),t.notNullOrUndefined(this.batchRatchet.defaultQueueName,"batchRatchet.defaultQueueName")}async scheduleBackgroundTask(t,i={},r={}){!this.validTaskNames||!this.validTaskNames.length||s.trimToNull(t)&&this.validTaskNames.includes(t)||a.throwFormattedErr("Cannot start task %s - not found in valid task list",t),n.info("Submitting background task to AWS batch: %s %j %s",t,i,this.batchRatchet.defaultQueueName);let o=null;const c=`${this.batchRatchet.defaultJobDefinition}-${t}_${e.utc().toFormat("yyyy-MM-dd-HH-mm")}`,l={jobName:c,jobDefinition:this.batchRatchet.defaultJobDefinition,jobQueue:this.batchRatchet.defaultQueueName,parameters:{taskName:t,taskData:JSON.stringify(i),taskMetadata:JSON.stringify(r)}};try{o=await this.batchRatchet.scheduleJob(l),n.info("Job %s(%s) submitted",o.jobName,o.jobId)}catch(e){n.error("Cannot submit batch job taskName: %s jobDef: %s queue: %s jobName: %s data: %j",t,this.batchRatchet.defaultJobDefinition,this.batchRatchet.defaultQueueName,c,i,e)}return o}}class pe{_batchClient;_defaultQueueName;_defaultJobDefinition;constructor(e,t,s){this._batchClient=e,this._defaultQueueName=t,this._defaultJobDefinition=s}get batchClient(){return this._batchClient}get defaultQueueName(){return this._defaultQueueName}get defaultJobDefinition(){return this._defaultJobDefinition}async scheduleJob(e){n.info("Submitting batch job %s",e.jobName);try{const t=await this._batchClient.send(new d(e));return n.info("Job %s(%s) submitted",t.jobName,t.jobId),t}catch(t){n.error("Cannot submit batch job %s: %s",e.jobName,t)}return null}async jobCountInState(e,t=this.defaultQueueName){return(await this.listJobs(t,e)).length}async listJobs(e=this.defaultQueueName,s=null){t.notNullOrUndefined(e,"queueName");let a=[];const i={jobQueue:e,jobStatus:s,nextToken:null};n.info("Fetching %j",i);do{n.info("Pulling page...");const e=await this._batchClient.send(new m(i));a=a.concat(e.jobSummaryList),i.nextToken=e.nextToken}while(i.nextToken);return a}}class ye{constructor(){}static buildInformation(){return{version:"LOCAL-SNAPSHOT",hash:"LOCAL-HASH",branch:"LOCAL-BRANCH",tag:"LOCAL-TAG",timeBuiltISO:"LOCAL-TIME-ISO",notes:"LOCAL-NOTES"}}}class we{dynamo;opts;constructor(e,s){this.dynamo=e,this.opts=s,t.notNullOrUndefined(this.dynamo,"dynamo"),t.notNullOrUndefined(this.opts,"opts"),t.notNullOrUndefined(this.opts.tableName,"opts.tableName"),t.notNullOrUndefined(this.opts.hashKeyName,"opts.hashKeyName"),t.true(!this.opts.useRangeKeys||!!this.opts.rangeKeyName&&!!this.opts.hashKeyValue,"invalid range configuration")}static createDefaultOptions(){return{tableName:"simple-cache",useRangeKeys:!1,hashKeyName:"cache-key",rangeKeyName:null,hashKeyValue:null}}createKeyObject(e){const t={};return this.opts.useRangeKeys?(t[this.opts.hashKeyName]=this.opts.hashKeyValue,t[this.opts.rangeKeyName]=e):t[this.opts.hashKeyName]=e,t}cleanDynamoFieldsFromObjectInPlace(e){e&&(delete e[this.opts.hashKeyName],this.opts.rangeKeyName&&delete e[this.opts.rangeKeyName],this.opts.dynamoExpiresColumnName&&delete e[this.opts.dynamoExpiresColumnName])}extractKeysFromObject(e){let t=null;return e&&(t={},this.opts.useRangeKeys?(t[this.opts.hashKeyName]=this.opts.hashKeyValue,t[this.opts.rangeKeyName]=e.cacheKey):t[this.opts.hashKeyName]=e.cacheKey),t}async readFromCache(e){const t=this.createKeyObject(e),s=await this.dynamo.simpleGet(this.opts.tableName,t);return this.cleanDynamoFieldsFromObjectInPlace(s),s}async storeInCache(e){t.notNullOrUndefined(e,"value"),t.notNullOrUndefined(e.cacheKey,"value.cacheKey");const s=Object.assign({},e,this.createKeyObject(e.cacheKey));this.opts.dynamoExpiresColumnName&&e.expiresEpochMS&&(s[this.opts.dynamoExpiresColumnName]=Math.floor(e.expiresEpochMS/1e3));return!!await this.dynamo.simplePut(this.opts.tableName,s)}async removeFromCache(e){await this.dynamo.simpleDelete(this.opts.tableName,this.createKeyObject(e))}async clearCache(){const e=(await this.readAll()).map((e=>this.extractKeysFromObject(e)));return await this.dynamo.deleteAllInBatches(this.opts.tableName,e,25)}async readAll(){let e=null;if(this.opts.useRangeKeys){const t={TableName:this.opts.tableName,KeyConditionExpression:"#cacheKey = :cacheKey",ExpressionAttributeNames:{"#cacheKey":this.opts.hashKeyName},ExpressionAttributeValues:{":cacheKey":this.opts.hashKeyValue}};e=await this.dynamo.fullyExecuteQuery(t)}else{const t={TableName:this.opts.tableName};e=await this.dynamo.fullyExecuteScan(t)}return e.forEach((e=>this.cleanDynamoFieldsFromObjectInPlace(e))),e}}class be{s3CacheRatchet;prefix;constructor(e,s){this.s3CacheRatchet=e,this.prefix=s,t.notNullOrUndefined(this.s3CacheRatchet,"s3CacheRatchet"),t.notNullOrUndefined(this.s3CacheRatchet.getDefaultBucket(),"s3CacheRatchet.defaultBucket")}keyToPath(e){let t=s.trimToEmpty(this.prefix);return t.length>0&&!t.endsWith("/")&&(t+="/"),t+=e,t}async readFromCache(e){return await this.s3CacheRatchet.fetchCacheFileAsObject(this.keyToPath(e))}async storeInCache(e){t.notNullOrUndefined(e,"value"),t.notNullOrUndefined(e.cacheKey,"value.cacheKey");return!!await this.s3CacheRatchet.writeObjectToCacheFile(this.keyToPath(e.cacheKey),e)}async removeFromCache(e){await this.s3CacheRatchet.removeCacheFile(this.keyToPath(e))}async clearCache(){const e=await this.s3CacheRatchet.directChildrenOfPrefix(this.keyToPath(""));return await Promise.all(e.map((e=>this.removeFromCache(e)))),e.length}async readAll(){const e=await this.s3CacheRatchet.directChildrenOfPrefix(this.keyToPath(""));return await Promise.all(e.map((e=>this.readFromCache(e))))}}class Te{provider;defaultTimeToLiveMS;constructor(e,t=6e4){this.provider=e,this.defaultTimeToLiveMS=t}createDefaultReadOptions(){return{maxStalenessMS:null,timeToLiveMS:this.defaultTimeToLiveMS,cacheNullValues:!1}}async fetchWrapper(e,t,s=this.createDefaultReadOptions()){n.silly("Fetching %s",e);const a=(new Date).getTime();let i=await this.provider.readFromCache(e);if(i&&i.expiresEpochMS<a&&(n.debug("Object found, but expired - removing"),i=null),i&&s&&s.maxStalenessMS&&a-i.createdEpochMS>s.maxStalenessMS&&(n.debug("Object found by too stale - removing"),i=null),!i){n.debug("%s not found in cache, generating",e);const r=await t();(r||s?.cacheNullValues)&&(n.debug("Writing %j to cache"),i={cacheKey:e,createdEpochMS:a,expiresEpochMS:s&&s.timeToLiveMS?a+s.timeToLiveMS:null,value:r,generated:!1},await this.provider.storeInCache(i),i.generated=!0)}return i}async fetch(e,t,s=null){const a=await this.fetchWrapper(e,t,s);return a?a.value:null}async removeFromCache(e,t){let s=null;return t&&(s=await this.fetchWrapper(e,(()=>null))),await this.provider.removeFromCache(e),s}async clearCache(){return this.provider.clearCache()}async readAll(){return this.provider.readAll()}}class Ee{logGroup;awsCWLogs;constructor(e,t=new f({region:"us-east-1"})){this.logGroup=e,this.awsCWLogs=t}get cloudWatchLogsClient(){return this.awsCWLogs}async readLogStreams(e=null,t=null){const s={logGroupName:this.logGroup,orderBy:"LastEventTime"},a=[];do{n.debug("Pulling more log streams (%d found so far)",a.length);const i=await this.awsCWLogs.send(new g(s));i.logStreams.forEach((s=>{null!==s.lastEventTimestamp&&(!e||s.lastEventTimestamp>=e)&&(!t||s.firstEventTimestamp<=t)&&a.push(s)})),s.nextToken=i.nextToken}while(s.nextToken);return n.debug("Found %d total, returning",a.length),a}async readLogStreamNames(e=null,t=null){return(await this.readLogStreams(e,t)).map((e=>e.logStreamName))}async readEvents(e,t=null,s=null,a=!0,r=null){const o=new i,c={logGroupName:this.logGroup,endTime:s,startTime:t};e&&(c.filterPattern=e),n.debug("Reading log events matching : %j",c);let l=[];do{n.debug("Pulling more log events (%d found so far) : %s",l.length,o.dump());const e=await this.awsCWLogs.send(new p(c));l=l.concat(e.events),c.nextToken=e.nextToken}while(c.nextToken&&(!r||l.length<r));return n.debug("Found %d total in %s",l.length,o.dump()),a&&(n.debug("Sorting events by timestamp"),l=l.sort(((e,t)=>{let s=e.timestamp-t.timestamp;return 0===s&&(s=e.message.localeCompare(t.message)),s}))),o.log(),l}}class Ce{static MAX_DELETE_RETRIES=5;cwLogs;constructor(e=null){this.cwLogs=e||new f({region:"us-east-1"})}get cloudWatchLogsClient(){return this.cwLogs}async removeEmptyOrOldLogStreams(e,t=1e3,s=null){n.info("Removing empty streams from %s, oldest event epoch MS : %d",e,s);const a={logGroupName:e,orderBy:"LastEventTime"},i=s||1;let o=0;const c=[],l=[];let h=10;do{n.debug("Executing search for streams");try{const e=await this.cwLogs.send(new g(a));o+=e.logStreams.length,n.debug("Found %d streams (%d so far, %d to delete)",e.logStreams.length,o,c.length);for(let s=0;s<e.logStreams.length&&c.length<t;s++){const t=e.logStreams[s];t.firstEventTimestamp?t.lastEventTimestamp<i&&c.push(t):c.push(t)}a.nextToken=e.nextToken}catch(e){const t=h;h=Math.min(1e3,1.5*h),n.info("Caught while describing %s, increasing wait between deletes (was %d, now %d)",e,t,h)}}while(a.nextToken&&c.length<t);n.info("Found %d streams to delete",c.length);let u=10;for(let t=0;t<c.length;t++){const s={logGroupName:e,logStreamName:c[t].logStreamName},a=0===c[t].storedBytes?"empty":"old";n.info("Removing %s stream %s",a,c[t].logStreamName);let i=!1,o=0;for(;!i&&o<Ce.MAX_DELETE_RETRIES;)try{await this.cwLogs.send(new y(s)),i=!0,await r.wait(u)}catch(e){o++;const t=u;u=Math.min(1e3,1.5*u),n.info("Caught %s, increasing wait between deletes and retrying (wait was %d, now %d) (Retry %d of %d)",e,t,u,o,Ce.MAX_DELETE_RETRIES)}i||l.push(c[t])}return n.warn("Failed to remove streams : %j",l),c}async findOldestEventTimestampInGroup(e){const t=await this.findStreamWithOldestEventInGroup(e);return t?t.firstEventTimestamp:null}async findStreamWithOldestEventInGroup(e){n.info("Finding oldest event in : %s",e);let t=null;try{const s={logGroupName:e,orderBy:"LastEventTime"};let a=0;do{n.debug("Executing search for streams");const e=await this.cwLogs.send(new g(s));a+=e.logStreams.length,n.debug("Found %d streams (%d so far)",e.logStreams.length,a),e.logStreams.forEach((e=>{e.firstEventTimestamp&&(null===t||e.firstEventTimestamp<t.firstEventTimestamp)&&(t=e)})),s.nextToken=e.nextToken}while(s.nextToken)}catch(t){n.error("Error attempting to find oldest event in group : %s : %s",e,t,t)}return t}async findLogGroups(e){t.notNullOrUndefined(e);const s={logGroupNamePrefix:e};let a=[];do{n.info("%d found, pulling log groups : %j",a.length,s);const e=await this.cwLogs.send(new w(s));a=a.concat(e.logGroups),s.nextToken=e.nextToken}while(s.nextToken);return a}async removeLogGroups(e){t.notNullOrUndefined(e);const s=[];for(let t=0;t<e.length;t++)try{n.info("Deleting %j",e[t]);const a={logGroupName:e[t].logGroupName};await this.cwLogs.send(new b(a)),s.push(!0)}catch(a){n.error("Failure to delete %j : %s",e[t],a),s.push(!1)}return s}async removeLogGroupsWithPrefix(e){t.notNullOrUndefined(e),t.true(s.trimToEmpty(e).length>0),n.info("Removing log groups with prefix %s",e);const a=await this.findLogGroups(e);return await this.removeLogGroups(a)}async fullyExecuteInsightsQuery(e){t.notNullOrUndefined(e),n.debug("Starting insights query : %j",e);const s=await this.cwLogs.send(new T(e));n.debug("Got query id %j",s);let a=null,i=100;for(;!a||["Running","Scheduled"].includes(a.status);)a=await this.cwLogs.send(new E({queryId:s.queryId})),await r.wait(i),i*=2,n.info("Got : %j",a);return a}async abortInsightsQuery(e){let t=null;return e&&(t=await this.cwLogs.send(new C({queryId:e}))),t}}var Se;!function(e){e.Seconds="Seconds",e.Microseconds="Microseconds",e.Milliseconds="Milliseconds",e.Bytes="Bytes",e.Kilobytes="Kilobytes",e.Megabytes="Megabytes",e.Gigabytes="Gigabytes",e.Terabytes="Terabytes",e.Bits="Bits",e.Kilobits="Kilobits",e.Megabits="Megabits",e.Gigabits="Gigabits",e.Terabits="Terabits",e.Percent="Percent",e.Count="Count",e.BytesPerSecond="Bytes/Second",e.KilobytesPerSecond="Kilobytes/Second",e.MegabytesPerSecond="Megabytes/Second",e.GigabytesPerSecond="Gigabytes/Second",e.TerabytesPerSecond="Terabytes/Second",e.BitsPerSecond="Terabytes/Second",e.KilobitsPerSecond="Kilobits/Second",e.MegabitsPerSecond="Megabits/Second",e.GigabitsPerSecond="Gigabits/Second",e.TerabitsPerSecond="Terabits/Second",e.CountPerSecond="Count/Second",e.None="None"}(Se||(Se={}));class Ne{cw;constructor(e=null){this.cw=e||new S({region:"us-east-1",apiVersion:"2010-08-01"})}get cloudWatchClient(){return this.cw}async writeSingleMetric(e,t,s,a=Se.None,i,r=new Date,o=!1){const c=[];s&&s.length>0&&s.forEach((e=>{c.push({Name:e.key,Value:e.value})}));const l=o?1:60,h={Namespace:e,MetricData:[{MetricName:t,Dimensions:c,Unit:String(a),Value:i,Timestamp:r,StorageResolution:l}]};n.silly("Writing metric to cw : %j",h);const u=await this.cw.send(new N(h));return n.silly("Result: %j",u),u}async writeDynamoCountAsMinuteLevelMetric(t){if(n.info("Publishing %s / %s metric for %s UTC",t.namespace,t.metric,t.minuteUTC),t.scan&&t.query)throw new Error("Must send query or scan, but not both");if(!t.scan&&!t.query)throw new Error("You must specify either a scan or a query");const s=t.query?await t.dynamoRatchet.fullyExecuteQueryCount(t.query):await t.dynamoRatchet.fullyExecuteScanCount(t.scan);n.debug("%s / %s for %s are %j",t.namespace,t.metric,t.minuteUTC,s);const a=t.minuteUTC.split(" ").join("T")+":00Z",i=e.fromISO(a).toJSDate(),r=await this.writeSingleMetric(t.namespace,t.metric,t.dims,Se.Count,s.count,i,!1);return n.debug("Metrics response: %j",r),s.count}}class xe{static DEFAULT_CONTENT=Buffer.from("DAEMON_PLACEHOLDER");static DAEMON_METADATA_KEY="daemon_meta";static async start(e,t,s,a){try{a.meta=a.meta||{},n.info("Starting daemon, key: %s, options: %j",s,a);const i=(new Date).getTime(),r={id:t,title:a.title,lastUpdatedEpochMS:i,lastUpdatedMessage:"Created",targetFileName:a.targetFileName,startedEpochMS:i,completedEpochMS:null,meta:a.meta,error:null,link:null,contentType:a.contentType};return await xe.writeState(e,s,r,xe.DEFAULT_CONTENT)}catch(e){throw n.error("Error while trying to start a daemon: %j %s",a,e),e}}static async writeState(e,t,s,a){try{const i={};s.lastUpdatedEpochMS=(new Date).getTime(),i[xe.DAEMON_METADATA_KEY]=JSON.stringify(s);const r={Bucket:e.getDefaultBucket(),Key:t,ContentType:s.contentType,Metadata:i,Body:new Blob([a])};s.targetFileName&&(r.ContentDisposition='attachment;filename="'+s.targetFileName+'"');const o=await e.getS3Client().send(new x(r));return n.silly("Daemon wrote : %s",o),xe.stat(e,t)}catch(e){throw n.error("Error while trying to write a daemon stat: %j %s",s,e),e}}static async streamDataAndFinish(e,t,s){n.debug("Streaming data to %s",t);const a=await xe.updateMessage(e,t,"Streaming data");a.completedEpochMS=(new Date).getTime(),a.lastUpdatedMessage="Complete";const i={};i[xe.DAEMON_METADATA_KEY]=JSON.stringify(a);const r={Bucket:e.getDefaultBucket(),Key:t,ContentType:a.contentType,Metadata:i,Body:s},o=new j({client:e.getS3Client(),params:r,tags:[],queueSize:4,partSize:5242880,leavePartsOnError:!1});o.on("httpUploadProgress",(e=>{n.info("Uploading : %s",e)}));const c=await o.done();return n.silly("Daemon wrote : %s",c),xe.stat(e,t)}static async updateMessage(e,t,s){try{const a=await xe.stat(e,t);return a.lastUpdatedMessage=s,xe.writeState(e,t,a,xe.DEFAULT_CONTENT)}catch(e){throw n.error("Error while trying to update a daemon message: %j %s",t,e),e}}static async stat(e,t){try{n.debug("Daemon stat for path %s / %s",e.getDefaultBucket(),t);let s=null;const a=await e.fetchMetaForCacheFile(t);n.debug("Daemon: Meta is %j",a);const i=a&&a.Metadata?a.Metadata[xe.DAEMON_METADATA_KEY]:null;return i?(s=JSON.parse(i),s.completedEpochMS&&!s.error&&(s.link=await e.preSignedDownloadUrlForCacheFile(t))):n.warn("No metadata found! (Head was %j)",a),s}catch(e){throw n.error("Error while trying to fetch a daemon state: %j %s",t,e),e}}static async abort(e,t){return xe.error(e,t,"Aborted")}static async error(e,t,s){try{const a=await xe.stat(e,t);return a.error=s,a.completedEpochMS=(new Date).getTime(),xe.writeState(e,t,a,xe.DEFAULT_CONTENT)}catch(e){throw n.error("Error while trying to write a daemon error: %j %s",t,e),e}}static async finalize(e,t,s){try{n.info("Finalizing daemon %s with %d bytes",t,s.length);const a=await xe.stat(e,t);return a.completedEpochMS=(new Date).getTime(),a.lastUpdatedMessage="Complete",xe.writeState(e,t,a,s)}catch(e){throw n.error("Error while trying to finalize a daemon: %j %s",t,e),e}}}class ve{s3;defaultBucket;constructor(e,s=null){this.s3=e,this.defaultBucket=s,t.notNullOrUndefined(this.s3,"s3")}get s3Client(){return this.s3}static applyCacheControlMaxAge(e,t){return e&&t&&(e.CacheControl="max-age="+t),e}static applyUserMetaData(e,t,a){return e&&s.trimToNull(t)&&s.trimToNull(a)&&(e.Metadata=e.Metadata||{},e.Metadata[t]=a),e}getDefaultBucket(){return this.defaultBucket}getS3Client(){return this.s3}async fileExists(e,t=null){try{return!!await this.fetchMetaForCacheFile(e,this.bucketVal(t))}catch(e){return n.silly("Error calling file exists (as expected) %s",e),!1}}async fetchCacheFileAsS3GetObjectCommandOutput(e,t=null){let s=null;try{const a={Bucket:this.bucketVal(t),Key:e};s=await this.s3.send(new v(a))}catch(t){if(!(t instanceof k))throw t;n.debug("Key %s not found - returning null",e),s=null}return s}async fetchCacheFileAsReadableStream(e,t=null){return(await this.fetchCacheFileAsS3GetObjectCommandOutput(e,t)).Body.transformToWebStream()}async fetchCacheFileAsBuffer(e,t=null){let s=null;const a=await this.fetchCacheFileAsS3GetObjectCommandOutput(e,t);if(a?.Body){const e=await a.Body.transformToByteArray();s=Buffer.from(e)}return s}async fetchCacheFileAsString(e,t=null){let s=null;const a=await this.fetchCacheFileAsS3GetObjectCommandOutput(e,t);return a?.Body&&(s=await a.Body.transformToString()),s}async fetchCacheFileAsObject(e,t=null){const s=await this.fetchCacheFileAsString(e,t);return s?JSON.parse(s):null}async removeCacheFile(e,t=null){let s=null;const a={Bucket:this.bucketVal(t),Key:e};try{s=await this.s3.send(new D(a))}catch(a){if(!a||404!=a.statusCode)throw a;n.info("Swallowing 404 deleting missing object %s %s",t,e),s=null}return s}async writeObjectToCacheFile(e,t,s,a){const n=JSON.stringify(t);return this.writeStringToCacheFile(e,n,s,a)}async writeStringToCacheFile(e,t,s,a){const n=o.stringToWebReadableStream(t);return this.writeStreamToCacheFile(e,n,s,a)}async writeStreamToCacheFile(e,t,s,a){const i=Object.assign({},s||{},{Bucket:this.bucketVal(a),Key:e,Body:t}),r=new j({client:this.s3,params:i,tags:[],queueSize:4,partSize:5242880,leavePartsOnError:!1});r.on("httpUploadProgress",(e=>{n.info("Uploading : %s",e)}));return await r.done()}async synchronize(e,s,a=this,r=!1){t.notNullOrUndefined(e,"srcPrefix"),t.notNullOrUndefined(s,"targetPrefix"),t.true(e.endsWith("/"),"srcPrefix must end in /"),t.true(s.endsWith("/"),"targetPrefix must end in /");let o=[];const c=await this.directChildrenOfPrefix(e),l=await a.directChildrenOfPrefix(s),h=new i;for(let t=0;t<c.length;t++){const i=c[t];if(n.info("Processing %s : %s",i,h.dumpExpected(t/c.length)),i.endsWith("/"))if(r){n.info("%s is a subfolder - recursing");const t=await this.synchronize(e+i,s+i,a,r);n.info("Got %d back from %s",t.length,i),o=o.concat(t)}else n.info("%s is a subfolder and recurse not specified - skipping",i);else{let t=!0;const r=await this.fetchMetaForCacheFile(e+i);if(l.includes(i)){const e=await a.fetchMetaForCacheFile(s+i);r.ETag===e.ETag&&(n.debug("Skipping - identical"),t=!1)}if(t){n.debug("Copying...");const t=await this.fetchCacheFileAsReadableStream(e+i);try{const e=await a.writeStreamToCacheFile(s+i,t,r,void 0);n.silly("Write result : %j",e),o.push(i)}catch(e){n.error("Failed to sync : %s : %s",i,e)}}}}return n.info("Found %d files, copied %d",c.length,o.length),h.log(),o}async fetchMetaForCacheFile(e,t=null){let s=null;try{s=await this.s3.send(new O({Bucket:this.bucketVal(t),Key:e}))}catch(a){if(!a||404!=a.statusCode)throw n.error("Unrecognized error, rethrowing : %s",a,a),a;n.info("Cache file %s %s not found returning null",this.bucketVal(t),e),s=null}return s}async cacheFileAgeInSeconds(e,t=null){try{const s=await this.fetchMetaForCacheFile(e,t);return s&&s.LastModified?Math.floor(((new Date).getTime()-s.LastModified.getTime())/1e3):(n.warn("Cache file %s %s had no last modified returning null",this.bucketVal(t),e),null)}catch(s){if(s&&404==s.statusCode)return n.warn("Cache file %s %s not found returning null",this.bucketVal(t),e),null;throw s}}async copyFile(e,t,s=null,a=null){const n={CopySource:"/"+this.bucketVal(s)+"/"+e,Bucket:this.bucketVal(a),Key:t,MetadataDirective:"COPY"};return await this.s3.send(new F(n))}async quietCopyFile(e,t,s=null,a=null){let i=!1;try{await this.copyFile(e,t,s,a);i=!0}catch(e){n.silly("Failed to copy file in S3 : %s",e)}return i}async preSignedDownloadUrlForCacheFile(e,t=3600,s=null){const a={Bucket:this.bucketVal(s),Key:e};return await U(this.s3,new v(a),{expiresIn:t})}async directChildrenOfPrefix(e,t=!1,s=null,a=null){const n=[],i={Bucket:this.bucketVal(s),Prefix:e,Delimiter:"/"};let r=null;do{r=await this.s3.send(new A(i));const o=e.length;r.CommonPrefixes&&r.CommonPrefixes.forEach((e=>{if(!a||n.length<a){const t=e.Prefix.substring(o);n.push(t)}})),r.Contents&&await Promise.all(r.Contents.map((async e=>{if(!a||n.length<a)if(t){const t={link:await this.preSignedDownloadUrlForCacheFile(e.Key,3600,s),name:e.Key.substring(o),size:e.Size};n.push(t)}else n.push(e.Key.substring(o))}))),i.Marker=r.NextMarker}while(i.Marker&&(!a||n.length<a));return n}async allSubFoldersOfPrefix(e,t=null){const s=[e];let a=0;for(;a<s.length;){const e=s[a++];n.debug("Pulling %s (%d remaining)",e,s.length-a);const i={Bucket:this.bucketVal(t),Prefix:e,Delimiter:"/"};let r=null;do{i.ContinuationToken=r?r.NextContinuationToken:null,r=await this.s3.send(new A(i)),r.CommonPrefixes.forEach((e=>{s.push(e.Prefix)})),n.debug("g:%j",r)}while(r.NextContinuationToken)}return s}bucketVal(e){const t=e||this.defaultBucket;if(!t)throw"You must set either the default bucket or pass it explicitly";return t}}class ke{s3;bucket;prefix;_defaultGroup;jwtRatchet;static DEFAULT_DEFAULT_GROUP="DEFAULT";cache;constructor(e,t,s="",a=ke.DEFAULT_DEFAULT_GROUP,n){this.s3=e,this.bucket=t,this.prefix=s,this._defaultGroup=a,this.jwtRatchet=n,this.cache=new ve(this.s3,this.bucket)}get defaultGroup(){return this._defaultGroup}async keyToPublicToken(e,s){t.notNullOrUndefined(this.jwtRatchet,"You must set jwtRatchet if you wish to use public tokens"),t.notNullOrUndefined(e,"key"),t.true(s>0,"Expiration seconds must be larger than 0");const a={daemonKey:e};return await this.jwtRatchet.createTokenString(a,s)}keyToPath(e){return Buffer.from(e,"base64").toString()}pathToKey(e){return Buffer.from(e).toString("base64")}generatePath(e=this._defaultGroup){return this.generatePrefix(e)+s.createType4Guid()}generatePrefix(e=this._defaultGroup){return this.prefix+e+"/"}async start(e){e.group=e.group||this._defaultGroup;const t=this.generatePath(e.group),s=this.pathToKey(t);return xe.start(this.cache,s,t,e)}async writeState(e,t){const s=this.keyToPath(e.id);return xe.writeState(this.cache,s,e,t)}async clean(e=this._defaultGroup,t=604800){try{n.info("Daemon removing items older than %d seconds from group %s",t,e);const s=await this.list(e),a=(new Date).getTime(),i=[];for(let e=0;e<s.length;e++){const n=s[e];if((a-n.startedEpochMS)/1e3>t){await this.cache.removeCacheFile(this.keyToPath(n.id));i.push(n)}}return n.debug("Removed %d of %d items",i.length,s.length),i}catch(t){throw n.error("Error while trying to clean a daemon: %j %s",e,t),t}}async listKeys(e=this._defaultGroup){try{const t=this.generatePrefix(e);n.info("Fetching children of %s",t);const s=await this.cache.directChildrenOfPrefix(t);return n.debug("Found : %j",s),s}catch(t){throw n.error("Error while trying to list daemon keys: %j %s",e,t),t}}async list(e=this._defaultGroup){try{const t=this.generatePrefix(e);n.info("Fetching children of %s",t);const s=(await this.listKeys(e)).map((t=>this.stat(this.pathToKey(this.generatePrefix(e)+t))));return await Promise.all(s)}catch(t){throw n.error("Error while trying to list daemon states: %j %s",e,t),t}}async updateMessage(e,t){const s=this.keyToPath(e);return xe.updateMessage(this.cache,s,t)}async stat(e){const t=this.keyToPath(e);return xe.stat(this.cache,t)}async statFromPublicToken(e){t.notNullOrUndefined(this.jwtRatchet,"You must set jwtRatchet if you wish to use public tokens"),t.notNullOrUndefined(e,"publicToken");const s=await this.jwtRatchet.decodeToken(e),a=s?.daemonKey;return a?this.stat(a):null}async abort(e){return xe.abort(this.cache,this.keyToPath(e))}async error(e,t){return xe.error(this.cache,this.keyToPath(e),t)}async finalize(e,t){return xe.finalize(this.cache,this.keyToPath(e),t)}}class De{provider;cfg;static defaultDaoConfig(){return{guidCreateFunction:s.createType4Guid,guidFieldName:"guid",createdEpochMSFieldName:"createdEpochMS",updatedEpochMSFieldName:"updatedEpochMS",createdUtcTimestampFieldName:null,updatedUtcTimestampFieldName:null}}constructor(e,s=De.defaultDaoConfig()){this.provider=e,this.cfg=s,t.notNullOrUndefined(e,"provider"),t.notNullOrUndefined(s,"cfg"),t.notNullOrUndefined(s.guidCreateFunction,"cfg.guidCreateFunction"),t.notNullOrUndefined(s.guidFieldName,"cfg.guidFieldName")}async fetchAll(){return(await this.provider.loadDatabase()).items||[]}async resetDatabase(){await this.provider.storeDatabase({items:[],lastModifiedEpochMS:Date.now()})}async removeItems(e){let t=await this.fetchAll();return e&&(t=t.filter((t=>!e.includes(t[this.cfg.guidFieldName]))),await this.provider.storeDatabase({items:t,lastModifiedEpochMS:Date.now()})),t}async store(t){let s=await this.fetchAll();return t&&(t[this.cfg.guidFieldName]=t[this.cfg.guidFieldName]||this.cfg.guidCreateFunction(),this.cfg.createdEpochMSFieldName&&(t[this.cfg.createdEpochMSFieldName]=t[this.cfg.createdEpochMSFieldName]||Date.now()),this.cfg.createdUtcTimestampFieldName&&(t[this.cfg.createdUtcTimestampFieldName]=t[this.cfg.createdUtcTimestampFieldName]||e.utc().toISO()),this.cfg.updatedEpochMSFieldName&&(t[this.cfg.updatedEpochMSFieldName]=Date.now()),this.cfg.updatedUtcTimestampFieldName&&(t[this.cfg.updatedUtcTimestampFieldName]=e.utc().toISO()),s=s.filter((e=>e[this.cfg.guidFieldName]!==t[this.cfg.guidFieldName])),s.push(t),await this.provider.storeDatabase({items:s,lastModifiedEpochMS:Date.now()})),t}async fetchById(e){return(await this.fetchAll()).find((t=>t[this.cfg.guidFieldName]===e))}async searchByField(e,s){t.notNullOrUndefined(e,"fieldDotPath"),t.notNullOrUndefined(s,"fieldValue");const a={};return a[e]=s,this.searchByFieldMap(a)}async searchByFieldMap(e){t.notNullOrUndefined(e,"input");let s=await this.fetchAll();return s=s.filter((t=>{let s=!0;return Object.keys(e).forEach((a=>{const n=c.findValueDotPath(t,a),i=e[a];s=s&&n===i})),s})),s}}class Oe{s3CacheRatchet;keyName;constructor(e,s){this.s3CacheRatchet=e,this.keyName=s,t.notNullOrUndefined(e,"s3CacheRatchet"),t.notNullUndefinedOrOnlyWhitespaceString(e.getDefaultBucket(),"s3CacheRatchet.defaultBucket"),t.notNullUndefinedOrOnlyWhitespaceString(s,"keyName")}async storeDatabase(e){const t=e||{items:[],lastModifiedEpochMS:null};t.lastModifiedEpochMS=Date.now();return!!await this.s3CacheRatchet.writeObjectToCacheFile(this.keyName,t)}async loadDatabase(){return await this.s3CacheRatchet.fetchCacheFileAsObject(this.keyName)||{items:[],lastModifiedEpochMS:Date.now()}}}class Fe{cache;prefix;constructor(e,t){if(this.cache=e,this.prefix=t,!e)throw new Error("cache object may not be null");if(!e.getDefaultBucket())throw new Error("Supplied cache must have default bucket set")}buildPathPrefix(e){let t="";return this.prefix&&(t+=this.prefix),e&&(t+=e),t}buildFullPath(e,t){let s=this.buildPathPrefix(t);return s.length>0&&(s+="/"),s+=e+".json",s}async exists(e,t){const s=this.buildFullPath(e,t);return n.debug("Check file existence : %s",s),this.cache.fileExists(s)}async fetch(e,t){const s=this.buildFullPath(e,t);n.debug("Fetching : %s",s);const a=await this.cache.fetchCacheFileAsObject(s);return a.id=e,a.path=t,a}async store(e,t){e.id=e.id||s.createType4Guid(),e.lastModifiedEpochMS=(new Date).getTime();const a=this.buildFullPath(e.id,t);n.debug("Storing : %s",a),await this.cache.writeObjectToCacheFile(a,e);return await this.fetch(e.id,t)}async listItems(e){const t=this.buildPathPrefix(e);n.debug("Listing : %s",t);return await this.cache.directChildrenOfPrefix(t)}async fetchItemsInPath(e){const t=this.buildPathPrefix(e);n.debug("Full fetch of : %s",t);const s=(await this.listItems(e)).map((t=>this.fetch(t,e)));return await Promise.all(s)}async delete(e,t){const s=this.buildFullPath(e,t);n.debug("Deleting : %s",s);return null!=await this.cache.removeCacheFile(s)}}class Ae{awsDDB;constructor(e){if(this.awsDDB=e,!e)throw"awsDDB may not be null"}get dynamoDBDocumentClient(){return this.awsDDB}getDDB(){return this.awsDDB}async tableIsEmpty(e){const t={TableName:e,Limit:1};return 0===(await this.throughputSafeScanOrQuery((e=>this.scanPromise(e)),t)).Items.length}async scanPromise(e){return this.awsDDB.send(new I(e))}async queryPromise(e){return this.awsDDB.send(new B(e))}async throughputSafeScanOrQuery(e,t,s,i){let o=null;if(t){let c=i??0;do{c++;try{o=await e(t)}catch(e){if(!Ae.objectIsErrorWithProvisionedThroughputExceededExceptionCode(e))throw e;{const e=1e3*Math.pow(2,c);n.debug("Exceeded scan throughput for %j : Try %d of %d (Waiting %d ms)",t,c,s,e),await r.wait(e),c++}}}while(!o&&(!s||c<s));o||a.throwFormattedErr("throughputSafeScan failed - tried %d times, kept running into throughput exceeded : %j",s,t)}return o}async fullyExecuteQueryCount(e,t=0){try{e.Select="COUNT",n.debug("Executing count query : %j",e);const s={count:0,scannedCount:0,pages:0},a=(new Date).getTime();let i=null;const o=e.Limit;e.Limit=null;do{i=await this.throughputSafeScanOrQuery((e=>this.queryPromise(e)),e),s.count+=i.Count,s.scannedCount+=i.ScannedCount,s.pages++,e.ExclusiveStartKey=i.LastEvaluatedKey,await r.wait(t),n.silly("Rval is now %j",s),o&&s.count>=o&&e.ExclusiveStartKey&&(n.info("Aborting query since hit limit of %d",o),e.ExclusiveStartKey=null)}while(e.ExclusiveStartKey);const c=(new Date).getTime();return n.debug("Finished, returned %j in %s for %j",s,l.formatMsDuration(c-a,!0),e),s}catch(t){return n.error("Failed with %s, q: %j",t,e,t),null}}async fullyExecuteQuery(e,t=0,s=null){const a=[];return await this.fullyExecuteProcessOverQuery(e,(async e=>{a.push(e)}),t,s),a}async fullyExecuteProcessOverQuery(e,t,s=0,a=null){let i=0;try{n.debug("Executing query : %j",e);const o=(new Date).getTime();n.debug("Pulling %j",e);let c=await this.throughputSafeScanOrQuery((e=>this.queryPromise(e)),e);for(let e=0;e<c.Items.length;e++)await t(c.Items[e]),i++;let h=0,u=0;for(;c.LastEvaluatedKey&&(null===a||i<a)&&!e.Limit;){n.silly("Found more rows - requery with key %j",c.LastEvaluatedKey),e.ExclusiveStartKey=c.LastEvaluatedKey,c=await this.throughputSafeScanOrQuery((e=>this.queryPromise(e)),e);for(let e=0;e<c.Items.length;e++)await t(c.Items[e]),i++;n.silly("Have processed %d items",i),h++,u+=0===c.Count?1:0,await r.wait(s)}const d=(new Date).getTime();n.debug("Finished, processed %d rows in %s for %j (%d blank pages, %d total pages)",i,l.formatMsDuration(d-o,!0),e,u,h)}catch(t){n.error("Failed with %s, q: %j",t,e,t)}return i}async fullyExecuteScanCount(e,t=0){try{e.Select="COUNT";const s={count:0,scannedCount:0,pages:0};n.debug("Executing scan count : %j",e);const a=(new Date).getTime();let i=null;const o=e.Limit;e.Limit=null;do{i=await this.throughputSafeScanOrQuery((e=>this.scanPromise(e)),e),s.count+=i.Count,s.scannedCount+=i.ScannedCount,s.pages++,e.ExclusiveStartKey=i?.LastEvaluatedKey,await r.wait(t),n.silly("Rval is now %j",s),o&&s.count>=o&&e.ExclusiveStartKey&&(n.info("Aborting scan since hit limit of %d",o),e.ExclusiveStartKey=null)}while(e.ExclusiveStartKey);const c=(new Date).getTime();return n.debug("Finished, returned %j in %s for %j",s,l.formatMsDuration(c-a,!0),e),s}catch(t){return n.error("Failed with %s, q: %j",t,e,t),null}}async fullyExecuteScan(e,t=0,s=null){const a=[];return await this.fullyExecuteProcessOverScan(e,(async e=>{a.push(e)}),t,s),a}async fullyExecuteProcessOverScan(e,t,s=0,a=null){let i=0;try{n.debug("Executing scan : %j",e);const o=(new Date).getTime();n.debug("Pulling %j",e);let c=await this.throughputSafeScanOrQuery((e=>this.scanPromise(e)),e);for(let e=0;e<c.Items.length;e++)await t(c.Items[e]),i++;for(;c.LastEvaluatedKey&&(null===a||i<a)&&!e.Limit;){n.silly("Found more rows - requery with key %j",c.LastEvaluatedKey),e.ExclusiveStartKey=c.LastEvaluatedKey,c=await this.throughputSafeScanOrQuery((e=>this.scanPromise(e)),e);for(let e=0;e<c.Items.length;e++)await t(c.Items[e]),i++;n.silly("Rval is now %d items",i),await r.wait(s)}const h=(new Date).getTime();n.debug("Finished, processed %d results in %s for %j",i,l.formatMsDuration(h-o,!0),e)}catch(t){n.error("Failed with %s, q: %j",t,e,t)}return i}async writeAllInBatches(e,t,s){if(!s||s<2)throw new Error("Batch size needs to be at least 2, was "+s);let a=0;if(t&&t.length>0){let i=[];for(t.forEach((t=>{i.push({PutRequest:{Item:t,ReturnConsumedCapacity:"TOTAL",TableName:e}})})),n.debug("Processing %d batch items to %s",i.length,e);i.length>0;){const t=i.slice(0,Math.min(i.length,s));i=i.slice(t.length);const o={RequestItems:{},ReturnConsumedCapacity:"TOTAL",ReturnItemCollectionMetrics:"SIZE"};o.RequestItems[e]=t;let c=1,l=!1,h=null;for(;!l&&c<7;){try{h=await this.awsDDB.send(new R(o))}catch(e){if(!Ae.objectIsErrorWithProvisionedThroughputExceededExceptionCode(e))throw e;n.info("Caught ProvisionedThroughputExceededException - retrying delete"),h={UnprocessedItems:o.RequestItems}}if(h&&h.UnprocessedItems&&h.UnprocessedItems[e]&&h.UnprocessedItems[e].length>0){const t=Math.pow(2,c);n.warn("Found %d unprocessed items. Backing off %d seconds and trying again",h.UnprocessedItems[e].length,t),await r.wait(1e3*t),c++,o.RequestItems[e]=h.UnprocessedItems[e]}else l=!0}h&&h.UnprocessedItems&&h.UnprocessedItems[e]&&h.UnprocessedItems[e].length>0?(n.error("After 6 tries there were still %d unprocessed items"),a+=t.length-h.UnprocessedItems[e].length,n.warn("FIX Unprocessed : %j",h.UnprocessedItems)):a+=t.length}}return a}async fetchFullObjectsMatchingKeysOnlyIndexQuery(e,s,a=25){t.notNullOrUndefined(e),t.notNullOrUndefined(e.TableName),t.notNullOrUndefined(s),t.true(s.length>0);const n=await this.fullyExecuteQuery(e),i=Ae.stripAllToKeysOnly(n,s);return await this.fetchAllInBatches(e.TableName,i,a)}async fetchAllInBatches(e,t,s){if(!s||s<2||s>100)throw new Error("Batch size needs to be at least 2 and no more than 100, was "+s);let a=[];const i=[];let o=Object.assign([],t);for(;o.length>0;){const t=o.slice(0,Math.min(o.length,s));o=o.slice(t.length);const a={};a[e]={Keys:t};const n={RequestItems:a,ReturnConsumedCapacity:"TOTAL"};i.push(n)}n.debug("Created %d batches",i.length);for(let t=0;t<i.length;t++){i.length>1&&n.info("Processing batch %d of %d",t+1,i.length);const s=i[t];let o=1;do{n.silly("Pulling %j",s);const t=await this.awsDDB.send(new K(s));a=a.concat(t.Responses[e]),t.UnprocessedKeys&&t.UnprocessedKeys[e]&&t.UnprocessedKeys[e].Keys.length>0&&o<15&&(n.silly("Found %d unprocessed, waiting",t.UnprocessedKeys[e].Keys),await r.wait(1e3*Math.pow(2,o)),o++),s.RequestItems=t.UnprocessedKeys}while(!s.RequestItems&&s.RequestItems[e].Keys.length>0)}return a}async deleteAllInBatches(e,t,s){if(!s||s<2)throw new Error("Batch size needs to be at least 2, was "+s);let a=0;if(t&&t.length>0){let i=[];for(t.forEach((t=>{i.push({DeleteRequest:{Key:t,ReturnConsumedCapacity:"TOTAL",TableName:e}})})),n.debug("Processing %d DeleteBatch items to %s",i.length,e);i.length>0;){const t=i.slice(0,Math.min(i.length,s));i=i.slice(t.length);const o={RequestItems:{},ReturnConsumedCapacity:"TOTAL",ReturnItemCollectionMetrics:"SIZE"};o.RequestItems[e]=t;let c=1,l=!1,h=null;for(;!l&&c<7;){try{h=await this.awsDDB.send(new R(o))}catch(e){if(!Ae.objectIsErrorWithProvisionedThroughputExceededExceptionCode(e))throw e;n.info("Caught ProvisionedThroughputExceededException - retrying delete"),h={UnprocessedItems:o.RequestItems}}if(h&&h.UnprocessedItems&&h.UnprocessedItems[e]&&h.UnprocessedItems[e].length>0){const t=Math.pow(2,c);n.warn("Found %d unprocessed items. Backing off %d seconds and trying again",h.UnprocessedItems[e].length,t),await r.wait(1e3*t),c++,o.RequestItems[e]=h.UnprocessedItems[e]}else l=!0}h&&h.UnprocessedItems&&h.UnprocessedItems[e]&&h.UnprocessedItems[e].length>0?(n.error("After 6 tries there were still %d unprocessed items"),a+=t.length-h.UnprocessedItems[e].length,n.warn("FIX Unprocessed : %j",h.UnprocessedItems)):a+=t.length,n.debug("%d Remain, DeleteBatch Results : %j",i.length,h)}}return a}async simplePut(e,t,s=3){let a=null,i=0;const o={Item:t,ReturnConsumedCapacity:"TOTAL",TableName:e};for(;!a&&i<s;)try{a=await this.awsDDB.send(new L(o))}catch(e){if(!Ae.objectIsErrorWithProvisionedThroughputExceededExceptionCode(e))throw e;{const e=1e3*Math.pow(2,i);n.debug("Exceeded write throughput for %j : Try %d of %d (Waiting %d ms)",o,i,s,e),await r.wait(e),i++}}return a||n.warn("Unable to write %j to DDB after %d tries, giving up",o,s),a}async simplePutOnlyIfFieldIsNullOrUndefined(e,t,s){let a=!1;const i={Item:t,ReturnConsumedCapacity:"TOTAL",ConditionExpression:"attribute_not_exists(#fieldName) OR #fieldName = :null ",ExpressionAttributeNames:{"#fieldName":s},ExpressionAttributeValues:{":null":null},TableName:e};try{const e=await this.awsDDB.send(new L(i));n.silly("Wrote : %j",e),a=!0}catch(e){if(Ae.objectIsErrorWithProvisionedThroughputExceededExceptionCode(e))n.debug("Exceeded write throughput for %j : (Waiting 2000 ms)",i),await r.wait(2e3);else{if(!e||!e.code||"ConditionalCheckFailedException"!==e.code)throw e;n.debug("Failed to write %j due to null field failure"),a=!1}}return a}async simplePutWithCollisionAvoidance(e,s,a,i,o=null,c=3){t.true(a&&a.length>0&&a.length<3,"You must pass 1 or 2 key names");let l=null,h=0;const u={"#key0":a[0]},d={":key0":s[a[0]]};let m="#key0 <> :key0";a.length>1&&(m+=" AND #key1 <> :key1",u["#key1"]=a[1],d[":key1"]=s[a[1]]);const f={Item:s,ReturnConsumedCapacity:"TOTAL",ConditionExpression:m,ExpressionAttributeNames:u,ExpressionAttributeValues:d,TableName:e};let g=0;for(;!l&&h<c&&(!o||g<o);)try{l=await this.awsDDB.send(new L(f))}catch(e){if(Ae.objectIsErrorWithProvisionedThroughputExceededExceptionCode(e)){h++;const e=1e3*Math.pow(2,h);n.debug("Exceeded write throughput for %j : Try %d of %d (Waiting %d ms)",f,h,c,e),await r.wait(e)}else{if(!e||!e.code||"ConditionalCheckFailedException"!==e.code)throw e;{let e=Object.assign({},f.Item);n.info("Failed to write %j due to collision - adjusting and retrying",e),e=i(e),f.Item=e,f.ExpressionAttributeValues[":key0"]=e[a[0]],a.length>1&&(f.ExpressionAttributeValues[":key1"]=e[a[1]]),g++}}}return l&&g>0&&n.info("After adjustment, wrote %j as %j",s,f.Item),l||n.warn("Unable to write %j to DDB after %d provision tries and %d adjusts, giving up",f,h,g),l?f.Item:null}async simpleGet(e,t,s=3){let a=null,i=0;const o={TableName:e,Key:t};for(;!a&&i<s;)try{a=await this.awsDDB.send(new V(o))}catch(e){if(!Ae.objectIsErrorWithProvisionedThroughputExceededExceptionCode(e))throw e;{const e=1e3*Math.pow(2,i);n.debug("Exceeded read throughput for %j : Try %d of %d (Waiting %d ms)",o,i,s,e),await r.wait(e),i++}}a||n.warn("Unable to read %j from DDB after %d tries, giving up",o,s);return a&&a.Item?Object.assign({},a.Item):null}static objectIsErrorWithProvisionedThroughputExceededExceptionCode(e){return!!e&&!!e.code&&"ProvisionedThroughputExceededException"===e.code}async simpleGetWithCounterDecrement(e,t,s,a,i=3){let o=null,c=0;const l={TableName:e,Key:t,UpdateExpression:"set #counter = #counter-:decVal",ExpressionAttributeNames:{"#counter":s},ExpressionAttributeValues:{":decVal":1,":minVal":0},ConditionExpression:"#counter > :minVal",ReturnValues:"ALL_NEW"};let h=!1;for(;!o&&c<i&&!h;)try{o=await this.awsDDB.send(new G(l))}catch(e){if(Ae.objectIsErrorWithProvisionedThroughputExceededExceptionCode(e)){const e=1e3*Math.pow(2,c);n.debug("Exceeded update throughput for %j : Try %d of %d (Waiting %d ms)",l,c,i,e),await r.wait(e),c++}else{if(!e||!e.code||"ConditionalCheckFailedException"!==e.code)throw e;n.info("Cannot fetch requested row (%j) - the update check failed",t),h=!0}}o||h||n.warn("Unable to update %j from DDB after %d tries, giving up",l,i);const u=o&&o.Attributes?Object.assign({},o.Attributes):null;return a&&u&&0===u[s]&&(n.info("Delete on 0 specified, removing"),await this.simpleDelete(e,t)),u}async simpleDelete(e,t){const s={TableName:e,Key:t};return await this.awsDDB.send(new _(s))}async atomicCounter(e,t,s,a=1){const n={TableName:e,Key:t,UpdateExpression:"SET #counterFieldName = #counterFieldName + :inc",ExpressionAttributeNames:{"#counterFieldName":s},ExpressionAttributeValues:{":inc":a},ReturnValues:"UPDATED_NEW"},i=await this.awsDDB.send(new G(n));return h.safeNumber(i.Attributes[s])}static cleanObject(e){if(e){const t=[];Object.keys(e).forEach((s=>{const a=e[s];""===a?t.push(s):a instanceof Object&&Ae.cleanObject(a)})),n.silly("Removing keys : %j",t),t.forEach((t=>{delete e[t]}))}}static stripToKeysOnly(e,t){let s=null;return e&&t&&t.length>0&&(s={},t.forEach((t=>{e[t]||a.throwFormattedErr("Failed key extraction on %j - missing %s",e,t),s[t]=e[t]}))),s}static stripAllToKeysOnly(e,t){return e.map((e=>Ae.stripToKeysOnly(e,t)))}}class Pe{awsDDB;constructor(e){if(this.awsDDB=e,!e)throw"awsDDB may not be null"}async deleteTable(e,s=!0){t.notNullOrUndefined(e);const a={TableName:e};n.debug("Deleting ddb table %s",e);const i=await this.awsDDB.send(new W(a));return s&&(n.debug("Table marked for delete, waiting for deletion"),await this.waitForTableDelete(e)),i}async createTable(e,s=!0,i=!1){t.notNullOrUndefined(e),t.notNullOrUndefined(e.TableName),n.debug("Creating new table : %j",e);await this.tableExists(e.TableName)&&(i?(n.debug("Table %s exists and replace specified - deleting",e.TableName),await this.deleteTable(e.TableName)):a.throwFormattedErr("Cannot create table %s - exists already and replace not specified",e.TableName));const r=await this.awsDDB.send(new q(e));return s&&(n.debug("Table created, awaiting ready"),await this.waitForTableReady(e.TableName)),r}async waitForTableReady(e){let t=!0,s=await this.safeDescribeTable(e);for(;s&&s.Table&&"ACTIVE"!==s.Table.TableStatus;)n.silly("Table not ready - waiting 2 seconds"),await r.wait(2e3),s=await this.safeDescribeTable(e);return s||s.Table||(n.warn("Cannot wait for %s to be ready - table does not exist",e),t=!1),t}async waitForTableDelete(e){let t=await this.safeDescribeTable(e);for(;t;)n.silly("Table %s still exists, waiting 2 seconds (State is %s)",e,t.Table.TableStatus),await r.wait(2e3),t=await this.safeDescribeTable(e)}async tableExists(e){return!!await this.safeDescribeTable(e)}async safeDescribeTable(e){try{return await this.awsDDB.send(new z({TableName:e}))}catch(e){if(e.code&&"ResourceNotFoundException"===e.code)return null;throw e}}}class Me{spots;buckets;separator;alphabet;_allSlots;constructor(e=3,a=16,n="_",i="0123456789ABCDEF"){this.spots=e,this.buckets=a,this.separator=n,this.alphabet=i,t.true(e>0,"Spots must be larger than 0"),t.true(a>1,"Buckets must be larger than 1"),t.notNullOrUndefined(s.trimToNull(i),"Alphabet may not be null or empty"),t.true(s.allUnique(i),"Alphabet must be unique"),t.true(s.stringContainsOnlyAlphanumeric(i),"Alphabet must be alphanumeric");const r=Math.pow(i.length,e);t.true(a<r,"Buckets must be less than permutations ("+a+" / "+r+")"),t.notNullOrUndefined(s.trimToNull(this.separator),"Separator must be nonnull and nonempty");const o=s.allPermutationsOfLength(e,i);this._allSlots=o.slice(0,a)}get allBuckets(){return Object.assign([],this._allSlots)}get randomBucket(){return this._allSlots[Math.floor(Math.random()*this.buckets)]}allSpreadValues(e){t.notNullOrUndefined(s.trimToNull(e),"Cannot spread null/empty value");return this._allSlots.map((t=>e+this.separator+t))}allSpreadValuesForArray(e){t.true(e&&e.length>0,"Cannot spread null/empty array");let s=[];return e.forEach((e=>{s=s.concat(this.allSpreadValues(e))})),s}addSpreader(e){return t.notNullOrUndefined(s.trimToNull(e),"Cannot spread null/empty value"),e+this.separator+this.randomBucket}extractBucket(e){t.notNullOrUndefined(s.trimToNull(e),"Cannot extract from null or empty value");const n=e.length-this.spots;return(n<0||e.charAt(n)!==this.separator)&&a.throwFormattedErr("Cannot extract bucket, not created by this spreader (missing %s at location %d)",this.separator,n),e.substring(n)}removeBucket(e){t.notNullOrUndefined(s.trimToNull(e),"Cannot extract from null or empty value");const n=e.length-this.spots;return(n<0||e.charAt(n)!==this.separator)&&a.throwFormattedErr("Cannot remove bucket, not created by this spreader (missing %s at location %d)",this.separator,n),e.substring(0,n)}}class je{region;availabilityZone;ec2;ec2InstanceConnect;constructor(e="us-east-1",t="us-east-1a"){this.region=e,this.availabilityZone=t,this.ec2=new Q({region:e}),this.ec2InstanceConnect=new Z({region:e})}get eC2Client(){return this.ec2}get eC2InstanceConnectClient(){return this.ec2InstanceConnect}async stopInstance(e,t=0){let s=!0;try{const s={InstanceIds:[e],DryRun:!1};n.info("About to stop instances : %j",s),await this.ec2.send(new H(s)),n.info("Stop instance command sent, waiting on shutdown");let a=await this.describeInstance(e);if(t>0){const s=(new Date).getTime();for(;a&&16!==a.State.Code&&(new Date).getTime()-s<t;)n.debug("Instance status is %j - waiting for 5 seconds (up to %s)",a.State,l.formatMsDuration(t)),await r.wait(5e3),a=await this.describeInstance(e)}}catch(t){n.error("Failed to stop instance %s : %s",e,t,t),s=!1}return s}async launchInstance(e,t=0){let s=!0;try{const s={InstanceIds:[e],DryRun:!1};n.info("About to start instance : %j",s),await this.ec2.send(new $(s)),n.info("Start instance command sent, waiting on startup");let a=await this.describeInstance(e);if(t>0){const s=(new Date).getTime();for(;a&&16!==a.State.Code&&(new Date).getTime()-s<t;)n.debug("Instance status is %j - waiting for 5 seconds (up to %s)",a.State,l.formatMsDuration(t)),await r.wait(5e3),a=await this.describeInstance(e)}a&&a.PublicIpAddress&&(n.info("Instance address is %s",a.PublicIpAddress),n.info("SSH command : ssh -i path_to_pem_file ec2-user@%s",a.PublicIpAddress))}catch(t){n.error("Failed to start instance %s : %s",e,t,t),s=!1}return s}async describeInstance(e){const t=await this.listAllInstances([e]);return 1===t.length?t[0]:null}async listAllInstances(e=[]){let t=[];const s={NextToken:null};e&&e.length>0&&(s.InstanceIds=e);do{n.debug("Pulling instances... (%j)",s);const e=await this.ec2.send(new Y(s));e.Reservations.forEach((e=>{t=t.concat(e.Instances)})),s.NextToken=e.NextToken}while(s.NextToken);return n.debug("Finished pulling instances (found %d)",t.length),t}async sendPublicKeyToEc2Instance(e,t,s){const a=s||"ec2-user",n={InstanceId:e,AvailabilityZone:this.availabilityZone,InstanceOSUser:a,SSHPublicKey:t};return await this.ec2InstanceConnect.send(new X(n))}}class Ue{providers;constructor(e){this.providers=e,t.notNullOrUndefined(e),t.true(e.length>0)}async fetchConfig(e){n.silly("CascadeEnvironmentServiceProvider fetch for %s",e);let t=null;for(let s=0;s<this.providers.length&&!t;s++)try{t=await this.providers[s].fetchConfig(e)}catch(e){n.error("Provider %d failed - trying next : %s",s,e,e),t=null}return t}}class Ie{envVarName;constructor(e){this.envVarName=e,t.notNullOrUndefined(e)}async fetchConfig(){n.silly("EnvVarEnvironmentServiceProvider fetch for %s",this.envVarName);let e=null;const t=process?process.env:global||{},i=s.trimToNull(t[this.envVarName]);if(i)try{e=JSON.parse(i)}catch(e){throw n.error("Failed to read env - null or invalid JSON : %s : %s",e,i,e),e}else a.throwFormattedErr("Could not find env var with name : %s",this.envVarName);return e}}class Be{provider;cfg;readPromiseCache=new Map;static defaultEnvironmentServiceConfig(){return{maxRetries:3,backoffMultiplierMS:500}}constructor(e,s=Be.defaultEnvironmentServiceConfig()){this.provider=e,this.cfg=s,t.notNullOrUndefined(e),t.notNullOrUndefined(s)}async getConfig(e){return n.silly("EnvService:Request to read config %s",e),this.readPromiseCache.has(e)||(n.silly("EnvService: Nothing in cache - adding"),this.readPromiseCache.set(e,this.getConfigUncached(e))),this.readPromiseCache.get(e)}async getConfigUncached(e){let t=1,s=null;for(;!s&&t<this.cfg.maxRetries;){t++,n.silly("Attempting fetch of %s",e);try{s=await this.provider.fetchConfig(e)}catch(s){const a=t*this.cfg.backoffMultiplierMS;n.info("Error attempting to fetch config %s (try %d of %d, waiting %s MS): %s",e,t,this.cfg.maxRetries,a,s,s),await r.wait(a)}}return s||a.throwFormattedErr("Was unable to fetch config %s even after %d retries",e,this.cfg.maxRetries),s}}class Re{value;constructor(e){this.value=e,t.notNullOrUndefined(e)}static fromRecord(e){const t=new Map;return Object.keys(e).forEach((s=>{t.set(s,e[s])})),new Re(t)}async fetchConfig(e){n.silly("FixedEnvironmentServiceProvider fetch for %s",e);return this.value.get(e)}}class Ke{cfg;ratchet;constructor(e){this.cfg=e,t.notNullOrUndefined(e),t.notNullOrUndefined(e.bucketName),t.notNullOrUndefined(e.region),t.true(!!e.s3Override||!!e.region,"You must set either region or S3Override");const s=e.s3Override||new P({region:e.region});this.ratchet=new ve(s,e.bucketName)}async fetchConfig(e){const t=s.trimToEmpty(this.cfg.pathPrefix)+e+s.trimToEmpty(this.cfg.pathSuffix);n.silly("S3EnvironmentServiceProvider:Request to read config from : %s / %s",this.cfg.bucketName,t);const a=new i,r=await this.ratchet.fetchCacheFileAsObject(t);return a.log(),r}}class Le{region;ssmEncrypted;ssm;constructor(e="us-east-1",s=!0){this.region=e,this.ssmEncrypted=s,t.notNullOrUndefined(e),t.notNullOrUndefined(s),this.ssm=new ee({region:this.region})}async fetchConfig(e){n.silly("SsmEnvironmentServiceProvider fetch for %s",e);const t={Name:e,WithDecryption:this.ssmEncrypted};let i=null,o=null;try{const e=await this.ssm.send(new te(t));o=s.trimToNull(e?.Parameter?.Value)}catch(t){const s=t.code||"";if(-1===s.toLowerCase().indexOf("throttlingexception")){if(-1!==s.toLowerCase().indexOf("parameternotfound")){const t=n.warn("AWS could not find parameter %s - are you using the right AWS key?",e);throw new Error(t)}throw n.error("Final environment fetch error (cannot retry) : %s",t,t),t}n.warn("Throttled while trying to read parameters - waiting 1 second before allowing retry"),await r.wait(1e3)}if(o)try{i=JSON.parse(o)}catch(e){throw n.error("Failed to read env - null or invalid JSON : %s : %s",e,o,e),e}else a.throwFormattedErr("Could not find system parameter with name : %s in this account",e);return i}}class Ve{tableName;dynamoRatchet;constructor(e,t){this.tableName=e,this.dynamoRatchet=t}async checkCode(e,t,s){const a={code:e,context:t},n=await this.dynamoRatchet.simpleGet(this.tableName,a),i=n&&n.expiresEpochMS>Date.now();return i&&s&&await this.dynamoRatchet.simpleDelete(this.tableName,a),i}async storeCode(e){const t=await this.dynamoRatchet.simplePut(this.tableName,e);return t&&t.ConsumedCapacity.CapacityUnits>0}async createTableIfMissing(e){return null}}class _e{provider;constructor(e){this.provider=e}static generateCode(e){t.notNullOrUndefined(e,"params"),t.notNullOrUndefined(e.context,"params.context"),t.notNullOrUndefined(e.length,"params.length"),t.notNullOrUndefined(e.alphabet,"params.alphabet");let s="";for(let t=0;t<e.length;t++)s+=e.alphabet.charAt(Math.floor(e.alphabet.length*Math.random()));return{code:s,context:e.context,tags:e.tags,expiresEpochMS:Date.now()+1e3*e.timeToLiveSeconds}}async createNewCode(e){const t=_e.generateCode(e);return await this.provider.storeCode(t)?t:null}async checkCode(e,t,a){return await this.provider.checkCode(s.trimToEmpty(e),s.trimToEmpty(t),a)}}class Ge{s3CacheRatchet;keyName;constructor(e,s){this.s3CacheRatchet=e,this.keyName=s,t.notNullOrUndefined(e,"s3CacheRatchet"),t.notNullUndefinedOrOnlyWhitespaceString(e.getDefaultBucket(),"s3CacheRatchet.defaultBucket"),t.notNullUndefinedOrOnlyWhitespaceString(s,"keyName")}async fetchFile(){return await this.s3CacheRatchet.fetchCacheFileAsObject(this.keyName)||{data:[],lastModifiedEpochMS:Date.now()}}async updateFile(e){const t={data:e||[],lastModifiedEpochMS:Date.now()};t.data=t.data.filter((e=>e.expiresEpochMS>Date.now())),n.info("Updating code file to %s codes",t.data.length);return await this.s3CacheRatchet.writeObjectToCacheFile(this.keyName,t)}async checkCode(e,t,s){const a=await this.fetchFile(),i=a.data.find((s=>s?.code?.toUpperCase()===e?.toUpperCase()&&s?.context?.toUpperCase()===t?.toUpperCase()));if(i&&(s||i.expiresEpochMS<Date.now())){n.info("Stripping used/expired code from the database");const e=a.data.filter((e=>e!=i));await this.updateFile(e)}return!!i&&i.expiresEpochMS>Date.now()}async storeCode(e){const t=await this.fetchFile();t.data.push(e);return!!await this.updateFile(t.data)}}class We{constructor(){}static applySetProfileEnvironmentalVariable(e){process.env?s.trimToNull(e)?process.env.AWS_PROFILE=e:a.throwFormattedErr("Cannot set profile to null/empty string"):a.throwFormattedErr("Cannot set profile - not in a node environment - process missing")}}class qe{static isValidCronEvent(e){return e&&"aws.events"==e.source&&e.resources&&e.resources.length>0}static isValidSnsEvent(e){return e&&e.Records&&e.Records.length>0&&"aws:sns"==e.Records[0].EventSource}static isValidDynamoDBEvent(e){return e&&e.Records&&e.Records.length>0&&"aws:dynamodb"==e.Records[0].eventSource}static isValidS3Event(e){return e&&e.Records&&e.Records.length>0&&"aws:s3"==e.Records[0].eventSource}static isValidApiGatewayV2WithRequestContextEvent(e){return e&&e.rawPath&&e.requestContext&&e.routeKey}static isValidApiGatewayEvent(e){return e&&e.httpMethod&&e.path&&e.requestContext}static isValidApiGatewayAuthorizerEvent(e){return e&&e.authorizationToken&&e.methodArn}static isSingleCronEvent(e){return this.isValidCronEvent(e)&&qe.isSingleEntryEvent(e,"resources")}static isSingleSnsEvent(e){return this.isValidSnsEvent(e)&&qe.isSingleEntryEvent(e)}static isSingleDynamoDBEvent(e){return this.isValidDynamoDBEvent(e)&&qe.isSingleEntryEvent(e)}static isSingleS3Event(e){return this.isValidS3Event(e)&&qe.isSingleEntryEvent(e)}static isSingleEntryEvent(e,t="Records"){return e&&e[t]&&e[t]instanceof Array&&1===e[t].length}}class ze{static isValidCronEvent(e){return qe.isValidCronEvent(e)}static isValidSnsEvent(e){return qe.isValidSnsEvent(e)}static isValidDynamoDBEvent(e){return qe.isValidDynamoDBEvent(e)}static isValidS3Event(e){return qe.isValidS3Event(e)}static isValidApiGatewayV2WithRequestContextEvent(e){return qe.isValidApiGatewayV2WithRequestContextEvent(e)}static isValidApiGatewayEvent(e){return qe.isValidApiGatewayEvent(e)}static isValidApiGatewayAuthorizerEvent(e){return qe.isValidApiGatewayAuthorizerEvent(e)}}class Je{route53;hostedZoneId;constructor(e,t){if(this.route53=e,this.hostedZoneId=t,!this.route53)throw"route53 may not be null"}get route53Client(){return this.route53}async changeCnameRecordTarget(e,t,s=this.hostedZoneId,a=600){n.info("Updating %s to point to %s",e,t);try{const i={ChangeBatch:{Changes:[{Action:"UPSERT",ResourceRecordSet:{Name:e,ResourceRecords:[{Value:t}],TTL:a,Type:"CNAME"}}]},HostedZoneId:s},r=await this.route53.send(new se(i));n.debug("Updated domain result: %j",r);const o={Id:r.ChangeInfo.Id},c=await ae({client:this.route53,maxWaitTime:300},o);if(n.debug("Wait responsed: %j",c),c.state===ne.SUCCESS)return n.info("Updated %s to point to %s",e,s),!0}catch(s){n.warn("Error update CName for %s with value %s: %j",e,t,s)}return n.info("Cannot update %s to point to %s",e,t),!1}}class Qe{dynamo;tableName;constructor(e,s){this.dynamo=e,this.tableName=s,t.notNullOrUndefined(this.dynamo),t.notNullOrUndefined(this.tableName)}async readParameter(e,t){n.silly("Reading %s / %s from underlying db",e,t);const s={groupId:e,paramKey:t};return await this.dynamo.simpleGet(this.tableName,s)}async readAllParametersForGroup(e){const t={TableName:this.tableName,KeyConditionExpression:"groupId = :groupId",ExpressionAttributeValues:{":groupId":e}};return await this.dynamo.fullyExecuteQuery(t)}async writeParameter(e){return!!await this.dynamo.simplePut(this.tableName,e)}}class He{wrapped;options={globalTTL:1,separator:".",prefix:"RuntimeEnv-",suffix:""};constructor(e,s){this.wrapped=e,t.notNullOrUndefined(this.wrapped,"wrapped"),t.notNullOrUndefined(global?.process?.env,'"process" not found - this only runs in Node, not the browser'),s&&(this.options=s),t.notNullOrUndefined(this.options.globalTTL,"this.options.globalTTL"),t.notNullOrUndefined(this.options.separator,"this.options.separator"),t.true(this.options.globalTTL>0,"this.options.globalTTL must be larger than 0")}generateName(e,t){return s.trimToEmpty(this.options.prefix)+e+s.trimToEmpty(this.options.separator)+t+s.trimToEmpty(this.options.suffix)}async readParameter(e,t){const n=s.trimToNull(process.env[this.generateName(e,t)]);n&&!s.canParseAsJson(n)&&a.throwFormattedErr("Cannot parse ENV override (%s / %s) as JSON - did you forget the quotes on a string?",e,t);return n?{groupId:e,paramKey:t,paramValue:n,ttlSeconds:this.options.globalTTL}:await this.wrapped.readParameter(e,t)}async readAllParametersForGroup(e){return this.wrapped.readAllParametersForGroup(e)}async writeParameter(e){return this.wrapped.writeParameter(e)}}class $e{data;constructor(e=Promise.resolve({})){this.data=e}async readParameter(e,t){n.silly("Reading %s / %s from underlying db",e,t);return(await this.data)[e+"::"+t]}async readAllParametersForGroup(e){const t=await this.data,s=[];return Object.keys(t).forEach((a=>{a.startsWith(e)&&s.push(t[a])})),s}async writeParameter(e){return(await this.data)[e.groupId+"::"+e.paramKey]=e,!0}}class Ye{provider;cache=new Map;constructor(e){this.provider=e,t.notNullOrUndefined(this.provider)}async fetchParameter(e,t,s=null,a=!1){n.debug("Reading parameter %s / %s / Force : %s",e,t,a);const i=this.cache.get(Ye.toCacheStoreKey(e,t));let r=null;const o=(new Date).getTime();if(!a&&i){const s=i.ttlSeconds?o-1e3*i.ttlSeconds:0;i.storedEpochMS>s&&(n.silly("Fetched %s / %s from cache",e,t),r=JSON.parse(i.paramValue))}if(!r){const s=await this.readUnderlyingEntry(e,t);s&&(this.addToCache(s),r=JSON.parse(s.paramValue))}return r=r||s,r}async fetchAllParametersForGroup(e){const t=await this.readUnderlyingEntries(e),s=new Map;return t.forEach((e=>{s.set(e.paramKey,JSON.parse(e.paramValue)),this.addToCache(e)})),s}async readUnderlyingEntry(e,t){return this.provider.readParameter(e,t)}async readUnderlyingEntries(e){return this.provider.readAllParametersForGroup(e)}async storeParameter(e,t,s,a){const n={groupId:e,paramKey:t,paramValue:JSON.stringify(s),ttlSeconds:a};return await this.provider.writeParameter(n),this.provider.readParameter(e,t)}static toCacheStoreKey(e,t){return e+":::"+t}addToCache(e){if(e){const t=(new Date).getTime(),s=Object.assign({storedEpochMS:t},e);this.cache.set(Ye.toCacheStoreKey(e.groupId,e.paramKey),s)}}clearCache(){n.debug("Clearing runtime parameter cache"),this.cache=new Map}}class Ze{s3;tmpFolder;cacheTimeoutSeconds;static DEFAULT_CACHE_TIMEOUT_SEC=604800;currentlyLoading=new Map;constructor(e,a,n=Ze.DEFAULT_CACHE_TIMEOUT_SEC){this.s3=e,this.tmpFolder=a,this.cacheTimeoutSeconds=n,t.notNullOrUndefined(e,"s3"),t.notNullOrUndefined(s.trimToNull(a)),t.true(re.existsSync(a),"folder must exist : "+a)}async getFileString(e){const t=await this.getFileBuffer(e);return t?t.toString():null}keyToLocalCachePath(e){const t=this.generateCacheHash(this.s3.getDefaultBucket()+"/"+e);return oe.join(this.tmpFolder,t)}removeCacheFileForKey(e){const t=this.keyToLocalCachePath(e);n.info("Removing cache file for %s : %s",e,t),re.existsSync(t)?re.unlinkSync(t):n.debug("Skipping delete for %s - does not exist",t)}async getFileBuffer(e){const t=this.keyToLocalCachePath(e);let s=null;if(s=this.getCacheFileAsBuffer(t),s)n.info("Found cache file for s3://%s/%s. Local path %s",this.s3.getDefaultBucket(),e,t);else{n.info("No cache. Downloading File s3://%s/%s to %s",this.s3.getDefaultBucket(),e,t);try{let a=this.currentlyLoading.get(e);a?n.info("Already running - wait for that"):(n.info("Not running - start"),a=this.updateLocalCacheFile(e,t),this.currentlyLoading.set(e,a)),s=await a,this.currentlyLoading.delete(e)}catch(t){n.warn("File %s/%s does not exist. Err code: %s",this.s3.getDefaultBucket(),e,t)}}return s}async updateLocalCacheFile(e,t){const s=await this.s3.fetchCacheFileAsBuffer(e);return s&&s.length>0&&(n.info("Saving %d bytes to disk for cache",s.length),re.writeFileSync(t,s)),s}getCacheFileAsString(e){const t=this.getCacheFileAsBuffer(e);return t?t.toString():null}getCacheFileAsBuffer(e){if(!re.existsSync(e))return null;try{const t=re.statSync(e),s=(new Date).getTime();if((s-t.ctimeMs)/1e3>=this.cacheTimeoutSeconds)return null;return re.readFileSync(e)}catch(e){n.warn("Error getting s3 cache file %s",e)}return null}generateCacheHash(e){return ie.createHash("md5").update(e).digest("hex")}}class Xe{config;constructor(e){t.notNullOrUndefined(e,"config"),this.config=e,this.config.maxNumThreads||(this.config.maxNumThreads=15),this.config.maxRetries||(this.config.maxRetries=5)}updateSrcPrefix(e){this.config.srcPrefix=e}updateDstPrefix(e){this.config.dstPrefix=e}async copyObject(e,t,s=!1){const a=e.replace(this.config.srcPrefix,this.config.dstPrefix);let i=!1,r=0;for(;!i&&r<this.config.maxRetries;){n.debug(`${r>0?`Retry ${r} `:""}${s?"Express":"Slow"} copying\n [${[this.config.srcBucket,e].join("/")} ---\x3e ${[this.config.dstBucket,a].join("/")}]`);try{if(s){const t={CopySource:encodeURIComponent([this.config.srcBucket,e].join("/")),Bucket:this.config.dstBucket,Key:a,MetadataDirective:"COPY"};await this.config.dstS3.send(new F(t))}else{const s=await this.config.srcS3.send(new v({Bucket:this.config.srcBucket,Key:e})),i={Bucket:this.config.dstBucket,Key:a,Body:s.Body,ContentLength:t},r=new j({client:this.config.dstS3,params:i,tags:[],queueSize:4,partSize:5242880,leavePartsOnError:!1});r.on("httpUploadProgress",(e=>{n.info("Uploading : %s",e)})),await r.done()}i=!0}catch(t){n.warn(`Can't ${s?"express":"slow"} copy\n [${[this.config.srcBucket,e].join("/")} ---\x3e ${[this.config.dstBucket,a].join("/")}]: %j`,t),r++}}n.debug(`Finished ${s?"express":"slow"} copying\n [${[this.config.srcBucket,e].join("/")} ---\x3e ${[this.config.dstBucket,a].join("/")}]`)}async listObjects(e,t,s){n.info(`Scanning bucket [${[e,t].join("/")}]`);const a={Bucket:e,Prefix:t};let i=!0;const r={};for(;i;){const e=await s.send(new M(a));i=e.IsTruncated,ce.each(e.Contents,(e=>{r[e.Key]={Key:e.Key,LastModified:e.LastModified,ETag:e.ETag,Size:e.Size}})),i&&(a.ContinuationToken=e.NextContinuationToken)}return r}async startSyncing(){n.info(`Syncing [${this.config.srcBucket}/${this.config.srcPrefix}\n ---\x3e ${this.config.dstBucket}/${this.config.dstPrefix}]`);const e=async e=>{await this.copyObject(e.Key,e.Size)};let t=await this.compareSrcAndDst();return(t.needCopy.length>0||t.diff.length>0)&&(await r.runBoundedParallelSingleParam(e,t.needCopy,this,this.config.maxNumThreads),await r.runBoundedParallelSingleParam(e,t.diff,this,this.config.maxNumThreads),n.info("Verifying..."),t=await this.compareSrcAndDst(),n.debug("Compare result %j",t)),0===t.needCopy.length&&0===t.diff.length}async compareSrcAndDst(){const e=this.listObjects(this.config.srcBucket,this.config.srcPrefix,this.config.srcS3),t=this.listObjects(this.config.dstBucket,this.config.dstPrefix,this.config.dstS3),s=await e,a=await t,n={needCopy:[],existed:[],diff:[]};return await r.runBoundedParallelSingleParam((e=>{const t=s[e],i=e.replace(this.config.srcPrefix,this.config.dstPrefix),r=a.hasOwnProperty(i)?a[i]:void 0;r?t.Size===r.Size&&t.LastModified.getTime()<=r.LastModified.getTime()?n.existed.push(t):n.diff.push(t):n.needCopy.push(t)}),Object.keys(s),this,this.config.maxNumThreads),n}}class et{static checkS3UrlForValidity(e){let t=!1;return e&&(t=e.startsWith("s3://")&&e.trim().length>5),t}static extractBucketFromURL(e){t.true(et.checkS3UrlForValidity(e),"invalid s3 url");const s=e.indexOf("/",5);return s>0?e.substring(5,s):e.substring(5)}static extractKeyFromURL(e){t.true(et.checkS3UrlForValidity(e),"invalid s3 url");const s=e.indexOf("/",5);return s>0?e.substring(s+1):null}}class tt{ses;config;static EMAIL=new RegExp(".+@.+\\.[a-z]+");constructor(e,s={}){if(this.ses=e,this.config=s,t.notNullOrUndefined(this.ses),s.archive&&!s.archive.getDefaultBucket())throw new Error("If archive specified, must set a default bucket")}get sESClient(){return this.ses}async fillEmailBody(e,s,n,i=null,r=null,o=null){return t.notNullOrUndefined(n),this.config.templateRenderer||a.throwFormattedErr("Cannot use fill body if template renderer not set"),e.htmlMessage=await this.config.templateRenderer.renderTemplate(n,s,r,o),e.txtMessage=i?await this.config.templateRenderer.renderTemplate(i,s):null,e}async fillEmailBodyAndSend(e,t,s,a=null,n=null,i=null){const r=await this.fillEmailBody(e,t,s,a,n,i);return await this.sendEmail(r)}filterEmailsToValid(e){return(e||[]).filter((e=>{if(this.config.allowedDestinationEmails&&0!=this.config.allowedDestinationEmails.length){return!!this.config.allowedDestinationEmails.find((t=>t.test(e)))}return!0}))}async archiveEmailIfConfigured(t){let a=!1;if(t&&this.config.archive&&!t.doNotArchive){n.debug("Archiving outbound email to : %j",t.destinationAddresses);let i=s.trimToEmpty(this.config.archivePrefix);i.endsWith("/")||(i+="/");const r=e.utc();i+="year="+r.toFormat("yyyy")+"/month="+r.toFormat("MM")+"/day="+r.toFormat("dd")+"/hour="+r.toFormat("HH")+"/"+r.toFormat("mm_ss__SSS"),i+=".json";try{await this.config.archive.writeObjectToCacheFile(i,t),a=!0}catch(e){n.warn("Failed to archive email %s %j : %s",i,t,e)}}return a}applyLimitsToBodySizesIfAnyInPlace(e){if(this.config.maxMessageBodySizeInBytes){const t=s.trimToEmpty(e.txtMessage).length+s.trimToEmpty(e.htmlMessage).length;if(t>this.config.maxMessageBodySizeInBytes){if(n.warn("Max message size is %d but size is %d - converting",this.config.maxMessageBodySizeInBytes,t),e.attachments=e.attachments||[],s.trimToNull(e.txtMessage)){const t={filename:"original-txt-body.txt",contentType:"text/plain",base64Data:u.generateBase64VersionOfString(e.txtMessage)};e.attachments.push(t)}if(s.trimToNull(e.htmlMessage)){const t={filename:"original-html-body.html",contentType:"text/html",base64Data:u.generateBase64VersionOfString(e.htmlMessage)};e.attachments.push(t)}e.htmlMessage=null,e.txtMessage="The message was too large and was converted to attachment(s). Please see attached files for content"}}}applyLimitsToAttachmentSizesIfAnyInPlace(e){if(this.config.maxAttachmentSizeInBase64Bytes){const t=[];e.attachments&&e.attachments.forEach((e=>{e.base64Data&&e.base64Data.length<this.config.maxAttachmentSizeInBase64Bytes?t.push(e):(n.warn("Removing too-large attachment : %s : %s : %d",e.filename,e.contentType,e.base64Data.length),t.push({filename:"attachment-removed-notice-"+s.createRandomHexString(4)+".txt",contentType:"text/plain",base64Data:u.generateBase64VersionOfString("Attachment "+e.filename+" of type "+e.contentType+" was removed since it was "+e.base64Data.length+" bytes but max allowed is "+this.config.maxAttachmentSizeInBase64Bytes)}))})),e.attachments=t}}async sendEmail(e){t.notNullOrUndefined(e,"RTS must be defined"),t.notNullOrUndefined(e.destinationAddresses,"Destination addresses must be defined");let a=null,i=this.filterEmailsToValid(e.destinationAddresses);const r=e.doNotAutoBcc?[]:this.config.autoBccAddresses||[],o=(e.bccAddresses||[]).concat(r);0===i.length&&o.length>0&&(n.debug("Destination emails filtered to none but BCC defined, copying BCC"),i=o);const c=Object.assign({},e);if(c.srcDestinationAddresses=e.destinationAddresses,c.srcBccAddresses=e.bccAddresses,c.destinationAddresses=i,c.bccAddresses=o,this.applyLimitsToBodySizesIfAnyInPlace(c),this.applyLimitsToAttachmentSizesIfAnyInPlace(c),await this.archiveEmailIfConfigured(c),0===c.destinationAddresses.length)n.info("After cleaning email lists, no destination addresses left - not sending email");else{const e="To: "+c.destinationAddresses.join(", ")+"\n",t=c.bccAddresses&&c.bccAddresses.length>0?"Bcc: "+c.bccAddresses.join(", ")+"\n":"";try{const n=c.fromAddress||this.config.defaultSendingAddress,i="NextPart",r="AltPart";let o="From: "+n+"\n";o+=e,o+=t,o+="Subject: "+c.subject+"\n",o+="MIME-Version: 1.0\n",o+='Content-Type: multipart/mixed; boundary="'+i+'"\n',o+="\n\n--"+i+"\n",o+='Content-Type: multipart/alternative; boundary="'+r+'"\n',s.trimToNull(c.htmlMessage)&&(o+="\n\n--"+r+"\n",o+='Content-Type: text/html; charset="UTF-8"\n\n',o+=c.htmlMessage),s.trimToNull(c.txtMessage)&&(o+="\n\n--"+r+"\n",o+="Content-Type: text/plain\n\n",o+=c.txtMessage),o+="\n\n--"+r+"--\n",c.attachments&&c.attachments.forEach((e=>{o+="\n\n--"+i+"\n",o+="Content-Type: "+e.contentType+'; name="'+e.filename+'"\n',o+="Content-Transfer-Encoding: base64\n",o+="Content-Disposition: attachment\n\n",o+=e.base64Data.replace(/([^\0]{76})/g,"$1\n")+"\n\n"})),o+="\n\n--"+i+"--\n";const l={RawMessage:{Data:(new TextEncoder).encode(o)}};a=await this.ses.send(new le(l))}catch(e){n.error("Error while processing email: %s",e,e)}}return a}static validEmail(e){return null!==e&&tt.EMAIL.test(e)}}class st{prefix;suffix;maxCacheTemplates;cache;constructor(e="",t="",s=10){this.prefix=e,this.suffix=t,this.maxCacheTemplates=s,this.maxCacheTemplates>0&&(this.cache=new Map)}async renderTemplate(e,t,s=null){return this.renderRemoteTemplate(e,t,s)}async renderRemoteTemplate(e,t,s=null){const a=await this.fetchTemplate(e),n=s?await this.fetchTemplateText(s):null;n&&(await de.register(he),he.registerPartial(s,n));return a?a(t||{}):null}async renderTemplateDirect(e,t,s=null){return he.compile(e)(t)}async fetchTemplate(e){let t=null;try{if(this.cache&&this.cache.has(e))n.silly("Cache hit for template : %s",e),t=this.cache.get(e);else{n.debug("Cache miss for template : %s",e);const s=await this.fetchTemplateText(e);s&&(t=he.compile(s),this.cache&&t&&(this.cache.set(e,t),this.cache.size>this.maxCacheTemplates&&this.cache.delete(Array.from(this.cache.keys())[0])))}}catch(s){n.warn("Could not fetch and compile template : %s : %s",e,s,s),t=null}return t}async fetchTemplateText(e){let t=null;const a=s.trimToEmpty(this.prefix)+e+s.trimToEmpty(this.suffix);try{const e=await ue(a);t=await e.text()}catch(e){n.warn("Could not fetch url : %s : %s",a,e,e),t=null}return t}}class at{sns;topicArn;constructor(e=new me({region:"us-east-1"}),s){this.sns=e,this.topicArn=s,t.notNullOrUndefined(this.sns,"sns"),t.notNullOrUndefined(this.topicArn,"topicArn")}get snsClient(){return this.sns}async sendMessage(e,t=!1){let s=null;try{const t=e||"NO-MESSAGE-PROVIDED",a="string"==typeof t?t:JSON.stringify(t),i={TopicArn:this.topicArn,Message:a};n.debug("Sending via SNS : %j",i),s=await this.sns.send(new fe(i))}catch(s){if(!t)throw s;n.error("Failed to fire SNS notification : %j : %s",e,s)}return s}async conditionallySendMessage(e,t,s=!1){let a=null;return t?a=await this.sendMessage(e,s):n.info("Not sending message, condition was false : %j",e),a}}class nt{ratchet;tableName;constructor(e,a){this.ratchet=e,this.tableName=a,t.notNullOrUndefined(e,"ratchet"),t.notNullOrUndefined(s.trimToNull(this.tableName),"tableName")}async acquireLock(e,t=30){let s=!1;if(e&&t){const a=Math.floor((new Date).getTime()/1e3),i={Item:{lockingKey:e,timestamp:a,expires:a+t},ReturnConsumedCapacity:"TOTAL",TableName:this.tableName,ConditionExpression:"attribute_not_exists(lockingKey)"};try{await this.ratchet.getDDB().send(new J(i));s=!0}catch(t){String(t).indexOf("ConditionalCheckFailedException")>-1&&n.silly("Unable to acquire lock on %s",e)}}return s}async releaseLock(e){if(s.trimToNull(e))try{const t=await this.ratchet.simpleDelete(this.tableName,{lockingKey:e});n.silly("Released lock %s : %s",e,t)}catch(t){n.warn("Failed to release lock key : %s : %s",e,t,t)}}async clearExpiredSyncLocks(){const e=Math.floor((new Date).getTime()/1e3),t={TableName:this.tableName,FilterExpression:"expires < :now",ExpressionAttributeValues:{":now":e}},s=(await this.ratchet.fullyExecuteScan(t)).map((e=>({lockingKey:e.lockingKey})));return await this.ratchet.deleteAllInBatches(this.tableName,s,25)}}class it{_locks=new Map;constructor(){}async acquireLock(e,t=30){let a=!1;if(s.trimToNull(e)){const s=Date.now(),n=this._locks.get(e);(!n||n<s)&&(this._locks.set(e,s+1e3*t),a=!0)}return a}async releaseLock(e){s.trimToNull(e)&&this._locks.delete(e)}async clearExpiredSyncLocks(){const e=[],t=Date.now();return this._locks.forEach(((s,a)=>{s<t&&e.push(a)})),e.forEach((e=>{this._locks.delete(e)})),e.length}}export{ge as AwsBatchBackgroundProcessor,pe as AwsBatchRatchet,We as AwsCredentialsRatchet,Ue as CascadeEnvironmentServiceProvider,Ee as CloudWatchLogGroupRatchet,Ce as CloudWatchLogsRatchet,Ne as CloudWatchMetricsRatchet,Se as CloudWatchMetricsUnit,ke as Daemon,xe as DaemonUtil,we as DynamoDbStorageProvider,nt as DynamoDbSyncLock,Ve as DynamoExpiringCodeProvider,Ae as DynamoRatchet,Qe as DynamoRuntimeParameterProvider,Pe as DynamoTableRatchet,je as Ec2Ratchet,Ie as EnvVarEnvironmentServiceProvider,Be as EnvironmentService,_e as ExpiringCodeRatchet,Re as FixedEnvironmentServiceProvider,He as GlobalVariableOverrideRuntimeParameterProvider,Me as HashSpreader,qe as LambdaEventDetector,ze as LambdaEventTypeGuards,tt as Mailer,$e as MemoryRuntimeParameterProvider,it as MemorySyncLock,De as PrototypeDao,ye as RatchetAwsInfo,st as RemoteHandlebarsTemplateRenderer,Je as Route53Ratchet,Ye as RuntimeParameterRatchet,ve as S3CacheRatchet,Ze as S3CacheToLocalDiskRatchet,Ke as S3EnvironmentServiceProvider,Ge as S3ExpiringCodeProvider,Xe as S3LocationSyncRatchet,Oe as S3PrototypeDaoProvider,et as S3Ratchet,Fe as S3SimpleDao,be as S3StorageProvider,Te as SimpleCache,at as SnsRatchet,Le as SsmEnvironmentServiceProvider};
1
+ import{DateTime as e}from"luxon";import{RequireRatchet as t,StringRatchet as s,ErrorRatchet as a,Logger as n,StopWatch as i,PromiseRatchet as r,StreamRatchet as o,MapRatchet as c,DurationRatchet as l,NumberRatchet as h,Base64Ratchet as d}from"@bitblit/ratchet-common";import{SubmitJobCommand as u,ListJobsCommand as m}from"@aws-sdk/client-batch";import{CloudWatchLogsClient as f,DescribeLogStreamsCommand as g,FilterLogEventsCommand as p,DeleteLogStreamCommand as y,DescribeLogGroupsCommand as w,DeleteLogGroupCommand as b,StartQueryCommand as E,GetQueryResultsCommand as T,StopQueryCommand as S}from"@aws-sdk/client-cloudwatch-logs";import{CloudWatchClient as C,PutMetricDataCommand as N}from"@aws-sdk/client-cloudwatch";import{PutObjectCommand as x,GetObjectCommand as v,NoSuchKey as O,DeleteObjectCommand as k,HeadObjectCommand as D,CopyObjectCommand as F,ListObjectsCommand as P,S3Client as M,ListObjectsV2Command as A}from"@aws-sdk/client-s3";import{Upload as j}from"@aws-sdk/lib-storage";import{getSignedUrl as U}from"@aws-sdk/s3-request-presigner";import{ScanCommand as I,QueryCommand as R,BatchWriteCommand as B,BatchGetCommand as K,PutCommand as L,GetCommand as V,DeleteCommand as G}from"@aws-sdk/lib-dynamodb";import{UpdateItemCommand as _,DeleteTableCommand as W,CreateTableCommand as q,DescribeTableCommand as z,PutItemCommand as J}from"@aws-sdk/client-dynamodb";import{EC2Client as Q,StopInstancesCommand as $,StartInstancesCommand as H,DescribeInstancesCommand as Y}from"@aws-sdk/client-ec2";import{EC2InstanceConnectClient as Z,SendSSHPublicKeyCommand as X}from"@aws-sdk/client-ec2-instance-connect";import{SSMClient as ee,GetParameterCommand as te}from"@aws-sdk/client-ssm";import{ChangeResourceRecordSetsCommand as se,waitUntilResourceRecordSetsChanged as ae}from"@aws-sdk/client-route-53";import{WaiterState as ne}from"@aws-sdk/util-waiter";import{SendRawEmailCommand as ie}from"@aws-sdk/client-ses";import{SNSClient as re,PublishCommand as oe}from"@aws-sdk/client-sns";class ce{batchRatchet;validTaskNames;constructor(e,s){this.batchRatchet=e,this.validTaskNames=s,t.notNullOrUndefined(this.batchRatchet,"batchRatchet"),t.notNullOrUndefined(this.batchRatchet.batchClient,"batchRatchet.batchClient"),t.notNullOrUndefined(this.batchRatchet.defaultJobDefinition,"batchRatchet.defaultJobDefinition"),t.notNullOrUndefined(this.batchRatchet.defaultQueueName,"batchRatchet.defaultQueueName")}async scheduleBackgroundTask(t,i={},r={}){!this.validTaskNames||!this.validTaskNames.length||s.trimToNull(t)&&this.validTaskNames.includes(t)||a.throwFormattedErr("Cannot start task %s - not found in valid task list",t),n.info("Submitting background task to AWS batch: %s %j %s",t,i,this.batchRatchet.defaultQueueName);let o=null;const c=`${this.batchRatchet.defaultJobDefinition}-${t}_${e.utc().toFormat("yyyy-MM-dd-HH-mm")}`,l={jobName:c,jobDefinition:this.batchRatchet.defaultJobDefinition,jobQueue:this.batchRatchet.defaultQueueName,parameters:{taskName:t,taskData:JSON.stringify(i),taskMetadata:JSON.stringify(r)}};try{o=await this.batchRatchet.scheduleJob(l),n.info("Job %s(%s) submitted",o.jobName,o.jobId)}catch(e){n.error("Cannot submit batch job taskName: %s jobDef: %s queue: %s jobName: %s data: %j",t,this.batchRatchet.defaultJobDefinition,this.batchRatchet.defaultQueueName,c,i,e)}return o}}class le{_batchClient;_defaultQueueName;_defaultJobDefinition;constructor(e,t,s){this._batchClient=e,this._defaultQueueName=t,this._defaultJobDefinition=s}get batchClient(){return this._batchClient}get defaultQueueName(){return this._defaultQueueName}get defaultJobDefinition(){return this._defaultJobDefinition}async scheduleJob(e){n.info("Submitting batch job %s",e.jobName);try{const t=await this._batchClient.send(new u(e));return n.info("Job %s(%s) submitted",t.jobName,t.jobId),t}catch(t){n.error("Cannot submit batch job %s: %s",e.jobName,t)}return null}async jobCountInState(e,t=this.defaultQueueName){return(await this.listJobs(t,e)).length}async listJobs(e=this.defaultQueueName,s=null){t.notNullOrUndefined(e,"queueName");let a=[];const i={jobQueue:e,jobStatus:s,nextToken:null};n.info("Fetching %j",i);do{n.info("Pulling page...");const e=await this._batchClient.send(new m(i));a=a.concat(e.jobSummaryList),i.nextToken=e.nextToken}while(i.nextToken);return a}}class he{constructor(){}static buildInformation(){return{version:"LOCAL-SNAPSHOT",hash:"LOCAL-HASH",branch:"LOCAL-BRANCH",tag:"LOCAL-TAG",timeBuiltISO:"LOCAL-TIME-ISO",notes:"LOCAL-NOTES"}}}class de{dynamo;opts;constructor(e,s){this.dynamo=e,this.opts=s,t.notNullOrUndefined(this.dynamo,"dynamo"),t.notNullOrUndefined(this.opts,"opts"),t.notNullOrUndefined(this.opts.tableName,"opts.tableName"),t.notNullOrUndefined(this.opts.hashKeyName,"opts.hashKeyName"),t.true(!this.opts.useRangeKeys||!!this.opts.rangeKeyName&&!!this.opts.hashKeyValue,"invalid range configuration")}static createDefaultOptions(){return{tableName:"simple-cache",useRangeKeys:!1,hashKeyName:"cache-key",rangeKeyName:null,hashKeyValue:null}}createKeyObject(e){const t={};return this.opts.useRangeKeys?(t[this.opts.hashKeyName]=this.opts.hashKeyValue,t[this.opts.rangeKeyName]=e):t[this.opts.hashKeyName]=e,t}cleanDynamoFieldsFromObjectInPlace(e){e&&(delete e[this.opts.hashKeyName],this.opts.rangeKeyName&&delete e[this.opts.rangeKeyName],this.opts.dynamoExpiresColumnName&&delete e[this.opts.dynamoExpiresColumnName])}extractKeysFromObject(e){let t=null;return e&&(t={},this.opts.useRangeKeys?(t[this.opts.hashKeyName]=this.opts.hashKeyValue,t[this.opts.rangeKeyName]=e.cacheKey):t[this.opts.hashKeyName]=e.cacheKey),t}async readFromCache(e){const t=this.createKeyObject(e),s=await this.dynamo.simpleGet(this.opts.tableName,t);return this.cleanDynamoFieldsFromObjectInPlace(s),s}async storeInCache(e){t.notNullOrUndefined(e,"value"),t.notNullOrUndefined(e.cacheKey,"value.cacheKey");const s=Object.assign({},e,this.createKeyObject(e.cacheKey));this.opts.dynamoExpiresColumnName&&e.expiresEpochMS&&(s[this.opts.dynamoExpiresColumnName]=Math.floor(e.expiresEpochMS/1e3));return!!await this.dynamo.simplePut(this.opts.tableName,s)}async removeFromCache(e){await this.dynamo.simpleDelete(this.opts.tableName,this.createKeyObject(e))}async clearCache(){const e=(await this.readAll()).map((e=>this.extractKeysFromObject(e)));return await this.dynamo.deleteAllInBatches(this.opts.tableName,e,25)}async readAll(){let e=null;if(this.opts.useRangeKeys){const t={TableName:this.opts.tableName,KeyConditionExpression:"#cacheKey = :cacheKey",ExpressionAttributeNames:{"#cacheKey":this.opts.hashKeyName},ExpressionAttributeValues:{":cacheKey":this.opts.hashKeyValue}};e=await this.dynamo.fullyExecuteQuery(t)}else{const t={TableName:this.opts.tableName};e=await this.dynamo.fullyExecuteScan(t)}return e.forEach((e=>this.cleanDynamoFieldsFromObjectInPlace(e))),e}}class ue{s3CacheRatchet;prefix;constructor(e,s){this.s3CacheRatchet=e,this.prefix=s,t.notNullOrUndefined(this.s3CacheRatchet,"s3CacheRatchet"),t.notNullOrUndefined(this.s3CacheRatchet.getDefaultBucket(),"s3CacheRatchet.defaultBucket")}keyToPath(e){let t=s.trimToEmpty(this.prefix);return t.length>0&&!t.endsWith("/")&&(t+="/"),t+=e,t}async readFromCache(e){return await this.s3CacheRatchet.fetchCacheFileAsObject(this.keyToPath(e))}async storeInCache(e){t.notNullOrUndefined(e,"value"),t.notNullOrUndefined(e.cacheKey,"value.cacheKey");return!!await this.s3CacheRatchet.writeObjectToCacheFile(this.keyToPath(e.cacheKey),e)}async removeFromCache(e){await this.s3CacheRatchet.removeCacheFile(this.keyToPath(e))}async clearCache(){const e=await this.s3CacheRatchet.directChildrenOfPrefix(this.keyToPath(""));return await Promise.all(e.map((e=>this.removeFromCache(e)))),e.length}async readAll(){const e=await this.s3CacheRatchet.directChildrenOfPrefix(this.keyToPath(""));return await Promise.all(e.map((e=>this.readFromCache(e))))}}class me{provider;defaultTimeToLiveMS;constructor(e,t=6e4){this.provider=e,this.defaultTimeToLiveMS=t}createDefaultReadOptions(){return{maxStalenessMS:null,timeToLiveMS:this.defaultTimeToLiveMS,cacheNullValues:!1}}async fetchWrapper(e,t,s=this.createDefaultReadOptions()){n.silly("Fetching %s",e);const a=(new Date).getTime();let i=await this.provider.readFromCache(e);if(i&&i.expiresEpochMS<a&&(n.debug("Object found, but expired - removing"),i=null),i&&s&&s.maxStalenessMS&&a-i.createdEpochMS>s.maxStalenessMS&&(n.debug("Object found by too stale - removing"),i=null),!i){n.debug("%s not found in cache, generating",e);const r=await t();(r||s?.cacheNullValues)&&(n.debug("Writing %j to cache"),i={cacheKey:e,createdEpochMS:a,expiresEpochMS:s&&s.timeToLiveMS?a+s.timeToLiveMS:null,value:r,generated:!1},await this.provider.storeInCache(i),i.generated=!0)}return i}async fetch(e,t,s=null){const a=await this.fetchWrapper(e,t,s);return a?a.value:null}async removeFromCache(e,t){let s=null;return t&&(s=await this.fetchWrapper(e,(()=>null))),await this.provider.removeFromCache(e),s}async clearCache(){return this.provider.clearCache()}async readAll(){return this.provider.readAll()}}class fe{logGroup;awsCWLogs;constructor(e,t=new f({region:"us-east-1"})){this.logGroup=e,this.awsCWLogs=t}get cloudWatchLogsClient(){return this.awsCWLogs}async readLogStreams(e=null,t=null){const s={logGroupName:this.logGroup,orderBy:"LastEventTime"},a=[];do{n.debug("Pulling more log streams (%d found so far)",a.length);const i=await this.awsCWLogs.send(new g(s));i.logStreams.forEach((s=>{null!==s.lastEventTimestamp&&(!e||s.lastEventTimestamp>=e)&&(!t||s.firstEventTimestamp<=t)&&a.push(s)})),s.nextToken=i.nextToken}while(s.nextToken);return n.debug("Found %d total, returning",a.length),a}async readLogStreamNames(e=null,t=null){return(await this.readLogStreams(e,t)).map((e=>e.logStreamName))}async readEvents(e,t=null,s=null,a=!0,r=null){const o=new i,c={logGroupName:this.logGroup,endTime:s,startTime:t};e&&(c.filterPattern=e),n.debug("Reading log events matching : %j",c);let l=[];do{n.debug("Pulling more log events (%d found so far) : %s",l.length,o.dump());const e=await this.awsCWLogs.send(new p(c));l=l.concat(e.events),c.nextToken=e.nextToken}while(c.nextToken&&(!r||l.length<r));return n.debug("Found %d total in %s",l.length,o.dump()),a&&(n.debug("Sorting events by timestamp"),l=l.sort(((e,t)=>{let s=e.timestamp-t.timestamp;return 0===s&&(s=e.message.localeCompare(t.message)),s}))),o.log(),l}}class ge{static MAX_DELETE_RETRIES=5;cwLogs;constructor(e=null){this.cwLogs=e||new f({region:"us-east-1"})}get cloudWatchLogsClient(){return this.cwLogs}async removeEmptyOrOldLogStreams(e,t=1e3,s=null){n.info("Removing empty streams from %s, oldest event epoch MS : %d",e,s);const a={logGroupName:e,orderBy:"LastEventTime"},i=s||1;let o=0;const c=[],l=[];let h=10;do{n.debug("Executing search for streams");try{const e=await this.cwLogs.send(new g(a));o+=e.logStreams.length,n.debug("Found %d streams (%d so far, %d to delete)",e.logStreams.length,o,c.length);for(let s=0;s<e.logStreams.length&&c.length<t;s++){const t=e.logStreams[s];t.firstEventTimestamp?t.lastEventTimestamp<i&&c.push(t):c.push(t)}a.nextToken=e.nextToken}catch(e){const t=h;h=Math.min(1e3,1.5*h),n.info("Caught while describing %s, increasing wait between deletes (was %d, now %d)",e,t,h)}}while(a.nextToken&&c.length<t);n.info("Found %d streams to delete",c.length);let d=10;for(let t=0;t<c.length;t++){const s={logGroupName:e,logStreamName:c[t].logStreamName},a=0===c[t].storedBytes?"empty":"old";n.info("Removing %s stream %s",a,c[t].logStreamName);let i=!1,o=0;for(;!i&&o<ge.MAX_DELETE_RETRIES;)try{await this.cwLogs.send(new y(s)),i=!0,await r.wait(d)}catch(e){o++;const t=d;d=Math.min(1e3,1.5*d),n.info("Caught %s, increasing wait between deletes and retrying (wait was %d, now %d) (Retry %d of %d)",e,t,d,o,ge.MAX_DELETE_RETRIES)}i||l.push(c[t])}return n.warn("Failed to remove streams : %j",l),c}async findOldestEventTimestampInGroup(e){const t=await this.findStreamWithOldestEventInGroup(e);return t?t.firstEventTimestamp:null}async findStreamWithOldestEventInGroup(e){n.info("Finding oldest event in : %s",e);let t=null;try{const s={logGroupName:e,orderBy:"LastEventTime"};let a=0;do{n.debug("Executing search for streams");const e=await this.cwLogs.send(new g(s));a+=e.logStreams.length,n.debug("Found %d streams (%d so far)",e.logStreams.length,a),e.logStreams.forEach((e=>{e.firstEventTimestamp&&(null===t||e.firstEventTimestamp<t.firstEventTimestamp)&&(t=e)})),s.nextToken=e.nextToken}while(s.nextToken)}catch(t){n.error("Error attempting to find oldest event in group : %s : %s",e,t,t)}return t}async findLogGroups(e){t.notNullOrUndefined(e);const s={logGroupNamePrefix:e};let a=[];do{n.info("%d found, pulling log groups : %j",a.length,s);const e=await this.cwLogs.send(new w(s));a=a.concat(e.logGroups),s.nextToken=e.nextToken}while(s.nextToken);return a}async removeLogGroups(e){t.notNullOrUndefined(e);const s=[];for(let t=0;t<e.length;t++)try{n.info("Deleting %j",e[t]);const a={logGroupName:e[t].logGroupName};await this.cwLogs.send(new b(a)),s.push(!0)}catch(a){n.error("Failure to delete %j : %s",e[t],a),s.push(!1)}return s}async removeLogGroupsWithPrefix(e){t.notNullOrUndefined(e),t.true(s.trimToEmpty(e).length>0),n.info("Removing log groups with prefix %s",e);const a=await this.findLogGroups(e);return await this.removeLogGroups(a)}async fullyExecuteInsightsQuery(e){t.notNullOrUndefined(e),n.debug("Starting insights query : %j",e);const s=await this.cwLogs.send(new E(e));n.debug("Got query id %j",s);let a=null,i=100;for(;!a||["Running","Scheduled"].includes(a.status);)a=await this.cwLogs.send(new T({queryId:s.queryId})),await r.wait(i),i*=2,n.info("Got : %j",a);return a}async abortInsightsQuery(e){let t=null;return e&&(t=await this.cwLogs.send(new S({queryId:e}))),t}}var pe;!function(e){e.Seconds="Seconds",e.Microseconds="Microseconds",e.Milliseconds="Milliseconds",e.Bytes="Bytes",e.Kilobytes="Kilobytes",e.Megabytes="Megabytes",e.Gigabytes="Gigabytes",e.Terabytes="Terabytes",e.Bits="Bits",e.Kilobits="Kilobits",e.Megabits="Megabits",e.Gigabits="Gigabits",e.Terabits="Terabits",e.Percent="Percent",e.Count="Count",e.BytesPerSecond="Bytes/Second",e.KilobytesPerSecond="Kilobytes/Second",e.MegabytesPerSecond="Megabytes/Second",e.GigabytesPerSecond="Gigabytes/Second",e.TerabytesPerSecond="Terabytes/Second",e.BitsPerSecond="Terabytes/Second",e.KilobitsPerSecond="Kilobits/Second",e.MegabitsPerSecond="Megabits/Second",e.GigabitsPerSecond="Gigabits/Second",e.TerabitsPerSecond="Terabits/Second",e.CountPerSecond="Count/Second",e.None="None"}(pe||(pe={}));class ye{cw;constructor(e=null){this.cw=e||new C({region:"us-east-1",apiVersion:"2010-08-01"})}get cloudWatchClient(){return this.cw}async writeSingleMetric(e,t,s,a=pe.None,i,r=new Date,o=!1){const c=[];s&&s.length>0&&s.forEach((e=>{c.push({Name:e.key,Value:e.value})}));const l=o?1:60,h={Namespace:e,MetricData:[{MetricName:t,Dimensions:c,Unit:String(a),Value:i,Timestamp:r,StorageResolution:l}]};n.silly("Writing metric to cw : %j",h);const d=await this.cw.send(new N(h));return n.silly("Result: %j",d),d}async writeDynamoCountAsMinuteLevelMetric(t){if(n.info("Publishing %s / %s metric for %s UTC",t.namespace,t.metric,t.minuteUTC),t.scan&&t.query)throw new Error("Must send query or scan, but not both");if(!t.scan&&!t.query)throw new Error("You must specify either a scan or a query");const s=t.query?await t.dynamoRatchet.fullyExecuteQueryCount(t.query):await t.dynamoRatchet.fullyExecuteScanCount(t.scan);n.debug("%s / %s for %s are %j",t.namespace,t.metric,t.minuteUTC,s);const a=t.minuteUTC.split(" ").join("T")+":00Z",i=e.fromISO(a).toJSDate(),r=await this.writeSingleMetric(t.namespace,t.metric,t.dims,pe.Count,s.count,i,!1);return n.debug("Metrics response: %j",r),s.count}}class we{static DEFAULT_CONTENT=Buffer.from("DAEMON_PLACEHOLDER");static DAEMON_METADATA_KEY="daemon_meta";static async start(e,t,s,a){try{a.meta=a.meta||{},n.info("Starting daemon, key: %s, options: %j",s,a);const i=(new Date).getTime(),r={id:t,title:a.title,lastUpdatedEpochMS:i,lastUpdatedMessage:"Created",targetFileName:a.targetFileName,startedEpochMS:i,completedEpochMS:null,meta:a.meta,error:null,link:null,contentType:a.contentType};return await we.writeState(e,s,r,we.DEFAULT_CONTENT)}catch(e){throw n.error("Error while trying to start a daemon: %j %s",a,e),e}}static async writeState(e,t,s,a){try{const i={};s.lastUpdatedEpochMS=(new Date).getTime(),i[we.DAEMON_METADATA_KEY]=JSON.stringify(s);const r={Bucket:e.getDefaultBucket(),Key:t,ContentType:s.contentType,Metadata:i,Body:new Blob([a])};s.targetFileName&&(r.ContentDisposition='attachment;filename="'+s.targetFileName+'"');const o=await e.getS3Client().send(new x(r));return n.silly("Daemon wrote : %s",o),we.stat(e,t)}catch(e){throw n.error("Error while trying to write a daemon stat: %j %s",s,e),e}}static async streamDataAndFinish(e,t,s){n.debug("Streaming data to %s",t);const a=await we.updateMessage(e,t,"Streaming data");a.completedEpochMS=(new Date).getTime(),a.lastUpdatedMessage="Complete";const i={};i[we.DAEMON_METADATA_KEY]=JSON.stringify(a);const r={Bucket:e.getDefaultBucket(),Key:t,ContentType:a.contentType,Metadata:i,Body:s},o=new j({client:e.getS3Client(),params:r,tags:[],queueSize:4,partSize:5242880,leavePartsOnError:!1});o.on("httpUploadProgress",(e=>{n.info("Uploading : %s",e)}));const c=await o.done();return n.silly("Daemon wrote : %s",c),we.stat(e,t)}static async updateMessage(e,t,s){try{const a=await we.stat(e,t);return a.lastUpdatedMessage=s,we.writeState(e,t,a,we.DEFAULT_CONTENT)}catch(e){throw n.error("Error while trying to update a daemon message: %j %s",t,e),e}}static async stat(e,t){try{n.debug("Daemon stat for path %s / %s",e.getDefaultBucket(),t);let s=null;const a=await e.fetchMetaForCacheFile(t);n.debug("Daemon: Meta is %j",a);const i=a&&a.Metadata?a.Metadata[we.DAEMON_METADATA_KEY]:null;return i?(s=JSON.parse(i),s.completedEpochMS&&!s.error&&(s.link=await e.preSignedDownloadUrlForCacheFile(t))):n.warn("No metadata found! (Head was %j)",a),s}catch(e){throw n.error("Error while trying to fetch a daemon state: %j %s",t,e),e}}static async abort(e,t){return we.error(e,t,"Aborted")}static async error(e,t,s){try{const a=await we.stat(e,t);return a.error=s,a.completedEpochMS=(new Date).getTime(),we.writeState(e,t,a,we.DEFAULT_CONTENT)}catch(e){throw n.error("Error while trying to write a daemon error: %j %s",t,e),e}}static async finalize(e,t,s){try{n.info("Finalizing daemon %s with %d bytes",t,s.length);const a=await we.stat(e,t);return a.completedEpochMS=(new Date).getTime(),a.lastUpdatedMessage="Complete",we.writeState(e,t,a,s)}catch(e){throw n.error("Error while trying to finalize a daemon: %j %s",t,e),e}}}class be{s3;defaultBucket;constructor(e,s=null){this.s3=e,this.defaultBucket=s,t.notNullOrUndefined(this.s3,"s3")}get s3Client(){return this.s3}static applyCacheControlMaxAge(e,t){return e&&t&&(e.CacheControl="max-age="+t),e}static applyUserMetaData(e,t,a){return e&&s.trimToNull(t)&&s.trimToNull(a)&&(e.Metadata=e.Metadata||{},e.Metadata[t]=a),e}getDefaultBucket(){return this.defaultBucket}getS3Client(){return this.s3}async fileExists(e,t=null){try{return!!await this.fetchMetaForCacheFile(e,this.bucketVal(t))}catch(e){return n.silly("Error calling file exists (as expected) %s",e),!1}}async fetchCacheFileAsS3GetObjectCommandOutput(e,t=null){let s=null;try{const a={Bucket:this.bucketVal(t),Key:e};s=await this.s3.send(new v(a))}catch(t){if(!(t instanceof O))throw t;n.debug("Key %s not found - returning null",e),s=null}return s}async fetchCacheFileAsReadableStream(e,t=null){return(await this.fetchCacheFileAsS3GetObjectCommandOutput(e,t)).Body.transformToWebStream()}async fetchCacheFileAsBuffer(e,t=null){let s=null;const a=await this.fetchCacheFileAsS3GetObjectCommandOutput(e,t);if(a?.Body){const e=await a.Body.transformToByteArray();s=Buffer.from(e)}return s}async fetchCacheFileAsString(e,t=null){let s=null;const a=await this.fetchCacheFileAsS3GetObjectCommandOutput(e,t);return a?.Body&&(s=await a.Body.transformToString()),s}async fetchCacheFileAsObject(e,t=null){const s=await this.fetchCacheFileAsString(e,t);return s?JSON.parse(s):null}async removeCacheFile(e,t=null){let s=null;const a={Bucket:this.bucketVal(t),Key:e};try{s=await this.s3.send(new k(a))}catch(a){if(!a||404!=a.statusCode)throw a;n.info("Swallowing 404 deleting missing object %s %s",t,e),s=null}return s}async writeObjectToCacheFile(e,t,s,a){const n=JSON.stringify(t);return this.writeStringToCacheFile(e,n,s,a)}async writeStringToCacheFile(e,t,s,a){const n=o.stringToWebReadableStream(t);return this.writeStreamToCacheFile(e,n,s,a)}async writeStreamToCacheFile(e,t,s,a){const i=Object.assign({},s||{},{Bucket:this.bucketVal(a),Key:e,Body:t}),r=new j({client:this.s3,params:i,tags:[],queueSize:4,partSize:5242880,leavePartsOnError:!1});r.on("httpUploadProgress",(e=>{n.info("Uploading : %s",e)}));return await r.done()}async synchronize(e,s,a=this,r=!1){t.notNullOrUndefined(e,"srcPrefix"),t.notNullOrUndefined(s,"targetPrefix"),t.true(e.endsWith("/"),"srcPrefix must end in /"),t.true(s.endsWith("/"),"targetPrefix must end in /");let o=[];const c=await this.directChildrenOfPrefix(e),l=await a.directChildrenOfPrefix(s),h=new i;for(let t=0;t<c.length;t++){const i=c[t];if(n.info("Processing %s : %s",i,h.dumpExpected(t/c.length)),i.endsWith("/"))if(r){n.info("%s is a subfolder - recursing");const t=await this.synchronize(e+i,s+i,a,r);n.info("Got %d back from %s",t.length,i),o=o.concat(t)}else n.info("%s is a subfolder and recurse not specified - skipping",i);else{let t=!0;const r=await this.fetchMetaForCacheFile(e+i);if(l.includes(i)){const e=await a.fetchMetaForCacheFile(s+i);r.ETag===e.ETag&&(n.debug("Skipping - identical"),t=!1)}if(t){n.debug("Copying...");const t=await this.fetchCacheFileAsReadableStream(e+i);try{const e=await a.writeStreamToCacheFile(s+i,t,r,void 0);n.silly("Write result : %j",e),o.push(i)}catch(e){n.error("Failed to sync : %s : %s",i,e)}}}}return n.info("Found %d files, copied %d",c.length,o.length),h.log(),o}async fetchMetaForCacheFile(e,t=null){let s=null;try{s=await this.s3.send(new D({Bucket:this.bucketVal(t),Key:e}))}catch(a){if(!a||404!=a.statusCode)throw n.error("Unrecognized error, rethrowing : %s",a,a),a;n.info("Cache file %s %s not found returning null",this.bucketVal(t),e),s=null}return s}async cacheFileAgeInSeconds(e,t=null){try{const s=await this.fetchMetaForCacheFile(e,t);return s&&s.LastModified?Math.floor(((new Date).getTime()-s.LastModified.getTime())/1e3):(n.warn("Cache file %s %s had no last modified returning null",this.bucketVal(t),e),null)}catch(s){if(s&&404==s.statusCode)return n.warn("Cache file %s %s not found returning null",this.bucketVal(t),e),null;throw s}}async copyFile(e,t,s=null,a=null){const n={CopySource:"/"+this.bucketVal(s)+"/"+e,Bucket:this.bucketVal(a),Key:t,MetadataDirective:"COPY"};return await this.s3.send(new F(n))}async quietCopyFile(e,t,s=null,a=null){let i=!1;try{await this.copyFile(e,t,s,a);i=!0}catch(e){n.silly("Failed to copy file in S3 : %s",e)}return i}async preSignedDownloadUrlForCacheFile(e,t=3600,s=null){const a={Bucket:this.bucketVal(s),Key:e};return await U(this.s3,new v(a),{expiresIn:t})}async directChildrenOfPrefix(e,t=!1,s=null,a=null){const n=[],i={Bucket:this.bucketVal(s),Prefix:e,Delimiter:"/"};let r=null;do{r=await this.s3.send(new P(i));const o=e.length;r.CommonPrefixes&&r.CommonPrefixes.forEach((e=>{if(!a||n.length<a){const t=e.Prefix.substring(o);n.push(t)}})),r.Contents&&await Promise.all(r.Contents.map((async e=>{if(!a||n.length<a)if(t){const t={link:await this.preSignedDownloadUrlForCacheFile(e.Key,3600,s),name:e.Key.substring(o),size:e.Size};n.push(t)}else n.push(e.Key.substring(o))}))),i.Marker=r.NextMarker}while(i.Marker&&(!a||n.length<a));return n}async allSubFoldersOfPrefix(e,t=null){const s=[e];let a=0;for(;a<s.length;){const e=s[a++];n.debug("Pulling %s (%d remaining)",e,s.length-a);const i={Bucket:this.bucketVal(t),Prefix:e,Delimiter:"/"};let r=null;do{i.ContinuationToken=r?r.NextContinuationToken:null,r=await this.s3.send(new P(i)),r.CommonPrefixes.forEach((e=>{s.push(e.Prefix)})),n.debug("g:%j",r)}while(r.NextContinuationToken)}return s}bucketVal(e){const t=e||this.defaultBucket;if(!t)throw"You must set either the default bucket or pass it explicitly";return t}}class Ee{s3;bucket;prefix;_defaultGroup;jwtRatchet;static DEFAULT_DEFAULT_GROUP="DEFAULT";cache;constructor(e,t,s="",a=Ee.DEFAULT_DEFAULT_GROUP,n){this.s3=e,this.bucket=t,this.prefix=s,this._defaultGroup=a,this.jwtRatchet=n,this.cache=new be(this.s3,this.bucket)}get defaultGroup(){return this._defaultGroup}async keyToPublicToken(e,s){t.notNullOrUndefined(this.jwtRatchet,"You must set jwtRatchet if you wish to use public tokens"),t.notNullOrUndefined(e,"key"),t.true(s>0,"Expiration seconds must be larger than 0");const a={daemonKey:e};return await this.jwtRatchet.createTokenString(a,s)}keyToPath(e){return Buffer.from(e,"base64").toString()}pathToKey(e){return Buffer.from(e).toString("base64")}generatePath(e=this._defaultGroup){return this.generatePrefix(e)+s.createType4Guid()}generatePrefix(e=this._defaultGroup){return this.prefix+e+"/"}async start(e){e.group=e.group||this._defaultGroup;const t=this.generatePath(e.group),s=this.pathToKey(t);return we.start(this.cache,s,t,e)}async writeState(e,t){const s=this.keyToPath(e.id);return we.writeState(this.cache,s,e,t)}async clean(e=this._defaultGroup,t=604800){try{n.info("Daemon removing items older than %d seconds from group %s",t,e);const s=await this.list(e),a=(new Date).getTime(),i=[];for(let e=0;e<s.length;e++){const n=s[e];if((a-n.startedEpochMS)/1e3>t){await this.cache.removeCacheFile(this.keyToPath(n.id));i.push(n)}}return n.debug("Removed %d of %d items",i.length,s.length),i}catch(t){throw n.error("Error while trying to clean a daemon: %j %s",e,t),t}}async listKeys(e=this._defaultGroup){try{const t=this.generatePrefix(e);n.info("Fetching children of %s",t);const s=await this.cache.directChildrenOfPrefix(t);return n.debug("Found : %j",s),s}catch(t){throw n.error("Error while trying to list daemon keys: %j %s",e,t),t}}async list(e=this._defaultGroup){try{const t=this.generatePrefix(e);n.info("Fetching children of %s",t);const s=(await this.listKeys(e)).map((t=>this.stat(this.pathToKey(this.generatePrefix(e)+t))));return await Promise.all(s)}catch(t){throw n.error("Error while trying to list daemon states: %j %s",e,t),t}}async updateMessage(e,t){const s=this.keyToPath(e);return we.updateMessage(this.cache,s,t)}async stat(e){const t=this.keyToPath(e);return we.stat(this.cache,t)}async statFromPublicToken(e){t.notNullOrUndefined(this.jwtRatchet,"You must set jwtRatchet if you wish to use public tokens"),t.notNullOrUndefined(e,"publicToken");const s=await this.jwtRatchet.decodeToken(e),a=s?.daemonKey;return a?this.stat(a):null}async abort(e){return we.abort(this.cache,this.keyToPath(e))}async error(e,t){return we.error(this.cache,this.keyToPath(e),t)}async finalize(e,t){return we.finalize(this.cache,this.keyToPath(e),t)}}class Te{provider;cfg;static defaultDaoConfig(){return{guidCreateFunction:s.createType4Guid,guidFieldName:"guid",createdEpochMSFieldName:"createdEpochMS",updatedEpochMSFieldName:"updatedEpochMS",createdUtcTimestampFieldName:null,updatedUtcTimestampFieldName:null}}constructor(e,s=Te.defaultDaoConfig()){this.provider=e,this.cfg=s,t.notNullOrUndefined(e,"provider"),t.notNullOrUndefined(s,"cfg"),t.notNullOrUndefined(s.guidCreateFunction,"cfg.guidCreateFunction"),t.notNullOrUndefined(s.guidFieldName,"cfg.guidFieldName")}async fetchAll(){return(await this.provider.loadDatabase()).items||[]}async resetDatabase(){await this.provider.storeDatabase({items:[],lastModifiedEpochMS:Date.now()})}async removeItems(e){let t=await this.fetchAll();return e&&(t=t.filter((t=>!e.includes(t[this.cfg.guidFieldName]))),await this.provider.storeDatabase({items:t,lastModifiedEpochMS:Date.now()})),t}async store(t){let s=await this.fetchAll();return t&&(t[this.cfg.guidFieldName]=t[this.cfg.guidFieldName]||this.cfg.guidCreateFunction(),this.cfg.createdEpochMSFieldName&&(t[this.cfg.createdEpochMSFieldName]=t[this.cfg.createdEpochMSFieldName]||Date.now()),this.cfg.createdUtcTimestampFieldName&&(t[this.cfg.createdUtcTimestampFieldName]=t[this.cfg.createdUtcTimestampFieldName]||e.utc().toISO()),this.cfg.updatedEpochMSFieldName&&(t[this.cfg.updatedEpochMSFieldName]=Date.now()),this.cfg.updatedUtcTimestampFieldName&&(t[this.cfg.updatedUtcTimestampFieldName]=e.utc().toISO()),s=s.filter((e=>e[this.cfg.guidFieldName]!==t[this.cfg.guidFieldName])),s.push(t),await this.provider.storeDatabase({items:s,lastModifiedEpochMS:Date.now()})),t}async fetchById(e){return(await this.fetchAll()).find((t=>t[this.cfg.guidFieldName]===e))}async searchByField(e,s){t.notNullOrUndefined(e,"fieldDotPath"),t.notNullOrUndefined(s,"fieldValue");const a={};return a[e]=s,this.searchByFieldMap(a)}async searchByFieldMap(e){t.notNullOrUndefined(e,"input");let s=await this.fetchAll();return s=s.filter((t=>{let s=!0;return Object.keys(e).forEach((a=>{const n=c.findValueDotPath(t,a),i=e[a];s=s&&n===i})),s})),s}}class Se{s3CacheRatchet;keyName;constructor(e,s){this.s3CacheRatchet=e,this.keyName=s,t.notNullOrUndefined(e,"s3CacheRatchet"),t.notNullUndefinedOrOnlyWhitespaceString(e.getDefaultBucket(),"s3CacheRatchet.defaultBucket"),t.notNullUndefinedOrOnlyWhitespaceString(s,"keyName")}async storeDatabase(e){const t=e||{items:[],lastModifiedEpochMS:null};t.lastModifiedEpochMS=Date.now();return!!await this.s3CacheRatchet.writeObjectToCacheFile(this.keyName,t)}async loadDatabase(){return await this.s3CacheRatchet.fetchCacheFileAsObject(this.keyName)||{items:[],lastModifiedEpochMS:Date.now()}}}class Ce{cache;prefix;constructor(e,t){if(this.cache=e,this.prefix=t,!e)throw new Error("cache object may not be null");if(!e.getDefaultBucket())throw new Error("Supplied cache must have default bucket set")}buildPathPrefix(e){let t="";return this.prefix&&(t+=this.prefix),e&&(t+=e),t}buildFullPath(e,t){let s=this.buildPathPrefix(t);return s.length>0&&(s+="/"),s+=e+".json",s}async exists(e,t){const s=this.buildFullPath(e,t);return n.debug("Check file existence : %s",s),this.cache.fileExists(s)}async fetch(e,t){const s=this.buildFullPath(e,t);n.debug("Fetching : %s",s);const a=await this.cache.fetchCacheFileAsObject(s);return a.id=e,a.path=t,a}async store(e,t){e.id=e.id||s.createType4Guid(),e.lastModifiedEpochMS=(new Date).getTime();const a=this.buildFullPath(e.id,t);n.debug("Storing : %s",a),await this.cache.writeObjectToCacheFile(a,e);return await this.fetch(e.id,t)}async listItems(e){const t=this.buildPathPrefix(e);n.debug("Listing : %s",t);return await this.cache.directChildrenOfPrefix(t)}async fetchItemsInPath(e){const t=this.buildPathPrefix(e);n.debug("Full fetch of : %s",t);const s=(await this.listItems(e)).map((t=>this.fetch(t,e)));return await Promise.all(s)}async delete(e,t){const s=this.buildFullPath(e,t);n.debug("Deleting : %s",s);return null!=await this.cache.removeCacheFile(s)}}class Ne{awsDDB;constructor(e){if(this.awsDDB=e,!e)throw"awsDDB may not be null"}get dynamoDBDocumentClient(){return this.awsDDB}getDDB(){return this.awsDDB}async tableIsEmpty(e){const t={TableName:e,Limit:1};return 0===(await this.throughputSafeScanOrQuery((e=>this.scanPromise(e)),t)).Items.length}async scanPromise(e){return this.awsDDB.send(new I(e))}async queryPromise(e){return this.awsDDB.send(new R(e))}async throughputSafeScanOrQuery(e,t,s,i){let o=null;if(t){let c=i??0;do{c++;try{o=await e(t)}catch(e){if(!Ne.objectIsErrorWithProvisionedThroughputExceededExceptionCode(e))throw e;{const e=1e3*Math.pow(2,c);n.debug("Exceeded scan throughput for %j : Try %d of %d (Waiting %d ms)",t,c,s,e),await r.wait(e),c++}}}while(!o&&(!s||c<s));o||a.throwFormattedErr("throughputSafeScan failed - tried %d times, kept running into throughput exceeded : %j",s,t)}return o}async fullyExecuteQueryCount(e,t=0){try{e.Select="COUNT",n.debug("Executing count query : %j",e);const s={count:0,scannedCount:0,pages:0},a=(new Date).getTime();let i=null;const o=e.Limit;e.Limit=null;do{i=await this.throughputSafeScanOrQuery((e=>this.queryPromise(e)),e),s.count+=i.Count,s.scannedCount+=i.ScannedCount,s.pages++,e.ExclusiveStartKey=i.LastEvaluatedKey,await r.wait(t),n.silly("Rval is now %j",s),o&&s.count>=o&&e.ExclusiveStartKey&&(n.info("Aborting query since hit limit of %d",o),e.ExclusiveStartKey=null)}while(e.ExclusiveStartKey);const c=(new Date).getTime();return n.debug("Finished, returned %j in %s for %j",s,l.formatMsDuration(c-a,!0),e),s}catch(t){return n.error("Failed with %s, q: %j",t,e,t),null}}async fullyExecuteQuery(e,t=0,s=null){const a=[];return await this.fullyExecuteProcessOverQuery(e,(async e=>{a.push(e)}),t,s),a}async fullyExecuteProcessOverQuery(e,t,s=0,a=null){let i=0;try{n.debug("Executing query : %j",e);const o=(new Date).getTime();n.debug("Pulling %j",e);let c=await this.throughputSafeScanOrQuery((e=>this.queryPromise(e)),e);for(let e=0;e<c.Items.length;e++)await t(c.Items[e]),i++;let h=0,d=0;for(;c.LastEvaluatedKey&&(null===a||i<a)&&!e.Limit;){n.silly("Found more rows - requery with key %j",c.LastEvaluatedKey),e.ExclusiveStartKey=c.LastEvaluatedKey,c=await this.throughputSafeScanOrQuery((e=>this.queryPromise(e)),e);for(let e=0;e<c.Items.length;e++)await t(c.Items[e]),i++;n.silly("Have processed %d items",i),h++,d+=0===c.Count?1:0,await r.wait(s)}const u=(new Date).getTime();n.debug("Finished, processed %d rows in %s for %j (%d blank pages, %d total pages)",i,l.formatMsDuration(u-o,!0),e,d,h)}catch(t){n.error("Failed with %s, q: %j",t,e,t)}return i}async fullyExecuteScanCount(e,t=0){try{e.Select="COUNT";const s={count:0,scannedCount:0,pages:0};n.debug("Executing scan count : %j",e);const a=(new Date).getTime();let i=null;const o=e.Limit;e.Limit=null;do{i=await this.throughputSafeScanOrQuery((e=>this.scanPromise(e)),e),s.count+=i.Count,s.scannedCount+=i.ScannedCount,s.pages++,e.ExclusiveStartKey=i?.LastEvaluatedKey,await r.wait(t),n.silly("Rval is now %j",s),o&&s.count>=o&&e.ExclusiveStartKey&&(n.info("Aborting scan since hit limit of %d",o),e.ExclusiveStartKey=null)}while(e.ExclusiveStartKey);const c=(new Date).getTime();return n.debug("Finished, returned %j in %s for %j",s,l.formatMsDuration(c-a,!0),e),s}catch(t){return n.error("Failed with %s, q: %j",t,e,t),null}}async fullyExecuteScan(e,t=0,s=null){const a=[];return await this.fullyExecuteProcessOverScan(e,(async e=>{a.push(e)}),t,s),a}async fullyExecuteProcessOverScan(e,t,s=0,a=null){let i=0;try{n.debug("Executing scan : %j",e);const o=(new Date).getTime();n.debug("Pulling %j",e);let c=await this.throughputSafeScanOrQuery((e=>this.scanPromise(e)),e);for(let e=0;e<c.Items.length;e++)await t(c.Items[e]),i++;for(;c.LastEvaluatedKey&&(null===a||i<a)&&!e.Limit;){n.silly("Found more rows - requery with key %j",c.LastEvaluatedKey),e.ExclusiveStartKey=c.LastEvaluatedKey,c=await this.throughputSafeScanOrQuery((e=>this.scanPromise(e)),e);for(let e=0;e<c.Items.length;e++)await t(c.Items[e]),i++;n.silly("Rval is now %d items",i),await r.wait(s)}const h=(new Date).getTime();n.debug("Finished, processed %d results in %s for %j",i,l.formatMsDuration(h-o,!0),e)}catch(t){n.error("Failed with %s, q: %j",t,e,t)}return i}async writeAllInBatches(e,t,s){if(!s||s<2)throw new Error("Batch size needs to be at least 2, was "+s);let a=0;if(t&&t.length>0){let i=[];for(t.forEach((t=>{i.push({PutRequest:{Item:t,ReturnConsumedCapacity:"TOTAL",TableName:e}})})),n.debug("Processing %d batch items to %s",i.length,e);i.length>0;){const t=i.slice(0,Math.min(i.length,s));i=i.slice(t.length);const o={RequestItems:{},ReturnConsumedCapacity:"TOTAL",ReturnItemCollectionMetrics:"SIZE"};o.RequestItems[e]=t;let c=1,l=!1,h=null;for(;!l&&c<7;){try{h=await this.awsDDB.send(new B(o))}catch(e){if(!Ne.objectIsErrorWithProvisionedThroughputExceededExceptionCode(e))throw e;n.info("Caught ProvisionedThroughputExceededException - retrying delete"),h={UnprocessedItems:o.RequestItems}}if(h&&h.UnprocessedItems&&h.UnprocessedItems[e]&&h.UnprocessedItems[e].length>0){const t=Math.pow(2,c);n.warn("Found %d unprocessed items. Backing off %d seconds and trying again",h.UnprocessedItems[e].length,t),await r.wait(1e3*t),c++,o.RequestItems[e]=h.UnprocessedItems[e]}else l=!0}h&&h.UnprocessedItems&&h.UnprocessedItems[e]&&h.UnprocessedItems[e].length>0?(n.error("After 6 tries there were still %d unprocessed items"),a+=t.length-h.UnprocessedItems[e].length,n.warn("FIX Unprocessed : %j",h.UnprocessedItems)):a+=t.length}}return a}async fetchFullObjectsMatchingKeysOnlyIndexQuery(e,s,a=25){t.notNullOrUndefined(e),t.notNullOrUndefined(e.TableName),t.notNullOrUndefined(s),t.true(s.length>0);const n=await this.fullyExecuteQuery(e),i=Ne.stripAllToKeysOnly(n,s);return await this.fetchAllInBatches(e.TableName,i,a)}async fetchAllInBatches(e,t,s){if(!s||s<2||s>100)throw new Error("Batch size needs to be at least 2 and no more than 100, was "+s);let a=[];const i=[];let o=Object.assign([],t);for(;o.length>0;){const t=o.slice(0,Math.min(o.length,s));o=o.slice(t.length);const a={};a[e]={Keys:t};const n={RequestItems:a,ReturnConsumedCapacity:"TOTAL"};i.push(n)}n.debug("Created %d batches",i.length);for(let t=0;t<i.length;t++){i.length>1&&n.info("Processing batch %d of %d",t+1,i.length);const s=i[t];let o=1;do{n.silly("Pulling %j",s);const t=await this.awsDDB.send(new K(s));a=a.concat(t.Responses[e]),t.UnprocessedKeys&&t.UnprocessedKeys[e]&&t.UnprocessedKeys[e].Keys.length>0&&o<15&&(n.silly("Found %d unprocessed, waiting",t.UnprocessedKeys[e].Keys),await r.wait(1e3*Math.pow(2,o)),o++),s.RequestItems=t.UnprocessedKeys}while(!s.RequestItems&&s.RequestItems[e].Keys.length>0)}return a}async deleteAllInBatches(e,t,s){if(!s||s<2)throw new Error("Batch size needs to be at least 2, was "+s);let a=0;if(t&&t.length>0){let i=[];for(t.forEach((t=>{i.push({DeleteRequest:{Key:t,ReturnConsumedCapacity:"TOTAL",TableName:e}})})),n.debug("Processing %d DeleteBatch items to %s",i.length,e);i.length>0;){const t=i.slice(0,Math.min(i.length,s));i=i.slice(t.length);const o={RequestItems:{},ReturnConsumedCapacity:"TOTAL",ReturnItemCollectionMetrics:"SIZE"};o.RequestItems[e]=t;let c=1,l=!1,h=null;for(;!l&&c<7;){try{h=await this.awsDDB.send(new B(o))}catch(e){if(!Ne.objectIsErrorWithProvisionedThroughputExceededExceptionCode(e))throw e;n.info("Caught ProvisionedThroughputExceededException - retrying delete"),h={UnprocessedItems:o.RequestItems}}if(h&&h.UnprocessedItems&&h.UnprocessedItems[e]&&h.UnprocessedItems[e].length>0){const t=Math.pow(2,c);n.warn("Found %d unprocessed items. Backing off %d seconds and trying again",h.UnprocessedItems[e].length,t),await r.wait(1e3*t),c++,o.RequestItems[e]=h.UnprocessedItems[e]}else l=!0}h&&h.UnprocessedItems&&h.UnprocessedItems[e]&&h.UnprocessedItems[e].length>0?(n.error("After 6 tries there were still %d unprocessed items"),a+=t.length-h.UnprocessedItems[e].length,n.warn("FIX Unprocessed : %j",h.UnprocessedItems)):a+=t.length,n.debug("%d Remain, DeleteBatch Results : %j",i.length,h)}}return a}async simplePut(e,t,s=3){let a=null,i=0;const o={Item:t,ReturnConsumedCapacity:"TOTAL",TableName:e};for(;!a&&i<s;)try{a=await this.awsDDB.send(new L(o))}catch(e){if(!Ne.objectIsErrorWithProvisionedThroughputExceededExceptionCode(e))throw e;{const e=1e3*Math.pow(2,i);n.debug("Exceeded write throughput for %j : Try %d of %d (Waiting %d ms)",o,i,s,e),await r.wait(e),i++}}return a||n.warn("Unable to write %j to DDB after %d tries, giving up",o,s),a}async simplePutOnlyIfFieldIsNullOrUndefined(e,t,s){let a=!1;const i={Item:t,ReturnConsumedCapacity:"TOTAL",ConditionExpression:"attribute_not_exists(#fieldName) OR #fieldName = :null ",ExpressionAttributeNames:{"#fieldName":s},ExpressionAttributeValues:{":null":null},TableName:e};try{const e=await this.awsDDB.send(new L(i));n.silly("Wrote : %j",e),a=!0}catch(e){if(Ne.objectIsErrorWithProvisionedThroughputExceededExceptionCode(e))n.debug("Exceeded write throughput for %j : (Waiting 2000 ms)",i),await r.wait(2e3);else{if(!e||!e.code||"ConditionalCheckFailedException"!==e.code)throw e;n.debug("Failed to write %j due to null field failure"),a=!1}}return a}async simplePutWithCollisionAvoidance(e,s,a,i,o=null,c=3){t.true(a&&a.length>0&&a.length<3,"You must pass 1 or 2 key names");let l=null,h=0;const d={"#key0":a[0]},u={":key0":s[a[0]]};let m="#key0 <> :key0";a.length>1&&(m+=" AND #key1 <> :key1",d["#key1"]=a[1],u[":key1"]=s[a[1]]);const f={Item:s,ReturnConsumedCapacity:"TOTAL",ConditionExpression:m,ExpressionAttributeNames:d,ExpressionAttributeValues:u,TableName:e};let g=0;for(;!l&&h<c&&(!o||g<o);)try{l=await this.awsDDB.send(new L(f))}catch(e){if(Ne.objectIsErrorWithProvisionedThroughputExceededExceptionCode(e)){h++;const e=1e3*Math.pow(2,h);n.debug("Exceeded write throughput for %j : Try %d of %d (Waiting %d ms)",f,h,c,e),await r.wait(e)}else{if(!e||!e.code||"ConditionalCheckFailedException"!==e.code)throw e;{let e=Object.assign({},f.Item);n.info("Failed to write %j due to collision - adjusting and retrying",e),e=i(e),f.Item=e,f.ExpressionAttributeValues[":key0"]=e[a[0]],a.length>1&&(f.ExpressionAttributeValues[":key1"]=e[a[1]]),g++}}}return l&&g>0&&n.info("After adjustment, wrote %j as %j",s,f.Item),l||n.warn("Unable to write %j to DDB after %d provision tries and %d adjusts, giving up",f,h,g),l?f.Item:null}async simpleGet(e,t,s=3){let a=null,i=0;const o={TableName:e,Key:t};for(;!a&&i<s;)try{a=await this.awsDDB.send(new V(o))}catch(e){if(!Ne.objectIsErrorWithProvisionedThroughputExceededExceptionCode(e))throw e;{const e=1e3*Math.pow(2,i);n.debug("Exceeded read throughput for %j : Try %d of %d (Waiting %d ms)",o,i,s,e),await r.wait(e),i++}}a||n.warn("Unable to read %j from DDB after %d tries, giving up",o,s);return a&&a.Item?Object.assign({},a.Item):null}static objectIsErrorWithProvisionedThroughputExceededExceptionCode(e){return!!e&&!!e.code&&"ProvisionedThroughputExceededException"===e.code}async simpleGetWithCounterDecrement(e,t,s,a,i=3){let o=null,c=0;const l={TableName:e,Key:t,UpdateExpression:"set #counter = #counter-:decVal",ExpressionAttributeNames:{"#counter":s},ExpressionAttributeValues:{":decVal":1,":minVal":0},ConditionExpression:"#counter > :minVal",ReturnValues:"ALL_NEW"};let h=!1;for(;!o&&c<i&&!h;)try{o=await this.awsDDB.send(new _(l))}catch(e){if(Ne.objectIsErrorWithProvisionedThroughputExceededExceptionCode(e)){const e=1e3*Math.pow(2,c);n.debug("Exceeded update throughput for %j : Try %d of %d (Waiting %d ms)",l,c,i,e),await r.wait(e),c++}else{if(!e||!e.code||"ConditionalCheckFailedException"!==e.code)throw e;n.info("Cannot fetch requested row (%j) - the update check failed",t),h=!0}}o||h||n.warn("Unable to update %j from DDB after %d tries, giving up",l,i);const d=o&&o.Attributes?Object.assign({},o.Attributes):null;return a&&d&&0===d[s]&&(n.info("Delete on 0 specified, removing"),await this.simpleDelete(e,t)),d}async simpleDelete(e,t){const s={TableName:e,Key:t};return await this.awsDDB.send(new G(s))}async atomicCounter(e,t,s,a=1){const n={TableName:e,Key:t,UpdateExpression:"SET #counterFieldName = #counterFieldName + :inc",ExpressionAttributeNames:{"#counterFieldName":s},ExpressionAttributeValues:{":inc":a},ReturnValues:"UPDATED_NEW"},i=await this.awsDDB.send(new _(n));return h.safeNumber(i.Attributes[s])}static cleanObject(e){if(e){const t=[];Object.keys(e).forEach((s=>{const a=e[s];""===a?t.push(s):a instanceof Object&&Ne.cleanObject(a)})),n.silly("Removing keys : %j",t),t.forEach((t=>{delete e[t]}))}}static stripToKeysOnly(e,t){let s=null;return e&&t&&t.length>0&&(s={},t.forEach((t=>{e[t]||a.throwFormattedErr("Failed key extraction on %j - missing %s",e,t),s[t]=e[t]}))),s}static stripAllToKeysOnly(e,t){return e.map((e=>Ne.stripToKeysOnly(e,t)))}}class xe{awsDDB;constructor(e){if(this.awsDDB=e,!e)throw"awsDDB may not be null"}async deleteTable(e,s=!0){t.notNullOrUndefined(e);const a={TableName:e};n.debug("Deleting ddb table %s",e);const i=await this.awsDDB.send(new W(a));return s&&(n.debug("Table marked for delete, waiting for deletion"),await this.waitForTableDelete(e)),i}async createTable(e,s=!0,i=!1){t.notNullOrUndefined(e),t.notNullOrUndefined(e.TableName),n.debug("Creating new table : %j",e);await this.tableExists(e.TableName)&&(i?(n.debug("Table %s exists and replace specified - deleting",e.TableName),await this.deleteTable(e.TableName)):a.throwFormattedErr("Cannot create table %s - exists already and replace not specified",e.TableName));const r=await this.awsDDB.send(new q(e));return s&&(n.debug("Table created, awaiting ready"),await this.waitForTableReady(e.TableName)),r}async waitForTableReady(e){let t=!0,s=await this.safeDescribeTable(e);for(;s&&s.Table&&"ACTIVE"!==s.Table.TableStatus;)n.silly("Table not ready - waiting 2 seconds"),await r.wait(2e3),s=await this.safeDescribeTable(e);return s||s.Table||(n.warn("Cannot wait for %s to be ready - table does not exist",e),t=!1),t}async waitForTableDelete(e){let t=await this.safeDescribeTable(e);for(;t;)n.silly("Table %s still exists, waiting 2 seconds (State is %s)",e,t.Table.TableStatus),await r.wait(2e3),t=await this.safeDescribeTable(e)}async tableExists(e){return!!await this.safeDescribeTable(e)}async safeDescribeTable(e){try{return await this.awsDDB.send(new z({TableName:e}))}catch(e){if(e.code&&"ResourceNotFoundException"===e.code)return null;throw e}}}class ve{spots;buckets;separator;alphabet;_allSlots;constructor(e=3,a=16,n="_",i="0123456789ABCDEF"){this.spots=e,this.buckets=a,this.separator=n,this.alphabet=i,t.true(e>0,"Spots must be larger than 0"),t.true(a>1,"Buckets must be larger than 1"),t.notNullOrUndefined(s.trimToNull(i),"Alphabet may not be null or empty"),t.true(s.allUnique(i),"Alphabet must be unique"),t.true(s.stringContainsOnlyAlphanumeric(i),"Alphabet must be alphanumeric");const r=Math.pow(i.length,e);t.true(a<r,"Buckets must be less than permutations ("+a+" / "+r+")"),t.notNullOrUndefined(s.trimToNull(this.separator),"Separator must be nonnull and nonempty");const o=s.allPermutationsOfLength(e,i);this._allSlots=o.slice(0,a)}get allBuckets(){return Object.assign([],this._allSlots)}get randomBucket(){return this._allSlots[Math.floor(Math.random()*this.buckets)]}allSpreadValues(e){t.notNullOrUndefined(s.trimToNull(e),"Cannot spread null/empty value");return this._allSlots.map((t=>e+this.separator+t))}allSpreadValuesForArray(e){t.true(e&&e.length>0,"Cannot spread null/empty array");let s=[];return e.forEach((e=>{s=s.concat(this.allSpreadValues(e))})),s}addSpreader(e){return t.notNullOrUndefined(s.trimToNull(e),"Cannot spread null/empty value"),e+this.separator+this.randomBucket}extractBucket(e){t.notNullOrUndefined(s.trimToNull(e),"Cannot extract from null or empty value");const n=e.length-this.spots;return(n<0||e.charAt(n)!==this.separator)&&a.throwFormattedErr("Cannot extract bucket, not created by this spreader (missing %s at location %d)",this.separator,n),e.substring(n)}removeBucket(e){t.notNullOrUndefined(s.trimToNull(e),"Cannot extract from null or empty value");const n=e.length-this.spots;return(n<0||e.charAt(n)!==this.separator)&&a.throwFormattedErr("Cannot remove bucket, not created by this spreader (missing %s at location %d)",this.separator,n),e.substring(0,n)}}class Oe{region;availabilityZone;ec2;ec2InstanceConnect;constructor(e="us-east-1",t="us-east-1a"){this.region=e,this.availabilityZone=t,this.ec2=new Q({region:e}),this.ec2InstanceConnect=new Z({region:e})}get eC2Client(){return this.ec2}get eC2InstanceConnectClient(){return this.ec2InstanceConnect}async stopInstance(e,t=0){let s=!0;try{const s={InstanceIds:[e],DryRun:!1};n.info("About to stop instances : %j",s),await this.ec2.send(new $(s)),n.info("Stop instance command sent, waiting on shutdown");let a=await this.describeInstance(e);if(t>0){const s=(new Date).getTime();for(;a&&16!==a.State.Code&&(new Date).getTime()-s<t;)n.debug("Instance status is %j - waiting for 5 seconds (up to %s)",a.State,l.formatMsDuration(t)),await r.wait(5e3),a=await this.describeInstance(e)}}catch(t){n.error("Failed to stop instance %s : %s",e,t,t),s=!1}return s}async launchInstance(e,t=0){let s=!0;try{const s={InstanceIds:[e],DryRun:!1};n.info("About to start instance : %j",s),await this.ec2.send(new H(s)),n.info("Start instance command sent, waiting on startup");let a=await this.describeInstance(e);if(t>0){const s=(new Date).getTime();for(;a&&16!==a.State.Code&&(new Date).getTime()-s<t;)n.debug("Instance status is %j - waiting for 5 seconds (up to %s)",a.State,l.formatMsDuration(t)),await r.wait(5e3),a=await this.describeInstance(e)}a&&a.PublicIpAddress&&(n.info("Instance address is %s",a.PublicIpAddress),n.info("SSH command : ssh -i path_to_pem_file ec2-user@%s",a.PublicIpAddress))}catch(t){n.error("Failed to start instance %s : %s",e,t,t),s=!1}return s}async describeInstance(e){const t=await this.listAllInstances([e]);return 1===t.length?t[0]:null}async listAllInstances(e=[]){let t=[];const s={NextToken:null};e&&e.length>0&&(s.InstanceIds=e);do{n.debug("Pulling instances... (%j)",s);const e=await this.ec2.send(new Y(s));e.Reservations.forEach((e=>{t=t.concat(e.Instances)})),s.NextToken=e.NextToken}while(s.NextToken);return n.debug("Finished pulling instances (found %d)",t.length),t}async sendPublicKeyToEc2Instance(e,t,s){const a=s||"ec2-user",n={InstanceId:e,AvailabilityZone:this.availabilityZone,InstanceOSUser:a,SSHPublicKey:t};return await this.ec2InstanceConnect.send(new X(n))}}class ke{providers;constructor(e){this.providers=e,t.notNullOrUndefined(e),t.true(e.length>0)}async fetchConfig(e){n.silly("CascadeEnvironmentServiceProvider fetch for %s",e);let t=null;for(let s=0;s<this.providers.length&&!t;s++)try{t=await this.providers[s].fetchConfig(e)}catch(e){n.error("Provider %d failed - trying next : %s",s,e,e),t=null}return t}}class De{envVarName;constructor(e){this.envVarName=e,t.notNullOrUndefined(e)}async fetchConfig(){n.silly("EnvVarEnvironmentServiceProvider fetch for %s",this.envVarName);let e=null;const t=process?process.env:global||{},i=s.trimToNull(t[this.envVarName]);if(i)try{e=JSON.parse(i)}catch(e){throw n.error("Failed to read env - null or invalid JSON : %s : %s",e,i,e),e}else a.throwFormattedErr("Could not find env var with name : %s",this.envVarName);return e}}class Fe{provider;cfg;readPromiseCache=new Map;static defaultEnvironmentServiceConfig(){return{maxRetries:3,backoffMultiplierMS:500}}constructor(e,s=Fe.defaultEnvironmentServiceConfig()){this.provider=e,this.cfg=s,t.notNullOrUndefined(e),t.notNullOrUndefined(s)}async getConfig(e){return n.silly("EnvService:Request to read config %s",e),this.readPromiseCache.has(e)||(n.silly("EnvService: Nothing in cache - adding"),this.readPromiseCache.set(e,this.getConfigUncached(e))),this.readPromiseCache.get(e)}async getConfigUncached(e){let t=1,s=null;for(;!s&&t<this.cfg.maxRetries;){t++,n.silly("Attempting fetch of %s",e);try{s=await this.provider.fetchConfig(e)}catch(s){const a=t*this.cfg.backoffMultiplierMS;n.info("Error attempting to fetch config %s (try %d of %d, waiting %s MS): %s",e,t,this.cfg.maxRetries,a,s,s),await r.wait(a)}}return s||a.throwFormattedErr("Was unable to fetch config %s even after %d retries",e,this.cfg.maxRetries),s}}class Pe{value;constructor(e){this.value=e,t.notNullOrUndefined(e)}static fromRecord(e){const t=new Map;return Object.keys(e).forEach((s=>{t.set(s,e[s])})),new Pe(t)}async fetchConfig(e){n.silly("FixedEnvironmentServiceProvider fetch for %s",e);return this.value.get(e)}}class Me{cfg;ratchet;constructor(e){this.cfg=e,t.notNullOrUndefined(e),t.notNullOrUndefined(e.bucketName),t.notNullOrUndefined(e.region),t.true(!!e.s3Override||!!e.region,"You must set either region or S3Override");const s=e.s3Override||new M({region:e.region});this.ratchet=new be(s,e.bucketName)}async fetchConfig(e){const t=s.trimToEmpty(this.cfg.pathPrefix)+e+s.trimToEmpty(this.cfg.pathSuffix);n.silly("S3EnvironmentServiceProvider:Request to read config from : %s / %s",this.cfg.bucketName,t);const a=new i,r=await this.ratchet.fetchCacheFileAsObject(t);return a.log(),r}}class Ae{region;ssmEncrypted;ssm;constructor(e="us-east-1",s=!0){this.region=e,this.ssmEncrypted=s,t.notNullOrUndefined(e),t.notNullOrUndefined(s),this.ssm=new ee({region:this.region})}async fetchConfig(e){n.silly("SsmEnvironmentServiceProvider fetch for %s",e);const t={Name:e,WithDecryption:this.ssmEncrypted};let i=null,o=null;try{const e=await this.ssm.send(new te(t));o=s.trimToNull(e?.Parameter?.Value)}catch(t){const s=t.code||"";if(-1===s.toLowerCase().indexOf("throttlingexception")){if(-1!==s.toLowerCase().indexOf("parameternotfound")){const t=n.warn("AWS could not find parameter %s - are you using the right AWS key?",e);throw new Error(t)}throw n.error("Final environment fetch error (cannot retry) : %s",t,t),t}n.warn("Throttled while trying to read parameters - waiting 1 second before allowing retry"),await r.wait(1e3)}if(o)try{i=JSON.parse(o)}catch(e){throw n.error("Failed to read env - null or invalid JSON : %s : %s",e,o,e),e}else a.throwFormattedErr("Could not find system parameter with name : %s in this account",e);return i}}class je{tableName;dynamoRatchet;constructor(e,t){this.tableName=e,this.dynamoRatchet=t}async checkCode(e,t,s){const a={code:e,context:t},n=await this.dynamoRatchet.simpleGet(this.tableName,a),i=n&&n.expiresEpochMS>Date.now();return i&&s&&await this.dynamoRatchet.simpleDelete(this.tableName,a),i}async storeCode(e){const t=await this.dynamoRatchet.simplePut(this.tableName,e);return t&&t.ConsumedCapacity.CapacityUnits>0}async createTableIfMissing(e){return null}}class Ue{provider;constructor(e){this.provider=e}static generateCode(e){t.notNullOrUndefined(e,"params"),t.notNullOrUndefined(e.context,"params.context"),t.notNullOrUndefined(e.length,"params.length"),t.notNullOrUndefined(e.alphabet,"params.alphabet");let s="";for(let t=0;t<e.length;t++)s+=e.alphabet.charAt(Math.floor(e.alphabet.length*Math.random()));return{code:s,context:e.context,tags:e.tags,expiresEpochMS:Date.now()+1e3*e.timeToLiveSeconds}}async createNewCode(e){const t=Ue.generateCode(e);return await this.provider.storeCode(t)?t:null}async checkCode(e,t,a){return await this.provider.checkCode(s.trimToEmpty(e),s.trimToEmpty(t),a)}}class Ie{s3CacheRatchet;keyName;constructor(e,s){this.s3CacheRatchet=e,this.keyName=s,t.notNullOrUndefined(e,"s3CacheRatchet"),t.notNullUndefinedOrOnlyWhitespaceString(e.getDefaultBucket(),"s3CacheRatchet.defaultBucket"),t.notNullUndefinedOrOnlyWhitespaceString(s,"keyName")}async fetchFile(){return await this.s3CacheRatchet.fetchCacheFileAsObject(this.keyName)||{data:[],lastModifiedEpochMS:Date.now()}}async updateFile(e){const t={data:e||[],lastModifiedEpochMS:Date.now()};t.data=t.data.filter((e=>e.expiresEpochMS>Date.now())),n.info("Updating code file to %s codes",t.data.length);return await this.s3CacheRatchet.writeObjectToCacheFile(this.keyName,t)}async checkCode(e,t,s){const a=await this.fetchFile(),i=a.data.find((s=>s?.code?.toUpperCase()===e?.toUpperCase()&&s?.context?.toUpperCase()===t?.toUpperCase()));if(i&&(s||i.expiresEpochMS<Date.now())){n.info("Stripping used/expired code from the database");const e=a.data.filter((e=>e!=i));await this.updateFile(e)}return!!i&&i.expiresEpochMS>Date.now()}async storeCode(e){const t=await this.fetchFile();t.data.push(e);return!!await this.updateFile(t.data)}}class Re{constructor(){}static applySetProfileEnvironmentalVariable(e){process.env?s.trimToNull(e)?process.env.AWS_PROFILE=e:a.throwFormattedErr("Cannot set profile to null/empty string"):a.throwFormattedErr("Cannot set profile - not in a node environment - process missing")}}class Be{static isValidCronEvent(e){return e&&"aws.events"==e.source&&e.resources&&e.resources.length>0}static isValidSnsEvent(e){return e&&e.Records&&e.Records.length>0&&"aws:sns"==e.Records[0].EventSource}static isValidDynamoDBEvent(e){return e&&e.Records&&e.Records.length>0&&"aws:dynamodb"==e.Records[0].eventSource}static isValidS3Event(e){return e&&e.Records&&e.Records.length>0&&"aws:s3"==e.Records[0].eventSource}static isValidApiGatewayV2WithRequestContextEvent(e){return e&&e.rawPath&&e.requestContext&&e.routeKey}static isValidApiGatewayEvent(e){return e&&e.httpMethod&&e.path&&e.requestContext}static isValidApiGatewayAuthorizerEvent(e){return e&&e.authorizationToken&&e.methodArn}static isSingleCronEvent(e){return this.isValidCronEvent(e)&&Be.isSingleEntryEvent(e,"resources")}static isSingleSnsEvent(e){return this.isValidSnsEvent(e)&&Be.isSingleEntryEvent(e)}static isSingleDynamoDBEvent(e){return this.isValidDynamoDBEvent(e)&&Be.isSingleEntryEvent(e)}static isSingleS3Event(e){return this.isValidS3Event(e)&&Be.isSingleEntryEvent(e)}static isSingleEntryEvent(e,t="Records"){return e&&e[t]&&e[t]instanceof Array&&1===e[t].length}}class Ke{static isValidCronEvent(e){return Be.isValidCronEvent(e)}static isValidSnsEvent(e){return Be.isValidSnsEvent(e)}static isValidDynamoDBEvent(e){return Be.isValidDynamoDBEvent(e)}static isValidS3Event(e){return Be.isValidS3Event(e)}static isValidApiGatewayV2WithRequestContextEvent(e){return Be.isValidApiGatewayV2WithRequestContextEvent(e)}static isValidApiGatewayEvent(e){return Be.isValidApiGatewayEvent(e)}static isValidApiGatewayAuthorizerEvent(e){return Be.isValidApiGatewayAuthorizerEvent(e)}}class Le{route53;hostedZoneId;constructor(e,t){if(this.route53=e,this.hostedZoneId=t,!this.route53)throw"route53 may not be null"}get route53Client(){return this.route53}async changeCnameRecordTarget(e,t,s=this.hostedZoneId,a=600){n.info("Updating %s to point to %s",e,t);try{const i={ChangeBatch:{Changes:[{Action:"UPSERT",ResourceRecordSet:{Name:e,ResourceRecords:[{Value:t}],TTL:a,Type:"CNAME"}}]},HostedZoneId:s},r=await this.route53.send(new se(i));n.debug("Updated domain result: %j",r);const o={Id:r.ChangeInfo.Id},c=await ae({client:this.route53,maxWaitTime:300},o);if(n.debug("Wait responsed: %j",c),c.state===ne.SUCCESS)return n.info("Updated %s to point to %s",e,s),!0}catch(s){n.warn("Error update CName for %s with value %s: %j",e,t,s)}return n.info("Cannot update %s to point to %s",e,t),!1}}class Ve{dynamo;tableName;constructor(e,s){this.dynamo=e,this.tableName=s,t.notNullOrUndefined(this.dynamo),t.notNullOrUndefined(this.tableName)}async readParameter(e,t){n.silly("Reading %s / %s from underlying db",e,t);const s={groupId:e,paramKey:t};return await this.dynamo.simpleGet(this.tableName,s)}async readAllParametersForGroup(e){const t={TableName:this.tableName,KeyConditionExpression:"groupId = :groupId",ExpressionAttributeValues:{":groupId":e}};return await this.dynamo.fullyExecuteQuery(t)}async writeParameter(e){return!!await this.dynamo.simplePut(this.tableName,e)}}class Ge{wrapped;options={globalTTL:1,separator:".",prefix:"RuntimeEnv-",suffix:""};constructor(e,s){this.wrapped=e,t.notNullOrUndefined(this.wrapped,"wrapped"),t.notNullOrUndefined(global?.process?.env,'"process" not found - this only runs in Node, not the browser'),s&&(this.options=s),t.notNullOrUndefined(this.options.globalTTL,"this.options.globalTTL"),t.notNullOrUndefined(this.options.separator,"this.options.separator"),t.true(this.options.globalTTL>0,"this.options.globalTTL must be larger than 0")}generateName(e,t){return s.trimToEmpty(this.options.prefix)+e+s.trimToEmpty(this.options.separator)+t+s.trimToEmpty(this.options.suffix)}async readParameter(e,t){const n=s.trimToNull(process.env[this.generateName(e,t)]);n&&!s.canParseAsJson(n)&&a.throwFormattedErr("Cannot parse ENV override (%s / %s) as JSON - did you forget the quotes on a string?",e,t);return n?{groupId:e,paramKey:t,paramValue:n,ttlSeconds:this.options.globalTTL}:await this.wrapped.readParameter(e,t)}async readAllParametersForGroup(e){return this.wrapped.readAllParametersForGroup(e)}async writeParameter(e){return this.wrapped.writeParameter(e)}}class _e{data;constructor(e=Promise.resolve({})){this.data=e}async readParameter(e,t){n.silly("Reading %s / %s from underlying db",e,t);return(await this.data)[e+"::"+t]}async readAllParametersForGroup(e){const t=await this.data,s=[];return Object.keys(t).forEach((a=>{a.startsWith(e)&&s.push(t[a])})),s}async writeParameter(e){return(await this.data)[e.groupId+"::"+e.paramKey]=e,!0}}class We{provider;cache=new Map;constructor(e){this.provider=e,t.notNullOrUndefined(this.provider)}async fetchParameter(e,t,s=null,a=!1){n.debug("Reading parameter %s / %s / Force : %s",e,t,a);const i=this.cache.get(We.toCacheStoreKey(e,t));let r=null;const o=(new Date).getTime();if(!a&&i){const s=i.ttlSeconds?o-1e3*i.ttlSeconds:0;i.storedEpochMS>s&&(n.silly("Fetched %s / %s from cache",e,t),r=JSON.parse(i.paramValue))}if(!r){const s=await this.readUnderlyingEntry(e,t);s&&(this.addToCache(s),r=JSON.parse(s.paramValue))}return r=r||s,r}async fetchAllParametersForGroup(e){const t=await this.readUnderlyingEntries(e),s=new Map;return t.forEach((e=>{s.set(e.paramKey,JSON.parse(e.paramValue)),this.addToCache(e)})),s}async readUnderlyingEntry(e,t){return this.provider.readParameter(e,t)}async readUnderlyingEntries(e){return this.provider.readAllParametersForGroup(e)}async storeParameter(e,t,s,a){const n={groupId:e,paramKey:t,paramValue:JSON.stringify(s),ttlSeconds:a};return await this.provider.writeParameter(n),this.provider.readParameter(e,t)}static toCacheStoreKey(e,t){return e+":::"+t}addToCache(e){if(e){const t=(new Date).getTime(),s=Object.assign({storedEpochMS:t},e);this.cache.set(We.toCacheStoreKey(e.groupId,e.paramKey),s)}}clearCache(){n.debug("Clearing runtime parameter cache"),this.cache=new Map}}class qe{config;constructor(e){t.notNullOrUndefined(e,"config"),this.config=e,this.config.maxNumThreads||(this.config.maxNumThreads=15),this.config.maxRetries||(this.config.maxRetries=5)}updateSrcPrefix(e){this.config.srcPrefix=e}updateDstPrefix(e){this.config.dstPrefix=e}async copyObject(e,t,s=!1){const a=e.replace(this.config.srcPrefix,this.config.dstPrefix);let i=!1,r=0;for(;!i&&r<this.config.maxRetries;){n.debug(`${r>0?`Retry ${r} `:""}${s?"Express":"Slow"} copying\n [${[this.config.srcBucket,e].join("/")} ---\x3e ${[this.config.dstBucket,a].join("/")}]`);try{if(s){const t={CopySource:encodeURIComponent([this.config.srcBucket,e].join("/")),Bucket:this.config.dstBucket,Key:a,MetadataDirective:"COPY"};await this.config.dstS3.send(new F(t))}else{const s=await this.config.srcS3.send(new v({Bucket:this.config.srcBucket,Key:e})),i={Bucket:this.config.dstBucket,Key:a,Body:s.Body,ContentLength:t},r=new j({client:this.config.dstS3,params:i,tags:[],queueSize:4,partSize:5242880,leavePartsOnError:!1});r.on("httpUploadProgress",(e=>{n.info("Uploading : %s",e)})),await r.done()}i=!0}catch(t){n.warn(`Can't ${s?"express":"slow"} copy\n [${[this.config.srcBucket,e].join("/")} ---\x3e ${[this.config.dstBucket,a].join("/")}]: %j`,t),r++}}n.debug(`Finished ${s?"express":"slow"} copying\n [${[this.config.srcBucket,e].join("/")} ---\x3e ${[this.config.dstBucket,a].join("/")}]`)}async listObjects(e,t,s){n.info(`Scanning bucket [${[e,t].join("/")}]`);const a={Bucket:e,Prefix:t};let i=!0;const r={};for(;i;){const e=await s.send(new A(a));i=e.IsTruncated,e.Contents.forEach((e=>{r[e.Key]={Key:e.Key,LastModified:e.LastModified,ETag:e.ETag,Size:e.Size}})),i&&(a.ContinuationToken=e.NextContinuationToken)}return r}async startSyncing(){n.info(`Syncing [${this.config.srcBucket}/${this.config.srcPrefix}\n ---\x3e ${this.config.dstBucket}/${this.config.dstPrefix}]`);const e=async e=>{await this.copyObject(e.Key,e.Size)};let t=await this.compareSrcAndDst();return(t.needCopy.length>0||t.diff.length>0)&&(await r.runBoundedParallelSingleParam(e,t.needCopy,this,this.config.maxNumThreads),await r.runBoundedParallelSingleParam(e,t.diff,this,this.config.maxNumThreads),n.info("Verifying..."),t=await this.compareSrcAndDst(),n.debug("Compare result %j",t)),0===t.needCopy.length&&0===t.diff.length}async compareSrcAndDst(){const e=this.listObjects(this.config.srcBucket,this.config.srcPrefix,this.config.srcS3),t=this.listObjects(this.config.dstBucket,this.config.dstPrefix,this.config.dstS3),s=await e,a=await t,n={needCopy:[],existed:[],diff:[]};return await r.runBoundedParallelSingleParam((e=>{const t=s[e],i=e.replace(this.config.srcPrefix,this.config.dstPrefix),r=a.hasOwnProperty(i)?a[i]:void 0;r?t.Size===r.Size&&t.LastModified.getTime()<=r.LastModified.getTime()?n.existed.push(t):n.diff.push(t):n.needCopy.push(t)}),Object.keys(s),this,this.config.maxNumThreads),n}}class ze{static checkS3UrlForValidity(e){let t=!1;return e&&(t=e.startsWith("s3://")&&e.trim().length>5),t}static extractBucketFromURL(e){t.true(ze.checkS3UrlForValidity(e),"invalid s3 url");const s=e.indexOf("/",5);return s>0?e.substring(5,s):e.substring(5)}static extractKeyFromURL(e){t.true(ze.checkS3UrlForValidity(e),"invalid s3 url");const s=e.indexOf("/",5);return s>0?e.substring(s+1):null}}class Je{ses;config;static EMAIL=new RegExp(".+@.+\\.[a-z]+");constructor(e,s={}){if(this.ses=e,this.config=s,t.notNullOrUndefined(this.ses),s.archive&&!s.archive.getDefaultBucket())throw new Error("If archive specified, must set a default bucket")}get sESClient(){return this.ses}async fillEmailBody(e,s,n,i=null,r=null,o=null){return t.notNullOrUndefined(n),this.config.templateRenderer||a.throwFormattedErr("Cannot use fill body if template renderer not set"),e.htmlMessage=await this.config.templateRenderer.renderTemplate(n,s,r,o),e.txtMessage=i?await this.config.templateRenderer.renderTemplate(i,s):null,e}async fillEmailBodyAndSend(e,t,s,a=null,n=null,i=null){const r=await this.fillEmailBody(e,t,s,a,n,i);return await this.sendEmail(r)}filterEmailsToValid(e){return(e||[]).filter((e=>{if(this.config.allowedDestinationEmails&&0!=this.config.allowedDestinationEmails.length){return!!this.config.allowedDestinationEmails.find((t=>t.test(e)))}return!0}))}async archiveEmailIfConfigured(t){let a=!1;if(t&&this.config.archive&&!t.doNotArchive){n.debug("Archiving outbound email to : %j",t.destinationAddresses);let i=s.trimToEmpty(this.config.archivePrefix);i.endsWith("/")||(i+="/");const r=e.utc();i+="year="+r.toFormat("yyyy")+"/month="+r.toFormat("MM")+"/day="+r.toFormat("dd")+"/hour="+r.toFormat("HH")+"/"+r.toFormat("mm_ss__SSS"),i+=".json";try{await this.config.archive.writeObjectToCacheFile(i,t),a=!0}catch(e){n.warn("Failed to archive email %s %j : %s",i,t,e)}}return a}applyLimitsToBodySizesIfAnyInPlace(e){if(this.config.maxMessageBodySizeInBytes){const t=s.trimToEmpty(e.txtMessage).length+s.trimToEmpty(e.htmlMessage).length;if(t>this.config.maxMessageBodySizeInBytes){if(n.warn("Max message size is %d but size is %d - converting",this.config.maxMessageBodySizeInBytes,t),e.attachments=e.attachments||[],s.trimToNull(e.txtMessage)){const t={filename:"original-txt-body.txt",contentType:"text/plain",base64Data:d.generateBase64VersionOfString(e.txtMessage)};e.attachments.push(t)}if(s.trimToNull(e.htmlMessage)){const t={filename:"original-html-body.html",contentType:"text/html",base64Data:d.generateBase64VersionOfString(e.htmlMessage)};e.attachments.push(t)}e.htmlMessage=null,e.txtMessage="The message was too large and was converted to attachment(s). Please see attached files for content"}}}applyLimitsToAttachmentSizesIfAnyInPlace(e){if(this.config.maxAttachmentSizeInBase64Bytes){const t=[];e.attachments&&e.attachments.forEach((e=>{e.base64Data&&e.base64Data.length<this.config.maxAttachmentSizeInBase64Bytes?t.push(e):(n.warn("Removing too-large attachment : %s : %s : %d",e.filename,e.contentType,e.base64Data.length),t.push({filename:"attachment-removed-notice-"+s.createRandomHexString(4)+".txt",contentType:"text/plain",base64Data:d.generateBase64VersionOfString("Attachment "+e.filename+" of type "+e.contentType+" was removed since it was "+e.base64Data.length+" bytes but max allowed is "+this.config.maxAttachmentSizeInBase64Bytes)}))})),e.attachments=t}}async sendEmail(e){t.notNullOrUndefined(e,"RTS must be defined"),t.notNullOrUndefined(e.destinationAddresses,"Destination addresses must be defined");let a=null,i=this.filterEmailsToValid(e.destinationAddresses);const r=e.doNotAutoBcc?[]:this.config.autoBccAddresses||[],o=(e.bccAddresses||[]).concat(r);0===i.length&&o.length>0&&(n.debug("Destination emails filtered to none but BCC defined, copying BCC"),i=o);const c=Object.assign({},e);if(c.srcDestinationAddresses=e.destinationAddresses,c.srcBccAddresses=e.bccAddresses,c.destinationAddresses=i,c.bccAddresses=o,this.applyLimitsToBodySizesIfAnyInPlace(c),this.applyLimitsToAttachmentSizesIfAnyInPlace(c),await this.archiveEmailIfConfigured(c),0===c.destinationAddresses.length)n.info("After cleaning email lists, no destination addresses left - not sending email");else{const e="To: "+c.destinationAddresses.join(", ")+"\n",t=c.bccAddresses&&c.bccAddresses.length>0?"Bcc: "+c.bccAddresses.join(", ")+"\n":"";try{const n=c.fromAddress||this.config.defaultSendingAddress,i="NextPart",r="AltPart";let o="From: "+n+"\n";o+=e,o+=t,o+="Subject: "+c.subject+"\n",o+="MIME-Version: 1.0\n",o+='Content-Type: multipart/mixed; boundary="'+i+'"\n',o+="\n\n--"+i+"\n",o+='Content-Type: multipart/alternative; boundary="'+r+'"\n',s.trimToNull(c.htmlMessage)&&(o+="\n\n--"+r+"\n",o+='Content-Type: text/html; charset="UTF-8"\n\n',o+=c.htmlMessage),s.trimToNull(c.txtMessage)&&(o+="\n\n--"+r+"\n",o+="Content-Type: text/plain\n\n",o+=c.txtMessage),o+="\n\n--"+r+"--\n",c.attachments&&c.attachments.forEach((e=>{o+="\n\n--"+i+"\n",o+="Content-Type: "+e.contentType+'; name="'+e.filename+'"\n',o+="Content-Transfer-Encoding: base64\n",o+="Content-Disposition: attachment\n\n",o+=e.base64Data.replace(/([^\0]{76})/g,"$1\n")+"\n\n"})),o+="\n\n--"+i+"--\n";const l={RawMessage:{Data:(new TextEncoder).encode(o)}};a=await this.ses.send(new ie(l))}catch(e){n.error("Error while processing email: %s",e,e)}}return a}static validEmail(e){return null!==e&&Je.EMAIL.test(e)}}class Qe{sns;topicArn;constructor(e=new re({region:"us-east-1"}),s){this.sns=e,this.topicArn=s,t.notNullOrUndefined(this.sns,"sns"),t.notNullOrUndefined(this.topicArn,"topicArn")}get snsClient(){return this.sns}async sendMessage(e,t=!1){let s=null;try{const t=e||"NO-MESSAGE-PROVIDED",a="string"==typeof t?t:JSON.stringify(t),i={TopicArn:this.topicArn,Message:a};n.debug("Sending via SNS : %j",i),s=await this.sns.send(new oe(i))}catch(s){if(!t)throw s;n.error("Failed to fire SNS notification : %j : %s",e,s)}return s}async conditionallySendMessage(e,t,s=!1){let a=null;return t?a=await this.sendMessage(e,s):n.info("Not sending message, condition was false : %j",e),a}}class $e{ratchet;tableName;constructor(e,a){this.ratchet=e,this.tableName=a,t.notNullOrUndefined(e,"ratchet"),t.notNullOrUndefined(s.trimToNull(this.tableName),"tableName")}async acquireLock(e,t=30){let s=!1;if(e&&t){const a=Math.floor((new Date).getTime()/1e3),i={Item:{lockingKey:e,timestamp:a,expires:a+t},ReturnConsumedCapacity:"TOTAL",TableName:this.tableName,ConditionExpression:"attribute_not_exists(lockingKey)"};try{await this.ratchet.getDDB().send(new J(i));s=!0}catch(t){String(t).indexOf("ConditionalCheckFailedException")>-1&&n.silly("Unable to acquire lock on %s",e)}}return s}async releaseLock(e){if(s.trimToNull(e))try{const t=await this.ratchet.simpleDelete(this.tableName,{lockingKey:e});n.silly("Released lock %s : %s",e,t)}catch(t){n.warn("Failed to release lock key : %s : %s",e,t,t)}}async clearExpiredSyncLocks(){const e=Math.floor((new Date).getTime()/1e3),t={TableName:this.tableName,FilterExpression:"expires < :now",ExpressionAttributeValues:{":now":e}},s=(await this.ratchet.fullyExecuteScan(t)).map((e=>({lockingKey:e.lockingKey})));return await this.ratchet.deleteAllInBatches(this.tableName,s,25)}}class He{_locks=new Map;constructor(){}async acquireLock(e,t=30){let a=!1;if(s.trimToNull(e)){const s=Date.now(),n=this._locks.get(e);(!n||n<s)&&(this._locks.set(e,s+1e3*t),a=!0)}return a}async releaseLock(e){s.trimToNull(e)&&this._locks.delete(e)}async clearExpiredSyncLocks(){const e=[],t=Date.now();return this._locks.forEach(((s,a)=>{s<t&&e.push(a)})),e.forEach((e=>{this._locks.delete(e)})),e.length}}export{ce as AwsBatchBackgroundProcessor,le as AwsBatchRatchet,Re as AwsCredentialsRatchet,ke as CascadeEnvironmentServiceProvider,fe as CloudWatchLogGroupRatchet,ge as CloudWatchLogsRatchet,ye as CloudWatchMetricsRatchet,pe as CloudWatchMetricsUnit,Ee as Daemon,we as DaemonUtil,de as DynamoDbStorageProvider,$e as DynamoDbSyncLock,je as DynamoExpiringCodeProvider,Ne as DynamoRatchet,Ve as DynamoRuntimeParameterProvider,xe as DynamoTableRatchet,Oe as Ec2Ratchet,De as EnvVarEnvironmentServiceProvider,Fe as EnvironmentService,Ue as ExpiringCodeRatchet,Pe as FixedEnvironmentServiceProvider,Ge as GlobalVariableOverrideRuntimeParameterProvider,ve as HashSpreader,Be as LambdaEventDetector,Ke as LambdaEventTypeGuards,Je as Mailer,_e as MemoryRuntimeParameterProvider,He as MemorySyncLock,Te as PrototypeDao,he as RatchetAwsInfo,Le as Route53Ratchet,We as RuntimeParameterRatchet,be as S3CacheRatchet,Me as S3EnvironmentServiceProvider,Ie as S3ExpiringCodeProvider,qe as S3LocationSyncRatchet,Se as S3PrototypeDaoProvider,ze as S3Ratchet,Ce as S3SimpleDao,ue as S3StorageProvider,me as SimpleCache,Qe as SnsRatchet,Ae as SsmEnvironmentServiceProvider};
2
2
  //# sourceMappingURL=index.mjs.map
package/lib/index.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/batch/aws-batch-background-processor.ts","../src/batch/aws-batch-ratchet.ts","../src/build/ratchet-aws-info.ts","../src/cache/dynamo-db-storage-provider.ts","../src/cache/s3-storage-provider.ts","../src/cache/simple-cache.ts","../src/cloudwatch/cloud-watch-log-group-ratchet.ts","../src/cloudwatch/cloud-watch-logs-ratchet.ts","../src/model/cloud-watch-metrics-unit.ts","../src/cloudwatch/cloud-watch-metrics-ratchet.ts","../src/daemon/daemon-util.ts","../src/s3/s3-cache-ratchet.ts","../src/daemon/daemon.ts","../src/dao/prototype-dao.ts","../src/dao/s3-prototype-dao-provider.ts","../src/dao/s3-simple-dao.ts","../src/dynamodb/dynamo-ratchet.ts","../src/dynamodb/dynamo-table-ratchet.ts","../src/dynamodb/hash-spreader.ts","../src/ec2/ec2-ratchet.ts","../src/environment/cascade-environment-service-provider.ts","../src/environment/env-var-environment-service-provider.ts","../src/environment/environment-service.ts","../src/environment/fixed-environment-service-provider.ts","../src/environment/s3-environment-service-provider.ts","../src/environment/ssm-environment-service-provider.ts","../src/expiring-code/dynamo-expiring-code-provider.ts","../src/expiring-code/expiring-code-ratchet.ts","../src/expiring-code/s3-expiring-code-provider.ts","../src/iam/aws-credentials-ratchet.ts","../src/lambda/lambda-event-detector.ts","../src/lambda/lambda-event-type-guards.ts","../src/route53/route-53-ratchet.ts","../src/runtime-parameter/dynamo-runtime-parameter-provider.ts","../src/runtime-parameter/global-variable-override-runtime-parameter-provider.ts","../src/runtime-parameter/memory-runtime-parameter-provider.ts","../src/runtime-parameter/runtime-parameter-ratchet.ts","../src/s3/s3-cache-to-local-disk-ratchet.ts","../src/s3/s3-location-sync-ratchet.ts","../src/s3/s3-ratchet.ts","../src/ses/mailer.ts","../src/ses/remote-handlebars-template-renderer.ts","../src/sns/sns-ratchet.ts","../src/sync-lock/dynamo-db-sync-lock.ts","../src/sync-lock/memory-sync-lock.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["AwsBatchBackgroundProcessor","batchRatchet","validTaskNames","constructor","this","RequireRatchet","notNullOrUndefined","batchClient","defaultJobDefinition","defaultQueueName","async","taskName","data","meta","length","StringRatchet","trimToNull","includes","ErrorRatchet","throwFormattedErr","Logger","info","rval","jobName","DateTime","utc","toFormat","options","jobDefinition","jobQueue","parameters","taskData","JSON","stringify","taskMetadata","scheduleJob","jobId","err","error","AwsBatchRatchet","_batchClient","_defaultQueueName","_defaultJobDefinition","send","SubmitJobCommand","jobStatus","queueName","listJobs","request","nextToken","tmp","ListJobsCommand","concat","jobSummaryList","RatchetAwsInfo","static","version","hash","branch","tag","timeBuiltISO","notes","DynamoDbStorageProvider","dynamo","opts","tableName","hashKeyName","true","useRangeKeys","rangeKeyName","hashKeyValue","createKeyObject","cacheKey","keys","cleanDynamoFieldsFromObjectInPlace","dynamoExpiresColumnName","extractKeysFromObject","dKey","simpleGet","value","toSave","Object","assign","expiresEpochMS","Math","floor","simplePut","simpleDelete","allKeys","readAll","map","a","deleteAllInBatches","qry","TableName","KeyConditionExpression","ExpressionAttributeNames","ExpressionAttributeValues","fullyExecuteQuery","scan","fullyExecuteScan","forEach","r","S3StorageProvider","s3CacheRatchet","prefix","getDefaultBucket","keyToPath","trimToEmpty","endsWith","fetchCacheFileAsObject","writeObjectToCacheFile","removeCacheFile","directChildrenOfPrefix","Promise","all","k","removeFromCache","readFromCache","SimpleCache","provider","defaultTimeToLiveMS","createDefaultReadOptions","maxStalenessMS","timeToLiveMS","cacheNullValues","producer","silly","now","Date","getTime","debug","createdEpochMS","generated","storeInCache","wrapper","fetchWrapper","returnOldValue","clearCache","CloudWatchLogGroupRatchet","logGroup","awsCWLogs","CloudWatchLogsClient","region","cloudWatchLogsClient","startTimestamp","endTimestamp","params","logGroupName","orderBy","temp","DescribeLogStreamsCommand","logStreams","s","lastEventTimestamp","firstEventTimestamp","push","readLogStreams","logStreamName","filter","sortEvents","maxEvents","sw","StopWatch","endTime","startTime","filterPattern","dump","FilterLogEventsCommand","events","sort","b","timestamp","message","localeCompare","log","CloudWatchLogsRatchet","cwLogs","cloudwatchLogs","maxToRemove","oldestEventEpochMS","streamSearchParams","oldestEventTester","totalStreams","removedStreams","failedRemovedStreams","waitPerDescribe","streams","i","st","oldWait","min","waitPer","delParams","type","storedBytes","removed","retry","MAX_DELETE_RETRIES","DeleteLogStreamCommand","PromiseRatchet","wait","warn","stream","findStreamWithOldestEventInGroup","logGroupNamePrefix","res","DescribeLogGroupsCommand","logGroups","groups","req","DeleteLogGroupCommand","findLogGroups","removeLogGroups","sqr","resp","StartQueryCommand","delayMS","status","GetQueryResultsCommand","queryId","StopQueryCommand","CloudWatchMetricsUnit","CloudWatchMetricsRatchet","cw","cloudWatch","CloudWatchClient","apiVersion","cloudWatchClient","namespace","metric","dims","unit","None","timestampDate","highResolution","cwDims","d","Name","key","Value","storageResolution","metricData","Namespace","MetricData","MetricName","Dimensions","Unit","String","Timestamp","StorageResolution","result","PutMetricDataCommand","minuteUTC","query","Error","cnt","dynamoRatchet","fullyExecuteQueryCount","fullyExecuteScanCount","parseDateString","split","join","parseDate","fromISO","toJSDate","metricRes","writeSingleMetric","Count","count","DaemonUtil","Buffer","from","cache","id","s3Key","newState","title","lastUpdatedEpochMS","lastUpdatedMessage","targetFileName","startedEpochMS","completedEpochMS","link","contentType","writeState","DEFAULT_CONTENT","contents","s3meta","DAEMON_METADATA_KEY","Bucket","Key","ContentType","Metadata","Body","Blob","ContentDisposition","written","getS3Client","PutObjectCommand","stat","inStat","updateMessage","upload","Upload","client","tags","queueSize","partSize","leavePartsOnError","on","progress","done","newMessage","s3Cache","path","fetchMetaForCacheFile","metaString","parse","preSignedDownloadUrlForCacheFile","S3CacheRatchet","s3","defaultBucket","s3Client","input","seconds","CacheControl","bucket","bucketVal","GetObjectCommand","NoSuchKey","fetchCacheFileAsS3GetObjectCommandOutput","transformToWebStream","out","transformToByteArray","transformToString","fetchCacheFileAsString","DeleteObjectCommand","dataObject","template","json","writeStringToCacheFile","dataString","StreamRatchet","stringToWebReadableStream","writeStreamToCacheFile","srcPrefix","targetPrefix","targetRatchet","recurseSubFolders","sourceFiles","targetFiles","sourceFile","dumpExpected","subs","synchronize","shouldCopy","srcMeta","targetMeta","ETag","srcStream","fetchCacheFileAsReadableStream","undefined","HeadObjectCommand","LastModified","srcKey","dstKey","srcBucket","dstBucket","CopySource","MetadataDirective","CopyObjectCommand","copyFile","expirationSeconds","getCommand","getSignedUrl","expiresIn","expandFiles","maxToReturn","returnValue","Prefix","Delimiter","response","ListObjectsCommand","prefixLength","cp","substring","expanded","name","size","Marker","NextMarker","idx","next","ContinuationToken","NextContinuationToken","CommonPrefixes","p","explicitBucket","Daemon","_defaultGroup","jwtRatchet","DEFAULT_DEFAULT_GROUP","defaultGroup","token","daemonKey","createTokenString","toString","pathToKey","generatePath","group","generatePrefix","createType4Guid","start","olderThanSeconds","original","list","test","proms","listKeys","itemPath","publicToken","parsed","decodeToken","abort","finalize","PrototypeDao","cfg","guidCreateFunction","guidFieldName","createdEpochMSFieldName","updatedEpochMSFieldName","createdUtcTimestampFieldName","updatedUtcTimestampFieldName","defaultDaoConfig","loadDatabase","items","storeDatabase","lastModifiedEpochMS","guids","old","fetchAll","t","toISO","guid","find","fieldDotPath","fieldValue","searchByFieldMap","matchAll","val","MapRatchet","findValueDotPath","S3PrototypeDaoProvider","keyName","notNullUndefinedOrOnlyWhitespaceString","inDb","S3SimpleDao","buildPathPrefix","buildFullPath","fullPath","fileExists","item","fetch","promises","listItems","DynamoRatchet","awsDDB","dynamoDBDocumentClient","getDDB","Limit","throughputSafeScanOrQuery","o","scanPromise","Items","ScanCommand","QueryCommand","proc","maxTries","inCurrentTry","currentTry","objectIsErrorWithProvisionedThroughputExceededExceptionCode","pow","Select","scannedCount","pages","qryResults","myLimit","queryPromise","LastEvaluatedKey","end","DurationRatchet","formatMsDuration","softLimit","fullyExecuteProcessOverQuery","v","blankPages","fullyExecuteProcessOverScan","elements","batchSize","batchItems","el","PutRequest","Item","ReturnConsumedCapacity","curBatch","slice","RequestItems","ReturnItemCollectionMetrics","tryCount","batchResults","BatchWriteCommand","UnprocessedItems","backoff","keyNames","keyDataSrc","keysOnly","stripAllToKeysOnly","fetchAllInBatches","inKeys","batches","remain","tableEntry","Keys","nextBatch","BatchGetCommand","Responses","UnprocessedKeys","DeleteRequest","autoRetryCount","PutCommand","fieldName","ConditionExpression","wrote","adjustFunction","maxAdjusts","pio","attrNames","attrValues","condExp","adjustCount","newValue","holder","GetCommand","counterAttributeName","deleteOnZero","UpdateExpression","ReturnValues","updateFailed","UpdateItemCommand","Attributes","DeleteCommand","counterFieldName","increment","update","ui","NumberRatchet","safeNumber","ob","rem","cleanObject","keysNames","stripToKeysOnly","DynamoTableRatchet","waitForDelete","DeleteTableCommand","waitForTableDelete","waitForReady","replaceIfExists","tableExists","deleteTable","CreateTableCommand","waitForTableReady","safeDescribeTable","Table","TableStatus","DescribeTableCommand","HashSpreader","spots","buckets","separator","alphabet","_allSlots","allUnique","stringContainsOnlyAlphanumeric","permutations","allPerms","allPermutationsOfLength","allBuckets","randomBucket","random","allSpreadValues","allSpreadValuesForArray","inputs","addSpreader","extractBucket","loc","charAt","removeBucket","Ec2Ratchet","availabilityZone","ec2","ec2InstanceConnect","EC2Client","EC2InstanceConnectClient","eC2Client","eC2InstanceConnectClient","instanceId","maxWaitForShutdownMS","stopParams","InstanceIds","DryRun","StopInstancesCommand","describeInstance","State","Code","maxWaitForStartupMS","startParams","StartInstancesCommand","PublicIpAddress","listAllInstances","instanceIds","NextToken","DescribeInstancesCommand","Reservations","Instances","publicKeyString","instanceOsUser","userName","InstanceId","AvailabilityZone","InstanceOSUser","SSHPublicKey","SendSSHPublicKeyCommand","CascadeEnvironmentServiceProvider","providers","fetchConfig","EnvVarEnvironmentServiceProvider","envVarName","src","process","env","global","toParse","EnvironmentService","readPromiseCache","Map","maxRetries","backoffMultiplierMS","defaultEnvironmentServiceConfig","has","set","getConfigUncached","get","waitMS","FixedEnvironmentServiceProvider","record","m","S3EnvironmentServiceProvider","ratchet","bucketName","s3Override","S3Client","readPath","pathPrefix","pathSuffix","SsmEnvironmentServiceProvider","ssmEncrypted","ssm","SSMClient","WithDecryption","GetParameterCommand","Parameter","errCode","toLowerCase","indexOf","errMsg","DynamoExpiringCodeProvider","code","context","deleteOnMatch","expCode","output","ConsumedCapacity","CapacityUnits","dtr","ExpiringCodeRatchet","timeToLiveSeconds","generateCode","storeCode","checkCode","S3ExpiringCodeProvider","vals","fetchFile","toUpperCase","newData","updateFile","AwsCredentialsRatchet","newProfile","LambdaEventDetector","event","source","resources","Records","EventSource","eventSource","rawPath","requestContext","routeKey","httpMethod","authorizationToken","methodArn","isValidCronEvent","isSingleEntryEvent","isValidSnsEvent","isValidDynamoDBEvent","isValidS3Event","entryName","Array","LambdaEventTypeGuards","isValidApiGatewayV2WithRequestContextEvent","isValidApiGatewayEvent","isValidApiGatewayAuthorizerEvent","Route53Ratchet","route53","hostedZoneId","route53Client","domainName","target","ttlSeconds","ChangeBatch","Changes","Action","ResourceRecordSet","ResourceRecords","TTL","Type","HostedZoneId","ChangeResourceRecordSetsCommand","waitParams","Id","ChangeInfo","waitResult","waitUntilResourceRecordSetsChanged","maxWaitTime","state","WaiterState","SUCCESS","DynamoRuntimeParameterProvider","groupId","paramKey","toStore","GlobalVariableOverrideRuntimeParameterProvider","wrapped","globalTTL","suffix","generateName","asString","canParseAsJson","paramValue","readParameter","readAllParametersForGroup","writeParameter","MemoryRuntimeParameterProvider","resolve","startsWith","RuntimeParameterRatchet","defaultValue","forceFreshRead","cached","toCacheStoreKey","oldest","storedEpochMS","readUnderlyingEntry","addToCache","readUnderlyingEntries","S3CacheToLocalDiskRatchet","tmpFolder","cacheTimeoutSeconds","currentlyLoading","DEFAULT_CACHE_TIMEOUT_SEC","fs","existsSync","buf","getFileBuffer","keyToLocalCachePath","cachedHash","generateCacheHash","removeCacheFileForKey","localCachePath","unlinkSync","getCacheFileAsBuffer","prom","updateLocalCacheFile","delete","fetchCacheFileAsBuffer","writeFileSync","getCacheFileAsString","filePath","stats","statSync","ctimeMs","readFileSync","hashVal","crypto","createHash","digest","S3LocationSyncRatchet","config","maxNumThreads","updateSrcPrefix","updateDstPrefix","dstPrefix","express","replace","completedCopying","retries","encodeURIComponent","dstS3","fetched","srcS3","ContentLength","more","ListObjectsV2Command","IsTruncated","_","each","Contents","obj","Size","copyObject","cmpResult","compareSrcAndDst","needCopy","diff","runBoundedParallelSingleParam","getSrc","listObjects","getDst","srcObjs","dstObjs","existed","sObj","dObj","hasOwnProperty","S3Ratchet","trim","checkS3UrlForValidity","idx1","Mailer","ses","RegExp","archive","sESClient","rts","htmlTemplateName","txtTemplateName","layoutName","partialNames","templateRenderer","htmlMessage","renderTemplate","txtMessage","newVal","fillEmailBody","sendEmail","filterEmailsToValid","emails","e","allowedDestinationEmails","doNotArchive","destinationAddresses","targetPath","archivePrefix","applyLimitsToBodySizesIfAnyInPlace","maxMessageBodySizeInBytes","totalSize","attachments","txtAttach","filename","base64Data","Base64Ratchet","generateBase64VersionOfString","htmlAttach","applyLimitsToAttachmentSizesIfAnyInPlace","maxAttachmentSizeInBase64Bytes","filtered","createRandomHexString","inRts","toAddresses","autoBcc","doNotAutoBcc","autoBccAddresses","bccAddresses","srcDestinationAddresses","srcBccAddresses","archiveEmailIfConfigured","toLine","bccLine","fromAddress","defaultSendingAddress","boundary","altBoundary","rawMail","subject","RawMessage","Data","TextEncoder","encode","SendRawEmailCommand","email","EMAIL","RemoteHandlebarsTemplateRenderer","maxCacheTemplates","templateName","renderRemoteTemplate","inContext","fetchTemplate","layoutText","fetchTemplateText","layouts","register","handlebars","registerPartial","templateText","compile","url","text","SnsRatchet","sns","topicArn","SNSClient","snsClient","inMsg","suppressErrors","safeInMsg","msg","TopicArn","Message","PublishCommand","condition","sendMessage","DynamoDbSyncLock","lockKey","nowSeconds","lockingKey","expires","PutItemCommand","dio","FilterExpression","MemorySyncLock","_locks","toRemove"],"mappings":"0nEASaA,GACSC,aAAuCC,eAA3DC,YAAoBF,EAAuCC,GAAvCE,KAAYH,aAAZA,EAAuCG,KAAcF,eAAdA,EACzDG,EAAeC,mBAAmBF,KAAKH,aAAc,gBACrDI,EAAeC,mBAAmBF,KAAKH,aAAaM,YAAa,4BACjEF,EAAeC,mBAAmBF,KAAKH,aAAaO,qBAAsB,qCAC1EH,EAAeC,mBAAmBF,KAAKH,aAAaQ,iBAAkB,gCACvE,CAEMC,6BACLC,EACAC,EAA4B,CAAA,EAC5BC,EAA4B,CAAA,IAG1BT,KAAKF,iBACLE,KAAKF,eAAeY,QAClBC,EAAcC,WAAWL,IAAcP,KAAKF,eAAee,SAASN,IAEtEO,EAAaC,kBAAkB,sDAAuDR,GAGxFS,EAAOC,KAAK,oDAAqDV,EAAUC,EAAMR,KAAKH,aAAaQ,kBAEnG,IAAIa,EAA+B,KAEnC,MAAMC,EAAkB,GAAGnB,KAAKH,aAAaO,wBAAwBG,KAAYa,EAASC,MAAMC,SAAS,sBAEnGC,EAAiC,CACrCJ,QAASA,EACTK,cAAexB,KAAKH,aAAaO,qBACjCqB,SAAUzB,KAAKH,aAAaQ,iBAC5BqB,WAAY,CACVnB,WACAoB,SAAUC,KAAKC,UAAUrB,GACzBsB,aAAcF,KAAKC,UAAUpB,KAIjC,IACES,QAAalB,KAAKH,aAAakC,YAAYR,GAC3CP,EAAOC,KAAK,uBAAwBC,EAAKC,QAASD,EAAKc,MACxD,CAAC,MAAOC,GACPjB,EAAOkB,MACL,iFACA3B,EACAP,KAAKH,aAAaO,qBAClBJ,KAAKH,aAAaQ,iBAClBc,EACAX,EACAyB,EAEH,CAED,OAAOf,CACR,QC9CUiB,GACSC,aAAmCC,kBAAoCC,sBAA3FvC,YAAoBqC,EAAmCC,EAAoCC,GAAvEtC,KAAYoC,aAAZA,EAAmCpC,KAAiBqC,kBAAjBA,EAAoCrC,KAAqBsC,sBAArBA,CAAkC,CAElHnC,kBACT,OAAOH,KAAKoC,YACb,CACU/B,uBACT,OAAOL,KAAKqC,iBACb,CACUjC,2BACT,OAAOJ,KAAKsC,qBACb,CAEMhC,kBAAkBiB,GACvBP,EAAOC,KAAK,0BAA2BM,EAAQJ,SAC/C,IACE,MAAMD,QAAqClB,KAAKoC,aAAaG,KAAK,IAAIC,EAAiBjB,IAEvF,OADAP,EAAOC,KAAK,uBAAwBC,EAAKC,QAASD,EAAKc,OAChDd,CACR,CAAC,MAAOe,GACPjB,EAAOkB,MAAM,iCAAkCX,EAAQJ,QAASc,EACjE,CACD,OAAO,IACR,CAEM3B,sBAAsBmC,EAAsBC,EAAoB1C,KAAKK,kBAE1E,aADgCL,KAAK2C,SAASD,EAAWD,IAC9C/B,MACZ,CAEMJ,eAAeoC,EAAoB1C,KAAKK,iBAAkBoC,EAAuB,MACtFxC,EAAeC,mBAAmBwC,EAAW,aAC7C,IAAIxB,EAAqB,GACzB,MAAM0B,EAAgC,CACpCnB,SAAUiB,EACVD,UAAWA,EACXI,UAAW,MAEb7B,EAAOC,KAAK,cAAe2B,GAC3B,EAAG,CACD5B,EAAOC,KAAK,mBACZ,MAAM6B,QAAmC9C,KAAKoC,aAAaG,KAAK,IAAIQ,EAAgBH,IACpF1B,EAAOA,EAAK8B,OAAOF,EAAIG,gBACvBL,EAAQC,UAAYC,EAAID,gBACjBD,EAAQC,WAEjB,OAAO3B,CACR,QC9DUgC,GAGXnD,cAAwB,CAEjBoD,0BASL,MAR8B,CAC5BC,QAAS,iBACTC,KAAM,aACNC,OAAQ,eACRC,IAAK,YACLC,aAAc,iBACdC,MAAO,cAGV,QCLUC,GAESC,OAA+BC,KAAnD7D,YAAoB4D,EAA+BC,GAA/B5D,KAAM2D,OAANA,EAA+B3D,KAAI4D,KAAJA,EACjD3D,EAAeC,mBAAmBF,KAAK2D,OAAQ,UAC/C1D,EAAeC,mBAAmBF,KAAK4D,KAAM,QAC7C3D,EAAeC,mBAAmBF,KAAK4D,KAAKC,UAAW,kBACvD5D,EAAeC,mBAAmBF,KAAK4D,KAAKE,YAAa,oBACzD7D,EAAe8D,MAAM/D,KAAK4D,KAAKI,gBAAmBhE,KAAK4D,KAAKK,gBAAkBjE,KAAK4D,KAAKM,aAAe,8BACxG,CAEMf,8BAQL,MAPyC,CACvCU,UAAW,eACXG,cAAc,EACdF,YAAa,YACbG,aAAc,KACdC,aAAc,KAGjB,CAEMC,gBAAgBC,GACrB,MAAMC,EAAY,CAAA,EAOlB,OANIrE,KAAK4D,KAAKI,cACZK,EAAKrE,KAAK4D,KAAKE,aAAe9D,KAAK4D,KAAKM,aACxCG,EAAKrE,KAAK4D,KAAKK,cAAgBG,GAE/BC,EAAKrE,KAAK4D,KAAKE,aAAeM,EAEzBC,CACR,CAEMC,mCAAmCpD,GACpCA,WACKA,EAAKlB,KAAK4D,KAAKE,aAClB9D,KAAK4D,KAAKK,qBACL/C,EAAKlB,KAAK4D,KAAKK,cAEpBjE,KAAK4D,KAAKW,gCACLrD,EAAKlB,KAAK4D,KAAKW,yBAG3B,CAEMC,sBAAsBtD,GAC3B,IAAImD,EAAY,KAUhB,OATInD,IACFmD,EAAO,CAAA,EACHrE,KAAK4D,KAAKI,cACZK,EAAKrE,KAAK4D,KAAKE,aAAe9D,KAAK4D,KAAKM,aACxCG,EAAKrE,KAAK4D,KAAKK,cAAgB/C,EAAKkD,UAEpCC,EAAKrE,KAAK4D,KAAKE,aAAe5C,EAAKkD,UAGhCC,CACR,CAEM/D,oBAAuB8D,GAC5B,MAAMK,EAAYzE,KAAKmE,gBAAgBC,GACjClD,QAA0ClB,KAAK2D,OAAOe,UAAuC1E,KAAK4D,KAAKC,UAAWY,GAGxH,OAFAzE,KAAKsE,mCAAmCpD,GAEjCA,CACR,CAEMZ,mBAAsBqE,GAC3B1E,EAAeC,mBAAmByE,EAAO,SACzC1E,EAAeC,mBAAmByE,EAAMP,SAAU,kBAClD,MAAMQ,EAAcC,OAAOC,OAAO,GAAIH,EAAO3E,KAAKmE,gBAAgBQ,EAAMP,WACpEpE,KAAK4D,KAAKW,yBAA2BI,EAAMI,iBAC7CH,EAAO5E,KAAK4D,KAAKW,yBAA2BS,KAAKC,MAAMN,EAAMI,eAAiB,MAGhF,cAD0C/E,KAAK2D,OAAOuB,UAAUlF,KAAK4D,KAAKC,UAAWe,EAEtF,CAEMtE,sBAAsB8D,SACrBpE,KAAK2D,OAAOwB,aAAanF,KAAK4D,KAAKC,UAAW7D,KAAKmE,gBAAgBC,GAC1E,CAEM9D,mBAEL,MACM8E,SADmDpF,KAAKqF,WAC7BC,KAAKC,GAAMvF,KAAKwE,sBAAsBe,KAEvE,aAD2BvF,KAAK2D,OAAO6B,mBAAmBxF,KAAK4D,KAAKC,UAAWuB,EAAS,GAEzF,CAEM9E,gBACL,IAAIY,EAAwC,KAC5C,GAAIlB,KAAK4D,KAAKI,aAAc,CAC1B,MAAMyB,EAA4B,CAChCC,UAAW1F,KAAK4D,KAAKC,UACrB8B,uBAAwB,wBACxBC,yBAA0B,CACxB,YAAa5F,KAAK4D,KAAKE,aAEzB+B,0BAA2B,CACzB,YAAa7F,KAAK4D,KAAKM,eAG3BhD,QAAalB,KAAK2D,OAAOmC,kBAAiDL,EAC3E,KAAM,CACL,MAAMM,EAAyB,CAC7BL,UAAW1F,KAAK4D,KAAKC,WAEvB3C,QAAalB,KAAK2D,OAAOqC,iBAAgDD,EAC1E,CAGD,OAFA7E,EAAK+E,SAASC,GAAMlG,KAAKsE,mCAAmC4B,KAErDhF,CACR,QChHUiF,GACSC,eAAwCC,OAA5DtG,YAAoBqG,EAAwCC,GAAxCrG,KAAcoG,eAAdA,EAAwCpG,KAAMqG,OAANA,EAC1DpG,EAAeC,mBAAmBF,KAAKoG,eAAgB,kBACvDnG,EAAeC,mBAAmBF,KAAKoG,eAAeE,mBAAoB,+BAC3E,CAEMC,UAAUnC,GACf,IAAIlD,EAAeP,EAAc6F,YAAYxG,KAAKqG,QAKlD,OAJInF,EAAKR,OAAS,IAAMQ,EAAKuF,SAAS,OACpCvF,GAAQ,KAEVA,GAAQkD,EACDlD,CACR,CAEMZ,oBAAuB8D,GAI5B,aAHgDpE,KAAKoG,eAAeM,uBAClE1G,KAAKuG,UAAUnC,GAGlB,CAEM9D,mBAAsBqE,GAC3B1E,EAAeC,mBAAmByE,EAAO,SACzC1E,EAAeC,mBAAmByE,EAAMP,SAAU,kBAElD,cADmCpE,KAAKoG,eAAeO,uBAAuB3G,KAAKuG,UAAU5B,EAAMP,UAAWO,EAE/G,CAEMrE,sBAAsB8D,SACrBpE,KAAKoG,eAAeQ,gBAAgB5G,KAAKuG,UAAUnC,GAC1D,CAEM9D,mBACL,MAAM+D,QAAuBrE,KAAKoG,eAAeS,uBAAuB7G,KAAKuG,UAAU,KAEvF,aAD6BO,QAAQC,IAAI1C,EAAKiB,KAAK0B,GAAMhH,KAAKiH,gBAAgBD,MACvE3C,EAAK3D,MACb,CAEMJ,gBACL,MAAM+D,QAAuBrE,KAAKoG,eAAeS,uBAAuB7G,KAAKuG,UAAU,KAEvF,aADoDO,QAAQC,IAAI1C,EAAKiB,KAAK0B,GAAMhH,KAAKkH,cAAcF,KAEpG,QC9CUG,GAESC,SAA8CC,oBAAlEtH,YAAoBqH,EAA8CC,EAA8B,KAA5ErH,KAAQoH,SAARA,EAA8CpH,KAAmBqH,oBAAnBA,CAA4C,CAEvGC,2BACL,MAAO,CACLC,eAAgB,KAChBC,aAAcxH,KAAKqH,oBACnBI,iBAAiB,EAEpB,CAEMnH,mBACL8D,EACAsD,EACA9D,EAA+B5D,KAAKsH,4BAEpCtG,EAAO2G,MAAM,cAAevD,GAC5B,MAAMwD,GAAc,IAAIC,MAAOC,UAC/B,IAAI5G,QAA0ClB,KAAKoH,SAASF,cAAc9C,GAS1E,GARIlD,GAAQA,EAAK6D,eAAiB6C,IAChC5G,EAAO+G,MAAM,wCACb7G,EAAO,MAELA,GAAQ0C,GAAQA,EAAK2D,gBAAkBK,EAAM1G,EAAK8G,eAAiBpE,EAAK2D,iBAC1EvG,EAAO+G,MAAM,wCACb7G,EAAO,OAEJA,EAAM,CACTF,EAAO+G,MAAM,oCAAqC3D,GAClD,MAAMtB,QAAe4E,KACjB5E,GAAOc,GAAM6D,mBACfzG,EAAO+G,MAAM,uBACb7G,EAAO,CACLkD,SAAUA,EACV4D,eAAgBJ,EAChB7C,eAAgBnB,GAAQA,EAAK4D,aAAeI,EAAMhE,EAAK4D,aAAe,KACtE7C,MAAO7B,EACPmF,WAAW,SAEPjI,KAAKoH,SAASc,aAAahH,GACjCA,EAAK+G,WAAY,EAEpB,CACD,OAAO/G,CACR,CAEMZ,YAAe8D,EAAkBsD,EAA4B9D,EAA+B,MACjG,MAAMuE,QAA6CnI,KAAKoI,aAAahE,EAAUsD,EAAU9D,GACzF,OAAOuE,EAAUA,EAAQxD,MAAQ,IAClC,CAEMrE,sBAAyB8D,EAAkBiE,GAChD,IAAInH,EAAoC,KAKxC,OAJImH,IACFnH,QAAalB,KAAKoI,aAAahE,GAAU,IAAM,cAE3CpE,KAAKoH,SAASH,gBAAgB7C,GAC7BlD,CACR,CAEMZ,mBACL,OAAON,KAAKoH,SAASkB,YACtB,CAEMhI,gBACL,OAAON,KAAKoH,SAAS/B,SACtB,QC9DUkD,GACSC,SAA0BC,UAA9C1I,YAAoByI,EAA0BC,EAAkC,IAAIC,EAAqB,CAAEC,OAAQ,eAA/F3I,KAAQwI,SAARA,EAA0BxI,KAASyI,UAATA,CAAuF,CAE1HG,2BACT,OAAO5I,KAAKyI,SACb,CACMnI,qBAAqBuI,EAAyB,KAAMC,EAAuB,MAChF,MAAMC,EAAyC,CAC7CC,aAAchJ,KAAKwI,SAEnBS,QAAS,iBAGL/H,EAAoB,GAE1B,EAAG,CACDF,EAAO+G,MAAM,6CAA8C7G,EAAKR,QAChE,MAAMwI,QAA8ClJ,KAAKyI,UAAUlG,KAAK,IAAI4G,EAA0BJ,IAEtGG,EAAKE,WAAWnD,SAASoD,IACM,OAAzBA,EAAEC,sBACCT,GAAkBQ,EAAEC,oBAAsBT,MACxCC,GAAgBO,EAAEE,qBAAuBT,IAC5C5H,EAAKsI,KAAKH,EAGf,IAGHN,EAAOlG,UAAYqG,EAAKrG,SACzB,OAAUkG,EAAOlG,WAGlB,OADA7B,EAAO+G,MAAM,4BAA6B7G,EAAKR,QACxCQ,CACR,CAEMZ,yBAAyBuI,EAAyB,KAAMC,EAAuB,MAGpF,aAFmC9I,KAAKyJ,eAAeZ,EAAgBC,IACxCxD,KAAK+D,GAAMA,EAAEK,eAE7C,CAEMpJ,iBACLqJ,EACAd,EAAyB,KACzBC,EAAuB,KACvBc,GAAa,EACbC,EAAoB,MAEpB,MAAMC,EAAgB,IAAIC,EACpBhB,EAAsC,CAC1CC,aAAchJ,KAAKwI,SACnBwB,QAASlB,EACTmB,UAAWpB,GAGTc,IACFZ,EAAOmB,cAAgBP,GAGzB3I,EAAO+G,MAAM,mCAAoCgB,GAEjD,IAAI7H,EAA2B,GAE/B,EAAG,CACDF,EAAO+G,MAAM,iDAAkD7G,EAAKR,OAAQoJ,EAAGK,QAC/E,MAAMjB,QAA2ClJ,KAAKyI,UAAUlG,KAAK,IAAI6H,EAAuBrB,IAChG7H,EAAOA,EAAK8B,OAAOkG,EAAKmB,QACxBtB,EAAOlG,UAAYqG,EAAKrG,SACzB,OAAUkG,EAAOlG,aAAegH,GAAa3I,EAAKR,OAASmJ,IAgB5D,OAdA7I,EAAO+G,MAAM,uBAAwB7G,EAAKR,OAAQoJ,EAAGK,QAEjDP,IACF5I,EAAO+G,MAAM,+BACb7G,EAAOA,EAAKoJ,MAAK,CAAC/E,EAAGgF,KACnB,IAAIrJ,EAAOqE,EAAEiF,UAAYD,EAAEC,UAI3B,OAHa,IAATtJ,IACFA,EAAOqE,EAAEkF,QAAQC,cAAcH,EAAEE,UAE5BvJ,CAAI,KAIf4I,EAAGa,MACIzJ,CACR,EC3EH,MAAa0J,GACHzH,0BAAqC,EACrC0H,OAER9K,YAAY+K,EAAuC,MACjD9K,KAAK6K,OAASC,GAAkC,IAAIpC,EAAqB,CAAEC,OAAQ,aACpF,CAEUC,2BACT,OAAO5I,KAAK6K,MACb,CAEMvK,iCACL0I,EACA+B,EAAc,IACdC,EAA6B,MAE7BhK,EAAOC,KAAK,6DAA8D+H,EAAcgC,GACxF,MAAMC,EAA0B,CAC9BjC,aAAcA,EACdC,QAAS,iBAGLiC,EAA4BF,GAAsB,EACxD,IAAIG,EAAe,EACnB,MAAMC,EAA8B,GAC9BC,EAAoC,GAC1C,IAAIC,EAAkB,GAEtB,EAAG,CACDtK,EAAO+G,MAAM,gCACb,IACE,MAAMwD,QAAiDvL,KAAK6K,OAAOtI,KAAK,IAAI4G,EAA0B8B,IACtGE,GAAgBI,EAAQnC,WAAW1I,OAEnCM,EAAO+G,MAAM,6CAA8CwD,EAAQnC,WAAW1I,OAAQyK,EAAcC,EAAe1K,QAEnH,IAAK,IAAI8K,EAAI,EAAGA,EAAID,EAAQnC,WAAW1I,QAAU0K,EAAe1K,OAASqK,EAAaS,IAAK,CACzF,MAAMC,EAAgBF,EAAQnC,WAAWoC,GACpCC,EAAGlC,oBAEGkC,EAAGnC,mBAAqB4B,GACjCE,EAAe5B,KAAKiC,GAFpBL,EAAe5B,KAAKiC,EAIvB,CAEDR,EAA8B,UAAIM,EAAQ1I,SAC3C,CAAC,MAAOZ,GACP,MAAMyJ,EAAkBJ,EACxBA,EAAkBtG,KAAK2G,IAAI,IAAwB,IAAlBL,GACjCtK,EAAOC,KAAK,+EAAgFgB,EAAKyJ,EAASJ,EAC3G,CACF,OAAUL,EAA8B,WAAKG,EAAe1K,OAASqK,GAEtE/J,EAAOC,KAAK,6BAA8BmK,EAAe1K,QACzD,IAAIkL,EAAU,GAEd,IAAK,IAAIJ,EAAI,EAAGA,EAAIJ,EAAe1K,OAAQ8K,IAAK,CAC9C,MAAMK,EAAY,CAChB7C,aAAcA,EACdU,cAAe0B,EAAeI,GAAG9B,eAG7BoC,EAAiD,IAAlCV,EAAeI,GAAGO,YAAoB,QAAU,MACrE/K,EAAOC,KAAK,wBAAyB6K,EAAMV,EAAeI,GAAG9B,eAC7D,IAAIsC,GAAU,EACVC,EAAQ,EACZ,MAAQD,GAAWC,EAAQrB,GAAsBsB,oBAC/C,UACQlM,KAAK6K,OAAOtI,KAAK,IAAI4J,EAAuBN,IAClDG,GAAU,QACJI,EAAeC,KAAKT,EAC3B,CAAC,MAAO3J,GACPgK,IACA,MAAMP,EAAkBE,EACxBA,EAAU5G,KAAK2G,IAAI,IAAgB,IAAVC,GACzB5K,EAAOC,KACL,iGACAgB,EACAyJ,EACAE,EACAK,EACArB,GAAsBsB,mBAEzB,CAEEF,GAEHX,EAAqB7B,KAAK4B,EAAeI,GAE5C,CAGD,OADAxK,EAAOsL,KAAK,gCAAiCjB,GACtCD,CACR,CAEM9K,sCAAsC0I,GAC3C,MAAMuD,QAA0BvM,KAAKwM,iCAAiCxD,GACtE,OAAOuD,EAASA,EAAOhD,oBAAsB,IAC9C,CAEMjJ,uCAAuC0I,GAC5ChI,EAAOC,KAAK,+BAAgC+H,GAC5C,IAAI9H,EAAkB,KACtB,IACE,MAAM+J,EAAqB,CACzBjC,aAAcA,EACdC,QAAS,iBAGX,IAAIkC,EAAe,EACnB,EAAG,CACDnK,EAAO+G,MAAM,gCACb,MAAMwD,QAAiDvL,KAAK6K,OAAOtI,KAAK,IAAI4G,EAA0B8B,IACtGE,GAAgBI,EAAQnC,WAAW1I,OAEnCM,EAAO+G,MAAM,+BAAgCwD,EAAQnC,WAAW1I,OAAQyK,GAExEI,EAAQnC,WAAWnD,SAASoD,IACtBA,EAAEE,sBAAiC,OAATrI,GAAiBmI,EAAEE,oBAAsBrI,EAAKqI,uBAC1ErI,EAAOmI,EACR,IAGH4B,EAA8B,UAAIM,EAAQ1I,SAC3C,OAAUoI,EAA8B,UAC1C,CAAC,MAAOhJ,GACPjB,EAAOkB,MAAM,2DAA4D8G,EAAc/G,EAAKA,EAC7F,CACD,OAAOf,CACR,CAEMZ,oBAAoB+F,GACzBpG,EAAeC,mBAAmBmG,GAElC,MAAM0C,EAAwC,CAC5C0D,mBAAoBpG,GAEtB,IAAInF,EAAmB,GAEvB,EAAG,CACDF,EAAOC,KAAK,oCAAqCC,EAAKR,OAAQqI,GAC9D,MAAM2D,QAA4C1M,KAAK6K,OAAOtI,KAAK,IAAIoK,EAAyB5D,IAChG7H,EAAOA,EAAK8B,OAAO0J,EAAIE,WACvB7D,EAAOlG,UAAY6J,EAAI7J,SACxB,OAAUkG,EAAOlG,WAElB,OAAO3B,CACR,CAEMZ,sBAAsBuM,GAC3B5M,EAAeC,mBAAmB2M,GAClC,MAAM3L,EAAkB,GAExB,IAAK,IAAIsK,EAAI,EAAGA,EAAIqB,EAAOnM,OAAQ8K,IACjC,IACExK,EAAOC,KAAK,cAAe4L,EAAOrB,IAClC,MAAMsB,EAAkC,CACtC9D,aAAc6D,EAAOrB,GAAGxC,oBAEpBhJ,KAAK6K,OAAOtI,KAAK,IAAIwK,EAAsBD,IACjD5L,EAAKsI,MAAK,EACX,CAAC,MAAOvH,GACPjB,EAAOkB,MAAM,4BAA6B2K,EAAOrB,GAAIvJ,GACrDf,EAAKsI,MAAK,EACX,CAGH,OAAOtI,CACR,CAEMZ,gCAAgC+F,GACrCpG,EAAeC,mBAAmBmG,GAClCpG,EAAe8D,KAAKpD,EAAc6F,YAAYH,GAAQ3F,OAAS,GAE/DM,EAAOC,KAAK,qCAAsCoF,GAClD,MAAMwG,QAA2B7M,KAAKgN,cAAc3G,GACpD,aAAarG,KAAKiN,gBAAgBJ,EACnC,CAEMvM,gCAAgC4M,GACrCjN,EAAeC,mBAAmBgN,GAClClM,EAAO+G,MAAM,+BAAgCmF,GAC7C,MAAMC,QAAsCnN,KAAK6K,OAAOtI,KAAK,IAAI6K,EAAkBF,IACnFlM,EAAO+G,MAAM,kBAAmBoF,GAEhC,IAAIjM,EAAqC,KACrCmM,EAAkB,IACtB,MAAQnM,GAAQ,CAAC,UAAW,aAAaL,SAASK,EAAKoM,SACrDpM,QAAalB,KAAK6K,OAAOtI,KAAK,IAAIgL,EAAuB,CAAEC,QAASL,EAAKK,iBACnEpB,EAAeC,KAAKgB,GAC1BA,GAAW,EACXrM,EAAOC,KAAK,WAAYC,GAE1B,OAAOA,CACR,CAEMZ,yBAAyBkN,GAC9B,IAAItM,EAA+B,KAInC,OAHMsM,IACJtM,QAAalB,KAAK6K,OAAOtI,KAAK,IAAIkL,EAAiB,CAAED,QAASA,MAEzDtM,CACR,MCpOSwM,IAAZ,SAAYA,GACVA,EAAA,QAAA,UACAA,EAAA,aAAA,eACAA,EAAA,aAAA,eACAA,EAAA,MAAA,QACAA,EAAA,UAAA,YACAA,EAAA,UAAA,YACAA,EAAA,UAAA,YACAA,EAAA,UAAA,YACAA,EAAA,KAAA,OACAA,EAAA,SAAA,WACAA,EAAA,SAAA,WACAA,EAAA,SAAA,WACAA,EAAA,SAAA,WACAA,EAAA,QAAA,UACAA,EAAA,MAAA,QACAA,EAAA,eAAA,eACAA,EAAA,mBAAA,mBACAA,EAAA,mBAAA,mBACAA,EAAA,mBAAA,mBACAA,EAAA,mBAAA,mBACAA,EAAA,cAAA,mBACAA,EAAA,kBAAA,kBACAA,EAAA,kBAAA,kBACAA,EAAA,kBAAA,kBACAA,EAAA,kBAAA,kBACAA,EAAA,eAAA,eACAA,EAAA,KAAA,MACD,CA5BD,CAAYA,KAAAA,GA4BX,CAAA,UChBYC,GACHC,GAER7N,YAAY8N,EAA+B,MACzC7N,KAAK4N,GAAKC,GAA0B,IAAIC,EAAiB,CAAEnF,OAAQ,YAAaoF,WAAY,cAC7F,CAEUC,uBACT,OAAOhO,KAAK4N,EACb,CAEMtN,wBACL2N,EACAC,EACAC,EACAC,EAA8BV,GAAsBW,KACpD1J,EACA2J,EAAsB,IAAIzG,KAC1B0G,GAAiB,GAEjB,MAAMC,EAAgB,GAChBL,GAAQA,EAAKzN,OAAS,GAC1ByN,EAAKlI,SAASwI,IACZD,EAAOhF,KAAK,CAAEkF,KAAMD,EAAEE,IAAKC,MAAOH,EAAE9J,OAAQ,IAGhD,MAAMkK,EAA4BN,EAAiB,EAAI,GAEjDO,EAAwC,CAC5CC,UAAWd,EACXe,WAAY,CACV,CACEC,WAAYf,EACZgB,WAAYV,EACZW,KAAMC,OAAOhB,GACbQ,MAAOjK,EACP0K,UAAWf,EACXgB,kBAAmBT,KAIzB7N,EAAO2G,MAAM,4BAA6BmH,GAE1C,MAAMS,QAA2CvP,KAAK4N,GAAGrL,KAAK,IAAIiN,EAAqBV,IAEvF,OADA9N,EAAO2G,MAAM,aAAc4H,GACpBA,CACR,CAEMjP,0CAA0CwM,GAG/C,GAFA9L,EAAOC,KAAK,uCAAwC6L,EAAImB,UAAWnB,EAAIoB,OAAQpB,EAAI2C,WAE7E3C,EAAI/G,MAAU+G,EAAI4C,MACtB,MAAM,IAAIC,MAAM,yCAElB,IAAK7C,EAAI/G,OAAS+G,EAAI4C,MACpB,MAAM,IAAIC,MAAM,6CAGlB,MAAMC,EAA2B9C,EAAI4C,YAC3B5C,EAAI+C,cAAcC,uBAAuBhD,EAAI4C,aAC7C5C,EAAI+C,cAAcE,sBAAsBjD,EAAI/G,MAEtD/E,EAAO+G,MAAM,wBAAyB+E,EAAImB,UAAWnB,EAAIoB,OAAQpB,EAAI2C,UAAWG,GAEhF,MAAMI,EAA0BlD,EAAI2C,UAAUQ,MAAM,KAAKC,KAAK,KAAO,OAC/DC,EAAkB/O,EAASgP,QAAQJ,GAAiBK,WAEpDC,QAAuBtQ,KAAKuQ,kBAChCzD,EAAImB,UACJnB,EAAIoB,OACJpB,EAAIqB,KACJT,GAAsB8C,MACtBZ,EAAIa,MACJN,GACA,GAIF,OAFAnP,EAAO+G,MAAM,uBAAwBuI,GAE9BV,EAAIa,KACZ,ECvEH,MAAaC,GACJvN,uBAAiCwN,OAAOC,KAAK,sBAC7CzN,2BAAqC,cAErCA,mBACL0N,EACAC,EACAC,EACAxP,GAEA,IACEA,EAAQd,KAAOc,EAAQd,MAAQ,CAAA,EAE/BO,EAAOC,KAAK,wCAAyC8P,EAAOxP,GAC5D,MAAMqG,GAAc,IAAIC,MAAOC,UAEzBkJ,EAA+B,CACnCF,GAAIA,EACJG,MAAO1P,EAAQ0P,MACfC,mBAAoBtJ,EACpBuJ,mBAAoB,UACpBC,eAAgB7P,EAAQ6P,eAExBC,eAAgBzJ,EAChB0J,iBAAkB,KAClB7Q,KAAMc,EAAQd,KACdyB,MAAO,KACPqP,KAAM,KACNC,YAAajQ,EAAQiQ,aAIvB,aADuCd,GAAWe,WAAWZ,EAAOE,EAAOC,EAAUN,GAAWgB,gBAEjG,CAAC,MAAOzP,GAEP,MADAjB,EAAOkB,MAAM,8CAA+CX,EAASU,GAC/DA,CACP,CACF,CAEMkB,wBACL0N,EACAE,EACAC,EACAW,GAEA,IACE,MAAMC,EAAc,CAAA,EACpBZ,EAASE,oBAAqB,IAAIrJ,MAAOC,UACzC8J,EAAOlB,GAAWmB,qBAAuBjQ,KAAKC,UAAUmP,GAExD,MAAMjI,EAA2B,CAC/B+I,OAAQjB,EAAMvK,mBACdyL,IAAKhB,EACLiB,YAAahB,EAASQ,YACtBS,SAAUL,EACVM,KAAM,IAAIC,KAAK,CAACR,KAEdX,EAASI,iBACXrI,EAAOqJ,mBAAqB,wBAA0BpB,EAASI,eAAiB,KAGlF,MAAMiB,QAAiCxB,EAAMyB,cAAc/P,KAAK,IAAIgQ,EAAiBxJ,IAGrF,OAFA/H,EAAO2G,MAAM,oBAAqB0K,GAE3B3B,GAAW8B,KAAK3B,EAAOE,EAC/B,CAAC,MAAO9O,GAEP,MADAjB,EAAOkB,MAAM,mDAAoD8O,EAAU/O,GACrEA,CACP,CACF,CAEMkB,iCAAiC0N,EAAuBE,EAAevQ,GAC5EQ,EAAO+G,MAAM,uBAAwBgJ,GACrC,MAAM0B,QAAmC/B,GAAWgC,cAAc7B,EAAOE,EAAO,kBAChF0B,EAAOnB,kBAAmB,IAAIzJ,MAAOC,UACrC2K,EAAOtB,mBAAqB,WAE5B,MAAMS,EAAc,CAAA,EACpBA,EAAOlB,GAAWmB,qBAAuBjQ,KAAKC,UAAU4Q,GAExD,MAAM1J,EAA2B,CAC/B+I,OAAQjB,EAAMvK,mBACdyL,IAAKhB,EACLiB,YAAaS,EAAOjB,YACpBS,SAAUL,EACVM,KAAM1R,GAGFmS,EAAiB,IAAIC,EAAO,CAChCC,OAAQhC,EAAMyB,cACdvJ,OAAQA,EACR+J,KAAM,GACNC,UAAW,EACXC,SAAU,QACVC,mBAAmB,IAGrBN,EAAOO,GAAG,sBAAuBC,IAC/BnS,EAAOC,KAAK,iBAAkBkS,EAAS,IAEzC,MAAMd,QAAsDM,EAAOS,OAInE,OAFApS,EAAO2G,MAAM,oBAAqB0K,GAE3B3B,GAAW8B,KAAK3B,EAAOE,EAC/B,CAEM5N,2BAA2B0N,EAAuBE,EAAesC,GACtE,IACE,MAAMZ,QAAmC/B,GAAW8B,KAAK3B,EAAOE,GAEhE,OADA0B,EAAOtB,mBAAqBkC,EACrB3C,GAAWe,WAAWZ,EAAOE,EAAO0B,EAAQ/B,GAAWgB,gBAC/D,CAAC,MAAOzP,GAEP,MADAjB,EAAOkB,MAAM,uDAAwD6O,EAAO9O,GACtEA,CACP,CACF,CAEMkB,kBAAkBmQ,EAAyBC,GAChD,IACEvS,EAAO+G,MAAM,+BAAgCuL,EAAQhN,mBAAoBiN,GACzE,IAAIf,EAA2B,KAE/B,MAAM/R,QAA+B6S,EAAQE,sBAAsBD,GACnEvS,EAAO+G,MAAM,qBAAsBtH,GACnC,MAAMgT,EAAqBhT,GAAQA,EAAKwR,SAAWxR,EAAKwR,SAASvB,GAAWmB,qBAAuB,KAUnG,OATI4B,GACFjB,EAAO5Q,KAAK8R,MAAMD,GAEdjB,EAAKlB,mBAAqBkB,EAAKtQ,QACjCsQ,EAAKjB,WAAa+B,EAAQK,iCAAiCJ,KAG7DvS,EAAOsL,KAAK,mCAAoC7L,GAE3C+R,CACR,CAAC,MAAOvQ,GAEP,MADAjB,EAAOkB,MAAM,oDAAqDqR,EAAMtR,GAClEA,CACP,CACF,CAEMkB,mBAAmBmQ,EAAyBC,GACjD,OAAO7C,GAAWxO,MAAMoR,EAASC,EAAM,UACxC,CACMpQ,mBAAmBmQ,EAAyBC,EAAcrR,GAC/D,IACE,MAAMuQ,QAAmC/B,GAAW8B,KAAKc,EAASC,GAGlE,OAFAd,EAAOvQ,MAAQA,EACfuQ,EAAOnB,kBAAmB,IAAIzJ,MAAOC,UAC9B4I,GAAWe,WAAW6B,EAASC,EAAMd,EAAQ/B,GAAWgB,gBAChE,CAAC,MAAOzP,GAEP,MADAjB,EAAOkB,MAAM,oDAAqDqR,EAAMtR,GAClEA,CACP,CACF,CAEMkB,sBAAsBmQ,EAAyBC,EAAc5B,GAClE,IACE3Q,EAAOC,KAAK,qCAAsCsS,EAAM5B,EAASjR,QACjE,MAAM+R,QAAmC/B,GAAW8B,KAAKc,EAASC,GAIlE,OAHAd,EAAOnB,kBAAmB,IAAIzJ,MAAOC,UACrC2K,EAAOtB,mBAAqB,WAErBT,GAAWe,WAAW6B,EAASC,EAAMd,EAAQd,EACrD,CAAC,MAAO1P,GAEP,MADAjB,EAAOkB,MAAM,iDAAkDqR,EAAMtR,GAC/DA,CACP,CACF,QC5JU2R,GACSC,GAAsBC,cAA1C/T,YAAoB8T,EAAsBC,EAAwB,MAA9C9T,KAAE6T,GAAFA,EAAsB7T,KAAa8T,cAAbA,EACxC7T,EAAeC,mBAAmBF,KAAK6T,GAAI,KAC5C,CAEUE,eACT,OAAO/T,KAAK6T,EACb,CAEM1Q,+BAA+B6Q,EAA8BC,GAIlE,OAHID,GAASC,IACXD,EAAME,aAAe,WAAaD,GAE7BD,CACR,CAEM7Q,yBAAyB6Q,EAA8BrF,EAAahK,GAKzE,OAJIqP,GAASrT,EAAcC,WAAW+N,IAAQhO,EAAcC,WAAW+D,KACrEqP,EAAM/B,SAAW+B,EAAM/B,UAAY,CAAA,EACnC+B,EAAM/B,SAAStD,GAAOhK,GAEjBqP,CACR,CAEM1N,mBACL,OAAOtG,KAAK8T,aACb,CAEMxB,cACL,OAAOtS,KAAK6T,EACb,CAEMvT,iBAAiBqO,EAAawF,EAAiB,MACpD,IAEE,cAD4CnU,KAAKwT,sBAAsB7E,EAAK3O,KAAKoU,UAAUD,GAE5F,CAAC,MAAOlS,GAEP,OADAjB,EAAO2G,MAAM,6CAA8C1F,IACpD,CACR,CACF,CAEM3B,+CAA+CqO,EAAawF,EAAiB,MAClF,IAAIjT,EAA+B,KACnC,IACE,MAAM6H,EAAgC,CACpC+I,OAAQ9R,KAAKoU,UAAUD,GACvBpC,IAAKpD,GAEPzN,QAAalB,KAAK6T,GAAGtR,KAAK,IAAI8R,EAAiBtL,GAChD,CAAC,MAAO9G,GACP,KAAIA,aAAeqS,GAKjB,MAAMrS,EAJNjB,EAAO+G,MAAM,oCAAqC4G,GAClDzN,EAAO,IAKV,CACD,OAAOA,CACR,CAEMZ,qCAAqCqO,EAAawF,EAAiB,MAExE,aAD0CnU,KAAKuU,yCAAyC5F,EAAKwF,IAClFjC,KAAKsC,sBACjB,CAEMlU,6BAA6BqO,EAAawF,EAAiB,MAChE,IAAIjT,EAAe,KACnB,MAAMuT,QAAoCzU,KAAKuU,yCAAyC5F,EAAKwF,GAC7F,GAAIM,GAAKvC,KAAM,CACb,MAAMpP,QAAwB2R,EAAIvC,KAAKwC,uBACvCxT,EAAOyP,OAAOC,KAAK9N,EACpB,CACD,OAAO5B,CACR,CAEMZ,6BAA6BqO,EAAawF,EAAiB,MAChE,IAAIjT,EAAe,KACnB,MAAMuT,QAAoCzU,KAAKuU,yCAAyC5F,EAAKwF,GAI7F,OAHIM,GAAKvC,OACPhR,QAAauT,EAAIvC,KAAKyC,qBAEjBzT,CACR,CAEMZ,6BAAgCqO,EAAawF,EAAiB,MACnE,MAAMxP,QAAsB3E,KAAK4U,uBAAuBjG,EAAKwF,GAC7D,OAAOxP,EAAS/C,KAAK8R,MAAM/O,GAAe,IAC3C,CAEMrE,sBAAsBqO,EAAawF,EAAiB,MACzD,IAAIjT,EAAkC,KACtC,MAAM6H,EAAmC,CACvC+I,OAAQ9R,KAAKoU,UAAUD,GACvBpC,IAAKpD,GAEP,IACEzN,QAAalB,KAAK6T,GAAGtR,KAAK,IAAIsS,EAAoB9L,GACnD,CAAC,MAAO9G,GACP,IAAIA,GAA4B,KAArBA,EAAgB,WAIzB,MAAMA,EAHNjB,EAAOC,KAAK,+CAAgDkT,EAAQxF,GACpEzN,EAAO,IAIV,CACD,OAAOA,CACR,CAGMZ,6BACLqO,EACAmG,EACAC,EACAZ,GAEA,MAAMa,EAAOpT,KAAKC,UAAUiT,GAC5B,OAAO9U,KAAKiV,uBAAuBtG,EAAKqG,EAAMD,EAAUZ,EACzD,CAGM7T,6BACLqO,EACAuG,EACAH,EACAZ,GAEA,MAAM5H,EAAyB4I,EAAcC,0BAA0BF,GACvE,OAAOlV,KAAKqV,uBAAuB1G,EAAKpC,EAAQwI,EAAUZ,EAC3D,CAEM7T,6BACLqO,EACAnO,EACAuU,EACAZ,GAEA,MAAMpL,EAAgClE,OAAOC,OAAO,CAAA,EAAIiQ,GAAY,CAAA,EAAI,CACtEjD,OAAQ9R,KAAKoU,UAAUD,GACvBpC,IAAKpD,EACLuD,KAAM1R,IAGFmS,EAAiB,IAAIC,EAAO,CAChCC,OAAQ7S,KAAK6T,GACb9K,OAAQA,EACR+J,KAAM,GACNC,UAAW,EACXC,SAAU,QACVC,mBAAmB,IAGrBN,EAAOO,GAAG,sBAAuBC,IAC/BnS,EAAOC,KAAK,iBAAkBkS,EAAS,IAIzC,aAF2DR,EAAOS,MAGnE,CAEM9S,kBACLgV,EACAC,EACAC,EAAgCxV,KAChCyV,GAA6B,GAE7BxV,EAAeC,mBAAmBoV,EAAW,aAC7CrV,EAAeC,mBAAmBqV,EAAc,gBAChDtV,EAAe8D,KAAKuR,EAAU7O,SAAS,KAAM,2BAC7CxG,EAAe8D,KAAKwR,EAAa9O,SAAS,KAAM,8BAChD,IAAIvF,EAAiB,GACrB,MAAMwU,QAA8B1V,KAAK6G,uBAAuByO,GAC1DK,QAA8BH,EAAc3O,uBAAuB0O,GACnEzL,EAAgB,IAAIC,EAE1B,IAAK,IAAIyB,EAAI,EAAGA,EAAIkK,EAAYhV,OAAQ8K,IAAK,CAC3C,MAAMoK,EAAqBF,EAAYlK,GAEvC,GADAxK,EAAOC,KAAK,qBAAsB2U,EAAY9L,EAAG+L,aAAarK,EAAIkK,EAAYhV,SAC1EkV,EAAWnP,SAAS,KACtB,GAAIgP,EAAmB,CACrBzU,EAAOC,KAAK,iCACZ,MAAM6U,QAAuB9V,KAAK+V,YAChCT,EAAYM,EACZL,EAAeK,EACfJ,EACAC,GAEFzU,EAAOC,KAAK,sBAAuB6U,EAAKpV,OAAQkV,GAChD1U,EAAOA,EAAK8B,OAAO8S,EACpB,MACC9U,EAAOC,KAAK,yDAA0D2U,OAEnE,CACL,IAAII,GAAsB,EAC1B,MAAMC,QAAyCjW,KAAKwT,sBAAsB8B,EAAYM,GACtF,GAAID,EAAY9U,SAAS+U,GAAa,CACpC,MAAMM,QAA4CV,EAAchC,sBAAsB+B,EAAeK,GACjGK,EAAQE,OAASD,EAAWC,OAC9BnV,EAAO+G,MAAM,wBACbiO,GAAa,EAEhB,CACD,GAAIA,EAAY,CACdhV,EAAO+G,MAAM,cACb,MAAMqO,QAAkCpW,KAAKqW,+BAA+Bf,EAAYM,GACxF,IACE,MAAMvD,QAAwCmD,EAAcH,uBAC1DE,EAAeK,EACfQ,EACAH,OACAK,GAEFtV,EAAO2G,MAAM,oBAAqB0K,GAClCnR,EAAKsI,KAAKoM,EACX,CAAC,MAAO3T,GACPjB,EAAOkB,MAAM,2BAA4B0T,EAAY3T,EACtD,CACF,CACF,CACF,CAID,OAFAjB,EAAOC,KAAK,4BAA6ByU,EAAYhV,OAAQQ,EAAKR,QAClEoJ,EAAGa,MACIzJ,CACR,CAEMZ,4BAA4BqO,EAAawF,EAAiB,MAC/D,IAAIjT,EAAgC,KACpC,IACEA,QAAalB,KAAK6T,GAAGtR,KACnB,IAAIgU,EAAkB,CACpBzE,OAAQ9R,KAAKoU,UAAUD,GACvBpC,IAAKpD,IAGV,CAAC,MAAO1M,GACP,IAAIA,GAA4B,KAArBA,EAAgB,WAKzB,MADAjB,EAAOkB,MAAM,sCAAuCD,EAAKA,GACnDA,EAJNjB,EAAOC,KAAK,4CAA6CjB,KAAKoU,UAAUD,GAASxF,GACjFzN,EAAO,IAKV,CACD,OAAOA,CACR,CAEMZ,4BAA4BqO,EAAawF,EAAiB,MAC/D,IACE,MAAMzH,QAAqC1M,KAAKwT,sBAAsB7E,EAAKwF,GAC3E,OAAIzH,GAAOA,EAAI8J,aACNxR,KAAKC,QAAO,IAAI4C,MAAOC,UAAY4E,EAAI8J,aAAa1O,WAAa,MAExE9G,EAAOsL,KAAK,uDAAwDtM,KAAKoU,UAAUD,GAASxF,GACrF,KAEV,CAAC,MAAO1M,GACP,GAAIA,GAA4B,KAArBA,EAAgB,WAEzB,OADAjB,EAAOsL,KAAK,4CAA6CtM,KAAKoU,UAAUD,GAASxF,GAC1E,KAEP,MAAM1M,CAET,CACF,CAEM3B,eACLmW,EACAC,EACAC,EAAoB,KACpBC,EAAoB,MAEpB,MAAM7N,EAAiC,CACrC8N,WAAY,IAAM7W,KAAKoU,UAAUuC,GAAa,IAAMF,EACpD3E,OAAQ9R,KAAKoU,UAAUwC,GACvB7E,IAAK2E,EACLI,kBAAmB,QAGrB,aAD4C9W,KAAK6T,GAAGtR,KAAK,IAAIwU,EAAkBhO,GAEhF,CAEMzI,oBAAoBmW,EAAgBC,EAAgBC,EAAoB,KAAMC,EAAoB,MACvG,IAAI1V,GAAgB,EACpB,UAC6ClB,KAAKgX,SAASP,EAAQC,EAAQC,EAAWC,GACpF1V,GAAO,CACR,CAAC,MAAOe,GACPjB,EAAO2G,MAAM,iCAAkC1F,EAChD,CACD,OAAOf,CACR,CAEMZ,uCAAuCqO,EAAasI,EAAoB,KAAM9C,EAAiB,MACpG,MAAM+C,EAAoC,CACxCpF,OAAQ9R,KAAKoU,UAAUD,GACvBpC,IAAKpD,GAGP,aAD2BwI,EAAanX,KAAK6T,GAAI,IAAIQ,EAAiB6C,GAAa,CAAEE,UAAWH,GAEjG,CAEM3W,6BACL+F,EACAgR,GAAc,EACdlD,EAAiB,KACjBmD,EAAsB,MAEtB,MAAMC,EAAqB,GAErBxO,EAAkC,CACtC+I,OAAQ9R,KAAKoU,UAAUD,GACvBqD,OAAQnR,EACRoR,UAAW,KAGb,IAAIC,EAAqC,KACzC,EAAG,CACDA,QAAiB1X,KAAK6T,GAAGtR,KAAK,IAAIoV,EAAmB5O,IAErD,MAAM6O,EAAevR,EAAO3F,OAExBgX,EAAyB,gBAC3BA,EAAyB,eAAEzR,SAAS4R,IAClC,IAAKP,GAAeC,EAAY7W,OAAS4W,EAAa,CACpD,MAAM3S,EAAQkT,EAAW,OAAEC,UAAUF,GACrCL,EAAY/N,KAAK7E,EAClB,KAKD+S,EAAmB,gBACf5Q,QAAQC,IACZ2Q,EAAmB,SAAEpS,KAAIhF,MAAOuX,IAC9B,IAAKP,GAAeC,EAAY7W,OAAS4W,EACvC,GAAID,EAAa,CACf,MAAMU,EAAiC,CACrCxG,WAAYvR,KAAK2T,iCAAiCkE,EAAQ,IAAG,KAAM1D,GACnE6D,KAAMH,EAAQ,IAAEC,UAAUF,GAC1BK,KAAMJ,EAAS,MAEjBN,EAAY/N,KAAKuO,EAClB,MACCR,EAAY/N,KAAKqO,EAAQ,IAAEC,UAAUF,GAExC,KAIP7O,EAAOmP,OAASR,EAASS,UAC1B,OAAQpP,EAAOmP,UAAYZ,GAAeC,EAAY7W,OAAS4W,IAEhE,OAAOC,CACR,CAEMjX,4BAA4B+F,EAAgB8N,EAAiB,MAClE,MAAMoD,EAAwB,CAAClR,GAC/B,IAAI+R,EAAc,EAElB,KAAOA,EAAMb,EAAY7W,QAAQ,CAC/B,MAAM2X,EAAed,EAAYa,KACjCpX,EAAO+G,MAAM,4BAA6BsQ,EAAMd,EAAY7W,OAAS0X,GACrE,MAAMtL,EAAiC,CACrCgF,OAAQ9R,KAAKoU,UAAUD,GACvBqD,OAAQa,EACRZ,UAAW,KAEb,IAAItK,EAAmC,KAEvC,GACEL,EAAIwL,kBAAoBnL,EAAOA,EAAKoL,sBAAwB,KAC5DpL,QAAanN,KAAK6T,GAAGtR,KAAK,IAAIoV,EAAmB7K,IACjDK,EAAKqL,eAAevS,SAASwS,IAC3BlB,EAAY/N,KAAKiP,EAAEjB,OAAO,IAE5BxW,EAAO+G,MAAM,OAAQoF,SACdA,EAAKoL,sBACf,CAED,OAAOhB,CACR,CAEOnD,UAAUsE,GAChB,MAAMxX,EAAewX,GAAkC1Y,KAAK8T,cAC5D,IAAK5S,EACH,KAAM,+DAER,OAAOA,CACR,EC1ZH,MAAayX,GAMD9E,GACAM,OACA9N,OACAuS,cACAC,WATH1V,6BAAuC,UAEtC0N,MAER9Q,YACU8T,EACAM,EACA9N,EAAiB,GACjBuS,EAAwBD,GAAOG,sBAC/BD,GAJA7Y,KAAE6T,GAAFA,EACA7T,KAAMmU,OAANA,EACAnU,KAAMqG,OAANA,EACArG,KAAa4Y,cAAbA,EACA5Y,KAAU6Y,WAAVA,EAER7Y,KAAK6Q,MAAQ,IAAI+C,GAAe5T,KAAK6T,GAAI7T,KAAKmU,OAC/C,CAEU4E,mBACT,OAAO/Y,KAAK4Y,aACb,CAEMtY,uBAAuBqO,EAAasI,GACzChX,EAAeC,mBAAmBF,KAAK6Y,WAAY,4DACnD5Y,EAAeC,mBAAmByO,EAAK,OACvC1O,EAAe8D,KAAKkT,EAAoB,EAAG,4CAE3C,MAAM+B,EAAuC,CAAEC,UAAWtK,GAE1D,aADkC3O,KAAK6Y,WAAWK,kBAAkBF,EAAO/B,EAE5E,CAEO1Q,UAAUoI,GAChB,OAAOgC,OAAOC,KAAKjC,EAAK,UAAUwK,UACnC,CAEOC,UAAU7F,GAChB,OAAO5C,OAAOC,KAAK2C,GAAM4F,SAAS,SACnC,CAEOE,aAAaC,EAAgBtZ,KAAK4Y,eACxC,OAAO5Y,KAAKuZ,eAAeD,GAAS3Y,EAAc6Y,iBACnD,CAEOD,eAAeD,EAAgBtZ,KAAK4Y,eAC1C,OAAO5Y,KAAKqG,OAASiT,EAAQ,GAC9B,CAEMhZ,YAAYiB,GACjBA,EAAQ+X,MAAQ/X,EAAQ+X,OAAStZ,KAAK4Y,cACtC,MAAMrF,EAAevT,KAAKqZ,aAAa9X,EAAQ+X,OACzC3K,EAAc3O,KAAKoZ,UAAU7F,GACnC,OAAO7C,GAAW+I,MAAMzZ,KAAK6Q,MAAOlC,EAAK4E,EAAMhS,EAChD,CAEOjB,iBAAiB0Q,EAA8BW,GACrD,MAAMhD,EAAc3O,KAAKuG,UAAUyK,EAASF,IAC5C,OAAOJ,GAAWe,WAAWzR,KAAK6Q,MAAOlC,EAAKqC,EAAUW,EACzD,CAEMrR,YAAYgZ,EAAgBtZ,KAAK4Y,cAAec,EAA2B,QAChF,IACE1Y,EAAOC,KAAK,4DAA6DyY,EAAkBJ,GAC3F,MAAMK,QAAuC3Z,KAAK4Z,KAAKN,GACjD1R,GAAc,IAAIC,MAAOC,UACzBkE,EAAgC,GACtC,IAAK,IAAIR,EAAI,EAAGA,EAAImO,EAASjZ,OAAQ8K,IAAK,CACxC,MAAMqO,EAA2BF,EAASnO,GAE1C,IAD4B5D,EAAMiS,EAAKxI,gBAAkB,IACxCqI,EAAkB,OACP1Z,KAAK6Q,MAAMjK,gBAAgB5G,KAAKuG,UAAUsT,EAAK/I,KACzE9E,EAAQxC,KAAKqQ,EACd,CACF,CAED,OADA7Y,EAAO+G,MAAM,yBAA0BiE,EAAQtL,OAAQiZ,EAASjZ,QACzDsL,CACR,CAAC,MAAO/J,GAEP,MADAjB,EAAOkB,MAAM,8CAA+CoX,EAAOrX,GAC7DA,CACP,CACF,CAEM3B,eAAegZ,EAAgBtZ,KAAK4Y,eACzC,IACE,MAAMvS,EAAiBrG,KAAKuZ,eAAeD,GAC3CtY,EAAOC,KAAK,0BAA2BoF,GACvC,MAAMnF,QAAuBlB,KAAK6Q,MAAMhK,uBAAuBR,GAE/D,OADArF,EAAO+G,MAAM,aAAc7G,GACpBA,CACR,CAAC,MAAOe,GAEP,MADAjB,EAAOkB,MAAM,gDAAiDoX,EAAOrX,GAC/DA,CACP,CACF,CAEM3B,WAAWgZ,EAAgBtZ,KAAK4Y,eACrC,IACE,MAAMvS,EAAiBrG,KAAKuZ,eAAeD,GAC3CtY,EAAOC,KAAK,0BAA2BoF,GACvC,MACMyT,SADuB9Z,KAAK+Z,SAAST,IACOhU,KAAK0B,GAAMhH,KAAKwS,KAAKxS,KAAKoZ,UAAUpZ,KAAKuZ,eAAeD,GAAStS,MAGnH,aAFyCF,QAAQC,IAAI+S,EAGtD,CAAC,MAAO7X,GAEP,MADAjB,EAAOkB,MAAM,kDAAmDoX,EAAOrX,GACjEA,CACP,CACF,CAEM3B,oBAAoBwQ,EAAYuC,GACrC,MAAM2G,EAAmBha,KAAKuG,UAAUuK,GACxC,OAAOJ,GAAWgC,cAAc1S,KAAK6Q,MAAOmJ,EAAU3G,EACvD,CAEM/S,WAAWqO,GAChB,MAAMqL,EAAmBha,KAAKuG,UAAUoI,GACxC,OAAO+B,GAAW8B,KAAKxS,KAAK6Q,MAAOmJ,EACpC,CAEM1Z,0BAA0B2Z,GAC/Bha,EAAeC,mBAAmBF,KAAK6Y,WAAY,4DACnD5Y,EAAeC,mBAAmB+Z,EAAa,eAC/C,MAAMC,QAA8Cla,KAAK6Y,WAAWsB,YAA2CF,GACzGtL,EAAcuL,GAAQjB,UAC5B,OAAOtK,EAAM3O,KAAKwS,KAAK7D,GAAO,IAC/B,CAEMrO,YAAYwQ,GACjB,OAAOJ,GAAW0J,MAAMpa,KAAK6Q,MAAO7Q,KAAKuG,UAAUuK,GACpD,CACMxQ,YAAYwQ,EAAY5O,GAC7B,OAAOwO,GAAWxO,MAAMlC,KAAK6Q,MAAO7Q,KAAKuG,UAAUuK,GAAK5O,EACzD,CAEM5B,eAAewQ,EAAYa,GAChC,OAAOjB,GAAW2J,SAASra,KAAK6Q,MAAO7Q,KAAKuG,UAAUuK,GAAKa,EAC5D,QChIU2I,GAYSlT,SAA2CmT,IAXxDpX,0BACL,MAAO,CACLqX,mBAAoB7Z,EAAc6Y,gBAClCiB,cAAe,OACfC,wBAAyB,iBACzBC,wBAAyB,iBACzBC,6BAA8B,KAC9BC,6BAA8B,KAEjC,CAED9a,YAAoBqH,EAA2CmT,EAA0BD,GAAaQ,oBAAlF9a,KAAQoH,SAARA,EAA2CpH,KAAGua,IAAHA,EAC7Dta,EAAeC,mBAAmBkH,EAAU,YAC5CnH,EAAeC,mBAAmBqa,EAAK,OACvCta,EAAeC,mBAAmBqa,EAAIC,mBAAoB,0BAC1Dva,EAAeC,mBAAmBqa,EAAIE,cAAe,oBACtD,CAEMna,iBAEL,aADoCN,KAAKoH,SAAS2T,gBACxCC,OAAS,EACpB,CAEM1a,4BACCN,KAAKoH,SAAS6T,cAAc,CAAED,MAAO,GAAIE,oBAAqBrT,KAAKD,OAC1E,CAEMtH,kBAAkB6a,GACvB,IAAIC,QAAiBpb,KAAKqb,WAK1B,OAJIF,IACFC,EAAMA,EAAIzR,QAAQ2R,IAAOH,EAAMta,SAASya,EAAEtb,KAAKua,IAAIE,wBAC7Cza,KAAKoH,SAAS6T,cAAc,CAAED,MAAOI,EAAKF,oBAAqBrT,KAAKD,SAErEwT,CACR,CAEM9a,YAAYqE,GACjB,IAAIyW,QAAiBpb,KAAKqb,WAmB1B,OAlBI1W,IACFA,EAAM3E,KAAKua,IAAIE,eAAiB9V,EAAM3E,KAAKua,IAAIE,gBAAkBza,KAAKua,IAAIC,qBACtExa,KAAKua,IAAIG,0BACX/V,EAAM3E,KAAKua,IAAIG,yBAA2B/V,EAAM3E,KAAKua,IAAIG,0BAA4B7S,KAAKD,OAExF5H,KAAKua,IAAIK,+BACXjW,EAAM3E,KAAKua,IAAIK,8BAAgCjW,EAAM3E,KAAKua,IAAIK,+BAAiCxZ,EAASC,MAAMka,SAE5Gvb,KAAKua,IAAII,0BACXhW,EAAM3E,KAAKua,IAAII,yBAA2B9S,KAAKD,OAE7C5H,KAAKua,IAAIM,+BACXlW,EAAM3E,KAAKua,IAAIM,8BAAgCzZ,EAASC,MAAMka,SAEhEH,EAAMA,EAAIzR,QAAQ2R,GAAMA,EAAEtb,KAAKua,IAAIE,iBAAmB9V,EAAM3E,KAAKua,IAAIE,iBACrEW,EAAI5R,KAAK7E,SACH3E,KAAKoH,SAAS6T,cAAc,CAAED,MAAOI,EAAKF,oBAAqBrT,KAAKD,SAErEjD,CACR,CAEMrE,gBAAgBkb,GAErB,aADuBxb,KAAKqb,YACjBI,MAAMH,GAAMA,EAAEtb,KAAKua,IAAIE,iBAAmBe,GACtD,CAEMlb,oBAAuBob,EAAsBC,GAClD1b,EAAeC,mBAAmBwb,EAAc,gBAChDzb,EAAeC,mBAAmByb,EAAY,cAC9C,MAAMrW,EAA2B,CAAA,EAEjC,OADAA,EAAIoW,GAAgBC,EACb3b,KAAK4b,iBAAiBtW,EAC9B,CAEMhF,uBAAuB0T,GAC5B/T,EAAeC,mBAAmB8T,EAAO,SACzC,IAAIoH,QAAiBpb,KAAKqb,WAU1B,OATAD,EAAMA,EAAIzR,QAAQ2R,IAChB,IAAIO,GAAoB,EAMxB,OALAhX,OAAOR,KAAK2P,GAAO/N,SAASe,IAC1B,MAAM8U,EAAWC,EAAWC,iBAAiBV,EAAGtU,GAC1C2U,EAAkB3H,EAAMhN,GAC9B6U,EAAWA,GAAYC,IAAQH,CAAU,IAEpCE,CAAQ,IAEVT,CACR,QC9FUa,GACS7V,eAAwC8V,QAA5Dnc,YAAoBqG,EAAwC8V,GAAxClc,KAAcoG,eAAdA,EAAwCpG,KAAOkc,QAAPA,EAC1Djc,EAAeC,mBAAmBkG,EAAgB,kBAClDnG,EAAekc,uCAAuC/V,EAAeE,mBAAoB,gCACzFrG,EAAekc,uCAAuCD,EAAS,UAChE,CAEM5b,oBAAoB8b,GACzB,MAAMxX,EAA4BwX,GAAQ,CAAEpB,MAAO,GAAIE,oBAAqB,MAC5EtW,EAAOsW,oBAAsBrT,KAAKD,MAGlC,cAFmC5H,KAAKoG,eAAeO,uBAAuB3G,KAAKkc,QAAStX,EAG7F,CAEMtE,qBAKL,aAJuCN,KAAKoG,eAAeM,uBAA4C1G,KAAKkc,UAAa,CACvHlB,MAAO,GACPE,oBAAqBrT,KAAKD,MAG7B,QCtBUyU,GACSxL,MAA+BxK,OAAnDtG,YAAoB8Q,EAA+BxK,GACjD,GADkBrG,KAAK6Q,MAALA,EAA+B7Q,KAAMqG,OAANA,GAC5CwK,EACH,MAAM,IAAIlB,MAAM,gCAElB,IAAKkB,EAAMvK,mBACT,MAAM,IAAIqJ,MAAM,8CAEnB,CAEM2M,gBAAgB/I,GACrB,IAAIrS,EAAe,GAOnB,OANIlB,KAAKqG,SACPnF,GAAQlB,KAAKqG,QAEXkN,IACFrS,GAAQqS,GAEHrS,CACR,CAEMqb,cAAczL,EAAYyC,GAC/B,IAAIrS,EAAelB,KAAKsc,gBAAgB/I,GAKxC,OAJIrS,EAAKR,OAAS,IAChBQ,GAAQ,KAEVA,GAAQ4P,EAAK,QACN5P,CACR,CAEMZ,aAAawQ,EAAYyC,GAC9B,MAAMiJ,EAAmBxc,KAAKuc,cAAczL,EAAIyC,GAEhD,OADAvS,EAAO+G,MAAM,4BAA6ByU,GACnCxc,KAAK6Q,MAAM4L,WAAWD,EAC9B,CAEMlc,YAAYwQ,EAAYyC,GAC7B,MAAMiJ,EAAmBxc,KAAKuc,cAAczL,EAAIyC,GAChDvS,EAAO+G,MAAM,gBAAiByU,GAC9B,MAAMtb,QAAiBlB,KAAK6Q,MAAMnK,uBAAuB8V,GAIzD,OAFAtb,EAAK4P,GAAKA,EACV5P,EAAKqS,KAAOA,EACLrS,CACR,CAEMZ,YAAYoc,EAASnJ,GAC1BmJ,EAAK5L,GAAK4L,EAAK5L,IAAMnQ,EAAc6Y,kBACnCkD,EAAKxB,qBAAsB,IAAIrT,MAAOC,UAEtC,MAAM0U,EAAmBxc,KAAKuc,cAAcG,EAAK5L,GAAIyC,GACrDvS,EAAO+G,MAAM,eAAgByU,SAESxc,KAAK6Q,MAAMlK,uBAAuB6V,EAAUE,GAElF,aADsB1c,KAAK2c,MAAMD,EAAK5L,GAAIyC,EAE3C,CAEMjT,gBAAgBiT,GACrB,MAAMiJ,EAAmBxc,KAAKsc,gBAAgB/I,GAC9CvS,EAAO+G,MAAM,eAAgByU,GAG7B,aAD6Bxc,KAAK6Q,MAAMhK,uBAAuB2V,EAEhE,CAEMlc,uBAAuBiT,GAC5B,MAAMiJ,EAAmBxc,KAAKsc,gBAAgB/I,GAC9CvS,EAAO+G,MAAM,qBAAsByU,GACnC,MACMI,SADwB5c,KAAK6c,UAAUtJ,IACRjO,KAAK+D,GAAMrJ,KAAK2c,MAAMtT,EAAGkK,KAE9D,aADwBzM,QAAQC,IAAI6V,EAErC,CAEMtc,aAAawQ,EAAYyC,GAC9B,MAAMiJ,EAAmBxc,KAAKuc,cAAczL,EAAIyC,GAChDvS,EAAO+G,MAAM,gBAAiByU,GAG9B,OAAc,YADwBxc,KAAK6Q,MAAMjK,gBAAgB4V,EAElE,QC5CUM,GACSC,OAApBhd,YAAoBgd,GAClB,GADkB/c,KAAM+c,OAANA,GACbA,EACH,KAAM,wBAET,CAEUC,6BACT,OAAOhd,KAAK+c,MACb,CAEME,SACL,OAAOjd,KAAK+c,MACb,CAEMzc,mBAAmBuD,GACxB,MAAMkC,EAAyB,CAC7BL,UAAW7B,EACXqZ,MAAO,GAOT,OAA0C,WAJSld,KAAKmd,2BACrDC,GAAMpd,KAAKqd,YAAYD,IACxBrX,IAEuBuX,MAAM5c,MAChC,CAGMJ,kBAAkB0T,GACvB,OAAOhU,KAAK+c,OAAOxa,KAAK,IAAIgb,EAAYvJ,GACzC,CAGM1T,mBAAmB0T,GACxB,OAAOhU,KAAK+c,OAAOxa,KAAK,IAAIib,EAAaxJ,GAC1C,CAKM1T,gCAAsCmd,EAAyBzJ,EAAU0J,EAAmBC,GACjG,IAAIzc,EAAU,KACd,GAAI8S,EAAO,CACT,IAAI4J,EAAqBD,GAAgB,EACzC,EAAG,CACDC,IACA,IACE1c,QAAauc,EAAKzJ,EACnB,CAAC,MAAO/R,GACP,IAAI6a,GAAce,4DAA4D5b,GAM5E,MAAMA,EAN4E,CAClF,MAAMoK,EAAyC,IAA1BrH,KAAK8Y,IAAI,EAAGF,GACjC5c,EAAO+G,MAAM,iEAAkEiM,EAAO4J,EAAYF,EAAUrR,SACtGD,EAAeC,KAAKA,GAC1BuR,GACD,CAGF,CACF,QAAS1c,KAAUwc,GAAYE,EAAaF,IACxCxc,GAEHJ,EAAaC,kBACX,yFACA2c,EACA1J,EAGL,CACD,OAAO9S,CACR,CAEMZ,6BAA6BmF,EAA2B4H,EAAU,GACvE,IACE5H,EAAIsY,OAAS,QACb/c,EAAO+G,MAAM,6BAA8BtC,GAE3C,MAAMvE,EAA0B,CAC9BuP,MAAO,EACPuN,aAAc,EACdC,MAAO,GAGHxE,GAAgB,IAAI5R,MAAOC,UACjC,IAAIoW,EAAiC,KAErC,MAAMC,EAAkB1Y,EAAIyX,MAC5BzX,EAAIyX,MAAQ,KAEZ,GACEgB,QAAmBle,KAAKmd,2BAAkEC,GAAMpd,KAAKoe,aAAahB,IAAI3X,GACtHvE,EAAKuP,OAASyN,EAAkB,MAChChd,EAAK8c,cAAgBE,EAAyB,aAC9Chd,EAAK+c,QACLxY,EAAuB,kBAAIyY,EAAWG,uBAChCjS,EAAeC,KAAKgB,GAC1BrM,EAAO2G,MAAM,iBAAkBzG,GAC3Bid,GAAWjd,EAAKuP,OAAS0N,GAAW1Y,EAAuB,oBAC7DzE,EAAOC,KAAK,uCAAwCkd,GACpD1Y,EAAuB,kBAAI,YAEtBA,EAAuB,mBAEhC,MAAM6Y,GAAc,IAAIzW,MAAOC,UAG/B,OADA9G,EAAO+G,MAAM,qCAAsC7G,EAAMqd,EAAgBC,iBAAiBF,EAAM7E,GAAO,GAAOhU,GACvGvE,CACR,CAAC,MAAOe,GAEP,OADAjB,EAAOkB,MAAM,wBAAyBD,EAAKwD,EAAKxD,GACzC,IACR,CACF,CAEM3B,wBAA2BmF,EAA2B4H,EAAU,EAAGoR,EAAoB,MAC5F,MAAMvd,EAAY,GASlB,aARMlB,KAAK0e,6BACTjZ,GACAnF,MAAOqe,IACLzd,EAAKsI,KAAKmV,EAAE,GAEdtR,EACAoR,GAEKvd,CACR,CAEMZ,mCACLmF,EACAgY,EACApQ,EAAU,EACVoR,EAAoB,MAEpB,IAAI7O,EAAc,EAClB,IACE5O,EAAO+G,MAAM,uBAAwBtC,GACrC,MAAMgU,GAAgB,IAAI5R,MAAOC,UACjC9G,EAAO+G,MAAM,aAActC,GAE3B,IAAIyY,QAAuCle,KAAKmd,2BAC7CC,GAAMpd,KAAKoe,aAAahB,IACzB3X,GAEF,IAAK,IAAI+F,EAAI,EAAGA,EAAI0S,EAAWZ,MAAM5c,OAAQ8K,UACrCiS,EAAKS,EAAWZ,MAAM9R,IAC5BoE,IAGF,IAAIqO,EAAQ,EACRW,EAAa,EAEjB,KAAOV,EAAWG,mBAAmC,OAAdI,GAAsB7O,EAAM6O,KAAehZ,EAAIyX,OAAO,CAE3Flc,EAAO2G,MAAM,wCAAyCuW,EAAWG,kBACjE5Y,EAAuB,kBAAIyY,EAAWG,iBACtCH,QAAmBle,KAAKmd,2BAAkEC,GAAMpd,KAAKoe,aAAahB,IAAI3X,GACtH,IAAK,IAAI+F,EAAI,EAAGA,EAAI0S,EAAWZ,MAAM5c,OAAQ8K,UACrCiS,EAAKS,EAAWZ,MAAM9R,IAC5BoE,IAEF5O,EAAO2G,MAAM,0BAA2BiI,GACxCqO,IACAW,GAAmC,IAArBV,EAAW1N,MAAc,EAAI,QACrCpE,EAAeC,KAAKgB,EAC3B,CAED,MAAMiR,GAAc,IAAIzW,MAAOC,UAE/B9G,EAAO+G,MACL,4EACA6H,EACA2O,EAAgBC,iBAAiBF,EAAM7E,GAAO,GAC9ChU,EACAmZ,EACAX,EAEH,CAAC,MAAOhc,GACPjB,EAAOkB,MAAM,wBAAyBD,EAAKwD,EAAKxD,EACjD,CACD,OAAO2N,CACR,CAEMtP,4BAA4ByF,EAA2BsH,EAAU,GACtE,IACEtH,EAAKgY,OAAS,QACd,MAAM7c,EAA0B,CAC9BuP,MAAO,EACPuN,aAAc,EACdC,MAAO,GAGTjd,EAAO+G,MAAM,4BAA6BhC,GAC1C,MAAM0T,GAAgB,IAAI5R,MAAOC,UAEjC,IAAIoW,EAAgC,KAEpC,MAAMC,EAAkBpY,EAAKmX,MAC7BnX,EAAKmX,MAAQ,KAEb,GACEgB,QAAmBle,KAAKmd,2BAAgEC,GAAMpd,KAAKqd,YAAYD,IAAIrX,GACnH7E,EAAKuP,OAASyN,EAAkB,MAChChd,EAAK8c,cAAgBE,EAAyB,aAC9Chd,EAAK+c,QACLlY,EAAwB,kBAAImY,GAAYG,uBAClCjS,EAAeC,KAAKgB,GAC1BrM,EAAO2G,MAAM,iBAAkBzG,GAC3Bid,GAAWjd,EAAKuP,OAAS0N,GAAWpY,EAAwB,oBAC9D/E,EAAOC,KAAK,sCAAuCkd,GACnDpY,EAAwB,kBAAI,YAEvBA,EAAwB,mBAEjC,MAAMuY,GAAc,IAAIzW,MAAOC,UAG/B,OADA9G,EAAO+G,MAAM,qCAAsC7G,EAAMqd,EAAgBC,iBAAiBF,EAAM7E,GAAO,GAAO1T,GACvG7E,CACR,CAAC,MAAOe,GAEP,OADAjB,EAAOkB,MAAM,wBAAyBD,EAAK8D,EAAM9D,GAC1C,IACR,CACF,CAEM3B,uBAA0ByF,EAA2BsH,EAAU,EAAGoR,EAAoB,MAC3F,MAAMvd,EAAY,GASlB,aARMlB,KAAK6e,4BACT9Y,GACAzF,MAAOqe,IACLzd,EAAKsI,KAAKmV,EAAE,GAEdtR,EACAoR,GAEKvd,CACR,CAEMZ,kCACLyF,EACA0X,EACApQ,EAAU,EACVoR,EAAoB,MAEpB,IAAI7O,EAAc,EAClB,IACE5O,EAAO+G,MAAM,sBAAuBhC,GACpC,MAAM0T,GAAgB,IAAI5R,MAAOC,UAEjC9G,EAAO+G,MAAM,aAAchC,GAE3B,IAAImY,QAAsCle,KAAKmd,2BAC5CC,GAAMpd,KAAKqd,YAAYD,IACxBrX,GAEF,IAAK,IAAIyF,EAAI,EAAGA,EAAI0S,EAAWZ,MAAM5c,OAAQ8K,UACrCiS,EAAKS,EAAWZ,MAAM9R,IAC5BoE,IAGF,KAAOsO,EAAWG,mBAAmC,OAAdI,GAAsB7O,EAAM6O,KAAe1Y,EAAKmX,OAAO,CAC5Flc,EAAO2G,MAAM,wCAAyCuW,EAAWG,kBACjEtY,EAAwB,kBAAImY,EAAWG,iBACvCH,QAAmBle,KAAKmd,2BAAgEC,GAAMpd,KAAKqd,YAAYD,IAAIrX,GACnH,IAAK,IAAIyF,EAAI,EAAGA,EAAI0S,EAAWZ,MAAM5c,OAAQ8K,UACrCiS,EAAKS,EAAWZ,MAAM9R,IAC5BoE,IAEF5O,EAAO2G,MAAM,uBAAwBiI,SAC/BxD,EAAeC,KAAKgB,EAC3B,CAED,MAAMiR,GAAc,IAAIzW,MAAOC,UAE/B9G,EAAO+G,MAAM,8CAA+C6H,EAAK2O,EAAgBC,iBAAiBF,EAAM7E,GAAO,GAAO1T,EACvH,CAAC,MAAO9D,GACPjB,EAAOkB,MAAM,wBAAyBD,EAAK8D,EAAM9D,EAClD,CACD,OAAO2N,CACR,CAEMtP,wBAA2BuD,EAAmBib,EAAeC,GAClE,IAAKA,GAAaA,EAAY,EAC5B,MAAM,IAAIpP,MAAM,0CAA4CoP,GAG9D,IAAI7d,EAAO,EACX,GAAM4d,GAAYA,EAASpe,OAAS,EAAG,CACrC,IAAIse,EAAoC,GAYxC,IAXAF,EAAS7Y,SAASgZ,IAChBD,EAAWxV,KAAK,CACd0V,WAAY,CACVC,KAAMF,EACNG,uBAAwB,QACxB1Z,UAAW7B,IAEb,IAEJ7C,EAAO+G,MAAM,kCAAmCiX,EAAWte,OAAQmD,GAE5Dmb,EAAWte,OAAS,GAAG,CAC5B,MAAM2e,EAAkCL,EAAWM,MAAM,EAAGta,KAAK2G,IAAIqT,EAAWte,OAAQqe,IACxFC,EAAaA,EAAWM,MAAMD,EAAS3e,QACvC,MAAMqI,EAAqC,CACzCwW,aAAc,CAAE,EAChBH,uBAAwB,QACxBI,4BAA6B,QAE/BzW,EAAOwW,aAAa1b,GAAawb,EAEjC,IAAII,EAAW,EACXrM,GAAO,EACPsM,EAA4C,KAChD,MAAQtM,GAAQqM,EAAW,GAAG,CAC5B,IACEC,QAAqB1f,KAAK+c,OAAOxa,KAAK,IAAIod,EAAkB5W,GAC7D,CAAC,MAAO9G,GACP,IAAI6a,GAAce,4DAA4D5b,GAI5E,MAAMA,EAHNjB,EAAOC,KAAK,mEACZye,EAAe,CAAEE,iBAAkB7W,EAAOwW,aAI7C,CACD,GACIG,GACAA,EAAaE,kBACbF,EAAaE,iBAAiB/b,IAChC6b,EAAaE,iBAAiB/b,GAAWnD,OAAS,EAClD,CACA,MAAMmf,EAAkB7a,KAAK8Y,IAAI,EAAG2B,GACpCze,EAAOsL,KACL,uEACAoT,EAAaE,iBAAiB/b,GAAWnD,OACzCmf,SAEIzT,EAAeC,KAAe,IAAVwT,GAC1BJ,IACA1W,EAAOwW,aAAa1b,GAAa6b,EAAaE,iBAAiB/b,EAChE,MACCuP,GAAO,CAEV,CAEGsM,GACAA,EAAaE,kBACbF,EAAaE,iBAAiB/b,IAChC6b,EAAaE,iBAAiB/b,GAAWnD,OAAS,GAElDM,EAAOkB,MAAM,uDACbhB,GAAQme,EAAS3e,OAASgf,EAAaE,iBAAiB/b,GAAWnD,OACnEM,EAAOsL,KAAK,uBAAwBoT,EAAaE,mBAEjD1e,GAAQme,EAAS3e,MAEpB,CACF,CACD,OAAOQ,CACR,CAEMZ,iDACLmF,EACAqa,EACAf,EAAoB,IAEpB9e,EAAeC,mBAAmBuF,GAClCxF,EAAeC,mBAAmBuF,EAAIC,WACtCzF,EAAeC,mBAAmB4f,GAClC7f,EAAe8D,KAAK+b,EAASpf,OAAS,GAEtC,MAAMqf,QAA0C/f,KAAK8F,kBAAuCL,GACtFua,EAAkClD,GAAcmD,mBAAmBF,EAAYD,GAErF,aADwB9f,KAAKkgB,kBAAqBza,EAAIC,UAAWsa,EAAUjB,EAE5E,CAEMze,wBAA2BuD,EAAmBsc,EAA+BpB,GAClF,IAAKA,GAAaA,EAAY,GAAKA,EAAY,IAC7C,MAAM,IAAIpP,MAAM,+DAAiEoP,GAGnF,IAAI7d,EAAY,GAChB,MAAMkf,EAAsC,GAC5C,IAAIC,EAAkCxb,OAAOC,OAAO,GAAIqb,GACxD,KAAOE,EAAO3f,OAAS,GAAG,CACxB,MAAM2e,EAAkCgB,EAAOf,MAAM,EAAGta,KAAK2G,IAAI0U,EAAO3f,OAAQqe,IAChFsB,EAASA,EAAOf,MAAMD,EAAS3e,QAC/B,MAAM4f,EAAkC,CAAA,EACxCA,EAAWzc,GAAa,CACtB0c,KAAMlB,GAER,MAAMmB,EAAsC,CAC1CjB,aAAce,EACdlB,uBAAwB,SAE1BgB,EAAQ5W,KAAKgX,EACd,CACDxf,EAAO+G,MAAM,qBAAsBqY,EAAQ1f,QAE3C,IAAK,IAAI8K,EAAI,EAAGA,EAAI4U,EAAQ1f,OAAQ8K,IAAK,CAEnC4U,EAAQ1f,OAAS,GACnBM,EAAOC,KAAK,4BAA6BuK,EAAI,EAAG4U,EAAQ1f,QAE1D,MAAMsT,EAAkCoM,EAAQ5U,GAChD,IAAIiU,EAAmB,EACvB,EAAG,CACDze,EAAO2G,MAAM,aAAcqM,GAC3B,MAAMtH,QAAuC1M,KAAK+c,OAAOxa,KAAK,IAAIke,EAAgBzM,IAGlF9S,EAAOA,EAAK8B,OAAO0J,EAAIgU,UAAU7c,IAG3B6I,EAAIiU,iBAAqBjU,EAAIiU,gBAAgB9c,IAAc6I,EAAIiU,gBAAgB9c,GAAW0c,KAAK7f,OAAS,GAAK+e,EAAW,KAC5Hze,EAAO2G,MAAM,gCAAiC+E,EAAIiU,gBAAgB9c,GAAW0c,YACvEnU,EAAeC,KAA6B,IAAxBrH,KAAK8Y,IAAI,EAAG2B,IACtCA,KAEFzL,EAAMuL,aAAe7S,EAAIiU,eAC1B,QAAS3M,EAAMuL,cAAgBvL,EAAMuL,aAAa1b,GAAW0c,KAAK7f,OAAS,EAC7E,CACD,OAAOQ,CACR,CAEMZ,yBAAyBuD,EAAmBQ,EAA6B0a,GAC9E,IAAKA,GAAaA,EAAY,EAC5B,MAAM,IAAIpP,MAAM,0CAA4CoP,GAG9D,IAAI7d,EAAO,EACX,GAAMmD,GAAQA,EAAK3D,OAAS,EAAG,CAC7B,IAAIse,EAAoC,GAYxC,IAXA3a,EAAK4B,SAASgZ,IACZD,EAAWxV,KAAK,CACdoX,cAAe,CACb7O,IAAKkN,EACLG,uBAAwB,QACxB1Z,UAAW7B,IAEb,IAEJ7C,EAAO+G,MAAM,wCAAyCiX,EAAWte,OAAQmD,GAElEmb,EAAWte,OAAS,GAAG,CAC5B,MAAM2e,EAAkCL,EAAWM,MAAM,EAAGta,KAAK2G,IAAIqT,EAAWte,OAAQqe,IACxFC,EAAaA,EAAWM,MAAMD,EAAS3e,QACvC,MAAMqI,EAAqC,CACzCwW,aAAc,CAAE,EAChBH,uBAAwB,QACxBI,4BAA6B,QAE/BzW,EAAOwW,aAAa1b,GAAawb,EAEjC,IAAII,EAAW,EACXrM,GAAO,EACPsM,EAA4C,KAChD,MAAQtM,GAAQqM,EAAW,GAAG,CAC5B,IACEC,QAAqB1f,KAAK+c,OAAOxa,KAAK,IAAIod,EAAkB5W,GAC7D,CAAC,MAAO9G,GACP,IAAI6a,GAAce,4DAA4D5b,GAI5E,MAAMA,EAHNjB,EAAOC,KAAK,mEACZye,EAAe,CAAEE,iBAAkB7W,EAAOwW,aAI7C,CACD,GACIG,GACAA,EAAaE,kBACbF,EAAaE,iBAAiB/b,IAChC6b,EAAaE,iBAAiB/b,GAAWnD,OAAS,EAClD,CACA,MAAMmf,EAAkB7a,KAAK8Y,IAAI,EAAG2B,GACpCze,EAAOsL,KACL,uEACAoT,EAAaE,iBAAiB/b,GAAWnD,OACzCmf,SAEIzT,EAAeC,KAAe,IAAVwT,GAC1BJ,IACA1W,EAAOwW,aAAa1b,GAAa6b,EAAaE,iBAAiB/b,EAChE,MACCuP,GAAO,CAEV,CAEGsM,GACAA,EAAaE,kBACbF,EAAaE,iBAAiB/b,IAChC6b,EAAaE,iBAAiB/b,GAAWnD,OAAS,GAElDM,EAAOkB,MAAM,uDACbhB,GAAQme,EAAS3e,OAASgf,EAAaE,iBAAiB/b,GAAWnD,OACnEM,EAAOsL,KAAK,uBAAwBoT,EAAaE,mBAEjD1e,GAAQme,EAAS3e,OAGnBM,EAAO+G,MAAM,sCAAuCiX,EAAWte,OAAQgf,EACxE,CACF,CACD,OAAOxe,CACR,CAGMZ,gBAAgBuD,EAAmBc,EAA4Bkc,EAAyB,GAC7F,IAAI3f,EAA6B,KAC7B0c,EAAqB,EAEzB,MAAM7U,EAA8B,CAClCoW,KAAMxa,EACNya,uBAAwB,QACxB1Z,UAAW7B,GAGb,MAAQ3C,GAAQ0c,EAAaiD,GAC3B,IACE3f,QAAalB,KAAK+c,OAAOxa,KAAK,IAAIue,EAAW/X,GAC9C,CAAC,MAAO9G,GACP,IAAI6a,GAAce,4DAA4D5b,GAM5E,MAAMA,EAN4E,CAClF,MAAMoK,EAAyC,IAA1BrH,KAAK8Y,IAAI,EAAGF,GACjC5c,EAAO+G,MAAM,kEAAmEgB,EAAQ6U,EAAYiD,EAAgBxU,SAC9GD,EAAeC,KAAKA,GAC1BuR,GACD,CAGF,CAKH,OAHK1c,GACHF,EAAOsL,KAAK,sDAAuDvD,EAAQ8X,GAEtE3f,CACR,CAEMZ,4CAA4CuD,EAAmBc,EAA4Boc,GAChG,IAAI7f,GAAgB,EACpB,MAAM6H,EAA8B,CAClCoW,KAAMxa,EACNya,uBAAwB,QACxB4B,oBAAqB,0DACrBpb,yBAA0B,CACxB,aAAcmb,GAEhBlb,0BAA2B,CACzB,QAAS,MAEXH,UAAW7B,GAEb,IACE,MAAMod,QAAoCjhB,KAAK+c,OAAOxa,KAAK,IAAIue,EAAW/X,IAC1E/H,EAAO2G,MAAM,aAAcsZ,GAC3B/f,GAAO,CACR,CAAC,MAAOe,GACP,GAAI6a,GAAce,4DAA4D5b,GAE5EjB,EAAO+G,MAAM,uDAAwDgB,SAC/DqD,EAAeC,KAAK,SACrB,KAAIpK,IAAOA,EAAU,MAAqB,oCAAhBA,EAAU,KAIzC,MAAMA,EAHNjB,EAAO+G,MAAM,gDACb7G,GAAO,CAGR,CACF,CACD,OAAOA,CACR,CAKMZ,sCACLuD,EACAc,EACAmb,EACAoB,EACAC,EAAqB,KACrBN,EAAyB,GAEzB5gB,EAAe8D,KAAK+b,GAAYA,EAASpf,OAAS,GAAKof,EAASpf,OAAS,EAAG,kCAC5E,IAAI0gB,EAA4B,KAC5BxD,EAAqB,EAEzB,MAAMyD,EAAoC,CACxC,QAASvB,EAAS,IAEdwB,EAA6C,CACjD,QAAS3c,EAAMmb,EAAS,KAG1B,IAAIyB,EAAkB,iBAClBzB,EAASpf,OAAS,IACpB6gB,GAAW,sBACXF,EAAU,SAAWvB,EAAS,GAC9BwB,EAAW,SAAW3c,EAAMmb,EAAS,KAGvC,MAAM/W,EAAiC,CACrCoW,KAAMxa,EACNya,uBAAwB,QACxB4B,oBAAqBO,EACrB3b,yBAA0Byb,EAC1Bxb,0BAA2Byb,EAC3B5b,UAAW7B,GAGb,IAAI2d,EAAsB,EAC1B,MAAQJ,GAAOxD,EAAaiD,KAAoBM,GAAcK,EAAcL,IAC1E,IACEC,QAAYphB,KAAK+c,OAAOxa,KAAK,IAAIue,EAAW/X,GAC7C,CAAC,MAAO9G,GACP,GAAI6a,GAAce,4DAA4D5b,GAAM,CAClF2b,IACA,MAAMvR,EAAyC,IAA1BrH,KAAK8Y,IAAI,EAAGF,GACjC5c,EAAO+G,MAAM,kEAAmEgB,EAAQ6U,EAAYiD,EAAgBxU,SAC9GD,EAAeC,KAAKA,EAC3B,KAAM,KAAIpK,IAAOA,EAAU,MAAqB,oCAAhBA,EAAU,KAWzC,MAAMA,EAX4E,CAClF,IAAIwf,EAAc5c,OAAOC,OAAO,CAAA,EAAIiE,EAAOoW,MAC3Cne,EAAOC,KAAK,+DAAgEwgB,GAC5EA,EAAWP,EAAeO,GAC1B1Y,EAAOoW,KAAOsC,EACd1Y,EAAOlD,0BAA0B,SAAW4b,EAAS3B,EAAS,IAC1DA,EAASpf,OAAS,IACpBqI,EAAOlD,0BAA0B,SAAW4b,EAAS3B,EAAS,KAEhE0B,GACD,CAEA,CACF,CAUH,OARIJ,GAAOI,EAAc,GACvBxgB,EAAOC,KAAK,mCAAoC0D,EAAOoE,EAAOoW,MAG3DiC,GACHpgB,EAAOsL,KAAK,+EAAgFvD,EAAQ6U,EAAY4D,GAG3GJ,EAAOrY,EAAOoW,KAAwB,IAC9C,CAGM7e,gBAAmBuD,EAAmBQ,EAA2Bwc,EAAyB,GAC/F,IAAIa,EAA+B,KAC/B9D,EAAqB,EAEzB,MAAM7U,EAA8B,CAClCrD,UAAW7B,EACXkO,IAAK1N,GAGP,MAAQqd,GAAU9D,EAAaiD,GAC7B,IACEa,QAAe1hB,KAAK+c,OAAOxa,KAAK,IAAIof,EAAW5Y,GAChD,CAAC,MAAO9G,GACP,IAAI6a,GAAce,4DAA4D5b,GAM5E,MAAMA,EAN4E,CAClF,MAAMoK,EAAyC,IAA1BrH,KAAK8Y,IAAI,EAAGF,GACjC5c,EAAO+G,MAAM,iEAAkEgB,EAAQ6U,EAAYiD,EAAgBxU,SAC7GD,EAAeC,KAAKA,GAC1BuR,GACD,CAGF,CAEE8D,GACH1gB,EAAOsL,KAAK,uDAAwDvD,EAAQ8X,GAG9E,OADkBa,GAAYA,EAAOvC,KAAOta,OAAOC,OAAO,CAAO,EAAE4c,EAAOvC,MAAQ,IAEnF,CAEMhc,mEAAmElB,GACxE,QAASA,KAASA,EAAU,MAAqB,2CAAhBA,EAAU,IAC5C,CAGM3B,oCACLuD,EACAQ,EACAud,EACAC,EACAhB,EAAyB,GAEzB,IAAIa,EAAkC,KAClC9D,EAAqB,EAEzB,MAAM7U,EAAoC,CACxCrD,UAAW7B,EACXkO,IAAK1N,EACLyd,iBAAkB,kCAClBlc,yBAA0B,CACxB,WAAYgc,GAEd/b,0BAA2B,CACzB,UAAW,EACX,UAAW,GAEbmb,oBAAqB,qBACrBe,aAAc,WAGhB,IAAIC,GAAwB,EAC5B,MAAQN,GAAU9D,EAAaiD,IAAmBmB,GAChD,IACEN,QAAe1hB,KAAK+c,OAAOxa,KAAK,IAAI0f,EAAkBlZ,GACvD,CAAC,MAAO9G,GACP,GAAI6a,GAAce,4DAA4D5b,GAAM,CAClF,MAAMoK,EAAyC,IAA1BrH,KAAK8Y,IAAI,EAAGF,GACjC5c,EAAO+G,MAAM,mEAAoEgB,EAAQ6U,EAAYiD,EAAgBxU,SAC/GD,EAAeC,KAAKA,GAC1BuR,GACD,KAAM,KAAM3b,IAASA,EAAU,MAAqB,oCAAhBA,EAAU,KAI7C,MAAMA,EAHNjB,EAAOC,KAAK,4DAA6DoD,GACzE2d,GAAe,CAGhB,CACF,CAEEN,GAAWM,GACdhhB,EAAOsL,KAAK,yDAA0DvD,EAAQ8X,GAGhF,MAAM3f,EAAYwgB,GAAYA,EAAOQ,WAAard,OAAOC,OAAO,CAAO,EAAE4c,EAAOQ,YAAc,KAO9F,OALIL,GAAgB3gB,GAAuC,IAA/BA,EAAK0gB,KAC/B5gB,EAAOC,KAAK,yCACNjB,KAAKmF,aAAatB,EAAWQ,IAG9BnD,CACR,CAGMZ,mBAAmBuD,EAAmBQ,GAC3C,MAAM0E,EAAiC,CACrCrD,UAAW7B,EACXkO,IAAK1N,GAIP,aAD8CrE,KAAK+c,OAAOxa,KAAK,IAAI4f,EAAcpZ,GAElF,CAGMzI,oBAAoBuD,EAAmBQ,EAA2B+d,EAA0BC,EAAY,GAC7G,MAAMC,EAAoC,CACxC5c,UAAW7B,EACXkO,IAAK1N,EACLyd,iBAAkB,mDAClBlc,yBAA0B,CACxB,oBAAqBwc,GAEvBvc,0BAA2B,CACzB,OAAQwc,GAEVN,aAAc,eAGVQ,QAAoCviB,KAAK+c,OAAOxa,KAAK,IAAI0f,EAAkBK,IAEjF,OADqBE,EAAcC,WAAWF,EAAGL,WAAWE,GAE7D,CAMMjf,mBAAmBuf,GACxB,GAAMA,EAAI,CACR,MAAMC,EAAgB,GACtB9d,OAAOR,KAAKqe,GAAIzc,SAASe,IACvB,MAAM2X,EAAS+D,EAAG1b,GACR,KAAN2X,EACFgE,EAAInZ,KAAKxC,GACA2X,aAAa9Z,QACtBiY,GAAc8F,YAAYjE,EAC3B,IAEH3d,EAAO2G,MAAM,qBAAsBgb,GACnCA,EAAI1c,SAASe,WACJ0b,EAAG1b,EAAE,GAEf,CACF,CAGM7D,uBAAuB6Q,EAA4B6O,GACxD,IAAI3hB,EAA4B,KAUhC,OATM8S,GAAW6O,GAAaA,EAAUniB,OAAS,IAC/CQ,EAAO,CAAA,EACP2hB,EAAU5c,SAASe,IACZgN,EAAMhN,IACTlG,EAAaC,kBAAkB,2CAA4CiT,EAAOhN,GAEpF9F,EAAK8F,GAAKgN,EAAMhN,EAAE,KAGf9F,CACR,CAEMiC,0BAA0B6Q,EAA8B3P,GAE7D,OADoC2P,EAAM1O,KAAKkG,GAAMsR,GAAcgG,gBAAgBtX,EAAGnH,IAEvF,QCp0BU0e,GACShG,OAApBhd,YAAoBgd,GAClB,GADkB/c,KAAM+c,OAANA,GACbA,EACH,KAAM,wBAET,CAEMzc,kBAAkBuD,EAAmBmf,GAAgB,GAC1D/iB,EAAeC,mBAAmB2D,GAClC,MAAMmQ,EAAiC,CACrCtO,UAAW7B,GAEb7C,EAAO+G,MAAM,wBAAyBlE,GACtC,MAAM3C,QAAuClB,KAAK+c,OAAOxa,KAAK,IAAI0gB,EAAmBjP,IAOrF,OALIgP,IACFhiB,EAAO+G,MAAM,uDACP/H,KAAKkjB,mBAAmBrf,IAGzB3C,CACR,CAEMZ,kBACL0T,EACAmP,GAAe,EACfC,GAAkB,GAElBnjB,EAAeC,mBAAmB8T,GAClC/T,EAAeC,mBAAmB8T,EAAMtO,WAExC1E,EAAO+G,MAAM,0BAA2BiM,SACVhU,KAAKqjB,YAAYrP,EAAMtO,aAG/C0d,GACFpiB,EAAO+G,MAAM,mDAAoDiM,EAAMtO,iBACjE1F,KAAKsjB,YAAYtP,EAAMtO,YAE7B5E,EAAaC,kBAAkB,oEAAqEiT,EAAMtO,YAI9G,MAAMxE,QAAuClB,KAAK+c,OAAOxa,KAAK,IAAIghB,EAAmBvP,IAOrF,OALImP,IACFniB,EAAO+G,MAAM,uCACP/H,KAAKwjB,kBAAkBxP,EAAMtO,YAG9BxE,CACR,CAEMZ,wBAAwBuD,GAC7B,IAAI3C,GAAO,EACPuT,QAAwCzU,KAAKyjB,kBAAkB5f,GAEnE,KAAS4Q,GAASA,EAAIiP,OAAmC,WAA1BjP,EAAIiP,MAAMC,aACvC3iB,EAAO2G,MAAM,6CACPyE,EAAeC,KAAK,KAC1BoI,QAAYzU,KAAKyjB,kBAAkB5f,GAQrC,OALK4Q,GAAQA,EAAIiP,QACf1iB,EAAOsL,KAAK,wDAAyDzI,GACrE3C,GAAO,GAGFA,CACR,CAEMZ,yBAAyBuD,GAC9B,IAAI4Q,QAAwCzU,KAAKyjB,kBAAkB5f,GAEnE,KAAS4Q,GACPzT,EAAO2G,MAAM,yDAA0D9D,EAAW4Q,EAAIiP,MAAMC,mBACtFvX,EAAeC,KAAK,KAC1BoI,QAAYzU,KAAKyjB,kBAAkB5f,EAEtC,CAEMvD,kBAAkBuD,GAEvB,cAD+C7D,KAAKyjB,kBAAkB5f,EAEvE,CAEMvD,wBAAwBuD,GAC7B,IAEE,aAD8C7D,KAAK+c,OAAOxa,KAAK,IAAIqhB,EAAqB,CAAEle,UAAW7B,IAEtG,CAAC,MAAO5B,GACP,GAAMA,EAAU,MAAqB,8BAAhBA,EAAU,KAC7B,OAAO,KAEP,MAAMA,CAET,CACF,QCtGU4hB,GAWDC,MACAC,QACAC,UACAC,SAbFC,UASRnkB,YACU+jB,EAAgB,EAChBC,EAAkB,GAClBC,EAAoB,IACpBC,EAAmB,oBAHnBjkB,KAAK8jB,MAALA,EACA9jB,KAAO+jB,QAAPA,EACA/jB,KAASgkB,UAATA,EACAhkB,KAAQikB,SAARA,EAERhkB,EAAe8D,KAAK+f,EAAQ,EAAG,+BAC/B7jB,EAAe8D,KAAKggB,EAAU,EAAG,iCACjC9jB,EAAeC,mBAAmBS,EAAcC,WAAWqjB,GAAW,qCACtEhkB,EAAe8D,KAAKpD,EAAcwjB,UAAUF,GAAW,2BACvDhkB,EAAe8D,KAAKpD,EAAcyjB,+BAA+BH,GAAW,iCAC5E,MAAMI,EAAuBrf,KAAK8Y,IAAImG,EAASvjB,OAAQojB,GACvD7jB,EAAe8D,KAAKggB,EAAUM,EAAc,2CAA6CN,EAAU,MAAQM,EAAe,KAC1HpkB,EAAeC,mBAAmBS,EAAcC,WAAWZ,KAAKgkB,WAAY,0CAC5E,MAAMM,EAAqB3jB,EAAc4jB,wBAAwBT,EAAOG,GACxEjkB,KAAKkkB,UAAYI,EAAShF,MAAM,EAAGyE,EACpC,CAEUS,iBACT,OAAO3f,OAAOC,OAAO,GAAI9E,KAAKkkB,UAC/B,CAEUO,mBACT,OAAOzkB,KAAKkkB,UAAUlf,KAAKC,MAAMD,KAAK0f,SAAW1kB,KAAK+jB,SACvD,CAEMY,gBAAgB3Q,GACrB/T,EAAeC,mBAAmBS,EAAcC,WAAWoT,GAAQ,kCAEnE,OADuBhU,KAAKkkB,UAAU5e,KAAK+D,GAAM2K,EAAQhU,KAAKgkB,UAAY3a,GAE3E,CAEMub,wBAAwBC,GAC7B5kB,EAAe8D,KAAK8gB,GAAUA,EAAOnkB,OAAS,EAAG,kCACjD,IAAIQ,EAAiB,GAIrB,OAHA2jB,EAAO5e,SAASuF,IACdtK,EAAOA,EAAK8B,OAAOhD,KAAK2kB,gBAAgBnZ,GAAG,IAEtCtK,CACR,CAEM4jB,YAAY9Q,GAEjB,OADA/T,EAAeC,mBAAmBS,EAAcC,WAAWoT,GAAQ,kCAC5DA,EAAQhU,KAAKgkB,UAAYhkB,KAAKykB,YACtC,CAEMM,cAAc/Q,GACnB/T,EAAeC,mBAAmBS,EAAcC,WAAWoT,GAAQ,2CACnE,MAAMgR,EAAchR,EAAMtT,OAASV,KAAK8jB,MAQxC,OAPIkB,EAAM,GAAKhR,EAAMiR,OAAOD,KAAShlB,KAAKgkB,YACxCljB,EAAaC,kBACX,kFACAf,KAAKgkB,UACLgB,GAGGhR,EAAM8D,UAAUkN,EACxB,CAEME,aAAalR,GAClB/T,EAAeC,mBAAmBS,EAAcC,WAAWoT,GAAQ,2CACnE,MAAMgR,EAAchR,EAAMtT,OAASV,KAAK8jB,MAIxC,OAHIkB,EAAM,GAAKhR,EAAMiR,OAAOD,KAAShlB,KAAKgkB,YACxCljB,EAAaC,kBAAkB,iFAAkFf,KAAKgkB,UAAWgB,GAE5HhR,EAAM8D,UAAU,EAAGkN,EAC3B,QCvDUG,GAISxc,OAAsCyc,iBAHlDC,IACAC,mBAERvlB,YAAoB4I,EAAiB,YAAqByc,EAA2B,cAAjEplB,KAAM2I,OAANA,EAAsC3I,KAAgBolB,iBAAhBA,EACxDplB,KAAKqlB,IAAM,IAAIE,EAAU,CAAE5c,OAAQA,IACnC3I,KAAKslB,mBAAqB,IAAIE,EAAyB,CAAE7c,OAAQA,GAClE,CACU8c,gBACT,OAAOzlB,KAAKqlB,GACb,CAEUK,+BACT,OAAO1lB,KAAKslB,kBACb,CAEMhlB,mBAAmBqlB,EAAoBC,EAA+B,GAC3E,IAAI1kB,GAAgB,EAEpB,IACE,MAAM2kB,EAAwC,CAC5CC,YAAa,CAACH,GACdI,QAAQ,GAGV/kB,EAAOC,KAAK,+BAAgC4kB,SACtC7lB,KAAKqlB,IAAI9iB,KAAK,IAAIyjB,EAAqBH,IAC7C7kB,EAAOC,KAAK,mDACZ,IAAIqM,QAAyBtN,KAAKimB,iBAAiBN,GAEnD,GAAIC,EAAuB,EAAG,CAC5B,MAAMnM,GAAgB,IAAI5R,MAAOC,UACjC,KAASwF,GAAgC,KAAtBA,EAAO4Y,MAAMC,OAAe,IAAIte,MAAOC,UAAY2R,EAAQmM,GAC5E5kB,EAAO+G,MACL,2DACAuF,EAAO4Y,MACP3H,EAAgBC,iBAAiBoH,UAE7BxZ,EAAeC,KAAK,KAC1BiB,QAAetN,KAAKimB,iBAAiBN,EAExC,CACF,CAAC,MAAO1jB,GACPjB,EAAOkB,MAAM,kCAAmCyjB,EAAY1jB,EAAKA,GACjEf,GAAO,CACR,CACD,OAAOA,CACR,CAEMZ,qBAAqBqlB,EAAoBS,EAA8B,GAC5E,IAAIllB,GAAgB,EAEpB,IACE,MAAMmlB,EAA0C,CAC9CP,YAAa,CAACH,GACdI,QAAQ,GAIV/kB,EAAOC,KAAK,+BAAgColB,SACtCrmB,KAAKqlB,IAAI9iB,KAAK,IAAI+jB,EAAsBD,IAC9CrlB,EAAOC,KAAK,mDACZ,IAAIqM,QAAyBtN,KAAKimB,iBAAiBN,GAEnD,GAAIS,EAAsB,EAAG,CAC3B,MAAM3M,GAAgB,IAAI5R,MAAOC,UACjC,KAASwF,GAAgC,KAAtBA,EAAO4Y,MAAMC,OAAe,IAAIte,MAAOC,UAAY2R,EAAQ2M,GAC5EplB,EAAO+G,MACL,2DACAuF,EAAO4Y,MACP3H,EAAgBC,iBAAiB4H,UAE7Bha,EAAeC,KAAK,KAC1BiB,QAAetN,KAAKimB,iBAAiBN,EAExC,CAEKrY,GAAYA,EAAOiZ,kBACvBvlB,EAAOC,KAAK,yBAA0BqM,EAAOiZ,iBAC7CvlB,EAAOC,KAAK,oDAAqDqM,EAAOiZ,iBAE3E,CAAC,MAAOtkB,GACPjB,EAAOkB,MAAM,mCAAoCyjB,EAAY1jB,EAAKA,GAClEf,GAAO,CACR,CACD,OAAOA,CACR,CAEMZ,uBAAuBqlB,GAC5B,MAAMjZ,QAAwB1M,KAAKwmB,iBAAiB,CAACb,IACrD,OAAsB,IAAfjZ,EAAIhM,OAAegM,EAAI,GAAK,IACpC,CAEMpM,uBAAuBmmB,EAAwB,IACpD,IAAIvlB,EAAmB,GAEvB,MAAM4L,EAAqC,CACzC4Z,UAAW,MAGTD,GAAeA,EAAY/lB,OAAS,IACtCoM,EAAIgZ,YAAcW,GAGpB,EAAG,CACDzlB,EAAO+G,MAAM,4BAA6B+E,GAC1C,MAAMJ,QAA4C1M,KAAKqlB,IAAI9iB,KAAK,IAAIokB,EAAyB7Z,IAC7FJ,EAAIka,aAAa3gB,SAASC,IACxBhF,EAAOA,EAAK8B,OAAOkD,EAAE2gB,UAAU,IAEjC/Z,EAAI4Z,UAAYha,EAAIga,gBACb5Z,EAAI4Z,WAGb,OADA1lB,EAAO+G,MAAM,wCAAyC7G,EAAKR,QACpDQ,CACR,CAEMZ,iCACLqlB,EACAmB,EACAC,GAEA,MAAMC,EAAmBD,GAAkB,WACrCja,EAAoC,CACxCma,WAAYtB,EACZuB,iBAAkBlnB,KAAKolB,iBACvB+B,eAAgBH,EAChBI,aAAcN,GAIhB,aADkD9mB,KAAKslB,mBAAmB/iB,KAAK,IAAI8kB,EAAwBva,GAE5G,QC7JUwa,GACgBC,UAA3BxnB,YAA2BwnB,GAAAvnB,KAASunB,UAATA,EACzBtnB,EAAeC,mBAAmBqnB,GAClCtnB,EAAe8D,KAAKwjB,EAAU7mB,OAAS,EACxC,CAEMJ,kBAAkB0X,GACvBhX,EAAO2G,MAAM,iDAAkDqQ,GAC/D,IAAI9W,EAAU,KACd,IAAK,IAAIsK,EAAI,EAAGA,EAAIxL,KAAKunB,UAAU7mB,SAAWQ,EAAMsK,IAClD,IACEtK,QAAalB,KAAKunB,UAAU/b,GAAGgc,YAAYxP,EAC5C,CAAC,MAAO/V,GACPjB,EAAOkB,MAAM,wCAAyCsJ,EAAGvJ,EAAKA,GAC9Df,EAAO,IACR,CAGH,OAAOA,CACR,QChBUumB,GACgBC,WAA3B3nB,YAA2B2nB,GAAA1nB,KAAU0nB,WAAVA,EACzBznB,EAAeC,mBAAmBwnB,EACnC,CAEMpnB,oBACLU,EAAO2G,MAAM,gDAAiD3H,KAAK0nB,YAEnE,IAAIxmB,EAAU,KACd,MAAMymB,EAA2BC,QAAUA,QAAQC,IAAMC,QAAkB,GACrEC,EAAkBpnB,EAAcC,WAAW+mB,EAAI3nB,KAAK0nB,aAG1D,GAAIK,EACF,IACE7mB,EAAOU,KAAK8R,MAAMqU,EACnB,CAAC,MAAO9lB,GAEP,MADAjB,EAAOkB,MAAM,sDAAuDD,EAAK8lB,EAAS9lB,GAC5EA,CACP,MAEDnB,EAAaC,kBAAkB,wCAAyCf,KAAK0nB,YAE/E,OAAOxmB,CACR,QCxBU8mB,GAYD5gB,SACAmT,IAZF0N,iBAA8C,IAAIC,IAEnD/kB,yCAKL,MAJuC,CACrCglB,WAAY,EACZC,oBAAqB,IAGxB,CAEDroB,YACUqH,EACAmT,EAAgCyN,GAAmBK,mCADnDroB,KAAQoH,SAARA,EACApH,KAAGua,IAAHA,EAERta,EAAeC,mBAAmBkH,GAClCnH,EAAeC,mBAAmBqa,EACnC,CAEMja,gBAAgB0X,GAOrB,OANAhX,EAAO2G,MAAM,uCAAwCqQ,GAChDhY,KAAKioB,iBAAiBK,IAAItQ,KAC7BhX,EAAO2G,MAAM,yCACb3H,KAAKioB,iBAAiBM,IAAIvQ,EAAMhY,KAAKwoB,kBAAkBxQ,KAGlDhY,KAAKioB,iBAAiBQ,IAAIzQ,EAClC,CAEO1X,wBAAwB0X,GAC9B,IAAIyH,EAAmB,EACnBve,EAAU,KAEd,MAAQA,GAAQue,EAAWzf,KAAKua,IAAI4N,YAAY,CAC9C1I,IACAze,EAAO2G,MAAM,yBAA0BqQ,GACvC,IACE9W,QAAalB,KAAKoH,SAASogB,YAAYxP,EACxC,CAAC,MAAO/V,GACP,MAAMymB,EAAiBjJ,EAAWzf,KAAKua,IAAI6N,oBAC3CpnB,EAAOC,KACL,wEACA+W,EACAyH,EACAzf,KAAKua,IAAI4N,WACTO,EACAzmB,EACAA,SAEImK,EAAeC,KAAKqc,EAC3B,CACF,CAKD,OAHKxnB,GACHJ,EAAaC,kBAAkB,sDAAuDiX,EAAMhY,KAAKua,IAAI4N,YAEhGjnB,CACR,QC5DUynB,GACgBhkB,MAA3B5E,YAA2B4E,GAAA3E,KAAK2E,MAALA,EACzB1E,EAAeC,mBAAmByE,EACnC,CAEMxB,kBAAqBylB,GAC1B,MAAMC,EAAoB,IAAIX,IAI9B,OAHArjB,OAAOR,KAAKukB,GAAQ3iB,SAASe,IAC3B6hB,EAAEN,IAAIvhB,EAAG4hB,EAAO5hB,GAAG,IAEd,IAAI2hB,GAAmCE,EAC/C,CAEMvoB,kBAAkB0X,GACvBhX,EAAO2G,MAAM,+CAAgDqQ,GAE7D,OADgBhY,KAAK2E,MAAM8jB,IAAIzQ,EAEhC,QCbU8Q,GAGgBvO,IAFnBwO,QAERhpB,YAA2Bwa,GAAAva,KAAGua,IAAHA,EACzBta,EAAeC,mBAAmBqa,GAClCta,EAAeC,mBAAmBqa,EAAIyO,YACtC/oB,EAAeC,mBAAmBqa,EAAI5R,QACtC1I,EAAe8D,OAAOwW,EAAI0O,cAAgB1O,EAAI5R,OAAQ,4CACtD,MAAMkL,EAAe0G,EAAI0O,YAAc,IAAIC,EAAS,CAAEvgB,OAAQ4R,EAAI5R,SAClE3I,KAAK+oB,QAAU,IAAInV,GAAeC,EAAI0G,EAAIyO,WAC3C,CAEM1oB,kBAAkB0X,GACvB,MAAMmR,EAAmBxoB,EAAc6F,YAAYxG,KAAKua,IAAI6O,YAAcpR,EAAOrX,EAAc6F,YAAYxG,KAAKua,IAAI8O,YACpHroB,EAAO2G,MAAM,qEAAsE3H,KAAKua,IAAIyO,WAAYG,GACxG,MAAMrf,EAAgB,IAAIC,EACpB7I,QAAgBlB,KAAK+oB,QAAQriB,uBAA0ByiB,GAE7D,OADArf,EAAGa,MACIzJ,CACR,QClBUooB,GAEgB3gB,OAA8B4gB,aADjDC,IACRzpB,YAA2B4I,EAAS,YAAqB4gB,GAAe,GAA7CvpB,KAAM2I,OAANA,EAA8B3I,KAAYupB,aAAZA,EACvDtpB,EAAeC,mBAAmByI,GAClC1I,EAAeC,mBAAmBqpB,GAClCvpB,KAAKwpB,IAAM,IAAIC,GAAU,CAAE9gB,OAAQ3I,KAAK2I,QACzC,CAEMrI,kBAAkB0X,GACvBhX,EAAO2G,MAAM,6CAA8CqQ,GAC3D,MAAMjP,EAAS,CACb2F,KAAMsJ,EACN0R,eAAgB1pB,KAAKupB,cAGvB,IAAIroB,EAAU,KACV6mB,EAAkB,KACtB,IACE,MAAMpjB,QAAyC3E,KAAKwpB,IAAIjnB,KAAK,IAAIonB,GAAoB5gB,IACrFgf,EAAUpnB,EAAcC,WAAW+D,GAAOilB,WAAWhb,MACtD,CAAC,MAAO3M,GACP,MAAM4nB,EAAkB5nB,EAAU,MAAK,GACvC,IAA8D,IAA1D4nB,EAAQC,cAAcC,QAAQ,uBAG3B,KAA4D,IAAxDF,EAAQC,cAAcC,QAAQ,qBAA6B,CACpE,MAAMC,EAAiBhpB,EAAOsL,KAAK,qEAAsE0L,GACzG,MAAM,IAAIrI,MAAMqa,EACjB,CAEC,MADAhpB,EAAOkB,MAAM,oDAAqDD,EAAKA,GACjEA,CACP,CARCjB,EAAOsL,KAAK,4FACNF,EAAeC,KAAK,IAQ7B,CAGD,GAAI0b,EACF,IACE7mB,EAAOU,KAAK8R,MAAMqU,EACnB,CAAC,MAAO9lB,GAEP,MADAjB,EAAOkB,MAAM,sDAAuDD,EAAK8lB,EAAS9lB,GAC5EA,CACP,MAEDnB,EAAaC,kBAAkB,iEAAkEiX,GAEnG,OAAO9W,CACR,QCpDU+oB,GACSpmB,UAA2BgM,cAA/C9P,YAAoB8D,EAA2BgM,GAA3B7P,KAAS6D,UAATA,EAA2B7D,KAAa6P,cAAbA,CAAgC,CAExEvP,gBAAgB4pB,EAAcC,EAAiBC,GACpD,MAAM/lB,EAAY,CAAE6lB,KAAMA,EAAMC,QAASA,GACnCE,QAA8BrqB,KAAK6P,cAAcnL,UAAwB1E,KAAK6D,UAAWQ,GACzFnD,EAAgBmpB,GAAWA,EAAQtlB,eAAiB8C,KAAKD,MAI/D,OAHI1G,GAAQkpB,SACJpqB,KAAK6P,cAAc1K,aAAanF,KAAK6D,UAAWQ,GAEjDnD,CACR,CAEMZ,gBAAgB4pB,GACrB,MAAMI,QAA8BtqB,KAAK6P,cAAc3K,UAAUlF,KAAK6D,UAAWqmB,GACjF,OAAOI,GAAUA,EAAOC,iBAAiBC,cAAgB,CAC1D,CAEMlqB,2BAA2BmqB,GAChC,OAAO,IACR,QCjBUC,GACStjB,SAApBrH,YAAoBqH,GAAApH,KAAQoH,SAARA,CAAkC,CAE/CjE,oBAAoB4F,GACzB9I,EAAeC,mBAAmB6I,EAAQ,UAC1C9I,EAAeC,mBAAmB6I,EAAOohB,QAAS,kBAClDlqB,EAAeC,mBAAmB6I,EAAOrI,OAAQ,iBACjDT,EAAeC,mBAAmB6I,EAAOkb,SAAU,mBAEnD,IAAIiG,EAAe,GACnB,IAAK,IAAI1e,EAAI,EAAGA,EAAIzC,EAAOrI,OAAQ8K,IACjC0e,GAAQnhB,EAAOkb,SAASgB,OAAOjgB,KAAKC,MAAM8D,EAAOkb,SAASvjB,OAASsE,KAAK0f,WAS1E,MAN2B,CACzBwF,KAAMA,EACNC,QAASphB,EAAOohB,QAChBrX,KAAM/J,EAAO+J,KACb/N,eAAgB8C,KAAKD,MAAmC,IAA3BmB,EAAO4hB,kBAGvC,CAEMrqB,oBAAoByI,GACzB,MAAMpE,EAAsB+lB,GAAoBE,aAAa7hB,GAE7D,aAD4B/I,KAAKoH,SAASyjB,UAAUlmB,GACtCA,EAAQ,IACvB,CAEMrE,gBAAgB4pB,EAAcC,EAAiBC,GAEpD,aAD4BpqB,KAAKoH,SAAS0jB,UAAUnqB,EAAc6F,YAAY0jB,GAAOvpB,EAAc6F,YAAY2jB,GAAUC,EAE1H,QC7BUW,GACS3kB,eAAwC8V,QAA5Dnc,YAAoBqG,EAAwC8V,GAAxClc,KAAcoG,eAAdA,EAAwCpG,KAAOkc,QAAPA,EAC1Djc,EAAeC,mBAAmBkG,EAAgB,kBAClDnG,EAAekc,uCAAuC/V,EAAeE,mBAAoB,gCACzFrG,EAAekc,uCAAuCD,EAAS,UAChE,CAEM5b,kBAOL,aANuDN,KAAKoG,eAAeM,uBACzE1G,KAAKkc,UACD,CACJ1b,KAAM,GACN0a,oBAAqBrT,KAAKD,MAG7B,CAEMtH,iBAAiB0qB,GACtB,MAAM3S,EAA0C,CAC9C7X,KAAMwqB,GAAQ,GACd9P,oBAAqBrT,KAAKD,OAE5ByQ,EAAK7X,KAAO6X,EAAK7X,KAAKmJ,QAAQ8E,GAAMA,EAAE1J,eAAiB8C,KAAKD,QAC5D5G,EAAOC,KAAK,iCAAkCoX,EAAK7X,KAAKE,QAExD,aADoCV,KAAKoG,eAAeO,uBAAuB3G,KAAKkc,QAAS7D,EAE9F,CAEM/X,gBAAgB4pB,EAAcC,EAAiBC,GACpD,MAAMtO,QAA+C9b,KAAKirB,YACpD/pB,EAAqB4a,EAAItb,KAAKib,MACjChN,GAAMA,GAAGyb,MAAMgB,gBAAkBhB,GAAMgB,eAAiBzc,GAAG0b,SAASe,gBAAkBf,GAASe,gBAElG,GAAIhqB,IACEkpB,GAAiBlpB,EAAK6D,eAAiB8C,KAAKD,OAAO,CACrD5G,EAAOC,KAAK,iDACZ,MAAMkqB,EAA0BrP,EAAItb,KAAKmJ,QAAQ8E,GAAMA,GAAKvN,UACtDlB,KAAKorB,WAAWD,EACvB,CAGH,QAASjqB,GAAQA,EAAK6D,eAAiB8C,KAAKD,KAC7C,CAEMtH,gBAAgB4pB,GACrB,MAAM9O,QAA+Cpb,KAAKirB,YAC1D7P,EAAI5a,KAAKgJ,KAAK0gB,GAEd,cADqClqB,KAAKorB,WAAWhQ,EAAI5a,KAE1D,QCrDU6qB,GAGXtrB,cAAwB,CAEjBoD,4CAA4CmoB,GAC3C1D,QAAQC,IACRlnB,EAAcC,WAAW0qB,GAC3B1D,QAAQC,IAAiB,YAAIyD,EAE7BxqB,EAAaC,kBAAkB,2CAGjCD,EAAaC,kBAAkB,mEAElC,QCrBUwqB,GACJpoB,wBAAwBqoB,GAC7B,OAAOA,GAAyB,cAAhBA,EAAMC,QAA0BD,EAAME,WAAaF,EAAME,UAAUhrB,OAAS,CAC7F,CAEMyC,uBAAuBqoB,GAC5B,OAAOA,GAASA,EAAMG,SAAWH,EAAMG,QAAQjrB,OAAS,GAAqC,WAAhC8qB,EAAMG,QAAQ,GAAGC,WAC/E,CAEMzoB,4BAA4BqoB,GACjC,OAAOA,GAASA,EAAMG,SAAWH,EAAMG,QAAQjrB,OAAS,GAAqC,gBAAhC8qB,EAAMG,QAAQ,GAAGE,WAC/E,CAEM1oB,sBAAsBqoB,GAC3B,OAAOA,GAASA,EAAMG,SAAWH,EAAMG,QAAQjrB,OAAS,GAAqC,UAAhC8qB,EAAMG,QAAQ,GAAGE,WAC/E,CAEM1oB,kDAAkDqoB,GACvD,OAAOA,GAASA,EAAMM,SAAWN,EAAMO,gBAAkBP,EAAMQ,QAChE,CAEM7oB,8BAA8BqoB,GACnC,OAAOA,GAASA,EAAMS,YAAcT,EAAMjY,MAAQiY,EAAMO,cACzD,CAEM5oB,wCAAwCqoB,GAC7C,OAAOA,GAASA,EAAMU,oBAAsBV,EAAMW,SACnD,CAEMhpB,yBAAyBqoB,GAC9B,OAAOxrB,KAAKosB,iBAAiBZ,IAAUD,GAAoBc,mBAAmBb,EAAO,YACtF,CAEMroB,wBAAwBqoB,GAC7B,OAAOxrB,KAAKssB,gBAAgBd,IAAUD,GAAoBc,mBAAmBb,EAC9E,CAEMroB,6BAA6BqoB,GAClC,OAAOxrB,KAAKusB,qBAAqBf,IAAUD,GAAoBc,mBAAmBb,EACnF,CAEMroB,uBAAuBqoB,GAC5B,OAAOxrB,KAAKwsB,eAAehB,IAAUD,GAAoBc,mBAAmBb,EAC7E,CAEMroB,0BAA0BqoB,EAAYiB,EAAoB,WAC/D,OAAOjB,GAASA,EAAMiB,IAAcjB,EAAMiB,aAAsBC,OAAqC,IAA5BlB,EAAMiB,GAAW/rB,MAC3F,QC5CUisB,GACJxpB,wBAAwBqoB,GAC7B,OAAOD,GAAoBa,iBAAiBZ,EAC7C,CAEMroB,uBAAuBqoB,GAC5B,OAAOD,GAAoBe,gBAAgBd,EAC5C,CAEMroB,4BAA4BqoB,GACjC,OAAOD,GAAoBgB,qBAAqBf,EACjD,CAEMroB,sBAAsBqoB,GAC3B,OAAOD,GAAoBiB,eAAehB,EAC3C,CAEMroB,kDAAkDqoB,GACvD,OAAOD,GAAoBqB,2CAA2CpB,EACvE,CAEMroB,8BAA8BqoB,GACnC,OAAOD,GAAoBsB,uBAAuBrB,EACnD,CAEMroB,wCAAwCqoB,GAC7C,OAAOD,GAAoBuB,iCAAiCtB,EAC7D,QCrBUuB,GACSC,QAAgCC,aAApDltB,YAAoBitB,EAAgCC,GAClD,GADkBjtB,KAAOgtB,QAAPA,EAAgChtB,KAAYitB,aAAZA,GAC7CjtB,KAAKgtB,QACR,KAAM,yBAET,CAEUE,oBACT,OAAOltB,KAAKgtB,OACb,CAEM1sB,8BACL6sB,EACAC,EACAH,EAAuBjtB,KAAKitB,aAC5BI,EAAa,KAEbrsB,EAAOC,KAAK,6BAA8BksB,EAAYC,GAEtD,IACE,MAAMrkB,EAA+C,CACnDukB,YAAa,CACXC,QAAS,CACP,CACEC,OAAQ,SACRC,kBAAmB,CACjB/e,KAAMye,EACNO,gBAAiB,CACf,CACE9e,MAAOwe,IAGXO,IAAKN,EACLO,KAAM,YAKdC,aAAcZ,GAGV1d,QAAsDvP,KAAKgtB,QAAQzqB,KAAK,IAAIurB,GAAgC/kB,IAClH/H,EAAO+G,MAAM,4BAA6BwH,GAE1C,MAAMwe,EAAoC,CACxCC,GAAIze,EAAO0e,WAAWD,IAGlBE,QAAiCC,GAAmC,CAAEtb,OAAQ7S,KAAKgtB,QAASoB,YAAa,KAAOL,GAGtH,GAFA/sB,EAAO+G,MAAM,qBAAsBmmB,GAE/BA,EAAWG,QAAUC,GAAYC,QAEnC,OADAvtB,EAAOC,KAAK,4BAA6BksB,EAAYF,IAC9C,CAEV,CAAC,MAAOhrB,GACPjB,EAAOsL,KAAK,8CAA+C6gB,EAAYC,EAAQnrB,EAChF,CAGD,OADAjB,EAAOC,KAAK,kCAAmCksB,EAAYC,IACpD,CACR,QChEUoB,GACS7qB,OAA+BE,UAAnD9D,YAAoB4D,EAA+BE,GAA/B7D,KAAM2D,OAANA,EAA+B3D,KAAS6D,UAATA,EACjD5D,EAAeC,mBAAmBF,KAAK2D,QACvC1D,EAAeC,mBAAmBF,KAAK6D,UACxC,CAEMvD,oBAAoBmuB,EAAiBC,GAC1C1tB,EAAO2G,MAAM,qCAAsC8mB,EAASC,GAC5D,MAAM5hB,EAAW,CACf2hB,QAASA,EACTC,SAAUA,GAGZ,aAD2C1uB,KAAK2D,OAAOe,UAAkC1E,KAAK6D,UAAWiJ,EAE1G,CAEMxM,gCAAgCmuB,GACrC,MAAMhpB,EAA4B,CAChCC,UAAW1F,KAAK6D,UAChB8B,uBAAwB,qBACxBE,0BAA2B,CACzB,WAAY4oB,IAKhB,aAD4CzuB,KAAK2D,OAAOmC,kBAA0CL,EAEnG,CAGMnF,qBAAqBquB,GAE1B,cADkC3uB,KAAK2D,OAAOuB,UAAUlF,KAAK6D,UAAW8qB,EAEzE,QC5BUC,GAQSC,QAPZttB,QAAiE,CACvEutB,UAAW,EACX9K,UAAW,IACX3d,OAAQ,cACR0oB,OAAQ,IAGVhvB,YAAoB8uB,EAAmCjrB,GAAnC5D,KAAO6uB,QAAPA,EAElB5uB,EAAeC,mBAAmBF,KAAK6uB,QAAS,WAChD5uB,EAAeC,mBAAmB4nB,QAAQF,SAASC,IAAK,iEAEpDjkB,IACF5D,KAAKuB,QAAUqC,GAEjB3D,EAAeC,mBAAmBF,KAAKuB,QAAQutB,UAAW,0BAC1D7uB,EAAeC,mBAAmBF,KAAKuB,QAAQyiB,UAAW,0BAC1D/jB,EAAe8D,KAAK/D,KAAKuB,QAAQutB,UAAY,EAAG,+CACjD,CAEME,aAAaP,EAAiBC,GACnC,OACE/tB,EAAc6F,YAAYxG,KAAKuB,QAAQ8E,QACvCooB,EACA9tB,EAAc6F,YAAYxG,KAAKuB,QAAQyiB,WACvC0K,EACA/tB,EAAc6F,YAAYxG,KAAKuB,QAAQwtB,OAE1C,CAEMzuB,oBAAoBmuB,EAAiBC,GAC1C,MAAMO,EAAWtuB,EAAcC,WAAWgnB,QAAQC,IAAI7nB,KAAKgvB,aAAaP,EAASC,KAC7EO,IAAatuB,EAAcuuB,eAAeD,IAC5CnuB,EAAaC,kBACX,uFACA0tB,EACAC,GAWJ,OARqCO,EACjC,CACER,QAASA,EACTC,SAAUA,EACVS,WAAYF,EACZ5B,WAAYrtB,KAAKuB,QAAQutB,iBAErB9uB,KAAK6uB,QAAQO,cAAcX,EAASC,EAE/C,CAEMpuB,gCAAgCmuB,GACrC,OAAOzuB,KAAK6uB,QAAQQ,0BAA0BZ,EAC/C,CAEMnuB,qBAAqBquB,GAC1B,OAAO3uB,KAAK6uB,QAAQS,eAAeX,EACpC,QC9DUY,GACS/uB,KAApBT,YAAoBS,EAAwDsG,QAAQ0oB,QAAQ,CAAE,IAA1ExvB,KAAIQ,KAAJA,CAA+E,CAE5FF,oBAAoBmuB,EAAiBC,GAC1C1tB,EAAO2G,MAAM,qCAAsC8mB,EAASC,GAE5D,aADwD1uB,KAAKQ,MACpDiuB,EAAU,KAAOC,EAC3B,CAEMpuB,gCAAgCmuB,GACrC,MAAMhgB,QAAkDzO,KAAKQ,KACvDiU,EAAgC,GAMtC,OALA5P,OAAOR,KAAKoK,GAAGxI,SAASe,IAClBA,EAAEyoB,WAAWhB,IACfha,EAAIjL,KAAKiF,EAAEzH,GACZ,IAEIyN,CACR,CAGMnU,qBAAqBquB,GAG1B,aAFwD3uB,KAAKQ,MAC3DmuB,EAAQF,QAAU,KAAOE,EAAQD,UAAYC,GACxC,CACR,QC3BUe,GAGStoB,SAFZyJ,MAAmD,IAAIqX,IAE/DnoB,YAAoBqH,GAAApH,KAAQoH,SAARA,EAClBnH,EAAeC,mBAAmBF,KAAKoH,SACxC,CAEM9G,qBAAwBmuB,EAAiBC,EAAkBiB,EAAkB,KAAMC,GAAiB,GACzG5uB,EAAO+G,MAAM,yCAA0C0mB,EAASC,EAAUkB,GAC1E,MAAMC,EAAuC7vB,KAAK6Q,MAAM4X,IAAIiH,GAAwBI,gBAAgBrB,EAASC,IAE7G,IAAIxtB,EAAU,KACd,MAAM0G,GAAc,IAAIC,MAAOC,UAC/B,IAAK8nB,GAAoBC,EAAQ,CAC/B,MAAME,EAAmBF,EAAOxC,WAAazlB,EAA0B,IAApBioB,EAAOxC,WAAoB,EAC1EwC,EAAOG,cAAgBD,IACzB/uB,EAAO2G,MAAM,6BAA8B8mB,EAASC,GACpDxtB,EAAOU,KAAK8R,MAAMmc,EAAOV,YAE5B,CACD,IAAKjuB,EAAM,CACT,MAAMgI,QAAqClJ,KAAKiwB,oBAAoBxB,EAASC,GACvExlB,IACJlJ,KAAKkwB,WAAWhnB,GAChBhI,EAAOU,KAAK8R,MAAMxK,EAAKimB,YAE1B,CAID,OAFAjuB,EAAOA,GAAQyuB,EAERzuB,CACR,CAEMZ,iCAAiCmuB,GACtC,MAAM1nB,QAAsC/G,KAAKmwB,sBAAsB1B,GACjEvtB,EAAyB,IAAIgnB,IAKnC,OAJAnhB,EAAId,SAASqV,IACXpa,EAAKqnB,IAAIjN,EAAEoT,SAAU9sB,KAAK8R,MAAM4H,EAAE6T,aAClCnvB,KAAKkwB,WAAW5U,EAAE,IAEbpa,CACR,CAEMZ,0BAA0BmuB,EAAiBC,GAChD,OAAO1uB,KAAKoH,SAASgoB,cAAcX,EAASC,EAC7C,CAEMpuB,4BAA4BmuB,GACjC,OAAOzuB,KAAKoH,SAASioB,0BAA0BZ,EAChD,CAGMnuB,qBAAqBmuB,EAAiBC,EAAkBS,EAAiB9B,GAC9E,MAAMsB,EAAkC,CACtCF,QAASA,EACTC,SAAUA,EACVS,WAAYvtB,KAAKC,UAAUstB,GAC3B9B,WAAYA,GAGd,aAD6BrtB,KAAKoH,SAASkoB,eAAeX,GACnD3uB,KAAKoH,SAASgoB,cAAcX,EAASC,EAC7C,CACOvrB,uBAAuBsrB,EAAiBC,GAC9C,OAAOD,EAAU,MAAQC,CAC1B,CAEOwB,WAAWhnB,GACjB,GAAMA,EAAM,CACV,MAAMtB,GAAc,IAAIC,MAAOC,UACzB6mB,EAAwC9pB,OAAOC,OAAO,CAAEkrB,cAAepoB,GAAOsB,GACpFlJ,KAAK6Q,MAAM0X,IAAImH,GAAwBI,gBAAgB5mB,EAAKulB,QAASvlB,EAAKwlB,UAAWC,EACtF,CACF,CAEMrmB,aACLtH,EAAO+G,MAAM,oCACb/H,KAAK6Q,MAAQ,IAAIqX,GAClB,ECxEH,MAAakI,GAMDvc,GACAwc,UACAC,oBAPFntB,iCAA4C,OAE5CotB,iBAAiD,IAAIrI,IAE7DnoB,YACU8T,EACAwc,EACAC,EAA8BF,GAA0BI,2BAFxDxwB,KAAE6T,GAAFA,EACA7T,KAASqwB,UAATA,EACArwB,KAAmBswB,oBAAnBA,EAERrwB,EAAeC,mBAAmB2T,EAAI,MACtC5T,EAAeC,mBAAmBS,EAAcC,WAAWyvB,IAC3DpwB,EAAe8D,KAAK0sB,GAAGC,WAAWL,GAAY,uBAAyBA,EACxE,CAEM/vB,oBAAoBqO,GACzB,MAAMgiB,QAAoB3wB,KAAK4wB,cAAcjiB,GAC7C,OAAOgiB,EAAMA,EAAIxX,WAAa,IAC/B,CAEO0X,oBAAoBliB,GAC1B,MAAMmiB,EAAqB9wB,KAAK+wB,kBAAkB/wB,KAAK6T,GAAGvN,mBAAqB,IAAMqI,GAErF,OADqB4E,GAAKrD,KAAKlQ,KAAKqwB,UAAWS,EAEhD,CAEME,sBAAsBriB,GAC3B,MAAMsiB,EAAiBjxB,KAAK6wB,oBAAoBliB,GAChD3N,EAAOC,KAAK,kCAAmC0N,EAAKsiB,GAChDR,GAAGC,WAAWO,GAChBR,GAAGS,WAAWD,GAEdjwB,EAAO+G,MAAM,0CAA2CkpB,EAE3D,CAEM3wB,oBAAoBqO,GACzB,MAAMsiB,EAAyBjxB,KAAK6wB,oBAAoBliB,GAExD,IAAIzN,EAAe,KAGnB,GAFAA,EAAOlB,KAAKmxB,qBAAqBF,GAE5B/vB,EAiBHF,EAAOC,KAAK,iDAAkDjB,KAAK6T,GAAGvN,mBAAoBqI,EAAKsiB,OAjBtF,CACTjwB,EAAOC,KAAK,8CAA+CjB,KAAK6T,GAAGvN,mBAAoBqI,EAAKsiB,GAC5F,IACE,IAAIG,EAAwBpxB,KAAKuwB,iBAAiB9H,IAAI9Z,GAClDyiB,EACFpwB,EAAOC,KAAK,oCAEZD,EAAOC,KAAK,uBACZmwB,EAAOpxB,KAAKqxB,qBAAqB1iB,EAAKsiB,GACtCjxB,KAAKuwB,iBAAiBhI,IAAI5Z,EAAKyiB,IAEjClwB,QAAakwB,EACbpxB,KAAKuwB,iBAAiBe,OAAO3iB,EAC9B,CAAC,MAAO1M,GACPjB,EAAOsL,KAAK,0CAA2CtM,KAAK6T,GAAGvN,mBAAoBqI,EAAK1M,EACzF,CACF,CAGD,OAAOf,CACR,CAEOZ,2BAA2BqO,EAAasiB,GAC9C,MAAM/vB,QAAqBlB,KAAK6T,GAAG0d,uBAAuB5iB,GAK1D,OAJIzN,GAAQA,EAAKR,OAAS,IACxBM,EAAOC,KAAK,oCAAqCC,EAAKR,QACtD+vB,GAAGe,cAAcP,EAAgB/vB,IAE5BA,CACR,CAEMuwB,qBAAqBC,GAC1B,MAAMf,EAAc3wB,KAAKmxB,qBAAqBO,GAC9C,OAAOf,EAAMA,EAAIxX,WAAa,IAC/B,CAEMgY,qBAAqBO,GAC1B,IAAKjB,GAAGC,WAAWgB,GACjB,OAAO,KAGT,IACE,MAAMC,EAAQlB,GAAGmB,SAASF,GACpB9pB,GAAM,IAAIC,MAAOC,UAGvB,IAD0BF,EAAM+pB,EAAME,SAAW,KACjC7xB,KAAKswB,oBACnB,OAAO,KAGP,OADqBG,GAAGqB,aAAaJ,EAGxC,CAAC,MAAOzvB,GACPjB,EAAOsL,KAAK,iCAAkCrK,EAC/C,CAED,OAAO,IACR,CAEO8uB,kBAAkBgB,GAGxB,OAFqBC,GAAOC,WAAW,OAAO3P,OAAOyP,GAASG,OAAO,MAGtE,QC3EUC,GACHC,OAERryB,YAAYqyB,GACVnyB,EAAeC,mBAAmBkyB,EAAQ,UAE1CpyB,KAAKoyB,OAASA,EAETpyB,KAAKoyB,OAAOC,gBACfryB,KAAKoyB,OAAOC,cAAgB,IAGzBryB,KAAKoyB,OAAOjK,aACfnoB,KAAKoyB,OAAOjK,WAAa,EAE5B,CAEMmK,gBAAgBjsB,GACrBrG,KAAKoyB,OAAO9c,UAAYjP,CACzB,CAEMksB,gBAAgBlsB,GACrBrG,KAAKoyB,OAAOI,UAAYnsB,CACzB,CAEM/F,iBAAiBqO,EAAasJ,EAAcwa,GAAU,GAC3D,MAAM/b,EAAS/H,EAAI+jB,QAAQ1yB,KAAKoyB,OAAO9c,UAAWtV,KAAKoyB,OAAOI,WAC9D,IAAIG,GAAmB,EACnBC,EAAU,EACd,MAAQD,GAAoBC,EAAU5yB,KAAKoyB,OAAOjK,YAAY,CAC5DnnB,EAAO+G,MAAM,GAAG6qB,EAAU,EAAI,SAASA,KAAa,KAAKH,EAAU,UAAY,oCAClE,CAACzyB,KAAKoyB,OAAOzb,UAAWhI,GAAKuB,KAAK,gBAAa,CAAClQ,KAAKoyB,OAAOxb,UAAWF,GAAQxG,KAAK,SACjG,IACE,GAAIuiB,EAAS,CACX,MAAM1pB,EAAiC,CACrC8N,WAAYgc,mBAAmB,CAAC7yB,KAAKoyB,OAAOzb,UAAWhI,GAAKuB,KAAK,MACjE4B,OAAQ9R,KAAKoyB,OAAOxb,UACpB7E,IAAK2E,EACLI,kBAAmB,cAEf9W,KAAKoyB,OAAOU,MAAMvwB,KAAK,IAAIwU,EAAkBhO,GACpD,KAAM,CACL,MAAMgqB,QAAiC/yB,KAAKoyB,OAAOY,MAAMzwB,KAAK,IAAI8R,EAAiB,CAAEvC,OAAQ9R,KAAKoyB,OAAOzb,UAAW5E,IAAKpD,KACnH5F,EAAgC,CACpC+I,OAAQ9R,KAAKoyB,OAAOxb,UACpB7E,IAAK2E,EACLxE,KAAM6gB,EAAQ7gB,KACd+gB,cAAehb,GAGXtF,EAAiB,IAAIC,EAAO,CAChCC,OAAQ7S,KAAKoyB,OAAOU,MACpB/pB,OAAQA,EACR+J,KAAM,GACNC,UAAW,EACXC,SAAU,QACVC,mBAAmB,IAGrBN,EAAOO,GAAG,sBAAuBC,IAC/BnS,EAAOC,KAAK,iBAAkBkS,EAAS,UAEnCR,EAAOS,MACd,CAEDuf,GAAmB,CACpB,CAAC,MAAO1wB,GACPjB,EAAOsL,KACL,SAASmmB,EAAU,UAAY,mCACpB,CAACzyB,KAAKoyB,OAAOzb,UAAWhI,GAAKuB,KAAK,gBAAa,CAAClQ,KAAKoyB,OAAOxb,UAAWF,GAAQxG,KAAK,YAC/FjO,GAEF2wB,GACD,CACF,CAED5xB,EAAO+G,MAAM,YAAY0qB,EAAU,UAAY,sCAC9B,CAACzyB,KAAKoyB,OAAOzb,UAAWhI,GAAKuB,KAAK,gBAAa,CAAClQ,KAAKoyB,OAAOxb,UAAWF,GAAQxG,KAAK,QACtG,CAEM5P,kBAAkB6T,EAAgB9N,EAAgBwN,GACvD7S,EAAOC,KAAK,oBAAoB,CAACkT,EAAQ9N,GAAQ6J,KAAK,SAEtD,MAAMnH,EAAoC,CACxC+I,OAAQqC,EACRqD,OAAQnR,GAGV,IAAI6sB,GAAO,EACX,MAAMhyB,EAAO,CAAA,EAEb,KAAOgyB,GAAM,CACX,MAAMxb,QAA6C7D,EAAGtR,KAAK,IAAI4wB,EAAqBpqB,IACpFmqB,EAAOxb,EAAS0b,YAChBC,GAAEC,KAAK5b,EAAS6b,UAAWC,IACzBtyB,EAAKsyB,EAAIzhB,KAAO,CAAEA,IAAKyhB,EAAIzhB,IAAKyE,aAAcgd,EAAIhd,aAAcL,KAAMqd,EAAIrd,KAAMsd,KAAMD,EAAIC,KAAM,IAG9FP,IACFnqB,EAAOuP,kBAAoBZ,EAASa,sBAEvC,CACD,OAAOrX,CACR,CAEMZ,qBACLU,EAAOC,KAAK,YAAYjB,KAAKoyB,OAAOzb,aAAa3W,KAAKoyB,OAAO9c,wCACxCtV,KAAKoyB,OAAOxb,aAAa5W,KAAKoyB,OAAOI,cAC1D,MAAM3a,EAAKvX,MAAOkzB,UACVxzB,KAAK0zB,WAAWF,EAAIzhB,IAAKyhB,EAAIC,KAAK,EAG1C,IAAIE,QAAmC3zB,KAAK4zB,mBAU5C,OARID,EAAUE,SAASnzB,OAAS,GAAKizB,EAAUG,KAAKpzB,OAAS,WACrD0L,EAAe2nB,8BAAoClc,EAAI8b,EAAUE,SAAU7zB,KAAMA,KAAKoyB,OAAOC,qBAC7FjmB,EAAe2nB,8BAAoClc,EAAI8b,EAAUG,KAAM9zB,KAAMA,KAAKoyB,OAAOC,eAE/FrxB,EAAOC,KAAK,gBACZ0yB,QAAkB3zB,KAAK4zB,mBACvB5yB,EAAO+G,MAAM,oBAAqB4rB,IAEC,IAA9BA,EAAUE,SAASnzB,QAA0C,IAA1BizB,EAAUG,KAAKpzB,MAC1D,CAEOJ,yBACN,MAAM0zB,EAAuBh0B,KAAKi0B,YAAYj0B,KAAKoyB,OAAOzb,UAAW3W,KAAKoyB,OAAO9c,UAAWtV,KAAKoyB,OAAOY,OAClGkB,EAAuBl0B,KAAKi0B,YAAYj0B,KAAKoyB,OAAOxb,UAAW5W,KAAKoyB,OAAOI,UAAWxyB,KAAKoyB,OAAOU,OAElGqB,QAAgBH,EAChBI,QAAgBF,EAEhBhzB,EAAwB,CAC5B2yB,SAAU,GACVQ,QAAS,GACTP,KAAM,IA6BR,aA1BM1nB,EAAe2nB,+BAClBplB,IACC,MAAM2lB,EAAYH,EAAQxlB,GACpB+H,EAAiB/H,EAAI+jB,QAAQ1yB,KAAKoyB,OAAO9c,UAAWtV,KAAKoyB,OAAOI,WAChE+B,EAAYH,EAAQI,eAAe9d,GAAU0d,EAAQ1d,QAAUJ,EAChEie,EAKDD,EAAKb,OAASc,EAAKd,MAKnBa,EAAK9d,aAAa1O,WAAaysB,EAAK/d,aAAa1O,UACnD5G,EAAKmzB,QAAQ7qB,KAAK8qB,GALlBpzB,EAAK4yB,KAAKtqB,KAAK8qB,GALfpzB,EAAK2yB,SAASrqB,KAAK8qB,EAcD,GAEtBzvB,OAAOR,KAAK8vB,GACZn0B,KACAA,KAAKoyB,OAAOC,eAEPnxB,CACR,QC5MUuzB,GAEJtxB,6BAA6BwB,GAClC,IAAIzD,GAAgB,EAIpB,OAHIyD,IACFzD,EAAOyD,EAAM8qB,WAAW,UAAY9qB,EAAM+vB,OAAOh0B,OAAS,GAErDQ,CACR,CAEMiC,4BAA4BwB,GACjC1E,EAAe8D,KAAK0wB,GAAUE,sBAAsBhwB,GAAQ,kBAC5D,MAAMiwB,EAAejwB,EAAMolB,QAAQ,IAAK,GAExC,OADqB6K,EAAO,EAAIjwB,EAAMmT,UAAU,EAAG8c,GAAQjwB,EAAMmT,UAAU,EAE5E,CAEM3U,yBAAyBwB,GAC9B1E,EAAe8D,KAAK0wB,GAAUE,sBAAsBhwB,GAAQ,kBAC5D,MAAMiwB,EAAejwB,EAAMolB,QAAQ,IAAK,GAExC,OADqB6K,EAAO,EAAIjwB,EAAMmT,UAAU8c,EAAO,GAAK,IAE7D,ECJH,MAAaC,GAGSC,IAAwB1C,OAFrCjvB,aAAgC,IAAI4xB,OAAO,kBAElDh1B,YAAoB+0B,EAAwB1C,EAAuB,IAEjE,GAFkBpyB,KAAG80B,IAAHA,EAAwB90B,KAAMoyB,OAANA,EAC1CnyB,EAAeC,mBAAmBF,KAAK80B,KACjC1C,EAAO4C,UAAY5C,EAAO4C,QAAQ1uB,mBACtC,MAAM,IAAIqJ,MAAM,kDAEnB,CAEUslB,gBACT,OAAOj1B,KAAK80B,GACb,CAEMx0B,oBACL40B,EACA/K,EACAgL,EACAC,EAA0B,KAC1BC,EAAqB,KACrBC,EAAyB,MAQzB,OANAr1B,EAAeC,mBAAmBi1B,GAC7Bn1B,KAAKoyB,OAAOmD,kBACfz0B,EAAaC,kBAAkB,qDAEjCm0B,EAAIM,kBAAoBx1B,KAAKoyB,OAAOmD,iBAAiBE,eAAeN,EAAkBhL,EAASkL,EAAYC,GAC3GJ,EAAIQ,WAAeN,QAAwBp1B,KAAKoyB,OAAOmD,iBAAiBE,eAAeL,EAAiBjL,GAAW,KAC5G+K,CACR,CAEM50B,2BACL40B,EACA/K,EACAgL,EACAC,EAA0B,KAC1BC,EAAqB,KACrBC,EAAyB,MAEzB,MAAMK,QAAiC31B,KAAK41B,cAAcV,EAAK/K,EAASgL,EAAkBC,EAAiBC,EAAYC,GAEvH,aADyCt1B,KAAK61B,UAAUF,EAEzD,CAEMG,oBAAoBC,GASzB,OARwBA,GAAU,IAAIpsB,QAAQqsB,IAC5C,GAAKh2B,KAAKoyB,OAAO6D,0BAA2E,GAA/Cj2B,KAAKoyB,OAAO6D,yBAAyBv1B,OAE3E,CAEL,QADsBV,KAAKoyB,OAAO6D,yBAAyBxa,MAAMpS,GAAMA,EAAEwQ,KAAKmc,IAE/E,CAJC,OAAO,CAIR,GAGJ,CAEO11B,+BAA+B40B,GACrC,IAAIh0B,GAAgB,EACpB,GAAMg0B,GAASl1B,KAAKoyB,OAAO4C,UAAYE,EAAIgB,aAAc,CACvDl1B,EAAO+G,MAAM,mCAAoCmtB,EAAIiB,sBACrD,IAAIC,EAAqBz1B,EAAc6F,YAAYxG,KAAKoyB,OAAOiE,eAC1DD,EAAW3vB,SAAS,OACvB2vB,GAAc,KAEhB,MAAMxuB,EAAgBxG,EAASC,MAC/B+0B,GACE,QACAxuB,EAAItG,SAAS,QACb,UACAsG,EAAItG,SAAS,MACb,QACAsG,EAAItG,SAAS,MACb,SACAsG,EAAItG,SAAS,MACb,IACAsG,EAAItG,SAAS,cACf80B,GAAc,QACd,UACQp2B,KAAKoyB,OAAO4C,QAAQruB,uBAAuByvB,EAAYlB,GAC7Dh0B,GAAO,CACR,CAAC,MAAOe,GACPjB,EAAOsL,KAAK,qCAAsC8pB,EAAYlB,EAAKjzB,EACpE,CACF,CACD,OAAOf,CACR,CAEMo1B,mCAAmCpB,GACxC,GAAIl1B,KAAKoyB,OAAOmE,0BAA2B,CACzC,MAEMC,EAFkB71B,EAAc6F,YAAY0uB,EAAIQ,YAAYh1B,OACzCC,EAAc6F,YAAY0uB,EAAIM,aAAa90B,OAEpE,GAAI81B,EAAYx2B,KAAKoyB,OAAOmE,0BAA2B,CAGrD,GAFAv1B,EAAOsL,KAAK,qDAAsDtM,KAAKoyB,OAAOmE,0BAA2BC,GACzGtB,EAAIuB,YAAcvB,EAAIuB,aAAe,GACjC91B,EAAcC,WAAWs0B,EAAIQ,YAAa,CAC5C,MAAMgB,EAA6B,CACjCC,SAAU,wBACVnlB,YAAa,aACbolB,WAAYC,EAAcC,8BAA8B5B,EAAIQ,aAE9DR,EAAIuB,YAAYjtB,KAAKktB,EACtB,CACD,GAAI/1B,EAAcC,WAAWs0B,EAAIM,aAAc,CAC7C,MAAMuB,EAA8B,CAClCJ,SAAU,0BACVnlB,YAAa,YACbolB,WAAYC,EAAcC,8BAA8B5B,EAAIM,cAE9DN,EAAIuB,YAAYjtB,KAAKutB,EACtB,CACD7B,EAAIM,YAAc,KAClBN,EAAIQ,WAAa,sGAClB,CACF,CACF,CAEMsB,yCAAyC9B,GAC9C,GAAIl1B,KAAKoyB,OAAO6E,+BAAgC,CAC9C,MAAMC,EAA8B,GAChChC,EAAIuB,aACNvB,EAAIuB,YAAYxwB,SAASV,IACnBA,EAAEqxB,YAAcrxB,EAAEqxB,WAAWl2B,OAASV,KAAKoyB,OAAO6E,+BACpDC,EAAS1tB,KAAKjE,IAEdvE,EAAOsL,KAAK,+CAAgD/G,EAAEoxB,SAAUpxB,EAAEiM,YAAajM,EAAEqxB,WAAWl2B,QACpGw2B,EAAS1tB,KAAK,CACZmtB,SAAU,6BAA+Bh2B,EAAcw2B,sBAAsB,GAAK,OAClF3lB,YAAa,aACbolB,WAAYC,EAAcC,8BACxB,cACEvxB,EAAEoxB,SACF,YACApxB,EAAEiM,YACF,6BACAjM,EAAEqxB,WAAWl2B,OACb,6BACAV,KAAKoyB,OAAO6E,kCAGnB,IAGL/B,EAAIuB,YAAcS,CACnB,CACF,CAEM52B,gBAAgB82B,GACrBn3B,EAAeC,mBAAmBk3B,EAAO,uBACzCn3B,EAAeC,mBAAmBk3B,EAAMjB,qBAAsB,yCAC9D,IAAIj1B,EAAkC,KAElCm2B,EAAwBr3B,KAAK81B,oBAAoBsB,EAAMjB,sBAC3D,MAAMmB,EAAoBF,EAAMG,aAAe,GAAKv3B,KAAKoyB,OAAOoF,kBAAoB,GAC9EC,GAA0BL,EAAMK,cAAgB,IAAIz0B,OAAOs0B,GACtC,IAAvBD,EAAY32B,QAAgB+2B,EAAa/2B,OAAS,IACpDM,EAAO+G,MAAM,oEACbsvB,EAAcI,GAGhB,MAAMvC,EAAgCrwB,OAAOC,OAAO,CAAE,EAAEsyB,GAWxD,GAVAlC,EAAIwC,wBAA0BN,EAAMjB,qBACpCjB,EAAIyC,gBAAkBP,EAAMK,aAC5BvC,EAAIiB,qBAAuBkB,EAC3BnC,EAAIuC,aAAeA,EAEnBz3B,KAAKs2B,mCAAmCpB,GACxCl1B,KAAKg3B,yCAAyC9B,SAExCl1B,KAAK43B,yBAAyB1C,GAEI,IAApCA,EAAIiB,qBAAqBz1B,OAC3BM,EAAOC,KAAK,qFACP,CACL,MAAM42B,EAAiB,OAAS3C,EAAIiB,qBAAqBjmB,KAAK,MAAQ,KAChE4nB,EAAoB5C,EAAIuC,cAAgBvC,EAAIuC,aAAa/2B,OAAS,EAAI,QAAUw0B,EAAIuC,aAAavnB,KAAK,MAAQ,KAAO,GAE3H,IACE,MAAMU,EAAeskB,EAAI6C,aAAe/3B,KAAKoyB,OAAO4F,sBAC9CC,EAAmB,WACnBC,EAAsB,UAC5B,IAAIC,EAAkB,SAAWvnB,EAAO,KACxCunB,GAAWN,EACXM,GAAWL,EACXK,GAAW,YAAcjD,EAAIkD,QAAU,KACvCD,GAAW,sBACXA,GAAW,4CAA8CF,EAAW,MAEpEE,GAAW,SAAWF,EAAW,KACjCE,GAAW,kDAAoDD,EAAc,MACvEv3B,EAAcC,WAAWs0B,EAAIM,eACjC2C,GAAW,SAAWD,EAAc,KACpCC,GAAW,+CACXA,GAAWjD,EAAIM,aAEX70B,EAAcC,WAAWs0B,EAAIQ,cACjCyC,GAAW,SAAWD,EAAc,KACpCC,GAAW,+BACXA,GAAWjD,EAAIQ,YAGjByC,GAAW,SAAWD,EAAc,OAEhChD,EAAIuB,aACNvB,EAAIuB,YAAYxwB,SAASV,IACvB4yB,GAAW,SAAWF,EAAW,KACjCE,GAAW,iBAAmB5yB,EAAEiM,YAAc,WAAajM,EAAEoxB,SAAW,MACxEwB,GAAW,sCACXA,GAAW,sCACXA,GAAW5yB,EAAEqxB,WAAWlE,QAAQ,eAAgB,QAAU,MAAM,IAGpEyF,GAAW,SAAWF,EAAW,OAEjC,MAAMlvB,EAA8B,CAClCsvB,WAAY,CAAEC,MAAM,IAAIC,aAAcC,OAAOL,KAG/Cj3B,QAAalB,KAAK80B,IAAIvyB,KAAK,IAAIk2B,GAAoB1vB,GACpD,CAAC,MAAO9G,GACPjB,EAAOkB,MAAM,mCAAoCD,EAAKA,EACvD,CACF,CACD,OAAOf,CACR,CAEMiC,kBAAkBu1B,GACvB,OAAiB,OAAVA,GAAkB7D,GAAO8D,MAAM9e,KAAK6e,EAC5C,QC7OUE,GAGSvyB,OAA6B0oB,OAA6B8J,kBAFtEhoB,MAER9Q,YAAoBsG,EAAiB,GAAY0oB,EAAiB,GAAY8J,EAA4B,IAAtF74B,KAAMqG,OAANA,EAA6BrG,KAAM+uB,OAANA,EAA6B/uB,KAAiB64B,kBAAjBA,EACxE74B,KAAK64B,kBAAoB,IAC3B74B,KAAK6Q,MAAQ,IAAIqX,IAEpB,CAEM5nB,qBAAqBw4B,EAAsB3O,EAAckL,EAAqB,MACnF,OAAOr1B,KAAK+4B,qBAAqBD,EAAc3O,EAASkL,EACzD,CAEM/0B,2BAA2Bw4B,EAAsBE,EAAgB3D,EAAqB,MAC3F,MAAMtgB,QAA6C/U,KAAKi5B,cAAcH,GAChEI,EAAuB7D,QAAmBr1B,KAAKm5B,kBAAkB9D,GAAc,KAE/E6D,UACEE,GAAQC,SAASC,IACvBA,GAAWC,gBAAgBlE,EAAY6D,IAKzC,OADyBnkB,EAAWA,EADfikB,GAAa,IACsB,IAEzD,CAEM14B,2BAA2Bk5B,EAAsBrP,EAAckL,EAAqB,MAGzF,OAF2BiE,GAAWG,QAAQD,EACvBzkB,CAASoV,EAEjC,CAEO7pB,oBAAoBw4B,GAC1B,IAAI53B,EAAmC,KACvC,IACE,GAAMlB,KAAK6Q,OAAS7Q,KAAK6Q,MAAMyX,IAAIwQ,GACjC93B,EAAO2G,MAAM,8BAA+BmxB,GAC5C53B,EAAOlB,KAAK6Q,MAAM4X,IAAIqQ,OACjB,CACL93B,EAAO+G,MAAM,+BAAgC+wB,GAC7C,MAAMU,QAA6Bx5B,KAAKm5B,kBAAkBL,GACpDU,IACJt4B,EAAOo4B,GAAWG,QAAQD,GACpBx5B,KAAK6Q,OAAW3P,IACpBlB,KAAK6Q,MAAM0X,IAAIuQ,EAAc53B,GACzBlB,KAAK6Q,MAAMoH,KAAOjY,KAAK64B,mBACzB74B,KAAK6Q,MAAMygB,OAAO5E,MAAM9b,KAAK5Q,KAAK6Q,MAAMxM,QAAQ,KAIvD,CACF,CAAC,MAAOpC,GACPjB,EAAOsL,KAAK,iDAAkDwsB,EAAc72B,EAAKA,GACjFf,EAAO,IACR,CACD,OAAOA,CACR,CAEOZ,wBAAwBw4B,GAC9B,IAAI53B,EAAe,KACnB,MAAMw4B,EAAc/4B,EAAc6F,YAAYxG,KAAKqG,QAAUyyB,EAAen4B,EAAc6F,YAAYxG,KAAK+uB,QAC3G,IACE,MAAM5hB,QAAuBwP,GAAM+c,GACnCx4B,QAAaiM,EAAKwsB,MACnB,CAAC,MAAO13B,GACPjB,EAAOsL,KAAK,gCAAiCotB,EAAKz3B,EAAKA,GACvDf,EAAO,IACR,CACD,OAAOA,CACR,QC7EU04B,GACSC,IAAiEC,SAArF/5B,YAAoB85B,EAAiB,IAAIE,GAAU,CAAEpxB,OAAQ,cAAwBmxB,GAAjE95B,KAAG65B,IAAHA,EAAiE75B,KAAQ85B,SAARA,EACnF75B,EAAeC,mBAAmBF,KAAK65B,IAAK,OAC5C55B,EAAeC,mBAAmBF,KAAK85B,SAAU,WAClD,CAEUE,gBACT,OAAOh6B,KAAK65B,GACb,CAEMv5B,kBAAkB25B,EAAYC,GAA0B,GAC7D,IAAI3qB,EAA+B,KACnC,IACE,MAAM4qB,EAAiBF,GAAgB,sBACjCG,EAAmC,iBAAdD,EAAyBA,EAAYv4B,KAAKC,UAAUs4B,GAEzEpxB,EAA8B,CAClCsxB,SAAUr6B,KAAK85B,SACfQ,QAASF,GAGXp5B,EAAO+G,MAAM,uBAAwBgB,GACrCwG,QAAevP,KAAK65B,IAAIt3B,KAAK,IAAIg4B,GAAexxB,GACjD,CAAC,MAAO9G,GACP,IAAIi4B,EAGF,MAAMj4B,EAFNjB,EAAOkB,MAAM,4CAA6C+3B,EAAOh4B,EAIpE,CACD,OAAOsN,CACR,CAIMjP,+BAA+B25B,EAAYO,EAAoBN,GAA0B,GAC9F,IAAIh5B,EAA6B,KAMjC,OALIs5B,EACFt5B,QAAalB,KAAKy6B,YAAYR,EAAOC,GAErCl5B,EAAOC,KAAK,gDAAiDg5B,GAExD/4B,CACR,QCvCUw5B,GACS3R,QAAgCllB,UAApD9D,YAAoBgpB,EAAgCllB,GAAhC7D,KAAO+oB,QAAPA,EAAgC/oB,KAAS6D,UAATA,EAClD5D,EAAeC,mBAAmB6oB,EAAS,WAC3C9oB,EAAeC,mBAAmBS,EAAcC,WAAWZ,KAAK6D,WAAY,YAC7E,CAEMvD,kBAAkBq6B,EAAiB1jB,EAA4B,IACpE,IAAI/V,GAAgB,EACpB,GAAMy5B,GAAa1jB,EAAmB,CACpC,MAAM2jB,EAAqB51B,KAAKC,OAAM,IAAI4C,MAAOC,UAAY,KAOvDiB,EAAS,CACboW,KAPe,CACf0b,WAAYF,EACZnwB,UAAWowB,EACXE,QAASF,EAAa3jB,GAKtBmI,uBAAwB,QACxB1Z,UAAW1F,KAAK6D,UAChBmd,oBAAqB,oCAGvB,UAC0ChhB,KAAK+oB,QAAQ9L,SAAS1a,KAAK,IAAIw4B,EAAehyB,IACtF7H,GAAO,CACR,CAAC,MAAOe,GACHmN,OAAOnN,GAAK8nB,QAAQ,oCAAsC,GAC5D/oB,EAAO2G,MAAM,+BAAgCgzB,EAEhD,CACF,CAED,OAAOz5B,CACR,CAEMZ,kBAAkBq6B,GACvB,GAAIh6B,EAAcC,WAAW+5B,GAC3B,IACE,MAAMK,QAA8Bh7B,KAAK+oB,QAAQ5jB,aAAanF,KAAK6D,UAAW,CAAEg3B,WAAYF,IAC5F35B,EAAO2G,MAAM,wBAAyBgzB,EAASK,EAChD,CAAC,MAAO/4B,GACPjB,EAAOsL,KAAK,uCAAwCquB,EAAS14B,EAAKA,EACnE,CAEJ,CAEM3B,8BACL,MAAMs6B,EAAqB51B,KAAKC,OAAM,IAAI4C,MAAOC,UAAY,KACvD/B,EAA4B,CAChCL,UAAW1F,KAAK6D,UAChBo3B,iBAAkB,iBAClBp1B,0BAA2B,CACzB,OAAQ+0B,IAKN5a,SADoBhgB,KAAK+oB,QAAQ/iB,iBAAiBD,IAC3BT,KAAKqZ,IACd,CAAEkc,WAAYlc,EAAc,eAKhD,aAF8B3e,KAAK+oB,QAAQvjB,mBAAmBxF,KAAK6D,UAAWmc,EAAU,GAGzF,QCnEUkb,GACHC,OAA8B,IAAIjT,IAI1CnoB,cAAgB,CAETO,kBAAkBq6B,EAAiB1jB,EAA4B,IACpE,IAAI/V,GAAgB,EACpB,GAAIP,EAAcC,WAAW+5B,GAAU,CACrC,MAAM/yB,EAAcC,KAAKD,MACnBkU,EAAc9b,KAAKm7B,OAAO1S,IAAIkS,KAC/B7e,GAAOA,EAAMlU,KAChB5H,KAAKm7B,OAAO5S,IAAIoS,EAAS/yB,EAA0B,IAApBqP,GAC/B/V,GAAO,EAEV,CACD,OAAOA,CACR,CAEMZ,kBAAkBq6B,GACnBh6B,EAAcC,WAAW+5B,IAC3B36B,KAAKm7B,OAAO7J,OAAOqJ,EAEtB,CAEMr6B,8BACL,MAAM86B,EAAqB,GACrBxzB,EAAcC,KAAKD,MASzB,OARA5H,KAAKm7B,OAAOl1B,SAAQ,CAAC0Y,EAAG3X,KAClB2X,EAAI/W,GACNwzB,EAAS5xB,KAAKxC,EACf,IAEHo0B,EAASn1B,SAASe,IAChBhH,KAAKm7B,OAAO7J,OAAOtqB,EAAE,IAEhBo0B,EAAS16B,MACjB"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/batch/aws-batch-background-processor.ts","../src/batch/aws-batch-ratchet.ts","../src/build/ratchet-aws-info.ts","../src/cache/dynamo-db-storage-provider.ts","../src/cache/s3-storage-provider.ts","../src/cache/simple-cache.ts","../src/cloudwatch/cloud-watch-log-group-ratchet.ts","../src/cloudwatch/cloud-watch-logs-ratchet.ts","../src/model/cloud-watch-metrics-unit.ts","../src/cloudwatch/cloud-watch-metrics-ratchet.ts","../src/daemon/daemon-util.ts","../src/s3/s3-cache-ratchet.ts","../src/daemon/daemon.ts","../src/dao/prototype-dao.ts","../src/dao/s3-prototype-dao-provider.ts","../src/dao/s3-simple-dao.ts","../src/dynamodb/dynamo-ratchet.ts","../src/dynamodb/dynamo-table-ratchet.ts","../src/dynamodb/hash-spreader.ts","../src/ec2/ec2-ratchet.ts","../src/environment/cascade-environment-service-provider.ts","../src/environment/env-var-environment-service-provider.ts","../src/environment/environment-service.ts","../src/environment/fixed-environment-service-provider.ts","../src/environment/s3-environment-service-provider.ts","../src/environment/ssm-environment-service-provider.ts","../src/expiring-code/dynamo-expiring-code-provider.ts","../src/expiring-code/expiring-code-ratchet.ts","../src/expiring-code/s3-expiring-code-provider.ts","../src/iam/aws-credentials-ratchet.ts","../src/lambda/lambda-event-detector.ts","../src/lambda/lambda-event-type-guards.ts","../src/route53/route-53-ratchet.ts","../src/runtime-parameter/dynamo-runtime-parameter-provider.ts","../src/runtime-parameter/global-variable-override-runtime-parameter-provider.ts","../src/runtime-parameter/memory-runtime-parameter-provider.ts","../src/runtime-parameter/runtime-parameter-ratchet.ts","../src/s3/s3-location-sync-ratchet.ts","../src/s3/s3-ratchet.ts","../src/ses/mailer.ts","../src/sns/sns-ratchet.ts","../src/sync-lock/dynamo-db-sync-lock.ts","../src/sync-lock/memory-sync-lock.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["AwsBatchBackgroundProcessor","batchRatchet","validTaskNames","constructor","this","RequireRatchet","notNullOrUndefined","batchClient","defaultJobDefinition","defaultQueueName","async","taskName","data","meta","length","StringRatchet","trimToNull","includes","ErrorRatchet","throwFormattedErr","Logger","info","rval","jobName","DateTime","utc","toFormat","options","jobDefinition","jobQueue","parameters","taskData","JSON","stringify","taskMetadata","scheduleJob","jobId","err","error","AwsBatchRatchet","_batchClient","_defaultQueueName","_defaultJobDefinition","send","SubmitJobCommand","jobStatus","queueName","listJobs","request","nextToken","tmp","ListJobsCommand","concat","jobSummaryList","RatchetAwsInfo","static","version","hash","branch","tag","timeBuiltISO","notes","DynamoDbStorageProvider","dynamo","opts","tableName","hashKeyName","true","useRangeKeys","rangeKeyName","hashKeyValue","createKeyObject","cacheKey","keys","cleanDynamoFieldsFromObjectInPlace","dynamoExpiresColumnName","extractKeysFromObject","dKey","simpleGet","value","toSave","Object","assign","expiresEpochMS","Math","floor","simplePut","simpleDelete","allKeys","readAll","map","a","deleteAllInBatches","qry","TableName","KeyConditionExpression","ExpressionAttributeNames","ExpressionAttributeValues","fullyExecuteQuery","scan","fullyExecuteScan","forEach","r","S3StorageProvider","s3CacheRatchet","prefix","getDefaultBucket","keyToPath","trimToEmpty","endsWith","fetchCacheFileAsObject","writeObjectToCacheFile","removeCacheFile","directChildrenOfPrefix","Promise","all","k","removeFromCache","readFromCache","SimpleCache","provider","defaultTimeToLiveMS","createDefaultReadOptions","maxStalenessMS","timeToLiveMS","cacheNullValues","producer","silly","now","Date","getTime","debug","createdEpochMS","generated","storeInCache","wrapper","fetchWrapper","returnOldValue","clearCache","CloudWatchLogGroupRatchet","logGroup","awsCWLogs","CloudWatchLogsClient","region","cloudWatchLogsClient","startTimestamp","endTimestamp","params","logGroupName","orderBy","temp","DescribeLogStreamsCommand","logStreams","s","lastEventTimestamp","firstEventTimestamp","push","readLogStreams","logStreamName","filter","sortEvents","maxEvents","sw","StopWatch","endTime","startTime","filterPattern","dump","FilterLogEventsCommand","events","sort","b","timestamp","message","localeCompare","log","CloudWatchLogsRatchet","cwLogs","cloudwatchLogs","maxToRemove","oldestEventEpochMS","streamSearchParams","oldestEventTester","totalStreams","removedStreams","failedRemovedStreams","waitPerDescribe","streams","i","st","oldWait","min","waitPer","delParams","type","storedBytes","removed","retry","MAX_DELETE_RETRIES","DeleteLogStreamCommand","PromiseRatchet","wait","warn","stream","findStreamWithOldestEventInGroup","logGroupNamePrefix","res","DescribeLogGroupsCommand","logGroups","groups","req","DeleteLogGroupCommand","findLogGroups","removeLogGroups","sqr","resp","StartQueryCommand","delayMS","status","GetQueryResultsCommand","queryId","StopQueryCommand","CloudWatchMetricsUnit","CloudWatchMetricsRatchet","cw","cloudWatch","CloudWatchClient","apiVersion","cloudWatchClient","namespace","metric","dims","unit","None","timestampDate","highResolution","cwDims","d","Name","key","Value","storageResolution","metricData","Namespace","MetricData","MetricName","Dimensions","Unit","String","Timestamp","StorageResolution","result","PutMetricDataCommand","minuteUTC","query","Error","cnt","dynamoRatchet","fullyExecuteQueryCount","fullyExecuteScanCount","parseDateString","split","join","parseDate","fromISO","toJSDate","metricRes","writeSingleMetric","Count","count","DaemonUtil","Buffer","from","cache","id","s3Key","newState","title","lastUpdatedEpochMS","lastUpdatedMessage","targetFileName","startedEpochMS","completedEpochMS","link","contentType","writeState","DEFAULT_CONTENT","contents","s3meta","DAEMON_METADATA_KEY","Bucket","Key","ContentType","Metadata","Body","Blob","ContentDisposition","written","getS3Client","PutObjectCommand","stat","inStat","updateMessage","upload","Upload","client","tags","queueSize","partSize","leavePartsOnError","on","progress","done","newMessage","s3Cache","path","fetchMetaForCacheFile","metaString","parse","preSignedDownloadUrlForCacheFile","S3CacheRatchet","s3","defaultBucket","s3Client","input","seconds","CacheControl","bucket","bucketVal","GetObjectCommand","NoSuchKey","fetchCacheFileAsS3GetObjectCommandOutput","transformToWebStream","out","transformToByteArray","transformToString","fetchCacheFileAsString","DeleteObjectCommand","dataObject","template","json","writeStringToCacheFile","dataString","StreamRatchet","stringToWebReadableStream","writeStreamToCacheFile","srcPrefix","targetPrefix","targetRatchet","recurseSubFolders","sourceFiles","targetFiles","sourceFile","dumpExpected","subs","synchronize","shouldCopy","srcMeta","targetMeta","ETag","srcStream","fetchCacheFileAsReadableStream","undefined","HeadObjectCommand","LastModified","srcKey","dstKey","srcBucket","dstBucket","CopySource","MetadataDirective","CopyObjectCommand","copyFile","expirationSeconds","getCommand","getSignedUrl","expiresIn","expandFiles","maxToReturn","returnValue","Prefix","Delimiter","response","ListObjectsCommand","prefixLength","cp","substring","expanded","name","size","Marker","NextMarker","idx","next","ContinuationToken","NextContinuationToken","CommonPrefixes","p","explicitBucket","Daemon","_defaultGroup","jwtRatchet","DEFAULT_DEFAULT_GROUP","defaultGroup","token","daemonKey","createTokenString","toString","pathToKey","generatePath","group","generatePrefix","createType4Guid","start","olderThanSeconds","original","list","test","proms","listKeys","itemPath","publicToken","parsed","decodeToken","abort","finalize","PrototypeDao","cfg","guidCreateFunction","guidFieldName","createdEpochMSFieldName","updatedEpochMSFieldName","createdUtcTimestampFieldName","updatedUtcTimestampFieldName","defaultDaoConfig","loadDatabase","items","storeDatabase","lastModifiedEpochMS","guids","old","fetchAll","t","toISO","guid","find","fieldDotPath","fieldValue","searchByFieldMap","matchAll","val","MapRatchet","findValueDotPath","S3PrototypeDaoProvider","keyName","notNullUndefinedOrOnlyWhitespaceString","inDb","S3SimpleDao","buildPathPrefix","buildFullPath","fullPath","fileExists","item","fetch","promises","listItems","DynamoRatchet","awsDDB","dynamoDBDocumentClient","getDDB","Limit","throughputSafeScanOrQuery","o","scanPromise","Items","ScanCommand","QueryCommand","proc","maxTries","inCurrentTry","currentTry","objectIsErrorWithProvisionedThroughputExceededExceptionCode","pow","Select","scannedCount","pages","qryResults","myLimit","queryPromise","LastEvaluatedKey","end","DurationRatchet","formatMsDuration","softLimit","fullyExecuteProcessOverQuery","v","blankPages","fullyExecuteProcessOverScan","elements","batchSize","batchItems","el","PutRequest","Item","ReturnConsumedCapacity","curBatch","slice","RequestItems","ReturnItemCollectionMetrics","tryCount","batchResults","BatchWriteCommand","UnprocessedItems","backoff","keyNames","keyDataSrc","keysOnly","stripAllToKeysOnly","fetchAllInBatches","inKeys","batches","remain","tableEntry","Keys","nextBatch","BatchGetCommand","Responses","UnprocessedKeys","DeleteRequest","autoRetryCount","PutCommand","fieldName","ConditionExpression","wrote","adjustFunction","maxAdjusts","pio","attrNames","attrValues","condExp","adjustCount","newValue","holder","GetCommand","counterAttributeName","deleteOnZero","UpdateExpression","ReturnValues","updateFailed","UpdateItemCommand","Attributes","DeleteCommand","counterFieldName","increment","update","ui","NumberRatchet","safeNumber","ob","rem","cleanObject","keysNames","stripToKeysOnly","DynamoTableRatchet","waitForDelete","DeleteTableCommand","waitForTableDelete","waitForReady","replaceIfExists","tableExists","deleteTable","CreateTableCommand","waitForTableReady","safeDescribeTable","Table","TableStatus","DescribeTableCommand","HashSpreader","spots","buckets","separator","alphabet","_allSlots","allUnique","stringContainsOnlyAlphanumeric","permutations","allPerms","allPermutationsOfLength","allBuckets","randomBucket","random","allSpreadValues","allSpreadValuesForArray","inputs","addSpreader","extractBucket","loc","charAt","removeBucket","Ec2Ratchet","availabilityZone","ec2","ec2InstanceConnect","EC2Client","EC2InstanceConnectClient","eC2Client","eC2InstanceConnectClient","instanceId","maxWaitForShutdownMS","stopParams","InstanceIds","DryRun","StopInstancesCommand","describeInstance","State","Code","maxWaitForStartupMS","startParams","StartInstancesCommand","PublicIpAddress","listAllInstances","instanceIds","NextToken","DescribeInstancesCommand","Reservations","Instances","publicKeyString","instanceOsUser","userName","InstanceId","AvailabilityZone","InstanceOSUser","SSHPublicKey","SendSSHPublicKeyCommand","CascadeEnvironmentServiceProvider","providers","fetchConfig","EnvVarEnvironmentServiceProvider","envVarName","src","process","env","global","toParse","EnvironmentService","readPromiseCache","Map","maxRetries","backoffMultiplierMS","defaultEnvironmentServiceConfig","has","set","getConfigUncached","get","waitMS","FixedEnvironmentServiceProvider","record","m","S3EnvironmentServiceProvider","ratchet","bucketName","s3Override","S3Client","readPath","pathPrefix","pathSuffix","SsmEnvironmentServiceProvider","ssmEncrypted","ssm","SSMClient","WithDecryption","GetParameterCommand","Parameter","errCode","toLowerCase","indexOf","errMsg","DynamoExpiringCodeProvider","code","context","deleteOnMatch","expCode","output","ConsumedCapacity","CapacityUnits","dtr","ExpiringCodeRatchet","timeToLiveSeconds","generateCode","storeCode","checkCode","S3ExpiringCodeProvider","vals","fetchFile","toUpperCase","newData","updateFile","AwsCredentialsRatchet","newProfile","LambdaEventDetector","event","source","resources","Records","EventSource","eventSource","rawPath","requestContext","routeKey","httpMethod","authorizationToken","methodArn","isValidCronEvent","isSingleEntryEvent","isValidSnsEvent","isValidDynamoDBEvent","isValidS3Event","entryName","Array","LambdaEventTypeGuards","isValidApiGatewayV2WithRequestContextEvent","isValidApiGatewayEvent","isValidApiGatewayAuthorizerEvent","Route53Ratchet","route53","hostedZoneId","route53Client","domainName","target","ttlSeconds","ChangeBatch","Changes","Action","ResourceRecordSet","ResourceRecords","TTL","Type","HostedZoneId","ChangeResourceRecordSetsCommand","waitParams","Id","ChangeInfo","waitResult","waitUntilResourceRecordSetsChanged","maxWaitTime","state","WaiterState","SUCCESS","DynamoRuntimeParameterProvider","groupId","paramKey","toStore","GlobalVariableOverrideRuntimeParameterProvider","wrapped","globalTTL","suffix","generateName","asString","canParseAsJson","paramValue","readParameter","readAllParametersForGroup","writeParameter","MemoryRuntimeParameterProvider","resolve","startsWith","RuntimeParameterRatchet","defaultValue","forceFreshRead","cached","toCacheStoreKey","oldest","storedEpochMS","readUnderlyingEntry","addToCache","readUnderlyingEntries","S3LocationSyncRatchet","config","maxNumThreads","updateSrcPrefix","updateDstPrefix","dstPrefix","express","replace","completedCopying","retries","encodeURIComponent","dstS3","fetched","srcS3","ContentLength","more","ListObjectsV2Command","IsTruncated","Contents","obj","Size","copyObject","cmpResult","compareSrcAndDst","needCopy","diff","runBoundedParallelSingleParam","getSrc","listObjects","getDst","srcObjs","dstObjs","existed","sObj","dObj","hasOwnProperty","S3Ratchet","trim","checkS3UrlForValidity","idx1","Mailer","ses","RegExp","archive","sESClient","rts","htmlTemplateName","txtTemplateName","layoutName","partialNames","templateRenderer","htmlMessage","renderTemplate","txtMessage","newVal","fillEmailBody","sendEmail","filterEmailsToValid","emails","e","allowedDestinationEmails","doNotArchive","destinationAddresses","targetPath","archivePrefix","applyLimitsToBodySizesIfAnyInPlace","maxMessageBodySizeInBytes","totalSize","attachments","txtAttach","filename","base64Data","Base64Ratchet","generateBase64VersionOfString","htmlAttach","applyLimitsToAttachmentSizesIfAnyInPlace","maxAttachmentSizeInBase64Bytes","filtered","createRandomHexString","inRts","toAddresses","autoBcc","doNotAutoBcc","autoBccAddresses","bccAddresses","srcDestinationAddresses","srcBccAddresses","archiveEmailIfConfigured","toLine","bccLine","fromAddress","defaultSendingAddress","boundary","altBoundary","rawMail","subject","RawMessage","Data","TextEncoder","encode","SendRawEmailCommand","email","EMAIL","SnsRatchet","sns","topicArn","SNSClient","snsClient","inMsg","suppressErrors","safeInMsg","msg","TopicArn","Message","PublishCommand","condition","sendMessage","DynamoDbSyncLock","lockKey","nowSeconds","lockingKey","expires","PutItemCommand","dio","FilterExpression","MemorySyncLock","_locks","delete","toRemove"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { RatchetTemplateRenderer } from './ratchet-template-renderer.js';
1
+ import { RatchetTemplateRenderer } from '@bitblit/ratchet-common';
2
2
  import { S3CacheRatchet } from '../s3/s3-cache-ratchet.js';
3
3
  export interface MailerConfig {
4
4
  defaultSendingAddress?: string;
package/package.json CHANGED
@@ -1,9 +1,11 @@
1
1
  {
2
2
  "name": "@bitblit/ratchet-aws",
3
- "version": "4.0.130-alpha",
3
+ "version": "4.0.132-alpha",
4
4
  "description": "Common tools for use with AWS browser and node",
5
5
  "sideEffects": false,
6
6
  "type": "module",
7
+ "module": "./lib/index.mjs",
8
+ "types": "./lib/index.d.ts",
7
9
  "files": [
8
10
  "lib/*",
9
11
  "bin/*"
@@ -80,13 +82,13 @@
80
82
  "@aws-sdk/smithy-client": "3.329.0",
81
83
  "@aws-sdk/types": "3.329.0",
82
84
  "@aws-sdk/util-waiter": "3.329.0",
83
- "@bitblit/ratchet-common": "4.0.130-alpha"
85
+ "@bitblit/ratchet-common": "4.0.132-alpha"
84
86
  },
85
87
  "optionalDependencies": {},
86
88
  "resolutions": {},
87
89
  "devDependencies": {
88
- "@bitblit/ratchet-jest": "4.0.130-alpha",
89
- "@bitblit/ratchet-node-only": "4.0.130-alpha",
90
+ "@bitblit/ratchet-jest": "4.0.132-alpha",
91
+ "@bitblit/ratchet-node-only": "4.0.132-alpha",
90
92
  "@types/aws-lambda": "8.10.115",
91
93
  "aws-sdk-client-mock": "2.1.1"
92
94
  }
@@ -1,18 +0,0 @@
1
- /// <reference types="node" />
2
- import { S3CacheRatchet } from './s3-cache-ratchet.js';
3
- export declare class S3CacheToLocalDiskRatchet {
4
- private s3;
5
- private tmpFolder;
6
- private cacheTimeoutSeconds;
7
- private static readonly DEFAULT_CACHE_TIMEOUT_SEC;
8
- private currentlyLoading;
9
- constructor(s3: S3CacheRatchet, tmpFolder: string, cacheTimeoutSeconds?: number);
10
- getFileString(key: string): Promise<string>;
11
- private keyToLocalCachePath;
12
- removeCacheFileForKey(key: string): void;
13
- getFileBuffer(key: string): Promise<Buffer>;
14
- private updateLocalCacheFile;
15
- getCacheFileAsString(filePath: string): string;
16
- getCacheFileAsBuffer(filePath: string): Buffer;
17
- private generateCacheHash;
18
- }
@@ -1 +0,0 @@
1
- export {};
@@ -1,4 +0,0 @@
1
- export interface RatchetTemplateRenderer {
2
- renderTemplate(templateName: string, context: any, layoutName?: string, partialNames?: string[]): Promise<string>;
3
- renderTemplateDirect(templateValue: string, context: any, layoutName?: string): Promise<string>;
4
- }
@@ -1,13 +0,0 @@
1
- import { RatchetTemplateRenderer } from './ratchet-template-renderer.js';
2
- export declare class RemoteHandlebarsTemplateRenderer implements RatchetTemplateRenderer {
3
- private prefix;
4
- private suffix;
5
- private maxCacheTemplates;
6
- private cache;
7
- constructor(prefix?: string, suffix?: string, maxCacheTemplates?: number);
8
- renderTemplate(templateName: string, context: any, layoutName?: string): Promise<string>;
9
- renderRemoteTemplate(templateName: string, inContext: any, layoutName?: string): Promise<string>;
10
- renderTemplateDirect(templateText: string, context: any, layoutName?: string): Promise<string>;
11
- private fetchTemplate;
12
- private fetchTemplateText;
13
- }