@dra2020/baseclient 1.0.13 → 1.0.14
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/LICENSE +21 -0
- package/README.md +37 -0
- package/dist/all/all.d.ts +36 -0
- package/dist/all/allclient.d.ts +18 -0
- package/dist/base.js +33010 -0
- package/dist/base.js.map +1 -0
- package/dist/baseclient.js +8991 -0
- package/dist/baseclient.js.map +1 -0
- package/dist/context/all.d.ts +1 -0
- package/dist/context/context.d.ts +13 -0
- package/dist/dbabstract/all.d.ts +1 -0
- package/dist/dbabstract/db.d.ts +83 -0
- package/dist/dbdynamo/all.d.ts +1 -0
- package/dist/dbdynamo/dbdynamo.d.ts +190 -0
- package/dist/filterexpr/all.d.ts +1 -0
- package/dist/filterexpr/filterexpr.d.ts +64 -0
- package/dist/fsm/all.d.ts +1 -0
- package/dist/fsm/fsm.d.ts +118 -0
- package/dist/fsmfile/all.d.ts +1 -0
- package/dist/fsmfile/fsmfile.d.ts +47 -0
- package/dist/jsonstream/all.d.ts +1 -0
- package/dist/jsonstream/jsonstream.d.ts +130 -0
- package/dist/lambda/all.d.ts +1 -0
- package/dist/lambda/env.d.ts +10 -0
- package/dist/lambda/lambda.d.ts +18 -0
- package/dist/logabstract/all.d.ts +1 -0
- package/dist/logabstract/log.d.ts +26 -0
- package/dist/logclient/all.d.ts +1 -0
- package/dist/logclient/log.d.ts +6 -0
- package/dist/logserver/all.d.ts +5 -0
- package/dist/logserver/log.d.ts +11 -0
- package/dist/logserver/logaccum.d.ts +154 -0
- package/dist/logserver/logblob.d.ts +24 -0
- package/dist/logserver/logconcat.d.ts +55 -0
- package/dist/logserver/logkey.d.ts +28 -0
- package/dist/memsqs/all.d.ts +4 -0
- package/dist/memsqs/client.d.ts +13 -0
- package/dist/memsqs/loopback.d.ts +11 -0
- package/dist/memsqs/orderedlist.d.ts +19 -0
- package/dist/memsqs/queue.d.ts +84 -0
- package/dist/memsqs/server.d.ts +37 -0
- package/dist/ot-editutil/all.d.ts +2 -0
- package/dist/ot-editutil/oteditutil.d.ts +14 -0
- package/dist/ot-editutil/otmaputil.d.ts +21 -0
- package/dist/ot-js/all.d.ts +9 -0
- package/dist/ot-js/otarray.d.ts +111 -0
- package/dist/ot-js/otclientengine.d.ts +38 -0
- package/dist/ot-js/otcomposite.d.ts +37 -0
- package/dist/ot-js/otcounter.d.ts +17 -0
- package/dist/ot-js/otengine.d.ts +22 -0
- package/dist/ot-js/otmap.d.ts +19 -0
- package/dist/ot-js/otserverengine.d.ts +38 -0
- package/dist/ot-js/otsession.d.ts +111 -0
- package/dist/ot-js/ottypes.d.ts +29 -0
- package/dist/poly/all.d.ts +15 -0
- package/dist/poly/blend.d.ts +1 -0
- package/dist/poly/boundbox.d.ts +16 -0
- package/dist/poly/cartesian.d.ts +5 -0
- package/dist/poly/graham-scan.d.ts +8 -0
- package/dist/poly/hash.d.ts +1 -0
- package/dist/poly/matrix.d.ts +24 -0
- package/dist/poly/minbound.d.ts +1 -0
- package/dist/poly/poly.d.ts +52 -0
- package/dist/poly/polybin.d.ts +5 -0
- package/dist/poly/polylabel.d.ts +7 -0
- package/dist/poly/polypack.d.ts +30 -0
- package/dist/poly/polyround.d.ts +1 -0
- package/dist/poly/polysimplify.d.ts +1 -0
- package/dist/poly/quad.d.ts +48 -0
- package/dist/poly/selfintersect.d.ts +1 -0
- package/dist/poly/shamos.d.ts +1 -0
- package/dist/poly/simplify.d.ts +2 -0
- package/dist/poly/topo.d.ts +46 -0
- package/dist/poly/union.d.ts +48 -0
- package/dist/storage/all.d.ts +4 -0
- package/dist/storage/datablob.d.ts +9 -0
- package/dist/storage/env.d.ts +10 -0
- package/dist/storage/splitsblob.d.ts +13 -0
- package/dist/storage/storage.d.ts +166 -0
- package/dist/storages3/all.d.ts +1 -0
- package/dist/storages3/s3.d.ts +62 -0
- package/dist/util/all.d.ts +5 -0
- package/dist/util/bintrie.d.ts +93 -0
- package/dist/util/countedhash.d.ts +19 -0
- package/dist/util/gradient.d.ts +15 -0
- package/dist/util/indexedarray.d.ts +15 -0
- package/dist/util/util.d.ts +68 -0
- package/docs/context.md +2 -0
- package/docs/dbabstract.md +2 -0
- package/docs/dbdynamo.md +2 -0
- package/docs/fsm.md +243 -0
- package/docs/fsmfile.md +2 -0
- package/docs/jsonstream.md +44 -0
- package/docs/lambda.md +2 -0
- package/docs/logabstract.md +2 -0
- package/docs/logclient.md +2 -0
- package/docs/logserver.md +2 -0
- package/docs/ot-editutil.md +2 -0
- package/docs/ot-js.md +95 -0
- package/docs/poly.md +103 -0
- package/docs/storage.md +2 -0
- package/docs/storages3.md +2 -0
- package/docs/util.md +2 -0
- package/lib/all/all.ts +41 -0
- package/lib/all/allclient.ts +19 -0
- package/lib/context/all.ts +1 -0
- package/lib/context/context.ts +82 -0
- package/lib/dbabstract/all.ts +1 -0
- package/lib/dbabstract/db.ts +246 -0
- package/lib/dbdynamo/all.ts +1 -0
- package/lib/dbdynamo/dbdynamo.ts +1551 -0
- package/lib/filterexpr/all.ts +1 -0
- package/lib/filterexpr/filterexpr.ts +625 -0
- package/lib/fsm/all.ts +1 -0
- package/lib/fsm/fsm.ts +549 -0
- package/lib/fsmfile/all.ts +1 -0
- package/lib/fsmfile/fsmfile.ts +236 -0
- package/lib/jsonstream/all.ts +1 -0
- package/lib/jsonstream/jsonstream.ts +940 -0
- package/lib/lambda/all.ts +1 -0
- package/lib/lambda/env.ts +13 -0
- package/lib/lambda/lambda.ts +120 -0
- package/lib/logabstract/all.ts +1 -0
- package/lib/logabstract/log.ts +55 -0
- package/lib/logclient/all.ts +1 -0
- package/lib/logclient/log.ts +105 -0
- package/lib/logserver/all.ts +5 -0
- package/lib/logserver/log.ts +565 -0
- package/lib/logserver/logaccum.ts +1445 -0
- package/lib/logserver/logblob.ts +84 -0
- package/lib/logserver/logconcat.ts +313 -0
- package/lib/logserver/logkey.ts +125 -0
- package/lib/memsqs/all.ts +4 -0
- package/lib/memsqs/client.ts +268 -0
- package/lib/memsqs/loopback.ts +64 -0
- package/lib/memsqs/orderedlist.ts +74 -0
- package/lib/memsqs/queue.ts +395 -0
- package/lib/memsqs/server.ts +262 -0
- package/lib/ot-editutil/all.ts +2 -0
- package/lib/ot-editutil/oteditutil.ts +180 -0
- package/lib/ot-editutil/otmaputil.ts +209 -0
- package/lib/ot-js/all.ts +9 -0
- package/lib/ot-js/otarray.ts +1168 -0
- package/lib/ot-js/otclientengine.ts +327 -0
- package/lib/ot-js/otcomposite.ts +247 -0
- package/lib/ot-js/otcounter.ts +145 -0
- package/lib/ot-js/otengine.ts +71 -0
- package/lib/ot-js/otmap.ts +144 -0
- package/lib/ot-js/otserverengine.ts +329 -0
- package/lib/ot-js/otsession.ts +199 -0
- package/lib/ot-js/ottypes.ts +98 -0
- package/lib/poly/all.ts +15 -0
- package/lib/poly/blend.ts +27 -0
- package/lib/poly/boundbox.ts +102 -0
- package/lib/poly/cartesian.ts +130 -0
- package/lib/poly/graham-scan.ts +401 -0
- package/lib/poly/hash.ts +15 -0
- package/lib/poly/matrix.ts +309 -0
- package/lib/poly/minbound.ts +211 -0
- package/lib/poly/poly.ts +767 -0
- package/lib/poly/polybin.ts +218 -0
- package/lib/poly/polylabel.ts +204 -0
- package/lib/poly/polypack.ts +458 -0
- package/lib/poly/polyround.ts +30 -0
- package/lib/poly/polysimplify.ts +24 -0
- package/lib/poly/quad.ts +272 -0
- package/lib/poly/selfintersect.ts +87 -0
- package/lib/poly/shamos.ts +297 -0
- package/lib/poly/simplify.ts +119 -0
- package/lib/poly/topo.ts +525 -0
- package/lib/poly/union.ts +371 -0
- package/lib/storage/all.ts +4 -0
- package/lib/storage/datablob.ts +36 -0
- package/lib/storage/env.ts +14 -0
- package/lib/storage/splitsblob.ts +63 -0
- package/lib/storage/storage.ts +604 -0
- package/lib/storages3/all.ts +1 -0
- package/lib/storages3/s3.ts +576 -0
- package/lib/util/all.ts +5 -0
- package/lib/util/bintrie.ts +603 -0
- package/lib/util/countedhash.ts +83 -0
- package/lib/util/gradient.ts +108 -0
- package/lib/util/indexedarray.ts +80 -0
- package/lib/util/util.ts +695 -0
- package/package.json +8 -8
package/dist/base.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["webpack://base/webpack/universalModuleDefinition","webpack://base/./node_modules/aws-sdk/clients/cognitoidentity.js","webpack://base/./node_modules/aws-sdk/clients/dynamodb.js","webpack://base/./node_modules/aws-sdk/clients/dynamodbstreams.js","webpack://base/./node_modules/aws-sdk/clients/lambda.js","webpack://base/./node_modules/aws-sdk/clients/s3.js","webpack://base/./node_modules/aws-sdk/clients/sts.js","webpack://base/./node_modules/aws-sdk/lib/api_loader.js","webpack://base/./node_modules/aws-sdk/lib/config.js","webpack://base/./node_modules/aws-sdk/lib/config_regional_endpoint.js","webpack://base/./node_modules/aws-sdk/lib/core.js","webpack://base/./node_modules/aws-sdk/lib/credentials.js","webpack://base/./node_modules/aws-sdk/lib/credentials/chainable_temporary_credentials.js","webpack://base/./node_modules/aws-sdk/lib/credentials/cognito_identity_credentials.js","webpack://base/./node_modules/aws-sdk/lib/credentials/credential_provider_chain.js","webpack://base/./node_modules/aws-sdk/lib/credentials/ec2_metadata_credentials.js","webpack://base/./node_modules/aws-sdk/lib/credentials/ecs_credentials.js","webpack://base/./node_modules/aws-sdk/lib/credentials/environment_credentials.js","webpack://base/./node_modules/aws-sdk/lib/credentials/file_system_credentials.js","webpack://base/./node_modules/aws-sdk/lib/credentials/process_credentials.js","webpack://base/./node_modules/aws-sdk/lib/credentials/remote_credentials.js","webpack://base/./node_modules/aws-sdk/lib/credentials/saml_credentials.js","webpack://base/./node_modules/aws-sdk/lib/credentials/shared_ini_file_credentials.js","webpack://base/./node_modules/aws-sdk/lib/credentials/temporary_credentials.js","webpack://base/./node_modules/aws-sdk/lib/credentials/token_file_web_identity_credentials.js","webpack://base/./node_modules/aws-sdk/lib/credentials/web_identity_credentials.js","webpack://base/./node_modules/aws-sdk/lib/discover_endpoint.js","webpack://base/./node_modules/aws-sdk/lib/dynamodb/converter.js","webpack://base/./node_modules/aws-sdk/lib/dynamodb/document_client.js","webpack://base/./node_modules/aws-sdk/lib/dynamodb/numberValue.js","webpack://base/./node_modules/aws-sdk/lib/dynamodb/set.js","webpack://base/./node_modules/aws-sdk/lib/dynamodb/translator.js","webpack://base/./node_modules/aws-sdk/lib/dynamodb/types.js","webpack://base/./node_modules/aws-sdk/lib/event-stream/buffered-create-event-stream.js","webpack://base/./node_modules/aws-sdk/lib/event-stream/event-message-chunker-stream.js","webpack://base/./node_modules/aws-sdk/lib/event-stream/event-message-chunker.js","webpack://base/./node_modules/aws-sdk/lib/event-stream/event-message-unmarshaller-stream.js","webpack://base/./node_modules/aws-sdk/lib/event-stream/int64.js","webpack://base/./node_modules/aws-sdk/lib/event-stream/parse-event.js","webpack://base/./node_modules/aws-sdk/lib/event-stream/parse-message.js","webpack://base/./node_modules/aws-sdk/lib/event-stream/split-message.js","webpack://base/./node_modules/aws-sdk/lib/event-stream/streaming-create-event-stream.js","webpack://base/./node_modules/aws-sdk/lib/event_listeners.js","webpack://base/./node_modules/aws-sdk/lib/http.js","webpack://base/./node_modules/aws-sdk/lib/http/node.js","webpack://base/./node_modules/aws-sdk/lib/json/builder.js","webpack://base/./node_modules/aws-sdk/lib/json/parser.js","webpack://base/./node_modules/aws-sdk/lib/metadata_service.js","webpack://base/./node_modules/aws-sdk/lib/model/api.js","webpack://base/./node_modules/aws-sdk/lib/model/collection.js","webpack://base/./node_modules/aws-sdk/lib/model/operation.js","webpack://base/./node_modules/aws-sdk/lib/model/paginator.js","webpack://base/./node_modules/aws-sdk/lib/model/resource_waiter.js","webpack://base/./node_modules/aws-sdk/lib/model/shape.js","webpack://base/./node_modules/aws-sdk/lib/node_loader.js","webpack://base/./node_modules/aws-sdk/lib/param_validator.js","webpack://base/./node_modules/aws-sdk/lib/protocol/helpers.js","webpack://base/./node_modules/aws-sdk/lib/protocol/json.js","webpack://base/./node_modules/aws-sdk/lib/protocol/query.js","webpack://base/./node_modules/aws-sdk/lib/protocol/rest.js","webpack://base/./node_modules/aws-sdk/lib/protocol/rest_json.js","webpack://base/./node_modules/aws-sdk/lib/protocol/rest_xml.js","webpack://base/./node_modules/aws-sdk/lib/publisher/configuration.js","webpack://base/./node_modules/aws-sdk/lib/publisher/index.js","webpack://base/./node_modules/aws-sdk/lib/query/query_param_serializer.js","webpack://base/./node_modules/aws-sdk/lib/realclock/nodeClock.js","webpack://base/./node_modules/aws-sdk/lib/region_config.js","webpack://base/./node_modules/aws-sdk/lib/request.js","webpack://base/./node_modules/aws-sdk/lib/resource_waiter.js","webpack://base/./node_modules/aws-sdk/lib/response.js","webpack://base/./node_modules/aws-sdk/lib/s3/managed_upload.js","webpack://base/./node_modules/aws-sdk/lib/sequential_executor.js","webpack://base/./node_modules/aws-sdk/lib/service.js","webpack://base/./node_modules/aws-sdk/lib/services/dynamodb.js","webpack://base/./node_modules/aws-sdk/lib/services/lambda.js","webpack://base/./node_modules/aws-sdk/lib/services/s3.js","webpack://base/./node_modules/aws-sdk/lib/services/s3util.js","webpack://base/./node_modules/aws-sdk/lib/services/sts.js","webpack://base/./node_modules/aws-sdk/lib/shared-ini/index.js","webpack://base/./node_modules/aws-sdk/lib/shared-ini/ini-loader.js","webpack://base/./node_modules/aws-sdk/lib/signers/presign.js","webpack://base/./node_modules/aws-sdk/lib/signers/request_signer.js","webpack://base/./node_modules/aws-sdk/lib/signers/s3.js","webpack://base/./node_modules/aws-sdk/lib/signers/v2.js","webpack://base/./node_modules/aws-sdk/lib/signers/v3.js","webpack://base/./node_modules/aws-sdk/lib/signers/v3https.js","webpack://base/./node_modules/aws-sdk/lib/signers/v4.js","webpack://base/./node_modules/aws-sdk/lib/signers/v4_credentials.js","webpack://base/./node_modules/aws-sdk/lib/state_machine.js","webpack://base/./node_modules/aws-sdk/lib/util.js","webpack://base/./node_modules/aws-sdk/lib/xml/builder.js","webpack://base/./node_modules/aws-sdk/lib/xml/escape-attribute.js","webpack://base/./node_modules/aws-sdk/lib/xml/escape-element.js","webpack://base/./node_modules/aws-sdk/lib/xml/node_parser.js","webpack://base/./node_modules/aws-sdk/lib/xml/xml-node.js","webpack://base/./node_modules/aws-sdk/lib/xml/xml-text.js","webpack://base/./node_modules/aws-sdk/vendor/endpoint-cache/index.js","webpack://base/./node_modules/aws-sdk/vendor/endpoint-cache/utils/LRU.js","webpack://base/./lib/all/all.ts","webpack://base/./lib/context/all.ts","webpack://base/./lib/context/context.ts","webpack://base/./lib/dbabstract/all.ts","webpack://base/./lib/dbabstract/db.ts","webpack://base/./lib/dbdynamo/all.ts","webpack://base/./lib/dbdynamo/dbdynamo.ts","webpack://base/./lib/filterexpr/all.ts","webpack://base/./lib/filterexpr/filterexpr.ts","webpack://base/./lib/fsm/all.ts","webpack://base/./lib/fsm/fsm.ts","webpack://base/./lib/fsmfile/all.ts","webpack://base/./lib/fsmfile/fsmfile.ts","webpack://base/./lib/jsonstream/all.ts","webpack://base/./lib/jsonstream/jsonstream.ts","webpack://base/./lib/lambda/all.ts","webpack://base/./lib/lambda/lambda.ts","webpack://base/./lib/logabstract/all.ts","webpack://base/./lib/logabstract/log.ts","webpack://base/./lib/logclient/all.ts","webpack://base/./lib/logclient/log.ts","webpack://base/./lib/logserver/all.ts","webpack://base/./lib/logserver/log.ts","webpack://base/./lib/logserver/logaccum.ts","webpack://base/./lib/logserver/logblob.ts","webpack://base/./lib/logserver/logconcat.ts","webpack://base/./lib/logserver/logkey.ts","webpack://base/./lib/memsqs/all.ts","webpack://base/./lib/memsqs/client.ts","webpack://base/./lib/memsqs/loopback.ts","webpack://base/./lib/memsqs/orderedlist.ts","webpack://base/./lib/memsqs/queue.ts","webpack://base/./lib/memsqs/server.ts","webpack://base/./lib/ot-editutil/all.ts","webpack://base/./lib/ot-editutil/oteditutil.ts","webpack://base/./lib/ot-editutil/otmaputil.ts","webpack://base/./lib/ot-js/all.ts","webpack://base/./lib/ot-js/otarray.ts","webpack://base/./lib/ot-js/otclientengine.ts","webpack://base/./lib/ot-js/otcomposite.ts","webpack://base/./lib/ot-js/otcounter.ts","webpack://base/./lib/ot-js/otengine.ts","webpack://base/./lib/ot-js/otmap.ts","webpack://base/./lib/ot-js/otserverengine.ts","webpack://base/./lib/ot-js/otsession.ts","webpack://base/./lib/ot-js/ottypes.ts","webpack://base/./lib/poly/all.ts","webpack://base/./lib/poly/blend.ts","webpack://base/./lib/poly/boundbox.ts","webpack://base/./lib/poly/cartesian.ts","webpack://base/./lib/poly/graham-scan.ts","webpack://base/./lib/poly/matrix.ts","webpack://base/./lib/poly/minbound.ts","webpack://base/./lib/poly/poly.ts","webpack://base/./lib/poly/polybin.ts","webpack://base/./lib/poly/polylabel.ts","webpack://base/./lib/poly/polypack.ts","webpack://base/./lib/poly/polyround.ts","webpack://base/./lib/poly/polysimplify.ts","webpack://base/./lib/poly/quad.ts","webpack://base/./lib/poly/selfintersect.ts","webpack://base/./lib/poly/shamos.ts","webpack://base/./lib/poly/simplify.ts","webpack://base/./lib/poly/topo.ts","webpack://base/./lib/poly/union.ts","webpack://base/./lib/storage/all.ts","webpack://base/./lib/storage/datablob.ts","webpack://base/./lib/storage/splitsblob.ts","webpack://base/./lib/storage/storage.ts","webpack://base/./lib/storages3/all.ts","webpack://base/./lib/storages3/s3.ts","webpack://base/./lib/util/all.ts","webpack://base/./lib/util/bintrie.ts","webpack://base/./lib/util/countedhash.ts","webpack://base/./lib/util/gradient.ts","webpack://base/./lib/util/indexedarray.ts","webpack://base/./lib/util/util.ts","webpack://base/external \"@dra2020/topojson-client\"","webpack://base/external \"@dra2020/topojson-server\"","webpack://base/external \"@dra2020/topojson-simplify\"","webpack://base/external \"buffer\"","webpack://base/external \"child_process\"","webpack://base/external \"crypto\"","webpack://base/external \"dgram\"","webpack://base/external \"diff-match-patch\"","webpack://base/external \"domain\"","webpack://base/external \"events\"","webpack://base/external \"fs\"","webpack://base/external \"http\"","webpack://base/external \"https\"","webpack://base/external \"jmespath\"","webpack://base/external \"os\"","webpack://base/external \"path\"","webpack://base/external \"polygon-clipping\"","webpack://base/external \"querystring\"","webpack://base/external \"splaytree\"","webpack://base/external \"stream\"","webpack://base/external \"tinyqueue\"","webpack://base/external \"url\"","webpack://base/external \"util\"","webpack://base/external \"uuid\"","webpack://base/external \"xml2js\"","webpack://base/external \"zlib\"","webpack://base/webpack/bootstrap","webpack://base/webpack/startup"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACVA,mBAAO,CAAC,qEAAoB;AAC5B,UAAU,mBAAO,CAAC,uDAAa;AAC/B;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,mBAAO,CAAC,sHAA8C;AACtE,uBAAuB,oKAAyE;AAChG;AACA,GAAG;AACH;AACA;AACA,CAAC;;AAED;;;;;;;;;;;ACjBA,mBAAO,CAAC,qEAAoB;AAC5B,UAAU,mBAAO,CAAC,uDAAa;AAC/B;AACA;;AAEA;AACA;AACA,mBAAO,CAAC,iFAA0B;AAClC;AACA;AACA,gBAAgB,mBAAO,CAAC,sGAAsC;AAC9D,uBAAuB,oJAAiE;AACxF,oBAAoB,6IAA4D;AAChF;AACA,GAAG;AACH;AACA;AACA,CAAC;AACD;AACA;AACA,gBAAgB,mBAAO,CAAC,sGAAsC;AAC9D,uBAAuB,oJAAiE;AACxF,oBAAoB,6IAA4D;AAChF;AACA,GAAG;AACH;AACA;AACA,CAAC;;AAED;;;;;;;;;;;AC7BA,mBAAO,CAAC,qEAAoB;AAC5B,UAAU,mBAAO,CAAC,uDAAa;AAC/B;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,mBAAO,CAAC,sHAA8C;AACtE,uBAAuB,oKAAyE;AAChG;AACA,GAAG;AACH;AACA;AACA,CAAC;;AAED;;;;;;;;;;;ACjBA,mBAAO,CAAC,qEAAoB;AAC5B,UAAU,mBAAO,CAAC,uDAAa;AAC/B;AACA;;AAEA;AACA;AACA,mBAAO,CAAC,6EAAwB;AAChC;AACA;AACA,gBAAgB,mBAAO,CAAC,kGAAoC;AAC5D,uBAAuB,gJAA+D;AACtF;AACA,GAAG;AACH;AACA;AACA,CAAC;AACD;AACA;AACA,gBAAgB,mBAAO,CAAC,kGAAoC;AAC5D,uBAAuB,gJAA+D;AACtF,oBAAoB,yIAA0D;AAC9E;AACA,GAAG;AACH;AACA;AACA,CAAC;;AAED;;;;;;;;;;;AC5BA,mBAAO,CAAC,qEAAoB;AAC5B,UAAU,mBAAO,CAAC,uDAAa;AAC/B;AACA;;AAEA;AACA;AACA,mBAAO,CAAC,qEAAoB;AAC5B;AACA;AACA,gBAAgB,mBAAO,CAAC,0FAAgC;AACxD,uBAAuB,wIAA2D;AAClF,oBAAoB,iIAAsD;AAC1E;AACA,GAAG;AACH;AACA;AACA,CAAC;;AAED;;;;;;;;;;;ACnBA,mBAAO,CAAC,qEAAoB;AAC5B,UAAU,mBAAO,CAAC,uDAAa;AAC/B;AACA;;AAEA;AACA;AACA,mBAAO,CAAC,uEAAqB;AAC7B;AACA;AACA,gBAAgB,mBAAO,CAAC,4FAAiC;AACzD,uBAAuB,0IAA4D;AACnF;AACA,GAAG;AACH;AACA;AACA,CAAC;;AAED;;;;;;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;AClBA,UAAU,mBAAO,CAAC,kDAAQ;AAC1B,mBAAO,CAAC,gEAAe;AACvB,mBAAO,CAAC,oHAAyC;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,WAAW;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,oBAAoB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA,kCAAkC;AAClC;AACA,sCAAsC;AACtC;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,oBAAoB,WAAW;AACzD;AACA;AACA,0BAA0B,oBAAoB;AAC9C;AACA,UAAU;AACV;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,oDAAoD;AACpD;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA,uCAAuC;AACvC;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA,oCAAoC,WAAW;AAC/C;AACA,mCAAmC,aAAa;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA,kCAAkC;AAClC;AACA,sCAAsC;AACtC;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA,uCAAuC;AACvC;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA,4CAA4C,YAAY;AACxD;AACA;AACA;AACA;AACA;AACA,yDAAyD,YAAY;AACrE;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA,QAAQ;AACR;AACA,wBAAwB,YAAY;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO,OAAO;AACd;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,wBAAwB,eAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACzmBA,UAAU,mBAAO,CAAC,kDAAQ;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;;;;;;;;;;;AClEA;AACA;AACA;AACA,WAAW,OAAO,mBAAO,CAAC,kDAAQ;;AAElC;AACA;AACA;AACA;AACA;AACA,iBAAiB,oBAAoB;;AAErC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA,UAAU,mBAAO,CAAC,oEAAiB;AACnC,WAAW,mBAAO,CAAC,sEAAkB;AACrC,UAAU,mBAAO,CAAC,oEAAiB;AACnC,cAAc,mBAAO,CAAC,8EAAsB;AAC5C,aAAa,mBAAO,CAAC,4EAAqB;AAC1C,GAAG;;AAEH;AACA;AACA;AACA;AACA,aAAa,mBAAO,CAAC,gEAAe;AACpC;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,aAAa,mBAAO,CAAC,kEAAgB;AACrC,YAAY,mBAAO,CAAC,gEAAe;AACnC,GAAG;;AAEH;AACA;AACA;AACA;AACA,SAAS,mBAAO,CAAC,4DAAa;AAC9B,eAAe,mBAAO,CAAC,wEAAmB;AAC1C,WAAW,mBAAO,CAAC,gEAAe;AAClC,eAAe,mBAAO,CAAC,wEAAmB;AAC1C,oBAAoB,mBAAO,CAAC,oFAAyB;AACrD,GAAG;;AAEH;AACA;AACA;AACA,aAAa,mBAAO,CAAC,8DAAc;;AAEnC;AACA;AACA;AACA,iBAAiB,0HAAiD;AAClE,CAAC;AACD,mBAAO,CAAC,gFAAuB;AAC/B,mBAAO,CAAC,wDAAW;AACnB,mBAAO,CAAC,sDAAU;AAClB,mBAAO,CAAC,kDAAQ;AAChB,mBAAO,CAAC,wEAAmB;AAC3B,mBAAO,CAAC,wDAAW;AACnB,mBAAO,CAAC,0DAAY;AACpB,mBAAO,CAAC,wEAAmB;AAC3B,mBAAO,CAAC,sFAA0B;AAClC,mBAAO,CAAC,wEAAmB;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA,gCAAgC;AAChC;AACA;;AAEA;AACA;AACA;AACA,CAAC;;;;;;;;;;;AC5GD,UAAU,mBAAO,CAAC,kDAAQ;;AAE1B;AACA;AACA,IAAI,YAAY,GAAG,gBAAgB,gBAAgB,aAAa;AAChE;AACA;AACA;AACA;AACA,WAAW,WAAW,MAAM,YAAY;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,QAAQ;AACjC;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,WAAW;AAC/D;AACA;AACA,4BAA4B,QAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA,qDAAqD,WAAW;AAChE;AACA;AACA;;AAEA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;;AAEH;AACA;AACA,kEAAkE,QAAQ;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,oEAAoE,QAAQ;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,MAAM,iBAAiB,MAAM;AAC/D;;AAEA;AACA;AACA;AACA,qDAAqD,IAAI;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,MAAM,iBAAiB,MAAM;AAC/D;;AAEA;AACA,mDAAmD,IAAI;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,YAAY,GAAG,gBAAgB,eAAe;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;ACrPA,UAAU,mBAAO,CAAC,mDAAS;AAC3B,UAAU,mBAAO,CAAC,gEAAmB;;AAErC;AACA,oDAAoD,QAAQ;AAC5D;AACA,IAAI,wBAAwB;AAC5B,IAAI,mBAAmB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,iBAAiB;AAC/B;AACA,gBAAgB,iBAAiB;AACjC;AACA,MAAM;AACN,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC,QAAQ,mBAAmB,KAAK,wBAAwB;AACxD;AACA,8DAA8D,YAAY;AAC1E;AACA;AACA;AACA;AACA;AACA,kEAAkE,OAAO;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,GAAG;;AAEH;AACA,kCAAkC,mBAAmB;AACrD,MAAM,wBAAwB;AAC9B,yBAAyB,YAAY;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,CAAC;;;;;;;;;;;ACvMD,UAAU,mBAAO,CAAC,mDAAS;AAC3B,sBAAsB,mBAAO,CAAC,wFAA+B;AAC7D,UAAU,mBAAO,CAAC,gEAAmB;;AAErC;AACA;AACA;AACA;AACA;AACA,IAAI,8CAA8C;AAClD;AACA,6CAA6C,0BAA0B;AACvE;AACA;AACA;AACA;AACA;AACA,IAAI,kCAAkC;AACtC,uBAAuB,mCAAmC;AAC1D;AACA;AACA;AACA,4BAA4B,YAAY;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,OAAO;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0BAA0B;AAClC,QAAQ,mCAAmC;AAC3C,QAAQ,kCAAkC;AAC1C;AACA;AACA;AACA,QAAQ,8CAA8C;AACtD,QAAQ,kCAAkC;AAC1C;AACA;AACA;AACA,QAAQ,mCAAmC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA,kCAAkC,8CAA8C;AAChF,SAAS,kCAAkC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL,GAAG;;;AAGH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH,CAAC;;;;;;;;;;;AChYD,UAAU,mBAAO,CAAC,mDAAS;;AAE3B;AACA;AACA,uDAAuD,UAAU;AACjE;AACA,uCAAuC,iBAAiB;AACxD;AACA,IAAI,2BAA2B;AAC/B;AACA;AACA;AACA,yBAAyB,UAAU;AACnC,MAAM,gBAAgB;AACtB;AACA;AACA;AACA;AACA,SAAS,QAAQ;AACjB;AACA;AACA;AACA,6BAA6B,iBAAiB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,iBAAiB;AACzB;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,uBAAuB,UAAU;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,MAAM,iBAAiB,MAAM;AAC1E;;AAEA;AACA;AACA,qBAAqB,UAAU;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,8CAA8C,EAAE;AAClE,kBAAkB,iDAAiD,EAAE;AACrE,kBAAkB,2CAA2C,EAAE;AAC/D,kBAAkB,iCAAiC,EAAE;AACrD,kBAAkB,qCAAqC,EAAE;AACzD,kBAAkB,kDAAkD,EAAE;AACtE,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;AClLA,UAAU,mBAAO,CAAC,mDAAS;AAC3B,mBAAO,CAAC,2EAAqB;;AAE7B;AACA;AACA;AACA;AACA,IAAI,oBAAoB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,gBAAgB;AACnC;AACA,yBAAyB,YAAY;AACrC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO,mCAAmC;AAC1C;AACA;AACA,OAAO;AACP,mDAAmD;AACnD;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,CAAC;;;;;;;;;;;AC1GD,UAAU,mBAAO,CAAC,mDAAS;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,gBAAgB;AACnC;AACA,yBAAyB,YAAY;AACrC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC3BA,UAAU,mBAAO,CAAC,mDAAS;;AAE3B;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,UAAU;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,CAAC;;;;;;;;;;;AC1FD,UAAU,mBAAO,CAAC,mDAAS;;AAE3B;AACA;AACA,2CAA2C,QAAQ;AACnD;AACA;AACA;AACA,IAAI,WAAW;AACf;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B,GAAG;;AAEH;AACA,qCAAqC,SAAS;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA,CAAC;;;;;;;;;;;ACnED,UAAU,mBAAO,CAAC,mDAAS;AAC3B,WAAW,mBAAO,CAAC,oCAAe;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,qBAAqB;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA,WAAW;AACX;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;ACpKD,UAAU,mBAAO,CAAC,mDAAS;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,gBAAgB;AACnC;AACA,yBAAyB,YAAY;AACrC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,gBAAgB,gBAAgB;;AAEhC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,8DAA8D;AAC9D;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;AACA,qFAAqF;AACrF;AACA,aAAa;AACb;AACA;;AAEA;AACA,OAAO;AACP;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,KAAK;AACL;AACA;AACA,SAAS;AACT;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,CAAC;;;;;;;;;;;AC/MD,UAAU,mBAAO,CAAC,mDAAS;AAC3B,UAAU,mBAAO,CAAC,gEAAmB;;AAErC;AACA;AACA;AACA;AACA,IAAI,2BAA2B;AAC/B;AACA;AACA;AACA;AACA,kBAAkB,YAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,OAAO;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,2BAA2B;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA,4CAA4C,oBAAoB;AAChE;;AAEA,CAAC;;;;;;;;;;;AC7FD,UAAU,mBAAO,CAAC,mDAAS;AAC3B,UAAU,mBAAO,CAAC,gEAAmB;AACrC;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,qBAAqB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA,uCAAuC;AACvC;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;ACzRD,UAAU,mBAAO,CAAC,mDAAS;AAC3B,UAAU,mBAAO,CAAC,gEAAmB;;AAErC;AACA,oDAAoD,QAAQ;AAC5D;AACA,IAAI,wBAAwB;AAC5B,IAAI,mBAAmB;AACvB;AACA;AACA;AACA,+BAA+B,kCAAkC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,MAAM;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,uBAAuB;AAClE;AACA;AACA;AACA,QAAQ,mBAAmB,KAAK,wBAAwB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA,kCAAkC,mBAAmB;AACrD,MAAM,wBAAwB;AAC9B,yBAAyB,YAAY;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,4CAA4C,oBAAoB;AAChE;;AAEA,CAAC;;;;;;;;;;;AChID,UAAU,mBAAO,CAAC,mDAAS;AAC3B,SAAS,mBAAO,CAAC,cAAI;AACrB,UAAU,mBAAO,CAAC,gEAAmB;AACrC;;AAEA;AACA;AACA,2CAA2C,QAAQ;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,GAAG;;AAEH;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,kBAAkB;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;AC9MD,UAAU,mBAAO,CAAC,mDAAS;AAC3B,UAAU,mBAAO,CAAC,gEAAmB;;AAErC;AACA;AACA;AACA;AACA,IAAI,kCAAkC;AACtC;AACA;AACA;AACA,kBAAkB,YAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,OAAO;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,kCAAkC;AAC1C;AACA;AACA;AACA,QAAQ,kCAAkC;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD,GAAG;;AAEH;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;;AAEA,CAAC;;;;;;;;;;;AClHD,UAAU,mBAAO,CAAC,kDAAQ;AAC1B,WAAW,mBAAO,CAAC,kDAAQ;AAC3B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA,oCAAoC,iCAAiC;AACrE;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,kDAAkD,mBAAmB;AACrE;;AAEA;AACA;AACA;AACA;AACA,qEAAqE,mBAAmB;AACxF;AACA,WAAW;AACX;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB,yCAAyC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACxXA,UAAU,mBAAO,CAAC,mDAAS;AAC3B;AACA,aAAa,yFAAyB;AACtC,kBAAkB,mBAAO,CAAC,yDAAO;AACjC,kBAAkB,mBAAO,CAAC,yEAAe;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,cAAc;AACd,KAAK;AACL,cAAc;AACd,KAAK;AACL;AACA;AACA;AACA,cAAc;AACd,KAAK;AACL,cAAc;AACd,KAAK;AACL,cAAc;AACd,KAAK;AACL;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,mBAAmB,mBAAmB;AACtC;AACA;AACA;AACA,OAAO;AACP;AACA,mBAAmB,mBAAmB;AACtC;AACA;AACA;AACA,OAAO;AACP;AACA,mBAAmB,mBAAmB;AACtC;AACA;AACA;AACA,OAAO;AACP;AACA,mBAAmB,mBAAmB;AACtC;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B,eAAe,KAAK,UAAU,GAAG,UAAU,GAAG,SAAS,EAAE;AACzD;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA,SAAS;AACT,iBAAiB,SAAS;AAC1B,oBAAoB,WAAW;AAC/B,oBAAoB;AACpB,OAAO;AACP;AACA;AACA,0CAA0C,QAAQ;AAClD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC;AACtC,sCAAsC;AACtC;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uBAAuB;AAC9C;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;ACrSA,UAAU,mBAAO,CAAC,mDAAS;AAC3B,iBAAiB,mBAAO,CAAC,uEAAc;AACvC,kBAAkB,mBAAO,CAAC,yDAAO;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,uDAAuD;AACvD;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,oCAAoC,0BAA0B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,eAAe,aAAa;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,oCAAoC,4BAA4B;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,oCAAoC,wBAAwB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,oCAAoC,qBAAqB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,oCAAoC,qBAAqB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,YAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,oCAAoC,wBAAwB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,sBAAsB;AACpC;AACA;AACA,mCAAmC,aAAa;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,oCAAoC,kBAAkB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,qCAAqC,mBAAmB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,oCAAoC,gCAAgC;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,YAAY;AACzC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA,uCAAuC,aAAa;AACpD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,oCAAoC,8BAA8B;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,YAAY,gBAAgB;;AAEnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,uBAAuB,wBAAwB;AAC/C;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;;;;;;;;;;;ACpkBA,WAAW,6EAAuB;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;;;;;;;;;;AC1CA,WAAW,6EAAuB;AAClC,aAAa,yFAAyB;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,mBAAmB,YAAY;AAC/B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;;;;;;;;;;;ACtEA,WAAW,6EAAuB;AAClC,cAAc,mBAAO,CAAC,qEAAa;;AAEnC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;ACtFA,WAAW,6EAAuB;;AAElC;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AChDA,0BAA0B,wJAAoE;AAC9F,iBAAiB,6GAAmC;;AAEpD;AACA;;AAEA;;AAEA,mBAAmB,0BAA0B;AAC7C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACpBA,WAAW,6EAAuB;AAClC,gBAAgB,qDAA2B;AAC3C;;AAEA,WAAW,UAAU;AACrB;AACA;;AAEA;AACA;AACA,eAAe,OAAO;AACtB;;AAEA,eAAe,OAAO;AACtB;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,EAAE;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACxHA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC7BA,gBAAgB,qDAA2B;AAC3C,iBAAiB,6GAAmC;;AAEpD,WAAW,UAAU;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACtCA,WAAW,6EAAuB;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA;AACA,mBAAmB,QAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC5FA,mBAAmB,mHAAuC;;AAE1D;AACA;AACA,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,WAAW,EAAE;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,6BAA6B;AAChD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACxEA,YAAY,4FAAwB;;AAEpC,mBAAmB,mHAAuC;;AAE1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC/HA,WAAW,6EAAuB;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACrEA;AACA;AACA;AACA;AACA;AACA;;AAEA,gCAAgC,4KAAiF;AACjH,8BAA8B,oLAAoF;;AAElH;AACA;AACA;AACA;AACA,KAAK;;AAEL;;AAEA;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACtCA,UAAU,mBAAO,CAAC,kDAAQ;AAC1B,yBAAyB,mBAAO,CAAC,gFAAuB;AACxD,wBAAwB,kHAA+C;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,oBAAoB,8CAA8C;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mGAAmG;AACnG;AACA;AACA;AACA,aAAa,wHAAwH;AACrI;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA,6EAA6E,KAAK;AAClF;AACA;AACA,aAAa,yDAAyD;AACtE,SAAS;AACT;AACA,aAAa,yDAAyD;AACtE;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,UAAU;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gHAAgH;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,wGAAwG;;AAExG;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,WAAW,4DAA4D;AACvE;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,yDAAyD;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf,aAAa,OAAO;AACpB;AACA;AACA,eAAe;AACf;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA,0BAA0B;AAC1B;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,+CAAuB;AAC5C;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA,cAAc,mBAAO,CAAC,oEAAiB;AACvC;AACA;AACA;AACA,GAAG;;AAEH;AACA,cAAc,mBAAO,CAAC,oEAAiB;AACvC;AACA;AACA;AACA,GAAG;;AAEH;AACA,cAAc,mBAAO,CAAC,8EAAsB;AAC5C;AACA;AACA;AACA,GAAG;;AAEH;AACA,cAAc,mBAAO,CAAC,4EAAqB;AAC3C;AACA;AACA;AACA,GAAG;;AAEH;AACA,cAAc,mBAAO,CAAC,sEAAkB;AACxC;AACA;AACA;AACA,GAAG;AACH;;;;;;;;;;;AClnBA,UAAU,mBAAO,CAAC,kDAAQ;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,aAAa;AACrC;AACA;AACA;AACA;AACA,sCAAsC,WAAW;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,0BAA0B,WAAW;AACrC;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA,uCAAuC,KAAK;AAC5C;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,uBAAuB;AAC/B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA,QAAQ,qBAAqB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,CAAC;;;AAGD,2BAA2B;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC7OA,UAAU,mBAAO,CAAC,mDAAS;AAC3B;AACA;AACA;AACA,mBAAO,CAAC,mDAAS;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,mBAAO,CAAC,oBAAO,IAAI,mBAAO,CAAC,kBAAM;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA,yBAAyB;AACzB,2BAA2B;;AAE3B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,gCAAgC;AAChC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;;AAE3C;AACA;AACA;AACA,eAAe;AACf;AACA,WAAW;AACX;AACA;AACA;AACA,WAAW;AACX;AACA,OAAO;AACP;;AAEA;AACA;AACA,qCAAqC;;AAErC;AACA,kDAAkD,qBAAqB;AACvE;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,wBAAwB,mBAAO,CAAC,oBAAO,IAAI,mBAAO,CAAC,kBAAM;AACzD;AACA;AACA;AACA;AACA,SAAS,oBAAoB;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;ACrNA,WAAW,mBAAO,CAAC,mDAAS;;AAE5B,wBAAwB;;AAExB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;AC1DA,WAAW,mBAAO,CAAC,mDAAS;;AAE5B,uBAAuB;;AAEvB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;AClEA,UAAU,mBAAO,CAAC,kDAAQ;AAC1B,mBAAO,CAAC,kDAAQ;AAChB;;AAEA;AACA;AACA,IAAI,QAAQ;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,aAAa;;AAE7B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,QAAQ;;AAE3D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,8BAA8B;AAC9B,KAAK;AACL;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;;;;;;;;;;AC1OA,iBAAiB,mBAAO,CAAC,oEAAc;AACvC,gBAAgB,mBAAO,CAAC,kEAAa;AACrC,YAAY,mBAAO,CAAC,0DAAS;AAC7B,gBAAgB,mBAAO,CAAC,kEAAa;AACrC,qBAAqB,mBAAO,CAAC,8EAAmB;AAChD,eAAe,mBAAO,CAAC,2EAA0B;;AAEjD,WAAW,mBAAO,CAAC,mDAAS;AAC5B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;ACvFA,uBAAuB,yFAAmC;;AAE1D;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;ACvBA,YAAY,mBAAO,CAAC,0DAAS;;AAE7B,WAAW,mBAAO,CAAC,mDAAS;AAC5B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,+BAA+B,kBAAkB;AACjD;AACA;AACA,GAAG;;AAEH;AACA;AACA,+BAA+B,kBAAkB;AACjD;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA,mBAAmB,6BAA6B;AAChD;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;AChHA,eAAe,iFAA2B;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;ACbA,WAAW,mBAAO,CAAC,mDAAS;AAC5B;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;;;;;;;;;;AChCA,iBAAiB,mBAAO,CAAC,oEAAc;;AAEvC,WAAW,mBAAO,CAAC,mDAAS;;AAE5B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,cAAc;AAC/C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,+CAA+C,WAAW,EAAE;AAC5D,gCAAgC;AAChC;AACA;AACA,6CAA6C,cAAc,EAAE;AAC7D;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,kDAAkD,UAAU;AAC5D;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,kDAAkD,UAAU;AAC5D;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,uBAAuB,2BAA2B;AAClD;AACA;AACA;;AAEA;AACA,KAAK;AACL;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,+CAA+C,WAAW,EAAE;AAC5D;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA,+CAA+C,WAAW,EAAE;AAC5D,wCAAwC,eAAe;AACvD,0CAA0C,eAAe;AACzD;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;ACrZA,WAAW,mBAAO,CAAC,kDAAQ;;AAE3B,6BAA6B,cAAc;AAC3C,0BAA0B,aAAa;;AAEvC;AACA,kBAAkB,mBAAO,CAAC,sBAAQ;AAClC,cAAc,kDAAwB;AACtC,cAAc,mBAAO,CAAC,sBAAQ;AAC9B,cAAc,mBAAO,CAAC,sBAAQ;AAC9B,WAAW,mBAAO,CAAC,gBAAK;AACxB,mBAAmB,mBAAO,CAAC,gCAAa;AACxC;AACA;AACA,EAAE,qKAAyE,GAAG,mKAAwE;AACtJ,iBAAiB,mBAAO,CAAC,gFAAuB;AAChD;AACA,aAAa,iGAAgC;AAC7C,kBAAkB,mBAAO,CAAC,wFAA2B;AACrD;AACA,iBAAiB,mGAAiC;AAClD,0BAA0B,0DAAkC;;AAE5D;;AAEA;AACA;AACA;AACA,uBAAuB,mBAAO,CAAC,kDAAQ;;AAEvC,mBAAO,CAAC,gEAAe;AACvB,mBAAO,CAAC,oHAAyC;AACjD,mBAAO,CAAC,4GAAqC;AAC7C,mBAAO,CAAC,gIAA+C;AACvD,mBAAO,CAAC,kHAAwC;AAChD,mBAAO,CAAC,0HAA4C;AACpD,mBAAO,CAAC,kGAAgC;AACxC,mBAAO,CAAC,wGAAmC;;AAE3C;AACA,iBAAiB,mBAAO,CAAC,wEAAmB;;AAE5C;AACA,mBAAO,CAAC,4DAAa;;AAErB,mBAAO,CAAC,oFAAyB;;AAEjC;AACA,mBAAO,CAAC,wIAAmD;AAC3D,mBAAO,CAAC,kHAAwC;AAChD,mBAAO,CAAC,sGAAkC;AAC1C,mBAAO,CAAC,gGAA+B;AACvC,mBAAO,CAAC,gHAAuC;AAC/C,mBAAO,CAAC,gHAAuC;AAC/C,mBAAO,CAAC,wHAA2C;AACnD,mBAAO,CAAC,wGAAmC;;AAE3C;AACA;AACA;AACA;AACA;AACA,eAAe,8CAA8C,EAAE;AAC/D,eAAe,iDAAiD,EAAE;AAClE,eAAe,2CAA2C,EAAE;AAC5D,eAAe,iCAAiC,EAAE;AAClD,eAAe,qCAAqC,EAAE;AACtD,eAAe,kDAAkD,EAAE;AACnE,eAAe,yCAAyC;AACxD;;AAEA;AACA;AACA;AACA;AACA;AACA,mBAAmB,8CAA8C,EAAE;AACnE,mBAAmB,iDAAiD,EAAE;AACtE,mBAAmB,0CAA0C,0BAA0B,EAAE;AACzF;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,SAAS,iDAAiD;AAC1D,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;;;;;;;;;;AC9GA,UAAU,mBAAO,CAAC,kDAAQ;;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA,oCAAoC;AACpC;AACA,wCAAwC;AACxC;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA,GAAG;;AAEH;AACA;AACA,2CAA2C;;AAE3C;AACA;AACA;AACA;AACA;AACA,SAAS,sDAAsD;AAC/D,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,GAAG;;AAEH;AACA,yDAAyD,WAAW;AACpE,GAAG;;AAEH;AACA;;AAEA;AACA,mBAAmB,6CAA6C;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,qBAAqB,mBAAmB;AACxC;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAC/C;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,0BAA0B;AAC7C;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,8DAA8D;AAC9D,4BAA4B;AAC5B;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,qBAAqB,kBAAkB;AACvC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;;;;;;;;;;;AC7QD,YAAY,mBAAO,CAAC,mDAAS;AAC7B,UAAU,mBAAO,CAAC,mDAAS;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,iCAAiC,eAAe;AAChD;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,EAAE;AACpC;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,SAAS,yEAAyE;AAClF;AACA,GAAG;AACH;;AAEA;AACA;AACA;;;;;;;;;;;ACxFA,WAAW,mBAAO,CAAC,mDAAS;AAC5B,kBAAkB,mBAAO,CAAC,mEAAiB;AAC3C,iBAAiB,mBAAO,CAAC,iEAAgB;AACzC,yBAAyB,yGAAuC;;AAEhE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mDAAmD;AACnD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA,qDAAqD;AACrD;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACzEA,UAAU,mBAAO,CAAC,mDAAS;AAC3B,WAAW,mBAAO,CAAC,mDAAS;AAC5B,2BAA2B,mBAAO,CAAC,mGAAiC;AACpE,YAAY,mBAAO,CAAC,iEAAgB;AACpC,yBAAyB,yGAAuC;;AAEhE;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAO,iBAAiB;AACxB,OAAO,OAAO,oBAAoB,EAAE;AACpC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC7GA,WAAW,mBAAO,CAAC,mDAAS;AAC5B,yBAAyB,yGAAuC;;AAEhE;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,iCAAiC,4BAA4B;AAC7D;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;;AAEA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA,aAAa;AACb,WAAW;AACX;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,6BAA6B;AAClD;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACnJA,WAAW,mBAAO,CAAC,mDAAS;AAC5B,WAAW,mBAAO,CAAC,2DAAQ;AAC3B,WAAW,mBAAO,CAAC,2DAAQ;AAC3B,kBAAkB,mBAAO,CAAC,mEAAiB;AAC3C,iBAAiB,mBAAO,CAAC,iEAAgB;;AAEzC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK,OAAO;AACZ;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,oBAAoB,wCAAwC;AAC5D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AClGA,UAAU,mBAAO,CAAC,mDAAS;AAC3B,WAAW,mBAAO,CAAC,mDAAS;AAC5B,WAAW,mBAAO,CAAC,2DAAQ;;AAE3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK,OAAO;AACZ;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC3GA,UAAU,mBAAO,CAAC,mDAAS;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;ACjFA,WAAW,6EAAuB;AAClC,YAAY,mBAAO,CAAC,oBAAO;AAC3B;;AAEA,gCAAgC;;AAEhC;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,aAAa;AACb;AACA;AACA;AACA;AACA,kDAAkD,UAAU;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;AC5HA,WAAW,mBAAO,CAAC,mDAAS;;AAE5B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACNA,WAAW,mBAAO,CAAC,kDAAQ;AAC3B,mBAAmB,mBAAO,CAAC,qFAA2B;;AAEtD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA,iBAAiB,iBAAiB;AAClC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,QAAQ,IAAI,OAAO;AAC/B,YAAY,QAAQ,YAAY,OAAO;AACvC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,oBAAoB;AACrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AClGA,UAAU,mBAAO,CAAC,kDAAQ;AAC1B,2BAA2B,mBAAO,CAAC,oEAAiB;AACpD;AACA;AACA,eAAe,mBAAO,CAAC,0BAAU;;AAEjC;AACA;AACA;AACA,uBAAuB;;AAEvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;;AAEL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,4CAA4C,KAAK;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,wBAAwB;AAChC;AACA;AACA,eAAe,6BAA6B;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR,qCAAqC,MAAM;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR,qCAAqC,MAAM;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,sBAAsB;AAC5B;AACA,MAAM,wBAAwB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C,6CAA6C;AAC7C;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,6BAA6B;AAC9D,2CAA2C,wBAAwB,EAAE;AACrE;AACA,iCAAiC,6BAA6B;AAC9D,oDAAoD,MAAM,EAAE;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,6BAA6B;AAClE;AACA,qCAAqC,MAAM,mBAAmB,MAAM;AACpE;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL,0EAA0E;AAC1E;AACA;AACA;AACA,OAAO;AACP,wCAAwC;AACxC;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mCAAmC,YAAY,EAAE;AACjD,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA,uCAAuC,YAAY,EAAE;AACrD;AACA,OAAO;AACP;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,6DAA6D,aAAa;AAC1E,WAAW;AACX;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;;AAEL;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,aAAa,aAAa;AAC/D,kCAAkC;AAClC;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,2BAA2B;AAC3B;AACA,aAAa;AACb;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;;;;;;;;;;AC1yBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAU,mBAAO,CAAC,kDAAQ;AAC1B;AACA,eAAe,mBAAO,CAAC,0BAAU;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA,CAAC;;;;;;;;;;;AC3MD,UAAU,mBAAO,CAAC,kDAAQ;AAC1B;AACA,eAAe,mBAAO,CAAC,0BAAU;;AAEjC;AACA;AACA,kDAAkD,YAAY;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,YAAY,gBAAgB;;AAEjC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,qBAAqB,wBAAwB;AAC7C;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA,CAAC;;;;;;;;;;;ACxMD,UAAU,mBAAO,CAAC,mDAAS;AAC3B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,YAAY;AAC9D;AACA;AACA;AACA;AACA;AACA,OAAO,+BAA+B;AACtC,6BAA6B,wCAAwC;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,KAAK;AAC3E,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,cAAc,OAAO,YAAY;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB,QAAQ;AACR;AACA;AACA;AACA,kBAAkB;AAClB,QAAQ;AACR;AACA;AACA,kBAAkB,2CAA2C;AAC7D,iBAAiB,6BAA6B,GAAG,6BAA6B;AAC9E,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,8CAA8C,eAAe;AAC7D;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,+CAA+C,oBAAoB;;AAEnE;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,mBAAmB,EAAE;AAC1D,qCAAqC,kBAAkB,EAAE;AACzD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,2CAA2C;AAC5E;AACA,sCAAsC,MAAM,iBAAiB,MAAM;AACnE;;AAEA;AACA;AACA;AACA;AACA,kEAAkE,YAAY;AAC9E,oBAAoB,MAAM;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,OAAO;AACP;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,eAAe;AAChD,KAAK;AACL;AACA,8DAA8D;AAC9D;AACA;AACA;AACA,uDAAuD;AACvD;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK,YAAY;;AAEjB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,KAAK;AACL;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA,kBAAkB;AAClB;;AAEA;AACA;;AAEA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;AACA,KAAK,OAAO;AACZ;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB;AACpB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,0BAA0B,mBAAmB,oCAAoC;AACjF;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA,WAAW,UAAU,mBAAmB;AACxC;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;ACrtBA,UAAU,mBAAO,CAAC,kDAAQ;;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,qBAAqB,YAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,8BAA8B;AAC9B;AACA,eAAe;AACf,OAAO,OAAO;AACd;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,MAAM,cAAc,MAAM;AACxD,8BAA8B,MAAM;AACpC,QAAQ;AACR,8BAA8B;AAC9B,8BAA8B;AAC9B;AACA;AACA,yCAAyC,MAAM;AAC/C,yCAAyC,MAAM;AAC/C;AACA;AACA,+BAA+B;AAC/B,+BAA+B;AAC/B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA,GAAG;;AAEH;AACA,8BAA8B,GAAG;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,eAAe;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,MAAM,iBAAiB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,iBAAiB;AACnD;AACA;AACA;AACA,kDAAkD,MAAM;AACxD,gDAAgD,MAAM;AACtD,8CAA8C,MAAM;AACpD,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,IAAI,GAAG;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;AC1OA,UAAU,mBAAO,CAAC,kDAAQ;AAC1B,UAAU,mBAAO,CAAC,4DAAa;AAC/B,mBAAmB,mBAAO,CAAC,oEAAiB;;AAE5C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;AACA;AACA,yBAAyB,uBAAuB,EAAE;AAClD;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,+BAA+B;AACpE,OAAO;AACP;AACA,qCAAqC,+BAA+B;AACpE,OAAO;AACP;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iCAAiC,QAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B;AAC7B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,eAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,6BAA6B;AAC7B,uBAAuB;AACvB,0BAA0B;AAC1B,yBAAyB;AACzB,eAAe;AACf,sBAAsB;AACtB;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,SAAS;AAC9B,qBAAqB,QAAQ;AAC7B,qBAAqB,QAAQ;AAC7B;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iDAAiD;;AAEjD;AACA;;AAEA;AACA;AACA,KAAK,OAAO;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;;;;;;;;;;;ACh0BA,UAAU,mBAAO,CAAC,mDAAS;AAC3B,mBAAO,CAAC,2FAA6B;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;ACzDD,UAAU,mBAAO,CAAC,mDAAS;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;ACXD,UAAU,mBAAO,CAAC,mDAAS;AAC3B,oBAAoB,mBAAO,CAAC,uFAA2B;AACvD,mCAAmC,mBAAO,CAAC,2FAA6B;AACxE,aAAa,mBAAO,CAAC,+DAAU;AAC/B,iBAAiB,mBAAO,CAAC,qEAAkB;;AAE3C;AACA,mBAAO,CAAC,6EAAsB;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS,sCAAsC;AAC/C;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oCAAoC;AAC7C;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oCAAoC;AAC7C;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,WAAW,sCAAsC;AACjD;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA,4CAA4C;AAC5C;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,+CAA+C;AAC/C;AACA;;AAEA;AACA;AACA,uEAAuE;AACvE,wBAAwB;AACxB;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA,iCAAiC;AACjC;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL,kBAAkB;AAClB;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,8CAA8C,2BAA2B;AACzE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA,wBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,mBAAmB,oBAAoB;AACvC;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,oBAAoB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,QAAQ;AACR;AACA,qBAAqB;AACrB;AACA;AACA;AACA,qBAAqB;AACrB;AACA,sCAAsC;AACtC;AACA;AACA,uCAAuC;AACvC;;AAEA;AACA;AACA,SAAS,4GAA4G;AACrH;;AAEA,0BAA0B;AAC1B;;AAEA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,oBAAoB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA,WAAW,iBAAiB,MAAM;AAClC;AACA,wBAAwB;AACxB;AACA;AACA;AACA,WAAW,iBAAiB,MAAM;AAClC;AACA,wBAAwB;AACxB;AACA;AACA;AACA,WAAW,iBAAiB,MAAM;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,gDAAgD,SAAS;AACzD;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;;AAEA,qEAAqE,EAAE;AACvE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC,sEAAsE;AACtE;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gDAAgD;AAChD;AACA;AACA,GAAG;;AAEH;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA,UAAU;AACV;AACA,uBAAuB;AACvB,wBAAwB;AACxB;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0CAA0C,GAAG,8BAA8B;;AAE3E;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;AC3vCA,UAAU,mBAAO,CAAC,mDAAS;AAC3B,iBAAiB,mBAAO,CAAC,qEAAkB;;AAE3C;AACA;AACA;AACA;AACA;AACA,qEAAqE;AACrE;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,GAAG;AACnB;AACA;AACA,4DAA4D,GAAG;AAC/D,OAAO;AACP;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,yEAAyE,gBAAgB;AACzF,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA,yEAAyE,KAAK;AAC9E;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kEAAkE,UAAU,cAAc,gBAAgB;AAC1G,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,OAAO,OAAO;AACd;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,KAAK;AACxD,wCAAwC,EAAE;AAC1C;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;;;;;;;;;;ACzQA,UAAU,mBAAO,CAAC,mDAAS;AAC3B,mCAAmC,mBAAO,CAAC,2FAA6B;AACxE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yBAAyB;AAClD,wDAAwD,kBAAkB;AAC1E,UAAU,gBAAgB,GAAG,WAAW,MAAM,0BAA0B;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA,WAAW,yDAAyD;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;;;;;;;;;;ACrFD,gBAAgB,wGAAiC;AACjD;AACA;AACA;AACA;AACA,wBAAwB;;;;;;;;;;;ACLxB,UAAU,mBAAO,CAAC,mDAAS;AAC3B,SAAS,mBAAO,CAAC,cAAI;AACrB,WAAW,mBAAO,CAAC,kBAAM;;AAEzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,qBAAqB;AACnF;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;;;;;;;;;;;ACzGA,UAAU,mBAAO,CAAC,mDAAS;AAC3B;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG,2CAA2C;AAC9C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;;;;;;;;;;ACtHA,UAAU,mBAAO,CAAC,mDAAS;;AAE3B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAO,CAAC,sDAAM;AACd,mBAAO,CAAC,sDAAM;AACd,mBAAO,CAAC,gEAAW;AACnB,mBAAO,CAAC,sDAAM;AACd,mBAAO,CAAC,sDAAM;AACd,mBAAO,CAAC,gEAAW;;;;;;;;;;;ACtCnB,UAAU,mBAAO,CAAC,mDAAS;AAC3B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,GAAG;;AAEH;;AAEA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;;AAEA,GAAG;;AAEH;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP,sCAAsC,iCAAiC,EAAE;;AAEzE;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;;AAET;AACA;;AAEA;;AAEA;;AAEA,GAAG;;AAEH;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;;;;;;;;;;AC9KA,UAAU,mBAAO,CAAC,mDAAS;AAC3B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8BAA8B;AAC9B;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;;;;;;;;;;;AC/CA,UAAU,mBAAO,CAAC,mDAAS;AAC3B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,KAAK;AACL,iCAAiC;AACjC,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;;;;;;;;;;;AC5EA,UAAU,mBAAO,CAAC,mDAAS;AAC3B;;AAEA,mBAAO,CAAC,sDAAM;;AAEd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;;;;;;;;;;ACxBA,UAAU,mBAAO,CAAC,mDAAS;AAC3B,oBAAoB,mBAAO,CAAC,8EAAkB;AAC9C;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;;AAEA;AACA,mEAAmE,EAAE;;AAErE;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,8BAA8B;AAC9B,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA,CAAC;;AAED;AACA;AACA;AACA;;;;;;;;;;;ACtNA,UAAU,mBAAO,CAAC,mDAAS;;AAE3B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACnGA;AACA;AACA;AACA;;AAEA;AACA;AACA,4BAA4B;AAC5B,sBAAsB;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;;AAEA;AACA;AACA,qBAAqB,oBAAoB;AACzC,GAAG;AACH,mBAAmB;AACnB;;AAEA;AACA,uBAAuB;AACvB;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;AC5CA;AACA;;AAEA;AACA;AACA;AACA;AACA,kDAAkD,KAAK,KAAK;AAC5D;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,0CAA0C,+EAAyB;AACnE;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,yBAAyB,EAAE;AACzE;AACA,OAAO;AACP;AACA;AACA;AACA,KAAK;;AAEL;AACA,GAAG;;AAEH;AACA;AACA,WAAW,gDAA0B;AACrC,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,oBAAoB;AACrC;AACA;;AAEA;;AAEA,iBAAiB,oBAAoB;AACrC;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP,eAAe,6CAAuB;AACtC,OAAO;AACP;AACA,WAAW,iBAAiB;AAC5B;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,mCAAmC,QAAQ;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA,GAAG;;AAEH;AACA,uBAAuB;AACvB,8BAA8B,oBAAoB,EAAE;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mBAAO,CAAC,kDAAQ;AACtC,yCAAyC;AACzC;AACA,OAAO;AACP;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,+BAA+B,4BAA4B;AAC3D,8CAA8C,EAAE;AAChD,KAAK;;AAEL;AACA;AACA;AACA;AACA,+BAA+B,4BAA4B;AAC3D;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,+BAA+B,4BAA4B;AAC3D;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC,OAAO;AACP;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,sCAAsC;AACtC;AACA,OAAO,iCAAiC;AACxC;AACA,OAAO,2BAA2B,EAAE,KAAK;AACzC;AACA,OAAO,2BAA2B,EAAE,MAAM;AAC1C;AACA,OAAO;AACP;AACA;AACA,WAAW,6BAA6B;AACxC;AACA;;AAEA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB,iBAAiB;AACtC;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,gCAAgC,oBAAoB;AACpD;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,oBAAoB,mBAAmB;AACvC,gCAAgC,oBAAoB;AACpD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,yCAAyC,oBAAoB,EAAE;AAC/D,wCAAwC,eAAe,EAAE;AACzD,mCAAmC,qCAAqC,EAAE;AAC1E,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,qBAAqB,iBAAiB;AACtC;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA,GAAG;;AAEH;;AAEA;AACA,WAAW;;AAEX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0CAA0C,kCAAkC;AAC5E,6CAA6C,iBAAiB;AAC9D;;AAEA;AACA;;AAEA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,+DAA+D;AAC/D,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,mBAAO,CAAC,cAAI;AAC3B;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO;AAChB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qBAAqB,2BAA2B;AAChD;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,mBAAmB,mBAAO,CAAC,wEAAuB;AAClD;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iDAAiD,0BAA0B,EAAE;AAC7E;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,aAAa,0CAAkB;AAC/B;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,mEAAmE,yBAAyB;AAC5F,8EAA8E;AAC9E;AACA,kEAAkE,yBAAyB;AAC3F,8EAA8E;AAC9E;AACA;;AAEA;AACA;AACA;AACA;AACA,iDAAiD,iBAAiB;AAClE;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;ACpiCA,WAAW,mBAAO,CAAC,mDAAS;AAC5B,cAAc,2FAA6B;AAC3C,cAAc,2FAA6B;;AAE3C,uBAAuB;;AAEvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;ACrGA;AACA;AACA;AACA;AACA,qCAAqC,wBAAwB,sBAAsB,sBAAsB,wBAAwB;AACjI;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACZA;AACA;AACA;AACA;AACA,qCAAqC,sBAAsB,sBAAsB;AACjF;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACZA,UAAU,mBAAO,CAAC,mDAAS;AAC3B;AACA;;AAEA,aAAa,mBAAO,CAAC,sBAAQ;;AAE7B;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,0BAA0B;;AAE1B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,qEAAqE;AACrE;AACA;AACA,GAAG;AACH,6BAA6B,wCAAwC;AACrE,GAAG,OAAO;AACV,sBAAsB;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA,8BAA8B,sBAAsB;AACpD;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,gBAAgB;AAC/B,kCAAkC;AAClC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAa,iBAAiB;AAC9B;AACA;AACA,2BAA2B;AAC3B,oCAAoC,WAAW;AAC/C,KAAK,OAAO;AACZ,uCAAuC;AACvC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;AClKA,sBAAsB,mHAA6C;;AAEnE;AACA;AACA;AACA;AACA;AACA,8BAA8B,eAAe;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,2BAA2B;AACxF;AACA;AACA;AACA;AACA;AACA;AACA,kFAAkF,qBAAqB,EAAE;AACzG;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC5CA,oBAAoB,6GAAyC;;AAE7D;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnBa;AACb,8CAA6C,CAAC,cAAc,EAAC;AAC7D,YAAY,mBAAO,CAAC,8EAAa;AACjC;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,sBAAsB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,oBAAoB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4BAA4B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA,SAAS,EAAE,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,qBAAqB,iB;;;;;;;;;;;ACpER;AACb,8CAA6C,CAAC,cAAc,EAAC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,gBAAgB,Y;;;;;;;;;;;;;;AC1GhB,oBAAoB;AACpB,yEAAoC;AAC3B,oBAAI;AACb,kFAA0C;AACjC,0BAAO;AAChB,sEAAkC;AACzB,kBAAG;AACZ,yEAAoC;AAC3B,oBAAI;AACb,8FAAkD;AACzC,kCAAW;AACpB,wFAA8C;AACrC,8BAAS;AAClB,yEAAmC;AAC1B,gBAAE;AACX,sFAA0C;AACjC,kBAAG;AACZ,sFAA+C;AACtC,4FADA,gBAAU,QACA;AAEnB,cAAc;AACd,mFAAwC;AAC/B,gBAAE;AACX,kFAA0C;AACjC,0BAAO;AAChB,mFAAwC;AAC/B,gBAAE;AACX,kFAA0C;AACjC,0BAAO;AAEhB,wFAA8C;AACrC,8BAAS;AAElB,iFAAuC;AAC9B,gBAAE;AACX,qFAA4C;AACnC,4BAAQ;AACjB,+EAAwC;AAC/B,wBAAM;AACf,+EAAwC;AAC/B,wBAAM;;;;;;;;;;;;;;;;;;;;;;;;ACxCf,wFAA0B;;;;;;;;;;;;;;;ACA1B,yEAAoC;AAcpC,MAAM,OAAO;IAKX;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","file":"base.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"base\"] = factory();\n\telse\n\t\troot[\"base\"] = factory();\n})(global, function() {\nreturn ","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['cognitoidentity'] = {};\nAWS.CognitoIdentity = Service.defineService('cognitoidentity', ['2014-06-30']);\nObject.defineProperty(apiLoader.services['cognitoidentity'], '2014-06-30', {\n get: function get() {\n var model = require('../apis/cognito-identity-2014-06-30.min.json');\n model.paginators = require('../apis/cognito-identity-2014-06-30.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.CognitoIdentity;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['dynamodb'] = {};\nAWS.DynamoDB = Service.defineService('dynamodb', ['2011-12-05', '2012-08-10']);\nrequire('../lib/services/dynamodb');\nObject.defineProperty(apiLoader.services['dynamodb'], '2011-12-05', {\n get: function get() {\n var model = require('../apis/dynamodb-2011-12-05.min.json');\n model.paginators = require('../apis/dynamodb-2011-12-05.paginators.json').pagination;\n model.waiters = require('../apis/dynamodb-2011-12-05.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\nObject.defineProperty(apiLoader.services['dynamodb'], '2012-08-10', {\n get: function get() {\n var model = require('../apis/dynamodb-2012-08-10.min.json');\n model.paginators = require('../apis/dynamodb-2012-08-10.paginators.json').pagination;\n model.waiters = require('../apis/dynamodb-2012-08-10.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.DynamoDB;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['dynamodbstreams'] = {};\nAWS.DynamoDBStreams = Service.defineService('dynamodbstreams', ['2012-08-10']);\nObject.defineProperty(apiLoader.services['dynamodbstreams'], '2012-08-10', {\n get: function get() {\n var model = require('../apis/streams.dynamodb-2012-08-10.min.json');\n model.paginators = require('../apis/streams.dynamodb-2012-08-10.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.DynamoDBStreams;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['lambda'] = {};\nAWS.Lambda = Service.defineService('lambda', ['2014-11-11', '2015-03-31']);\nrequire('../lib/services/lambda');\nObject.defineProperty(apiLoader.services['lambda'], '2014-11-11', {\n get: function get() {\n var model = require('../apis/lambda-2014-11-11.min.json');\n model.paginators = require('../apis/lambda-2014-11-11.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\nObject.defineProperty(apiLoader.services['lambda'], '2015-03-31', {\n get: function get() {\n var model = require('../apis/lambda-2015-03-31.min.json');\n model.paginators = require('../apis/lambda-2015-03-31.paginators.json').pagination;\n model.waiters = require('../apis/lambda-2015-03-31.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.Lambda;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['s3'] = {};\nAWS.S3 = Service.defineService('s3', ['2006-03-01']);\nrequire('../lib/services/s3');\nObject.defineProperty(apiLoader.services['s3'], '2006-03-01', {\n get: function get() {\n var model = require('../apis/s3-2006-03-01.min.json');\n model.paginators = require('../apis/s3-2006-03-01.paginators.json').pagination;\n model.waiters = require('../apis/s3-2006-03-01.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.S3;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['sts'] = {};\nAWS.STS = Service.defineService('sts', ['2011-06-15']);\nrequire('../lib/services/sts');\nObject.defineProperty(apiLoader.services['sts'], '2011-06-15', {\n get: function get() {\n var model = require('../apis/sts-2011-06-15.min.json');\n model.paginators = require('../apis/sts-2011-06-15.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.STS;\n","function apiLoader(svc, version) {\n if (!apiLoader.services.hasOwnProperty(svc)) {\n throw new Error('InvalidService: Failed to load api for ' + svc);\n }\n return apiLoader.services[svc][version];\n}\n\n/**\n * @api private\n *\n * This member of AWS.apiLoader is private, but changing it will necessitate a\n * change to ../scripts/services-table-generator.ts\n */\napiLoader.services = {};\n\n/**\n * @api private\n */\nmodule.exports = apiLoader;\n","var AWS = require('./core');\nrequire('./credentials');\nrequire('./credentials/credential_provider_chain');\nvar PromisesDependency;\n\n/**\n * The main configuration class used by all service objects to set\n * the region, credentials, and other options for requests.\n *\n * By default, credentials and region settings are left unconfigured.\n * This should be configured by the application before using any\n * AWS service APIs.\n *\n * In order to set global configuration options, properties should\n * be assigned to the global {AWS.config} object.\n *\n * @see AWS.config\n *\n * @!group General Configuration Options\n *\n * @!attribute credentials\n * @return [AWS.Credentials] the AWS credentials to sign requests with.\n *\n * @!attribute region\n * @example Set the global region setting to us-west-2\n * AWS.config.update({region: 'us-west-2'});\n * @return [AWS.Credentials] The region to send service requests to.\n * @see http://docs.amazonwebservices.com/general/latest/gr/rande.html\n * A list of available endpoints for each AWS service\n *\n * @!attribute maxRetries\n * @return [Integer] the maximum amount of retries to perform for a\n * service request. By default this value is calculated by the specific\n * service object that the request is being made to.\n *\n * @!attribute maxRedirects\n * @return [Integer] the maximum amount of redirects to follow for a\n * service request. Defaults to 10.\n *\n * @!attribute paramValidation\n * @return [Boolean|map] whether input parameters should be validated against\n * the operation description before sending the request. Defaults to true.\n * Pass a map to enable any of the following specific validation features:\n *\n * * **min** [Boolean] — Validates that a value meets the min\n * constraint. This is enabled by default when paramValidation is set\n * to `true`.\n * * **max** [Boolean] — Validates that a value meets the max\n * constraint.\n * * **pattern** [Boolean] — Validates that a string value matches a\n * regular expression.\n * * **enum** [Boolean] — Validates that a string value matches one\n * of the allowable enum values.\n *\n * @!attribute computeChecksums\n * @return [Boolean] whether to compute checksums for payload bodies when\n * the service accepts it (currently supported in S3 only).\n *\n * @!attribute convertResponseTypes\n * @return [Boolean] whether types are converted when parsing response data.\n * Currently only supported for JSON based services. Turning this off may\n * improve performance on large response payloads. Defaults to `true`.\n *\n * @!attribute correctClockSkew\n * @return [Boolean] whether to apply a clock skew correction and retry\n * requests that fail because of an skewed client clock. Defaults to\n * `false`.\n *\n * @!attribute sslEnabled\n * @return [Boolean] whether SSL is enabled for requests\n *\n * @!attribute s3ForcePathStyle\n * @return [Boolean] whether to force path style URLs for S3 objects\n *\n * @!attribute s3BucketEndpoint\n * @note Setting this configuration option requires an `endpoint` to be\n * provided explicitly to the service constructor.\n * @return [Boolean] whether the provided endpoint addresses an individual\n * bucket (false if it addresses the root API endpoint).\n *\n * @!attribute s3DisableBodySigning\n * @return [Boolean] whether to disable S3 body signing when using signature version `v4`.\n * Body signing can only be disabled when using https. Defaults to `true`.\n *\n * @!attribute s3UsEast1RegionalEndpoint\n * @return ['legacy'|'regional'] when region is set to 'us-east-1', whether to send s3\n * request to global endpoints or 'us-east-1' regional endpoints. This config is only\n * applicable to S3 client;\n * Defaults to 'legacy'\n * @!attribute s3UseArnRegion\n * @return [Boolean] whether to override the request region with the region inferred\n * from requested resource's ARN. Only available for S3 buckets\n * Defaults to `true`\n *\n * @!attribute useAccelerateEndpoint\n * @note This configuration option is only compatible with S3 while accessing\n * dns-compatible buckets.\n * @return [Boolean] Whether to use the Accelerate endpoint with the S3 service.\n * Defaults to `false`.\n *\n * @!attribute retryDelayOptions\n * @example Set the base retry delay for all services to 300 ms\n * AWS.config.update({retryDelayOptions: {base: 300}});\n * // Delays with maxRetries = 3: 300, 600, 1200\n * @example Set a custom backoff function to provide delay values on retries\n * AWS.config.update({retryDelayOptions: {customBackoff: function(retryCount, err) {\n * // returns delay in ms\n * }}});\n * @return [map] A set of options to configure the retry delay on retryable errors.\n * Currently supported options are:\n *\n * * **base** [Integer] — The base number of milliseconds to use in the\n * exponential backoff for operation retries. Defaults to 100 ms for all services except\n * DynamoDB, where it defaults to 50ms.\n *\n * * **customBackoff ** [function] — A custom function that accepts a\n * retry count and error and returns the amount of time to delay in\n * milliseconds. If the result is a non-zero negative value, no further\n * retry attempts will be made. The `base` option will be ignored if this\n * option is supplied. The function is only called for retryable errors.\n *\n * @!attribute httpOptions\n * @return [map] A set of options to pass to the low-level HTTP request.\n * Currently supported options are:\n *\n * * **proxy** [String] — the URL to proxy requests through\n * * **agent** [http.Agent, https.Agent] — the Agent object to perform\n * HTTP requests with. Used for connection pooling. Note that for\n * SSL connections, a special Agent object is used in order to enable\n * peer certificate verification. This feature is only supported in the\n * Node.js environment.\n * * **connectTimeout** [Integer] — Sets the socket to timeout after\n * failing to establish a connection with the server after\n * `connectTimeout` milliseconds. This timeout has no effect once a socket\n * connection has been established.\n * * **timeout** [Integer] — The number of milliseconds a request can\n * take before automatically being terminated.\n * Defaults to two minutes (120000).\n * * **xhrAsync** [Boolean] — Whether the SDK will send asynchronous\n * HTTP requests. Used in the browser environment only. Set to false to\n * send requests synchronously. Defaults to true (async on).\n * * **xhrWithCredentials** [Boolean] — Sets the \"withCredentials\"\n * property of an XMLHttpRequest object. Used in the browser environment\n * only. Defaults to false.\n * @!attribute logger\n * @return [#write,#log] an object that responds to .write() (like a stream)\n * or .log() (like the console object) in order to log information about\n * requests\n *\n * @!attribute systemClockOffset\n * @return [Number] an offset value in milliseconds to apply to all signing\n * times. Use this to compensate for clock skew when your system may be\n * out of sync with the service time. Note that this configuration option\n * can only be applied to the global `AWS.config` object and cannot be\n * overridden in service-specific configuration. Defaults to 0 milliseconds.\n *\n * @!attribute signatureVersion\n * @return [String] the signature version to sign requests with (overriding\n * the API configuration). Possible values are: 'v2', 'v3', 'v4'.\n *\n * @!attribute signatureCache\n * @return [Boolean] whether the signature to sign requests with (overriding\n * the API configuration) is cached. Only applies to the signature version 'v4'.\n * Defaults to `true`.\n *\n * @!attribute endpointDiscoveryEnabled\n * @return [Boolean|undefined] whether to call operations with endpoints\n * given by service dynamically. Setting this config to `true` will enable\n * endpoint discovery for all applicable operations. Setting it to `false`\n * will explicitly disable endpoint discovery even though operations that\n * require endpoint discovery will presumably fail. Leaving it to\n * `undefined` means SDK only do endpoint discovery when it's required.\n * Defaults to `undefined`\n *\n * @!attribute endpointCacheSize\n * @return [Number] the size of the global cache storing endpoints from endpoint\n * discovery operations. Once endpoint cache is created, updating this setting\n * cannot change existing cache size.\n * Defaults to 1000\n *\n * @!attribute hostPrefixEnabled\n * @return [Boolean] whether to marshal request parameters to the prefix of\n * hostname. Defaults to `true`.\n *\n * @!attribute stsRegionalEndpoints\n * @return ['legacy'|'regional'] whether to send sts request to global endpoints or\n * regional endpoints.\n * Defaults to 'legacy'\n */\nAWS.Config = AWS.util.inherit({\n /**\n * @!endgroup\n */\n\n /**\n * Creates a new configuration object. This is the object that passes\n * option data along to service requests, including credentials, security,\n * region information, and some service specific settings.\n *\n * @example Creating a new configuration object with credentials and region\n * var config = new AWS.Config({\n * accessKeyId: 'AKID', secretAccessKey: 'SECRET', region: 'us-west-2'\n * });\n * @option options accessKeyId [String] your AWS access key ID.\n * @option options secretAccessKey [String] your AWS secret access key.\n * @option options sessionToken [AWS.Credentials] the optional AWS\n * session token to sign requests with.\n * @option options credentials [AWS.Credentials] the AWS credentials\n * to sign requests with. You can either specify this object, or\n * specify the accessKeyId and secretAccessKey options directly.\n * @option options credentialProvider [AWS.CredentialProviderChain] the\n * provider chain used to resolve credentials if no static `credentials`\n * property is set.\n * @option options region [String] the region to send service requests to.\n * See {region} for more information.\n * @option options maxRetries [Integer] the maximum amount of retries to\n * attempt with a request. See {maxRetries} for more information.\n * @option options maxRedirects [Integer] the maximum amount of redirects to\n * follow with a request. See {maxRedirects} for more information.\n * @option options sslEnabled [Boolean] whether to enable SSL for\n * requests.\n * @option options paramValidation [Boolean|map] whether input parameters\n * should be validated against the operation description before sending\n * the request. Defaults to true. Pass a map to enable any of the\n * following specific validation features:\n *\n * * **min** [Boolean] — Validates that a value meets the min\n * constraint. This is enabled by default when paramValidation is set\n * to `true`.\n * * **max** [Boolean] — Validates that a value meets the max\n * constraint.\n * * **pattern** [Boolean] — Validates that a string value matches a\n * regular expression.\n * * **enum** [Boolean] — Validates that a string value matches one\n * of the allowable enum values.\n * @option options computeChecksums [Boolean] whether to compute checksums\n * for payload bodies when the service accepts it (currently supported\n * in S3 only)\n * @option options convertResponseTypes [Boolean] whether types are converted\n * when parsing response data. Currently only supported for JSON based\n * services. Turning this off may improve performance on large response\n * payloads. Defaults to `true`.\n * @option options correctClockSkew [Boolean] whether to apply a clock skew\n * correction and retry requests that fail because of an skewed client\n * clock. Defaults to `false`.\n * @option options s3ForcePathStyle [Boolean] whether to force path\n * style URLs for S3 objects.\n * @option options s3BucketEndpoint [Boolean] whether the provided endpoint\n * addresses an individual bucket (false if it addresses the root API\n * endpoint). Note that setting this configuration option requires an\n * `endpoint` to be provided explicitly to the service constructor.\n * @option options s3DisableBodySigning [Boolean] whether S3 body signing\n * should be disabled when using signature version `v4`. Body signing\n * can only be disabled when using https. Defaults to `true`.\n * @option options s3UsEast1RegionalEndpoint ['legacy'|'regional'] when region\n * is set to 'us-east-1', whether to send s3 request to global endpoints or\n * 'us-east-1' regional endpoints. This config is only applicable to S3 client.\n * Defaults to `legacy`\n * @option options s3UseArnRegion [Boolean] whether to override the request region\n * with the region inferred from requested resource's ARN. Only available for S3 buckets\n * Defaults to `true`\n *\n * @option options retryDelayOptions [map] A set of options to configure\n * the retry delay on retryable errors. Currently supported options are:\n *\n * * **base** [Integer] — The base number of milliseconds to use in the\n * exponential backoff for operation retries. Defaults to 100 ms for all\n * services except DynamoDB, where it defaults to 50ms.\n * * **customBackoff ** [function] — A custom function that accepts a\n * retry count and error and returns the amount of time to delay in\n * milliseconds. If the result is a non-zero negative value, no further\n * retry attempts will be made. The `base` option will be ignored if this\n * option is supplied. The function is only called for retryable errors.\n * @option options httpOptions [map] A set of options to pass to the low-level\n * HTTP request. Currently supported options are:\n *\n * * **proxy** [String] — the URL to proxy requests through\n * * **agent** [http.Agent, https.Agent] — the Agent object to perform\n * HTTP requests with. Used for connection pooling. Defaults to the global\n * agent (`http.globalAgent`) for non-SSL connections. Note that for\n * SSL connections, a special Agent object is used in order to enable\n * peer certificate verification. This feature is only available in the\n * Node.js environment.\n * * **connectTimeout** [Integer] — Sets the socket to timeout after\n * failing to establish a connection with the server after\n * `connectTimeout` milliseconds. This timeout has no effect once a socket\n * connection has been established.\n * * **timeout** [Integer] — Sets the socket to timeout after timeout\n * milliseconds of inactivity on the socket. Defaults to two minutes\n * (120000).\n * * **xhrAsync** [Boolean] — Whether the SDK will send asynchronous\n * HTTP requests. Used in the browser environment only. Set to false to\n * send requests synchronously. Defaults to true (async on).\n * * **xhrWithCredentials** [Boolean] — Sets the \"withCredentials\"\n * property of an XMLHttpRequest object. Used in the browser environment\n * only. Defaults to false.\n * @option options apiVersion [String, Date] a String in YYYY-MM-DD format\n * (or a date) that represents the latest possible API version that can be\n * used in all services (unless overridden by `apiVersions`). Specify\n * 'latest' to use the latest possible version.\n * @option options apiVersions [map<String, String|Date>] a map of service\n * identifiers (the lowercase service class name) with the API version to\n * use when instantiating a service. Specify 'latest' for each individual\n * that can use the latest available version.\n * @option options logger [#write,#log] an object that responds to .write()\n * (like a stream) or .log() (like the console object) in order to log\n * information about requests\n * @option options systemClockOffset [Number] an offset value in milliseconds\n * to apply to all signing times. Use this to compensate for clock skew\n * when your system may be out of sync with the service time. Note that\n * this configuration option can only be applied to the global `AWS.config`\n * object and cannot be overridden in service-specific configuration.\n * Defaults to 0 milliseconds.\n * @option options signatureVersion [String] the signature version to sign\n * requests with (overriding the API configuration). Possible values are:\n * 'v2', 'v3', 'v4'.\n * @option options signatureCache [Boolean] whether the signature to sign\n * requests with (overriding the API configuration) is cached. Only applies\n * to the signature version 'v4'. Defaults to `true`.\n * @option options dynamoDbCrc32 [Boolean] whether to validate the CRC32\n * checksum of HTTP response bodies returned by DynamoDB. Default: `true`.\n * @option options useAccelerateEndpoint [Boolean] Whether to use the\n * S3 Transfer Acceleration endpoint with the S3 service. Default: `false`.\n * @option options clientSideMonitoring [Boolean] whether to collect and\n * publish this client's performance metrics of all its API requests.\n * @option options endpointDiscoveryEnabled [Boolean|undefined] whether to\n * call operations with endpoints given by service dynamically. Setting this\n * config to `true` will enable endpoint discovery for all applicable operations.\n * Setting it to `false` will explicitly disable endpoint discovery even though\n * operations that require endpoint discovery will presumably fail. Leaving it\n * to `undefined` means SDK will only do endpoint discovery when it's required.\n * Defaults to `undefined`\n * @option options endpointCacheSize [Number] the size of the global cache storing\n * endpoints from endpoint discovery operations. Once endpoint cache is created,\n * updating this setting cannot change existing cache size.\n * Defaults to 1000\n * @option options hostPrefixEnabled [Boolean] whether to marshal request\n * parameters to the prefix of hostname.\n * Defaults to `true`.\n * @option options stsRegionalEndpoints ['legacy'|'regional'] whether to send sts request\n * to global endpoints or regional endpoints.\n * Defaults to 'legacy'.\n */\n constructor: function Config(options) {\n if (options === undefined) options = {};\n options = this.extractCredentials(options);\n\n AWS.util.each.call(this, this.keys, function (key, value) {\n this.set(key, options[key], value);\n });\n },\n\n /**\n * @!group Managing Credentials\n */\n\n /**\n * Loads credentials from the configuration object. This is used internally\n * by the SDK to ensure that refreshable {Credentials} objects are properly\n * refreshed and loaded when sending a request. If you want to ensure that\n * your credentials are loaded prior to a request, you can use this method\n * directly to provide accurate credential data stored in the object.\n *\n * @note If you configure the SDK with static or environment credentials,\n * the credential data should already be present in {credentials} attribute.\n * This method is primarily necessary to load credentials from asynchronous\n * sources, or sources that can refresh credentials periodically.\n * @example Getting your access key\n * AWS.config.getCredentials(function(err) {\n * if (err) console.log(err.stack); // credentials not loaded\n * else console.log(\"Access Key:\", AWS.config.credentials.accessKeyId);\n * })\n * @callback callback function(err)\n * Called when the {credentials} have been properly set on the configuration\n * object.\n *\n * @param err [Error] if this is set, credentials were not successfully\n * loaded and this error provides information why.\n * @see credentials\n * @see Credentials\n */\n getCredentials: function getCredentials(callback) {\n var self = this;\n\n function finish(err) {\n callback(err, err ? null : self.credentials);\n }\n\n function credError(msg, err) {\n return new AWS.util.error(err || new Error(), {\n code: 'CredentialsError',\n message: msg,\n name: 'CredentialsError'\n });\n }\n\n function getAsyncCredentials() {\n self.credentials.get(function(err) {\n if (err) {\n var msg = 'Could not load credentials from ' +\n self.credentials.constructor.name;\n err = credError(msg, err);\n }\n finish(err);\n });\n }\n\n function getStaticCredentials() {\n var err = null;\n if (!self.credentials.accessKeyId || !self.credentials.secretAccessKey) {\n err = credError('Missing credentials');\n }\n finish(err);\n }\n\n if (self.credentials) {\n if (typeof self.credentials.get === 'function') {\n getAsyncCredentials();\n } else { // static credentials\n getStaticCredentials();\n }\n } else if (self.credentialProvider) {\n self.credentialProvider.resolve(function(err, creds) {\n if (err) {\n err = credError('Could not load credentials from any providers', err);\n }\n self.credentials = creds;\n finish(err);\n });\n } else {\n finish(credError('No credentials to load'));\n }\n },\n\n /**\n * @!group Loading and Setting Configuration Options\n */\n\n /**\n * @overload update(options, allowUnknownKeys = false)\n * Updates the current configuration object with new options.\n *\n * @example Update maxRetries property of a configuration object\n * config.update({maxRetries: 10});\n * @param [Object] options a map of option keys and values.\n * @param [Boolean] allowUnknownKeys whether unknown keys can be set on\n * the configuration object. Defaults to `false`.\n * @see constructor\n */\n update: function update(options, allowUnknownKeys) {\n allowUnknownKeys = allowUnknownKeys || false;\n options = this.extractCredentials(options);\n AWS.util.each.call(this, options, function (key, value) {\n if (allowUnknownKeys || Object.prototype.hasOwnProperty.call(this.keys, key) ||\n AWS.Service.hasService(key)) {\n this.set(key, value);\n }\n });\n },\n\n /**\n * Loads configuration data from a JSON file into this config object.\n * @note Loading configuration will reset all existing configuration\n * on the object.\n * @!macro nobrowser\n * @param path [String] the path relative to your process's current\n * working directory to load configuration from.\n * @return [AWS.Config] the same configuration object\n */\n loadFromPath: function loadFromPath(path) {\n this.clear();\n\n var options = JSON.parse(AWS.util.readFileSync(path));\n var fileSystemCreds = new AWS.FileSystemCredentials(path);\n var chain = new AWS.CredentialProviderChain();\n chain.providers.unshift(fileSystemCreds);\n chain.resolve(function (err, creds) {\n if (err) throw err;\n else options.credentials = creds;\n });\n\n this.constructor(options);\n\n return this;\n },\n\n /**\n * Clears configuration data on this object\n *\n * @api private\n */\n clear: function clear() {\n /*jshint forin:false */\n AWS.util.each.call(this, this.keys, function (key) {\n delete this[key];\n });\n\n // reset credential provider\n this.set('credentials', undefined);\n this.set('credentialProvider', undefined);\n },\n\n /**\n * Sets a property on the configuration object, allowing for a\n * default value\n * @api private\n */\n set: function set(property, value, defaultValue) {\n if (value === undefined) {\n if (defaultValue === undefined) {\n defaultValue = this.keys[property];\n }\n if (typeof defaultValue === 'function') {\n this[property] = defaultValue.call(this);\n } else {\n this[property] = defaultValue;\n }\n } else if (property === 'httpOptions' && this[property]) {\n // deep merge httpOptions\n this[property] = AWS.util.merge(this[property], value);\n } else {\n this[property] = value;\n }\n },\n\n /**\n * All of the keys with their default values.\n *\n * @constant\n * @api private\n */\n keys: {\n credentials: null,\n credentialProvider: null,\n region: null,\n logger: null,\n apiVersions: {},\n apiVersion: null,\n endpoint: undefined,\n httpOptions: {\n timeout: 120000\n },\n maxRetries: undefined,\n maxRedirects: 10,\n paramValidation: true,\n sslEnabled: true,\n s3ForcePathStyle: false,\n s3BucketEndpoint: false,\n s3DisableBodySigning: true,\n s3UsEast1RegionalEndpoint: 'legacy',\n s3UseArnRegion: undefined,\n computeChecksums: true,\n convertResponseTypes: true,\n correctClockSkew: false,\n customUserAgent: null,\n dynamoDbCrc32: true,\n systemClockOffset: 0,\n signatureVersion: null,\n signatureCache: true,\n retryDelayOptions: {},\n useAccelerateEndpoint: false,\n clientSideMonitoring: false,\n endpointDiscoveryEnabled: undefined,\n endpointCacheSize: 1000,\n hostPrefixEnabled: true,\n stsRegionalEndpoints: 'legacy'\n },\n\n /**\n * Extracts accessKeyId, secretAccessKey and sessionToken\n * from a configuration hash.\n *\n * @api private\n */\n extractCredentials: function extractCredentials(options) {\n if (options.accessKeyId && options.secretAccessKey) {\n options = AWS.util.copy(options);\n options.credentials = new AWS.Credentials(options);\n }\n return options;\n },\n\n /**\n * Sets the promise dependency the SDK will use wherever Promises are returned.\n * Passing `null` will force the SDK to use native Promises if they are available.\n * If native Promises are not available, passing `null` will have no effect.\n * @param [Constructor] dep A reference to a Promise constructor\n */\n setPromisesDependency: function setPromisesDependency(dep) {\n PromisesDependency = dep;\n // if null was passed in, we should try to use native promises\n if (dep === null && typeof Promise === 'function') {\n PromisesDependency = Promise;\n }\n var constructors = [AWS.Request, AWS.Credentials, AWS.CredentialProviderChain];\n if (AWS.S3) {\n constructors.push(AWS.S3);\n if (AWS.S3.ManagedUpload) {\n constructors.push(AWS.S3.ManagedUpload);\n }\n }\n AWS.util.addPromises(constructors, PromisesDependency);\n },\n\n /**\n * Gets the promise dependency set by `AWS.config.setPromisesDependency`.\n */\n getPromisesDependency: function getPromisesDependency() {\n return PromisesDependency;\n }\n});\n\n/**\n * @return [AWS.Config] The global configuration object singleton instance\n * @readonly\n * @see AWS.Config\n */\nAWS.config = new AWS.Config();\n","var AWS = require('./core');\n/**\n * @api private\n */\nfunction validateRegionalEndpointsFlagValue(configValue, errorOptions) {\n if (typeof configValue !== 'string') return undefined;\n else if (['legacy', 'regional'].indexOf(configValue.toLowerCase()) >= 0) {\n return configValue.toLowerCase();\n } else {\n throw AWS.util.error(new Error(), errorOptions);\n }\n}\n\n/**\n * Resolve the configuration value for regional endpoint from difference sources: client\n * config, environmental variable, shared config file. Value can be case-insensitive\n * 'legacy' or 'reginal'.\n * @param originalConfig user-supplied config object to resolve\n * @param options a map of config property names from individual configuration source\n * - env: name of environmental variable that refers to the config\n * - sharedConfig: name of shared configuration file property that refers to the config\n * - clientConfig: name of client configuration property that refers to the config\n *\n * @api private\n */\nfunction resolveRegionalEndpointsFlag(originalConfig, options) {\n originalConfig = originalConfig || {};\n //validate config value\n var resolved;\n if (originalConfig[options.clientConfig]) {\n resolved = validateRegionalEndpointsFlagValue(originalConfig[options.clientConfig], {\n code: 'InvalidConfiguration',\n message: 'invalid \"' + options.clientConfig + '\" configuration. Expect \"legacy\" ' +\n ' or \"regional\". Got \"' + originalConfig[options.clientConfig] + '\".'\n });\n if (resolved) return resolved;\n }\n if (!AWS.util.isNode()) return resolved;\n //validate environmental variable\n if (Object.prototype.hasOwnProperty.call(process.env, options.env)) {\n var envFlag = process.env[options.env];\n resolved = validateRegionalEndpointsFlagValue(envFlag, {\n code: 'InvalidEnvironmentalVariable',\n message: 'invalid ' + options.env + ' environmental variable. Expect \"legacy\" ' +\n ' or \"regional\". Got \"' + process.env[options.env] + '\".'\n });\n if (resolved) return resolved;\n }\n //validate shared config file\n var profile = {};\n try {\n var profiles = AWS.util.getProfilesFromSharedConfig(AWS.util.iniLoader);\n profile = profiles[process.env.AWS_PROFILE || AWS.util.defaultProfile];\n } catch (e) {};\n if (profile && Object.prototype.hasOwnProperty.call(profile, options.sharedConfig)) {\n var fileFlag = profile[options.sharedConfig];\n resolved = validateRegionalEndpointsFlagValue(fileFlag, {\n code: 'InvalidConfiguration',\n message: 'invalid ' + options.sharedConfig + ' profile config. Expect \"legacy\" ' +\n ' or \"regional\". Got \"' + profile[options.sharedConfig] + '\".'\n });\n if (resolved) return resolved;\n }\n return resolved;\n}\n\nmodule.exports = resolveRegionalEndpointsFlag;\n","/**\n * The main AWS namespace\n */\nvar AWS = { util: require('./util') };\n\n/**\n * @api private\n * @!macro [new] nobrowser\n * @note This feature is not supported in the browser environment of the SDK.\n */\nvar _hidden = {}; _hidden.toString(); // hack to parse macro\n\n/**\n * @api private\n */\nmodule.exports = AWS;\n\nAWS.util.update(AWS, {\n\n /**\n * @constant\n */\n VERSION: '2.825.0',\n\n /**\n * @api private\n */\n Signers: {},\n\n /**\n * @api private\n */\n Protocol: {\n Json: require('./protocol/json'),\n Query: require('./protocol/query'),\n Rest: require('./protocol/rest'),\n RestJson: require('./protocol/rest_json'),\n RestXml: require('./protocol/rest_xml')\n },\n\n /**\n * @api private\n */\n XML: {\n Builder: require('./xml/builder'),\n Parser: null // conditionally set based on environment\n },\n\n /**\n * @api private\n */\n JSON: {\n Builder: require('./json/builder'),\n Parser: require('./json/parser')\n },\n\n /**\n * @api private\n */\n Model: {\n Api: require('./model/api'),\n Operation: require('./model/operation'),\n Shape: require('./model/shape'),\n Paginator: require('./model/paginator'),\n ResourceWaiter: require('./model/resource_waiter')\n },\n\n /**\n * @api private\n */\n apiLoader: require('./api_loader'),\n\n /**\n * @api private\n */\n EndpointCache: require('../vendor/endpoint-cache').EndpointCache\n});\nrequire('./sequential_executor');\nrequire('./service');\nrequire('./config');\nrequire('./http');\nrequire('./event_listeners');\nrequire('./request');\nrequire('./response');\nrequire('./resource_waiter');\nrequire('./signers/request_signer');\nrequire('./param_validator');\n\n/**\n * @readonly\n * @return [AWS.SequentialExecutor] a collection of global event listeners that\n * are attached to every sent request.\n * @see AWS.Request AWS.Request for a list of events to listen for\n * @example Logging the time taken to send a request\n * AWS.events.on('send', function startSend(resp) {\n * resp.startTime = new Date().getTime();\n * }).on('complete', function calculateTime(resp) {\n * var time = (new Date().getTime() - resp.startTime) / 1000;\n * console.log('Request took ' + time + ' seconds');\n * });\n *\n * new AWS.S3().listBuckets(); // prints 'Request took 0.285 seconds'\n */\nAWS.events = new AWS.SequentialExecutor();\n\n//create endpoint cache lazily\nAWS.util.memoizedProperty(AWS, 'endpointCache', function() {\n return new AWS.EndpointCache(AWS.config.endpointCacheSize);\n}, true);\n","var AWS = require('./core');\n\n/**\n * Represents your AWS security credentials, specifically the\n * {accessKeyId}, {secretAccessKey}, and optional {sessionToken}.\n * Creating a `Credentials` object allows you to pass around your\n * security information to configuration and service objects.\n *\n * Note that this class typically does not need to be constructed manually,\n * as the {AWS.Config} and {AWS.Service} classes both accept simple\n * options hashes with the three keys. These structures will be converted\n * into Credentials objects automatically.\n *\n * ## Expiring and Refreshing Credentials\n *\n * Occasionally credentials can expire in the middle of a long-running\n * application. In this case, the SDK will automatically attempt to\n * refresh the credentials from the storage location if the Credentials\n * class implements the {refresh} method.\n *\n * If you are implementing a credential storage location, you\n * will want to create a subclass of the `Credentials` class and\n * override the {refresh} method. This method allows credentials to be\n * retrieved from the backing store, be it a file system, database, or\n * some network storage. The method should reset the credential attributes\n * on the object.\n *\n * @!attribute expired\n * @return [Boolean] whether the credentials have been expired and\n * require a refresh. Used in conjunction with {expireTime}.\n * @!attribute expireTime\n * @return [Date] a time when credentials should be considered expired. Used\n * in conjunction with {expired}.\n * @!attribute accessKeyId\n * @return [String] the AWS access key ID\n * @!attribute secretAccessKey\n * @return [String] the AWS secret access key\n * @!attribute sessionToken\n * @return [String] an optional AWS session token\n */\nAWS.Credentials = AWS.util.inherit({\n /**\n * A credentials object can be created using positional arguments or an options\n * hash.\n *\n * @overload AWS.Credentials(accessKeyId, secretAccessKey, sessionToken=null)\n * Creates a Credentials object with a given set of credential information\n * as positional arguments.\n * @param accessKeyId [String] the AWS access key ID\n * @param secretAccessKey [String] the AWS secret access key\n * @param sessionToken [String] the optional AWS session token\n * @example Create a credentials object with AWS credentials\n * var creds = new AWS.Credentials('akid', 'secret', 'session');\n * @overload AWS.Credentials(options)\n * Creates a Credentials object with a given set of credential information\n * as an options hash.\n * @option options accessKeyId [String] the AWS access key ID\n * @option options secretAccessKey [String] the AWS secret access key\n * @option options sessionToken [String] the optional AWS session token\n * @example Create a credentials object with AWS credentials\n * var creds = new AWS.Credentials({\n * accessKeyId: 'akid', secretAccessKey: 'secret', sessionToken: 'session'\n * });\n */\n constructor: function Credentials() {\n // hide secretAccessKey from being displayed with util.inspect\n AWS.util.hideProperties(this, ['secretAccessKey']);\n\n this.expired = false;\n this.expireTime = null;\n this.refreshCallbacks = [];\n if (arguments.length === 1 && typeof arguments[0] === 'object') {\n var creds = arguments[0].credentials || arguments[0];\n this.accessKeyId = creds.accessKeyId;\n this.secretAccessKey = creds.secretAccessKey;\n this.sessionToken = creds.sessionToken;\n } else {\n this.accessKeyId = arguments[0];\n this.secretAccessKey = arguments[1];\n this.sessionToken = arguments[2];\n }\n },\n\n /**\n * @return [Integer] the number of seconds before {expireTime} during which\n * the credentials will be considered expired.\n */\n expiryWindow: 15,\n\n /**\n * @return [Boolean] whether the credentials object should call {refresh}\n * @note Subclasses should override this method to provide custom refresh\n * logic.\n */\n needsRefresh: function needsRefresh() {\n var currentTime = AWS.util.date.getDate().getTime();\n var adjustedTime = new Date(currentTime + this.expiryWindow * 1000);\n\n if (this.expireTime && adjustedTime > this.expireTime) {\n return true;\n } else {\n return this.expired || !this.accessKeyId || !this.secretAccessKey;\n }\n },\n\n /**\n * Gets the existing credentials, refreshing them if they are not yet loaded\n * or have expired. Users should call this method before using {refresh},\n * as this will not attempt to reload credentials when they are already\n * loaded into the object.\n *\n * @callback callback function(err)\n * When this callback is called with no error, it means either credentials\n * do not need to be refreshed or refreshed credentials information has\n * been loaded into the object (as the `accessKeyId`, `secretAccessKey`,\n * and `sessionToken` properties).\n * @param err [Error] if an error occurred, this value will be filled\n */\n get: function get(callback) {\n var self = this;\n if (this.needsRefresh()) {\n this.refresh(function(err) {\n if (!err) self.expired = false; // reset expired flag\n if (callback) callback(err);\n });\n } else if (callback) {\n callback();\n }\n },\n\n /**\n * @!method getPromise()\n * Returns a 'thenable' promise.\n * Gets the existing credentials, refreshing them if they are not yet loaded\n * or have expired. Users should call this method before using {refresh},\n * as this will not attempt to reload credentials when they are already\n * loaded into the object.\n *\n * Two callbacks can be provided to the `then` method on the returned promise.\n * The first callback will be called if the promise is fulfilled, and the second\n * callback will be called if the promise is rejected.\n * @callback fulfilledCallback function()\n * Called if the promise is fulfilled. When this callback is called, it\n * means either credentials do not need to be refreshed or refreshed\n * credentials information has been loaded into the object (as the\n * `accessKeyId`, `secretAccessKey`, and `sessionToken` properties).\n * @callback rejectedCallback function(err)\n * Called if the promise is rejected.\n * @param err [Error] if an error occurred, this value will be filled\n * @return [Promise] A promise that represents the state of the `get` call.\n * @example Calling the `getPromise` method.\n * var promise = credProvider.getPromise();\n * promise.then(function() { ... }, function(err) { ... });\n */\n\n /**\n * @!method refreshPromise()\n * Returns a 'thenable' promise.\n * Refreshes the credentials. Users should call {get} before attempting\n * to forcibly refresh credentials.\n *\n * Two callbacks can be provided to the `then` method on the returned promise.\n * The first callback will be called if the promise is fulfilled, and the second\n * callback will be called if the promise is rejected.\n * @callback fulfilledCallback function()\n * Called if the promise is fulfilled. When this callback is called, it\n * means refreshed credentials information has been loaded into the object\n * (as the `accessKeyId`, `secretAccessKey`, and `sessionToken` properties).\n * @callback rejectedCallback function(err)\n * Called if the promise is rejected.\n * @param err [Error] if an error occurred, this value will be filled\n * @return [Promise] A promise that represents the state of the `refresh` call.\n * @example Calling the `refreshPromise` method.\n * var promise = credProvider.refreshPromise();\n * promise.then(function() { ... }, function(err) { ... });\n */\n\n /**\n * Refreshes the credentials. Users should call {get} before attempting\n * to forcibly refresh credentials.\n *\n * @callback callback function(err)\n * When this callback is called with no error, it means refreshed\n * credentials information has been loaded into the object (as the\n * `accessKeyId`, `secretAccessKey`, and `sessionToken` properties).\n * @param err [Error] if an error occurred, this value will be filled\n * @note Subclasses should override this class to reset the\n * {accessKeyId}, {secretAccessKey} and optional {sessionToken}\n * on the credentials object and then call the callback with\n * any error information.\n * @see get\n */\n refresh: function refresh(callback) {\n this.expired = false;\n callback();\n },\n\n /**\n * @api private\n * @param callback\n */\n coalesceRefresh: function coalesceRefresh(callback, sync) {\n var self = this;\n if (self.refreshCallbacks.push(callback) === 1) {\n self.load(function onLoad(err) {\n AWS.util.arrayEach(self.refreshCallbacks, function(callback) {\n if (sync) {\n callback(err);\n } else {\n // callback could throw, so defer to ensure all callbacks are notified\n AWS.util.defer(function () {\n callback(err);\n });\n }\n });\n self.refreshCallbacks.length = 0;\n });\n }\n },\n\n /**\n * @api private\n * @param callback\n */\n load: function load(callback) {\n callback();\n }\n});\n\n/**\n * @api private\n */\nAWS.Credentials.addPromisesToClass = function addPromisesToClass(PromiseDependency) {\n this.prototype.getPromise = AWS.util.promisifyMethod('get', PromiseDependency);\n this.prototype.refreshPromise = AWS.util.promisifyMethod('refresh', PromiseDependency);\n};\n\n/**\n * @api private\n */\nAWS.Credentials.deletePromisesFromClass = function deletePromisesFromClass() {\n delete this.prototype.getPromise;\n delete this.prototype.refreshPromise;\n};\n\nAWS.util.addPromises(AWS.Credentials);\n","var AWS = require('../core');\nvar STS = require('../../clients/sts');\n\n/**\n * Represents temporary credentials retrieved from {AWS.STS}. Without any\n * extra parameters, credentials will be fetched from the\n * {AWS.STS.getSessionToken} operation. If an IAM role is provided, the\n * {AWS.STS.assumeRole} operation will be used to fetch credentials for the\n * role instead.\n *\n * AWS.ChainableTemporaryCredentials differs from AWS.TemporaryCredentials in\n * the way masterCredentials and refreshes are handled.\n * AWS.ChainableTemporaryCredentials refreshes expired credentials using the\n * masterCredentials passed by the user to support chaining of STS credentials.\n * However, AWS.TemporaryCredentials recursively collapses the masterCredentials\n * during instantiation, precluding the ability to refresh credentials which\n * require intermediate, temporary credentials.\n *\n * For example, if the application should use RoleA, which must be assumed from\n * RoleB, and the environment provides credentials which can assume RoleB, then\n * AWS.ChainableTemporaryCredentials must be used to support refreshing the\n * temporary credentials for RoleA:\n *\n * ```javascript\n * var roleACreds = new AWS.ChainableTemporaryCredentials({\n * params: {RoleArn: 'RoleA'},\n * masterCredentials: new AWS.ChainableTemporaryCredentials({\n * params: {RoleArn: 'RoleB'},\n * masterCredentials: new AWS.EnvironmentCredentials('AWS')\n * })\n * });\n * ```\n *\n * If AWS.TemporaryCredentials had been used in the previous example,\n * `roleACreds` would fail to refresh because `roleACreds` would\n * use the environment credentials for the AssumeRole request.\n *\n * Another difference is that AWS.ChainableTemporaryCredentials creates the STS\n * service instance during instantiation while AWS.TemporaryCredentials creates\n * the STS service instance during the first refresh. Creating the service\n * instance during instantiation effectively captures the master credentials\n * from the global config, so that subsequent changes to the global config do\n * not affect the master credentials used to refresh the temporary credentials.\n *\n * This allows an instance of AWS.ChainableTemporaryCredentials to be assigned\n * to AWS.config.credentials:\n *\n * ```javascript\n * var envCreds = new AWS.EnvironmentCredentials('AWS');\n * AWS.config.credentials = envCreds;\n * // masterCredentials will be envCreds\n * AWS.config.credentials = new AWS.ChainableTemporaryCredentials({\n * params: {RoleArn: '...'}\n * });\n * ```\n *\n * Similarly, to use the CredentialProviderChain's default providers as the\n * master credentials, simply create a new instance of\n * AWS.ChainableTemporaryCredentials:\n *\n * ```javascript\n * AWS.config.credentials = new ChainableTemporaryCredentials({\n * params: {RoleArn: '...'}\n * });\n * ```\n *\n * @!attribute service\n * @return [AWS.STS] the STS service instance used to\n * get and refresh temporary credentials from AWS STS.\n * @note (see constructor)\n */\nAWS.ChainableTemporaryCredentials = AWS.util.inherit(AWS.Credentials, {\n /**\n * Creates a new temporary credentials object.\n *\n * @param options [map] a set of options\n * @option options params [map] ({}) a map of options that are passed to the\n * {AWS.STS.assumeRole} or {AWS.STS.getSessionToken} operations.\n * If a `RoleArn` parameter is passed in, credentials will be based on the\n * IAM role. If a `SerialNumber` parameter is passed in, {tokenCodeFn} must\n * also be passed in or an error will be thrown.\n * @option options masterCredentials [AWS.Credentials] the master credentials\n * used to get and refresh temporary credentials from AWS STS. By default,\n * AWS.config.credentials or AWS.config.credentialProvider will be used.\n * @option options tokenCodeFn [Function] (null) Function to provide\n * `TokenCode`, if `SerialNumber` is provided for profile in {params}. Function\n * is called with value of `SerialNumber` and `callback`, and should provide\n * the `TokenCode` or an error to the callback in the format\n * `callback(err, token)`.\n * @example Creating a new credentials object for generic temporary credentials\n * AWS.config.credentials = new AWS.ChainableTemporaryCredentials();\n * @example Creating a new credentials object for an IAM role\n * AWS.config.credentials = new AWS.ChainableTemporaryCredentials({\n * params: {\n * RoleArn: 'arn:aws:iam::1234567890:role/TemporaryCredentials'\n * }\n * });\n * @see AWS.STS.assumeRole\n * @see AWS.STS.getSessionToken\n */\n constructor: function ChainableTemporaryCredentials(options) {\n AWS.Credentials.call(this);\n options = options || {};\n this.errorCode = 'ChainableTemporaryCredentialsProviderFailure';\n this.expired = true;\n this.tokenCodeFn = null;\n\n var params = AWS.util.copy(options.params) || {};\n if (params.RoleArn) {\n params.RoleSessionName = params.RoleSessionName || 'temporary-credentials';\n }\n if (params.SerialNumber) {\n if (!options.tokenCodeFn || (typeof options.tokenCodeFn !== 'function')) {\n throw new AWS.util.error(\n new Error('tokenCodeFn must be a function when params.SerialNumber is given'),\n {code: this.errorCode}\n );\n } else {\n this.tokenCodeFn = options.tokenCodeFn;\n }\n }\n var config = AWS.util.merge(\n {\n params: params,\n credentials: options.masterCredentials || AWS.config.credentials\n },\n options.stsConfig || {}\n );\n this.service = new STS(config);\n },\n\n /**\n * Refreshes credentials using {AWS.STS.assumeRole} or\n * {AWS.STS.getSessionToken}, depending on whether an IAM role ARN was passed\n * to the credentials {constructor}.\n *\n * @callback callback function(err)\n * Called when the STS service responds (or fails). When\n * this callback is called with no error, it means that the credentials\n * information has been loaded into the object (as the `accessKeyId`,\n * `secretAccessKey`, and `sessionToken` properties).\n * @param err [Error] if an error occurred, this value will be filled\n * @see AWS.Credentials.get\n */\n refresh: function refresh(callback) {\n this.coalesceRefresh(callback || AWS.util.fn.callback);\n },\n\n /**\n * @api private\n * @param callback\n */\n load: function load(callback) {\n var self = this;\n var operation = self.service.config.params.RoleArn ? 'assumeRole' : 'getSessionToken';\n this.getTokenCode(function (err, tokenCode) {\n var params = {};\n if (err) {\n callback(err);\n return;\n }\n if (tokenCode) {\n params.TokenCode = tokenCode;\n }\n self.service[operation](params, function (err, data) {\n if (!err) {\n self.service.credentialsFrom(data, self);\n }\n callback(err);\n });\n });\n },\n\n /**\n * @api private\n */\n getTokenCode: function getTokenCode(callback) {\n var self = this;\n if (this.tokenCodeFn) {\n this.tokenCodeFn(this.service.config.params.SerialNumber, function (err, token) {\n if (err) {\n var message = err;\n if (err instanceof Error) {\n message = err.message;\n }\n callback(\n AWS.util.error(\n new Error('Error fetching MFA token: ' + message),\n { code: self.errorCode}\n )\n );\n return;\n }\n callback(null, token);\n });\n } else {\n callback(null);\n }\n }\n});\n","var AWS = require('../core');\nvar CognitoIdentity = require('../../clients/cognitoidentity');\nvar STS = require('../../clients/sts');\n\n/**\n * Represents credentials retrieved from STS Web Identity Federation using\n * the Amazon Cognito Identity service.\n *\n * By default this provider gets credentials using the\n * {AWS.CognitoIdentity.getCredentialsForIdentity} service operation, which\n * requires either an `IdentityId` or an `IdentityPoolId` (Amazon Cognito\n * Identity Pool ID), which is used to call {AWS.CognitoIdentity.getId} to\n * obtain an `IdentityId`. If the identity or identity pool is not configured in\n * the Amazon Cognito Console to use IAM roles with the appropriate permissions,\n * then additionally a `RoleArn` is required containing the ARN of the IAM trust\n * policy for the Amazon Cognito role that the user will log into. If a `RoleArn`\n * is provided, then this provider gets credentials using the\n * {AWS.STS.assumeRoleWithWebIdentity} service operation, after first getting an\n * Open ID token from {AWS.CognitoIdentity.getOpenIdToken}.\n *\n * In addition, if this credential provider is used to provide authenticated\n * login, the `Logins` map may be set to the tokens provided by the respective\n * identity providers. See {constructor} for an example on creating a credentials\n * object with proper property values.\n *\n * ## Refreshing Credentials from Identity Service\n *\n * In addition to AWS credentials expiring after a given amount of time, the\n * login token from the identity provider will also expire. Once this token\n * expires, it will not be usable to refresh AWS credentials, and another\n * token will be needed. The SDK does not manage refreshing of the token value,\n * but this can be done through a \"refresh token\" supported by most identity\n * providers. Consult the documentation for the identity provider for refreshing\n * tokens. Once the refreshed token is acquired, you should make sure to update\n * this new token in the credentials object's {params} property. The following\n * code will update the WebIdentityToken, assuming you have retrieved an updated\n * token from the identity provider:\n *\n * ```javascript\n * AWS.config.credentials.params.Logins['graph.facebook.com'] = updatedToken;\n * ```\n *\n * Future calls to `credentials.refresh()` will now use the new token.\n *\n * @!attribute params\n * @return [map] the map of params passed to\n * {AWS.CognitoIdentity.getId},\n * {AWS.CognitoIdentity.getOpenIdToken}, and\n * {AWS.STS.assumeRoleWithWebIdentity}. To update the token, set the\n * `params.WebIdentityToken` property.\n * @!attribute data\n * @return [map] the raw data response from the call to\n * {AWS.CognitoIdentity.getCredentialsForIdentity}, or\n * {AWS.STS.assumeRoleWithWebIdentity}. Use this if you want to get\n * access to other properties from the response.\n * @!attribute identityId\n * @return [String] the Cognito ID returned by the last call to\n * {AWS.CognitoIdentity.getOpenIdToken}. This ID represents the actual\n * final resolved identity ID from Amazon Cognito.\n */\nAWS.CognitoIdentityCredentials = AWS.util.inherit(AWS.Credentials, {\n /**\n * @api private\n */\n localStorageKey: {\n id: 'aws.cognito.identity-id.',\n providers: 'aws.cognito.identity-providers.'\n },\n\n /**\n * Creates a new credentials object.\n * @example Creating a new credentials object\n * AWS.config.credentials = new AWS.CognitoIdentityCredentials({\n *\n * // either IdentityPoolId or IdentityId is required\n * // See the IdentityPoolId param for AWS.CognitoIdentity.getID (linked below)\n * // See the IdentityId param for AWS.CognitoIdentity.getCredentialsForIdentity\n * // or AWS.CognitoIdentity.getOpenIdToken (linked below)\n * IdentityPoolId: 'us-east-1:1699ebc0-7900-4099-b910-2df94f52a030',\n * IdentityId: 'us-east-1:128d0a74-c82f-4553-916d-90053e4a8b0f'\n *\n * // optional, only necessary when the identity pool is not configured\n * // to use IAM roles in the Amazon Cognito Console\n * // See the RoleArn param for AWS.STS.assumeRoleWithWebIdentity (linked below)\n * RoleArn: 'arn:aws:iam::1234567890:role/MYAPP-CognitoIdentity',\n *\n * // optional tokens, used for authenticated login\n * // See the Logins param for AWS.CognitoIdentity.getID (linked below)\n * Logins: {\n * 'graph.facebook.com': 'FBTOKEN',\n * 'www.amazon.com': 'AMAZONTOKEN',\n * 'accounts.google.com': 'GOOGLETOKEN',\n * 'api.twitter.com': 'TWITTERTOKEN',\n * 'www.digits.com': 'DIGITSTOKEN'\n * },\n *\n * // optional name, defaults to web-identity\n * // See the RoleSessionName param for AWS.STS.assumeRoleWithWebIdentity (linked below)\n * RoleSessionName: 'web',\n *\n * // optional, only necessary when application runs in a browser\n * // and multiple users are signed in at once, used for caching\n * LoginId: 'example@gmail.com'\n *\n * }, {\n * // optionally provide configuration to apply to the underlying service clients\n * // if configuration is not provided, then configuration will be pulled from AWS.config\n *\n * // region should match the region your identity pool is located in\n * region: 'us-east-1',\n *\n * // specify timeout options\n * httpOptions: {\n * timeout: 100\n * }\n * });\n * @see AWS.CognitoIdentity.getId\n * @see AWS.CognitoIdentity.getCredentialsForIdentity\n * @see AWS.STS.assumeRoleWithWebIdentity\n * @see AWS.CognitoIdentity.getOpenIdToken\n * @see AWS.Config\n * @note If a region is not provided in the global AWS.config, or\n * specified in the `clientConfig` to the CognitoIdentityCredentials\n * constructor, you may encounter a 'Missing credentials in config' error\n * when calling making a service call.\n */\n constructor: function CognitoIdentityCredentials(params, clientConfig) {\n AWS.Credentials.call(this);\n this.expired = true;\n this.params = params;\n this.data = null;\n this._identityId = null;\n this._clientConfig = AWS.util.copy(clientConfig || {});\n this.loadCachedId();\n var self = this;\n Object.defineProperty(this, 'identityId', {\n get: function() {\n self.loadCachedId();\n return self._identityId || self.params.IdentityId;\n },\n set: function(identityId) {\n self._identityId = identityId;\n }\n });\n },\n\n /**\n * Refreshes credentials using {AWS.CognitoIdentity.getCredentialsForIdentity},\n * or {AWS.STS.assumeRoleWithWebIdentity}.\n *\n * @callback callback function(err)\n * Called when the STS service responds (or fails). When\n * this callback is called with no error, it means that the credentials\n * information has been loaded into the object (as the `accessKeyId`,\n * `secretAccessKey`, and `sessionToken` properties).\n * @param err [Error] if an error occurred, this value will be filled\n * @see AWS.Credentials.get\n */\n refresh: function refresh(callback) {\n this.coalesceRefresh(callback || AWS.util.fn.callback);\n },\n\n /**\n * @api private\n * @param callback\n */\n load: function load(callback) {\n var self = this;\n self.createClients();\n self.data = null;\n self._identityId = null;\n self.getId(function(err) {\n if (!err) {\n if (!self.params.RoleArn) {\n self.getCredentialsForIdentity(callback);\n } else {\n self.getCredentialsFromSTS(callback);\n }\n } else {\n self.clearIdOnNotAuthorized(err);\n callback(err);\n }\n });\n },\n\n /**\n * Clears the cached Cognito ID associated with the currently configured\n * identity pool ID. Use this to manually invalidate your cache if\n * the identity pool ID was deleted.\n */\n clearCachedId: function clearCache() {\n this._identityId = null;\n delete this.params.IdentityId;\n\n var poolId = this.params.IdentityPoolId;\n var loginId = this.params.LoginId || '';\n delete this.storage[this.localStorageKey.id + poolId + loginId];\n delete this.storage[this.localStorageKey.providers + poolId + loginId];\n },\n\n /**\n * @api private\n */\n clearIdOnNotAuthorized: function clearIdOnNotAuthorized(err) {\n var self = this;\n if (err.code == 'NotAuthorizedException') {\n self.clearCachedId();\n }\n },\n\n /**\n * Retrieves a Cognito ID, loading from cache if it was already retrieved\n * on this device.\n *\n * @callback callback function(err, identityId)\n * @param err [Error, null] an error object if the call failed or null if\n * it succeeded.\n * @param identityId [String, null] if successful, the callback will return\n * the Cognito ID.\n * @note If not loaded explicitly, the Cognito ID is loaded and stored in\n * localStorage in the browser environment of a device.\n * @api private\n */\n getId: function getId(callback) {\n var self = this;\n if (typeof self.params.IdentityId === 'string') {\n return callback(null, self.params.IdentityId);\n }\n\n self.cognito.getId(function(err, data) {\n if (!err && data.IdentityId) {\n self.params.IdentityId = data.IdentityId;\n callback(null, data.IdentityId);\n } else {\n callback(err);\n }\n });\n },\n\n\n /**\n * @api private\n */\n loadCredentials: function loadCredentials(data, credentials) {\n if (!data || !credentials) return;\n credentials.expired = false;\n credentials.accessKeyId = data.Credentials.AccessKeyId;\n credentials.secretAccessKey = data.Credentials.SecretKey;\n credentials.sessionToken = data.Credentials.SessionToken;\n credentials.expireTime = data.Credentials.Expiration;\n },\n\n /**\n * @api private\n */\n getCredentialsForIdentity: function getCredentialsForIdentity(callback) {\n var self = this;\n self.cognito.getCredentialsForIdentity(function(err, data) {\n if (!err) {\n self.cacheId(data);\n self.data = data;\n self.loadCredentials(self.data, self);\n } else {\n self.clearIdOnNotAuthorized(err);\n }\n callback(err);\n });\n },\n\n /**\n * @api private\n */\n getCredentialsFromSTS: function getCredentialsFromSTS(callback) {\n var self = this;\n self.cognito.getOpenIdToken(function(err, data) {\n if (!err) {\n self.cacheId(data);\n self.params.WebIdentityToken = data.Token;\n self.webIdentityCredentials.refresh(function(webErr) {\n if (!webErr) {\n self.data = self.webIdentityCredentials.data;\n self.sts.credentialsFrom(self.data, self);\n }\n callback(webErr);\n });\n } else {\n self.clearIdOnNotAuthorized(err);\n callback(err);\n }\n });\n },\n\n /**\n * @api private\n */\n loadCachedId: function loadCachedId() {\n var self = this;\n\n // in the browser we source default IdentityId from localStorage\n if (AWS.util.isBrowser() && !self.params.IdentityId) {\n var id = self.getStorage('id');\n if (id && self.params.Logins) {\n var actualProviders = Object.keys(self.params.Logins);\n var cachedProviders =\n (self.getStorage('providers') || '').split(',');\n\n // only load ID if at least one provider used this ID before\n var intersect = cachedProviders.filter(function(n) {\n return actualProviders.indexOf(n) !== -1;\n });\n if (intersect.length !== 0) {\n self.params.IdentityId = id;\n }\n } else if (id) {\n self.params.IdentityId = id;\n }\n }\n },\n\n /**\n * @api private\n */\n createClients: function() {\n var clientConfig = this._clientConfig;\n this.webIdentityCredentials = this.webIdentityCredentials ||\n new AWS.WebIdentityCredentials(this.params, clientConfig);\n if (!this.cognito) {\n var cognitoConfig = AWS.util.merge({}, clientConfig);\n cognitoConfig.params = this.params;\n this.cognito = new CognitoIdentity(cognitoConfig);\n }\n this.sts = this.sts || new STS(clientConfig);\n },\n\n /**\n * @api private\n */\n cacheId: function cacheId(data) {\n this._identityId = data.IdentityId;\n this.params.IdentityId = this._identityId;\n\n // cache this IdentityId in browser localStorage if possible\n if (AWS.util.isBrowser()) {\n this.setStorage('id', data.IdentityId);\n\n if (this.params.Logins) {\n this.setStorage('providers', Object.keys(this.params.Logins).join(','));\n }\n }\n },\n\n /**\n * @api private\n */\n getStorage: function getStorage(key) {\n return this.storage[this.localStorageKey[key] + this.params.IdentityPoolId + (this.params.LoginId || '')];\n },\n\n /**\n * @api private\n */\n setStorage: function setStorage(key, val) {\n try {\n this.storage[this.localStorageKey[key] + this.params.IdentityPoolId + (this.params.LoginId || '')] = val;\n } catch (_) {}\n },\n\n /**\n * @api private\n */\n storage: (function() {\n try {\n var storage = AWS.util.isBrowser() && window.localStorage !== null && typeof window.localStorage === 'object' ?\n window.localStorage : {};\n\n // Test set/remove which would throw an error in Safari's private browsing\n storage['aws.test-storage'] = 'foobar';\n delete storage['aws.test-storage'];\n\n return storage;\n } catch (_) {\n return {};\n }\n })()\n});\n","var AWS = require('../core');\n\n/**\n * Creates a credential provider chain that searches for AWS credentials\n * in a list of credential providers specified by the {providers} property.\n *\n * By default, the chain will use the {defaultProviders} to resolve credentials.\n * These providers will look in the environment using the\n * {AWS.EnvironmentCredentials} class with the 'AWS' and 'AMAZON' prefixes.\n *\n * ## Setting Providers\n *\n * Each provider in the {providers} list should be a function that returns\n * a {AWS.Credentials} object, or a hardcoded credentials object. The function\n * form allows for delayed execution of the credential construction.\n *\n * ## Resolving Credentials from a Chain\n *\n * Call {resolve} to return the first valid credential object that can be\n * loaded by the provider chain.\n *\n * For example, to resolve a chain with a custom provider that checks a file\n * on disk after the set of {defaultProviders}:\n *\n * ```javascript\n * var diskProvider = new AWS.FileSystemCredentials('./creds.json');\n * var chain = new AWS.CredentialProviderChain();\n * chain.providers.push(diskProvider);\n * chain.resolve();\n * ```\n *\n * The above code will return the `diskProvider` object if the\n * file contains credentials and the `defaultProviders` do not contain\n * any credential settings.\n *\n * @!attribute providers\n * @return [Array<AWS.Credentials, Function>]\n * a list of credentials objects or functions that return credentials\n * objects. If the provider is a function, the function will be\n * executed lazily when the provider needs to be checked for valid\n * credentials. By default, this object will be set to the\n * {defaultProviders}.\n * @see defaultProviders\n */\nAWS.CredentialProviderChain = AWS.util.inherit(AWS.Credentials, {\n\n /**\n * Creates a new CredentialProviderChain with a default set of providers\n * specified by {defaultProviders}.\n */\n constructor: function CredentialProviderChain(providers) {\n if (providers) {\n this.providers = providers;\n } else {\n this.providers = AWS.CredentialProviderChain.defaultProviders.slice(0);\n }\n this.resolveCallbacks = [];\n },\n\n /**\n * @!method resolvePromise()\n * Returns a 'thenable' promise.\n * Resolves the provider chain by searching for the first set of\n * credentials in {providers}.\n *\n * Two callbacks can be provided to the `then` method on the returned promise.\n * The first callback will be called if the promise is fulfilled, and the second\n * callback will be called if the promise is rejected.\n * @callback fulfilledCallback function(credentials)\n * Called if the promise is fulfilled and the provider resolves the chain\n * to a credentials object\n * @param credentials [AWS.Credentials] the credentials object resolved\n * by the provider chain.\n * @callback rejectedCallback function(error)\n * Called if the promise is rejected.\n * @param err [Error] the error object returned if no credentials are found.\n * @return [Promise] A promise that represents the state of the `resolve` method call.\n * @example Calling the `resolvePromise` method.\n * var promise = chain.resolvePromise();\n * promise.then(function(credentials) { ... }, function(err) { ... });\n */\n\n /**\n * Resolves the provider chain by searching for the first set of\n * credentials in {providers}.\n *\n * @callback callback function(err, credentials)\n * Called when the provider resolves the chain to a credentials object\n * or null if no credentials can be found.\n *\n * @param err [Error] the error object returned if no credentials are\n * found.\n * @param credentials [AWS.Credentials] the credentials object resolved\n * by the provider chain.\n * @return [AWS.CredentialProviderChain] the provider, for chaining.\n */\n resolve: function resolve(callback) {\n var self = this;\n if (self.providers.length === 0) {\n callback(new Error('No providers'));\n return self;\n }\n\n if (self.resolveCallbacks.push(callback) === 1) {\n var index = 0;\n var providers = self.providers.slice(0);\n\n function resolveNext(err, creds) {\n if ((!err && creds) || index === providers.length) {\n AWS.util.arrayEach(self.resolveCallbacks, function (callback) {\n callback(err, creds);\n });\n self.resolveCallbacks.length = 0;\n return;\n }\n\n var provider = providers[index++];\n if (typeof provider === 'function') {\n creds = provider.call();\n } else {\n creds = provider;\n }\n\n if (creds.get) {\n creds.get(function (getErr) {\n resolveNext(getErr, getErr ? null : creds);\n });\n } else {\n resolveNext(null, creds);\n }\n }\n\n resolveNext();\n }\n\n return self;\n }\n});\n\n/**\n * The default set of providers used by a vanilla CredentialProviderChain.\n *\n * In the browser:\n *\n * ```javascript\n * AWS.CredentialProviderChain.defaultProviders = []\n * ```\n *\n * In Node.js:\n *\n * ```javascript\n * AWS.CredentialProviderChain.defaultProviders = [\n * function () { return new AWS.EnvironmentCredentials('AWS'); },\n * function () { return new AWS.EnvironmentCredentials('AMAZON'); },\n * function () { return new AWS.SharedIniFileCredentials(); },\n * function () { return new AWS.ECSCredentials(); },\n * function () { return new AWS.ProcessCredentials(); },\n * function () { return new AWS.TokenFileWebIdentityCredentials(); },\n * function () { return new AWS.EC2MetadataCredentials() }\n * ]\n * ```\n */\nAWS.CredentialProviderChain.defaultProviders = [];\n\n/**\n * @api private\n */\nAWS.CredentialProviderChain.addPromisesToClass = function addPromisesToClass(PromiseDependency) {\n this.prototype.resolvePromise = AWS.util.promisifyMethod('resolve', PromiseDependency);\n};\n\n/**\n * @api private\n */\nAWS.CredentialProviderChain.deletePromisesFromClass = function deletePromisesFromClass() {\n delete this.prototype.resolvePromise;\n};\n\nAWS.util.addPromises(AWS.CredentialProviderChain);\n","var AWS = require('../core');\nrequire('../metadata_service');\n\n/**\n * Represents credentials received from the metadata service on an EC2 instance.\n *\n * By default, this class will connect to the metadata service using\n * {AWS.MetadataService} and attempt to load any available credentials. If it\n * can connect, and credentials are available, these will be used with zero\n * configuration.\n *\n * This credentials class will by default timeout after 1 second of inactivity\n * and retry 3 times.\n * If your requests to the EC2 metadata service are timing out, you can increase\n * these values by configuring them directly:\n *\n * ```javascript\n * AWS.config.credentials = new AWS.EC2MetadataCredentials({\n * httpOptions: { timeout: 5000 }, // 5 second timeout\n * maxRetries: 10, // retry 10 times\n * retryDelayOptions: { base: 200 } // see AWS.Config for information\n * });\n *\n * If your requests are timing out in connecting to the metadata service, such\n * as when testing on a development machine, you can use the connectTimeout\n * option, specified in milliseconds, which also defaults to 1 second.\n * ```\n *\n * @see AWS.Config.retryDelayOptions\n *\n * @!macro nobrowser\n */\nAWS.EC2MetadataCredentials = AWS.util.inherit(AWS.Credentials, {\n constructor: function EC2MetadataCredentials(options) {\n AWS.Credentials.call(this);\n\n options = options ? AWS.util.copy(options) : {};\n options = AWS.util.merge(\n {maxRetries: this.defaultMaxRetries}, options);\n if (!options.httpOptions) options.httpOptions = {};\n options.httpOptions = AWS.util.merge(\n {timeout: this.defaultTimeout,\n connectTimeout: this.defaultConnectTimeout},\n options.httpOptions);\n\n this.metadataService = new AWS.MetadataService(options);\n this.metadata = {};\n },\n\n /**\n * @api private\n */\n defaultTimeout: 1000,\n\n /**\n * @api private\n */\n defaultConnectTimeout: 1000,\n\n /**\n * @api private\n */\n defaultMaxRetries: 3,\n\n /**\n * Loads the credentials from the instance metadata service\n *\n * @callback callback function(err)\n * Called when the instance metadata service responds (or fails). When\n * this callback is called with no error, it means that the credentials\n * information has been loaded into the object (as the `accessKeyId`,\n * `secretAccessKey`, and `sessionToken` properties).\n * @param err [Error] if an error occurred, this value will be filled\n * @see get\n */\n refresh: function refresh(callback) {\n this.coalesceRefresh(callback || AWS.util.fn.callback);\n },\n\n /**\n * @api private\n * @param callback\n */\n load: function load(callback) {\n var self = this;\n self.metadataService.loadCredentials(function(err, creds) {\n if (!err) {\n var currentTime = AWS.util.date.getDate();\n var expireTime = new Date(creds.Expiration);\n if (expireTime < currentTime) {\n err = AWS.util.error(\n new Error('EC2 Instance Metadata Serivce provided expired credentials'),\n { code: 'EC2MetadataCredentialsProviderFailure' }\n );\n } else {\n self.expired = false;\n self.metadata = creds;\n self.accessKeyId = creds.AccessKeyId;\n self.secretAccessKey = creds.SecretAccessKey;\n self.sessionToken = creds.Token;\n self.expireTime = expireTime;\n }\n }\n callback(err);\n });\n }\n});\n","var AWS = require('../core');\n\n/**\n * Represents credentials received from relative URI specified in the ECS container.\n *\n * This class will request refreshable credentials from the relative URI\n * specified by the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI or the\n * AWS_CONTAINER_CREDENTIALS_FULL_URI environment variable. If valid credentials\n * are returned in the response, these will be used with zero configuration.\n *\n * This credentials class will by default timeout after 1 second of inactivity\n * and retry 3 times.\n * If your requests to the relative URI are timing out, you can increase\n * the value by configuring them directly:\n *\n * ```javascript\n * AWS.config.credentials = new AWS.ECSCredentials({\n * httpOptions: { timeout: 5000 }, // 5 second timeout\n * maxRetries: 10, // retry 10 times\n * retryDelayOptions: { base: 200 } // see AWS.Config for information\n * });\n * ```\n *\n * @see AWS.Config.retryDelayOptions\n *\n * @!macro nobrowser\n */\nAWS.ECSCredentials = AWS.RemoteCredentials;\n","var AWS = require('../core');\n\n/**\n * Represents credentials from the environment.\n *\n * By default, this class will look for the matching environment variables\n * prefixed by a given {envPrefix}. The un-prefixed environment variable names\n * for each credential value is listed below:\n *\n * ```javascript\n * accessKeyId: ACCESS_KEY_ID\n * secretAccessKey: SECRET_ACCESS_KEY\n * sessionToken: SESSION_TOKEN\n * ```\n *\n * With the default prefix of 'AWS', the environment variables would be:\n *\n * AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN\n *\n * @!attribute envPrefix\n * @readonly\n * @return [String] the prefix for the environment variable names excluding\n * the separating underscore ('_').\n */\nAWS.EnvironmentCredentials = AWS.util.inherit(AWS.Credentials, {\n\n /**\n * Creates a new EnvironmentCredentials class with a given variable\n * prefix {envPrefix}. For example, to load credentials using the 'AWS'\n * prefix:\n *\n * ```javascript\n * var creds = new AWS.EnvironmentCredentials('AWS');\n * creds.accessKeyId == 'AKID' // from AWS_ACCESS_KEY_ID env var\n * ```\n *\n * @param envPrefix [String] the prefix to use (e.g., 'AWS') for environment\n * variables. Do not include the separating underscore.\n */\n constructor: function EnvironmentCredentials(envPrefix) {\n AWS.Credentials.call(this);\n this.envPrefix = envPrefix;\n this.get(function() {});\n },\n\n /**\n * Loads credentials from the environment using the prefixed\n * environment variables.\n *\n * @callback callback function(err)\n * Called after the (prefixed) ACCESS_KEY_ID, SECRET_ACCESS_KEY, and\n * SESSION_TOKEN environment variables are read. When this callback is\n * called with no error, it means that the credentials information has\n * been loaded into the object (as the `accessKeyId`, `secretAccessKey`,\n * and `sessionToken` properties).\n * @param err [Error] if an error occurred, this value will be filled\n * @see get\n */\n refresh: function refresh(callback) {\n if (!callback) callback = AWS.util.fn.callback;\n\n if (!process || !process.env) {\n callback(AWS.util.error(\n new Error('No process info or environment variables available'),\n { code: 'EnvironmentCredentialsProviderFailure' }\n ));\n return;\n }\n\n var keys = ['ACCESS_KEY_ID', 'SECRET_ACCESS_KEY', 'SESSION_TOKEN'];\n var values = [];\n\n for (var i = 0; i < keys.length; i++) {\n var prefix = '';\n if (this.envPrefix) prefix = this.envPrefix + '_';\n values[i] = process.env[prefix + keys[i]];\n if (!values[i] && keys[i] !== 'SESSION_TOKEN') {\n callback(AWS.util.error(\n new Error('Variable ' + prefix + keys[i] + ' not set.'),\n { code: 'EnvironmentCredentialsProviderFailure' }\n ));\n return;\n }\n }\n\n this.expired = false;\n AWS.Credentials.apply(this, values);\n callback();\n }\n\n});\n","var AWS = require('../core');\n\n/**\n * Represents credentials from a JSON file on disk.\n * If the credentials expire, the SDK can {refresh} the credentials\n * from the file.\n *\n * The format of the file should be similar to the options passed to\n * {AWS.Config}:\n *\n * ```javascript\n * {accessKeyId: 'akid', secretAccessKey: 'secret', sessionToken: 'optional'}\n * ```\n *\n * @example Loading credentials from disk\n * var creds = new AWS.FileSystemCredentials('./configuration.json');\n * creds.accessKeyId == 'AKID'\n *\n * @!attribute filename\n * @readonly\n * @return [String] the path to the JSON file on disk containing the\n * credentials.\n * @!macro nobrowser\n */\nAWS.FileSystemCredentials = AWS.util.inherit(AWS.Credentials, {\n\n /**\n * @overload AWS.FileSystemCredentials(filename)\n * Creates a new FileSystemCredentials object from a filename\n *\n * @param filename [String] the path on disk to the JSON file to load.\n */\n constructor: function FileSystemCredentials(filename) {\n AWS.Credentials.call(this);\n this.filename = filename;\n this.get(function() {});\n },\n\n /**\n * Loads the credentials from the {filename} on disk.\n *\n * @callback callback function(err)\n * Called after the JSON file on disk is read and parsed. When this callback\n * is called with no error, it means that the credentials information\n * has been loaded into the object (as the `accessKeyId`, `secretAccessKey`,\n * and `sessionToken` properties).\n * @param err [Error] if an error occurred, this value will be filled\n * @see get\n */\n refresh: function refresh(callback) {\n if (!callback) callback = AWS.util.fn.callback;\n try {\n var creds = JSON.parse(AWS.util.readFileSync(this.filename));\n AWS.Credentials.call(this, creds);\n if (!this.accessKeyId || !this.secretAccessKey) {\n throw AWS.util.error(\n new Error('Credentials not set in ' + this.filename),\n { code: 'FileSystemCredentialsProviderFailure' }\n );\n }\n this.expired = false;\n callback();\n } catch (err) {\n callback(err);\n }\n }\n\n});\n","var AWS = require('../core');\nvar proc = require('child_process');\nvar iniLoader = AWS.util.iniLoader;\n\n/**\n * Represents credentials loaded from shared credentials file\n * (defaulting to ~/.aws/credentials or defined by the\n * `AWS_SHARED_CREDENTIALS_FILE` environment variable).\n *\n * ## Using process credentials\n *\n * The credentials file can specify a credential provider that executes\n * a given process and attempts to read its stdout to recieve a JSON payload\n * containing the credentials:\n *\n * [default]\n * credential_process = /usr/bin/credential_proc\n *\n * Automatically handles refreshing credentials if an Expiration time is\n * provided in the credentials payload. Credentials supplied in the same profile\n * will take precedence over the credential_process.\n *\n * Sourcing credentials from an external process can potentially be dangerous,\n * so proceed with caution. Other credential providers should be preferred if\n * at all possible. If using this option, you should make sure that the shared\n * credentials file is as locked down as possible using security best practices\n * for your operating system.\n *\n * ## Using custom profiles\n *\n * The SDK supports loading credentials for separate profiles. This can be done\n * in two ways:\n *\n * 1. Set the `AWS_PROFILE` environment variable in your process prior to\n * loading the SDK.\n * 2. Directly load the AWS.ProcessCredentials provider:\n *\n * ```javascript\n * var creds = new AWS.ProcessCredentials({profile: 'myprofile'});\n * AWS.config.credentials = creds;\n * ```\n *\n * @!macro nobrowser\n */\nAWS.ProcessCredentials = AWS.util.inherit(AWS.Credentials, {\n /**\n * Creates a new ProcessCredentials object.\n *\n * @param options [map] a set of options\n * @option options profile [String] (AWS_PROFILE env var or 'default')\n * the name of the profile to load.\n * @option options filename [String] ('~/.aws/credentials' or defined by\n * AWS_SHARED_CREDENTIALS_FILE process env var)\n * the filename to use when loading credentials.\n * @option options callback [Function] (err) Credentials are eagerly loaded\n * by the constructor. When the callback is called with no error, the\n * credentials have been loaded successfully.\n */\n constructor: function ProcessCredentials(options) {\n AWS.Credentials.call(this);\n\n options = options || {};\n\n this.filename = options.filename;\n this.profile = options.profile || process.env.AWS_PROFILE || AWS.util.defaultProfile;\n this.get(options.callback || AWS.util.fn.noop);\n },\n\n /**\n * @api private\n */\n load: function load(callback) {\n var self = this;\n try {\n var profiles = AWS.util.getProfilesFromSharedConfig(iniLoader, this.filename);\n var profile = profiles[this.profile] || {};\n\n if (Object.keys(profile).length === 0) {\n throw AWS.util.error(\n new Error('Profile ' + this.profile + ' not found'),\n { code: 'ProcessCredentialsProviderFailure' }\n );\n }\n\n if (profile['credential_process']) {\n this.loadViaCredentialProcess(profile, function(err, data) {\n if (err) {\n callback(err, null);\n } else {\n self.expired = false;\n self.accessKeyId = data.AccessKeyId;\n self.secretAccessKey = data.SecretAccessKey;\n self.sessionToken = data.SessionToken;\n if (data.Expiration) {\n self.expireTime = new Date(data.Expiration);\n }\n callback(null);\n }\n });\n } else {\n throw AWS.util.error(\n new Error('Profile ' + this.profile + ' did not include credential process'),\n { code: 'ProcessCredentialsProviderFailure' }\n );\n }\n } catch (err) {\n callback(err);\n }\n },\n\n /**\n * Executes the credential_process and retrieves\n * credentials from the output\n * @api private\n * @param profile [map] credentials profile\n * @throws ProcessCredentialsProviderFailure\n */\n loadViaCredentialProcess: function loadViaCredentialProcess(profile, callback) {\n proc.exec(profile['credential_process'], function(err, stdOut, stdErr) {\n if (err) {\n callback(AWS.util.error(\n new Error('credential_process returned error'),\n { code: 'ProcessCredentialsProviderFailure'}\n ), null);\n } else {\n try {\n var credData = JSON.parse(stdOut);\n if (credData.Expiration) {\n var currentTime = AWS.util.date.getDate();\n var expireTime = new Date(credData.Expiration);\n if (expireTime < currentTime) {\n throw Error('credential_process returned expired credentials');\n }\n }\n\n if (credData.Version !== 1) {\n throw Error('credential_process does not return Version == 1');\n }\n callback(null, credData);\n } catch (err) {\n callback(AWS.util.error(\n new Error(err.message),\n { code: 'ProcessCredentialsProviderFailure'}\n ), null);\n }\n }\n });\n },\n\n /**\n * Loads the credentials from the credential process\n *\n * @callback callback function(err)\n * Called after the credential process has been executed. When this\n * callback is called with no error, it means that the credentials\n * information has been loaded into the object (as the `accessKeyId`,\n * `secretAccessKey`, and `sessionToken` properties).\n * @param err [Error] if an error occurred, this value will be filled\n * @see get\n */\n refresh: function refresh(callback) {\n iniLoader.clearCachedFiles();\n this.coalesceRefresh(callback || AWS.util.fn.callback);\n }\n});\n","var AWS = require('../core'),\n ENV_RELATIVE_URI = 'AWS_CONTAINER_CREDENTIALS_RELATIVE_URI',\n ENV_FULL_URI = 'AWS_CONTAINER_CREDENTIALS_FULL_URI',\n ENV_AUTH_TOKEN = 'AWS_CONTAINER_AUTHORIZATION_TOKEN',\n FULL_URI_UNRESTRICTED_PROTOCOLS = ['https:'],\n FULL_URI_ALLOWED_PROTOCOLS = ['http:', 'https:'],\n FULL_URI_ALLOWED_HOSTNAMES = ['localhost', '127.0.0.1'],\n RELATIVE_URI_HOST = '169.254.170.2';\n\n/**\n * Represents credentials received from specified URI.\n *\n * This class will request refreshable credentials from the relative URI\n * specified by the AWS_CONTAINER_CREDENTIALS_RELATIVE_URI or the\n * AWS_CONTAINER_CREDENTIALS_FULL_URI environment variable. If valid credentials\n * are returned in the response, these will be used with zero configuration.\n *\n * This credentials class will by default timeout after 1 second of inactivity\n * and retry 3 times.\n * If your requests to the relative URI are timing out, you can increase\n * the value by configuring them directly:\n *\n * ```javascript\n * AWS.config.credentials = new AWS.RemoteCredentials({\n * httpOptions: { timeout: 5000 }, // 5 second timeout\n * maxRetries: 10, // retry 10 times\n * retryDelayOptions: { base: 200 } // see AWS.Config for information\n * });\n * ```\n *\n * @see AWS.Config.retryDelayOptions\n *\n * @!macro nobrowser\n */\nAWS.RemoteCredentials = AWS.util.inherit(AWS.Credentials, {\n constructor: function RemoteCredentials(options) {\n AWS.Credentials.call(this);\n options = options ? AWS.util.copy(options) : {};\n if (!options.httpOptions) options.httpOptions = {};\n options.httpOptions = AWS.util.merge(\n this.httpOptions, options.httpOptions);\n AWS.util.update(this, options);\n },\n\n /**\n * @api private\n */\n httpOptions: { timeout: 1000 },\n\n /**\n * @api private\n */\n maxRetries: 3,\n\n /**\n * @api private\n */\n isConfiguredForEcsCredentials: function isConfiguredForEcsCredentials() {\n return Boolean(\n process &&\n process.env &&\n (process.env[ENV_RELATIVE_URI] || process.env[ENV_FULL_URI])\n );\n },\n\n /**\n * @api private\n */\n getECSFullUri: function getECSFullUri() {\n if (process && process.env) {\n var relative = process.env[ENV_RELATIVE_URI],\n full = process.env[ENV_FULL_URI];\n if (relative) {\n return 'http://' + RELATIVE_URI_HOST + relative;\n } else if (full) {\n var parsed = AWS.util.urlParse(full);\n if (FULL_URI_ALLOWED_PROTOCOLS.indexOf(parsed.protocol) < 0) {\n throw AWS.util.error(\n new Error('Unsupported protocol: AWS.RemoteCredentials supports '\n + FULL_URI_ALLOWED_PROTOCOLS.join(',') + ' only; '\n + parsed.protocol + ' requested.'),\n { code: 'ECSCredentialsProviderFailure' }\n );\n }\n\n if (FULL_URI_UNRESTRICTED_PROTOCOLS.indexOf(parsed.protocol) < 0 &&\n FULL_URI_ALLOWED_HOSTNAMES.indexOf(parsed.hostname) < 0) {\n throw AWS.util.error(\n new Error('Unsupported hostname: AWS.RemoteCredentials only supports '\n + FULL_URI_ALLOWED_HOSTNAMES.join(',') + ' for ' + parsed.protocol + '; '\n + parsed.protocol + '//' + parsed.hostname + ' requested.'),\n { code: 'ECSCredentialsProviderFailure' }\n );\n }\n\n return full;\n } else {\n throw AWS.util.error(\n new Error('Variable ' + ENV_RELATIVE_URI + ' or ' + ENV_FULL_URI +\n ' must be set to use AWS.RemoteCredentials.'),\n { code: 'ECSCredentialsProviderFailure' }\n );\n }\n } else {\n throw AWS.util.error(\n new Error('No process info available'),\n { code: 'ECSCredentialsProviderFailure' }\n );\n }\n },\n\n /**\n * @api private\n */\n getECSAuthToken: function getECSAuthToken() {\n if (process && process.env && process.env[ENV_FULL_URI]) {\n return process.env[ENV_AUTH_TOKEN];\n }\n },\n\n /**\n * @api private\n */\n credsFormatIsValid: function credsFormatIsValid(credData) {\n return (!!credData.accessKeyId && !!credData.secretAccessKey &&\n !!credData.sessionToken && !!credData.expireTime);\n },\n\n /**\n * @api private\n */\n formatCreds: function formatCreds(credData) {\n if (!!credData.credentials) {\n credData = credData.credentials;\n }\n\n return {\n expired: false,\n accessKeyId: credData.accessKeyId || credData.AccessKeyId,\n secretAccessKey: credData.secretAccessKey || credData.SecretAccessKey,\n sessionToken: credData.sessionToken || credData.Token,\n expireTime: new Date(credData.expiration || credData.Expiration)\n };\n },\n\n /**\n * @api private\n */\n request: function request(url, callback) {\n var httpRequest = new AWS.HttpRequest(url);\n httpRequest.method = 'GET';\n httpRequest.headers.Accept = 'application/json';\n var token = this.getECSAuthToken();\n if (token) {\n httpRequest.headers.Authorization = token;\n }\n AWS.util.handleRequestWithRetries(httpRequest, this, callback);\n },\n\n /**\n * Loads the credentials from the relative URI specified by container\n *\n * @callback callback function(err)\n * Called when the request to the relative URI responds (or fails). When\n * this callback is called with no error, it means that the credentials\n * information has been loaded into the object (as the `accessKeyId`,\n * `secretAccessKey`, `sessionToken`, and `expireTime` properties).\n * @param err [Error] if an error occurred, this value will be filled\n * @see get\n */\n refresh: function refresh(callback) {\n this.coalesceRefresh(callback || AWS.util.fn.callback);\n },\n\n /**\n * @api private\n */\n load: function load(callback) {\n var self = this;\n var fullUri;\n\n try {\n fullUri = this.getECSFullUri();\n } catch (err) {\n callback(err);\n return;\n }\n\n this.request(fullUri, function(err, data) {\n if (!err) {\n try {\n data = JSON.parse(data);\n var creds = self.formatCreds(data);\n if (!self.credsFormatIsValid(creds)) {\n throw AWS.util.error(\n new Error('Response data is not in valid format'),\n { code: 'ECSCredentialsProviderFailure' }\n );\n }\n AWS.util.update(self, creds);\n } catch (dataError) {\n err = dataError;\n }\n }\n callback(err, creds);\n });\n }\n});\n","var AWS = require('../core');\nvar STS = require('../../clients/sts');\n\n/**\n * Represents credentials retrieved from STS SAML support.\n *\n * By default this provider gets credentials using the\n * {AWS.STS.assumeRoleWithSAML} service operation. This operation\n * requires a `RoleArn` containing the ARN of the IAM trust policy for the\n * application for which credentials will be given, as well as a `PrincipalArn`\n * representing the ARN for the SAML identity provider. In addition, the\n * `SAMLAssertion` must be set to the token provided by the identity\n * provider. See {constructor} for an example on creating a credentials\n * object with proper `RoleArn`, `PrincipalArn`, and `SAMLAssertion` values.\n *\n * ## Refreshing Credentials from Identity Service\n *\n * In addition to AWS credentials expiring after a given amount of time, the\n * login token from the identity provider will also expire. Once this token\n * expires, it will not be usable to refresh AWS credentials, and another\n * token will be needed. The SDK does not manage refreshing of the token value,\n * but this can be done through a \"refresh token\" supported by most identity\n * providers. Consult the documentation for the identity provider for refreshing\n * tokens. Once the refreshed token is acquired, you should make sure to update\n * this new token in the credentials object's {params} property. The following\n * code will update the SAMLAssertion, assuming you have retrieved an updated\n * token from the identity provider:\n *\n * ```javascript\n * AWS.config.credentials.params.SAMLAssertion = updatedToken;\n * ```\n *\n * Future calls to `credentials.refresh()` will now use the new token.\n *\n * @!attribute params\n * @return [map] the map of params passed to\n * {AWS.STS.assumeRoleWithSAML}. To update the token, set the\n * `params.SAMLAssertion` property.\n */\nAWS.SAMLCredentials = AWS.util.inherit(AWS.Credentials, {\n /**\n * Creates a new credentials object.\n * @param (see AWS.STS.assumeRoleWithSAML)\n * @example Creating a new credentials object\n * AWS.config.credentials = new AWS.SAMLCredentials({\n * RoleArn: 'arn:aws:iam::1234567890:role/SAMLRole',\n * PrincipalArn: 'arn:aws:iam::1234567890:role/SAMLPrincipal',\n * SAMLAssertion: 'base64-token', // base64-encoded token from IdP\n * });\n * @see AWS.STS.assumeRoleWithSAML\n */\n constructor: function SAMLCredentials(params) {\n AWS.Credentials.call(this);\n this.expired = true;\n this.params = params;\n },\n\n /**\n * Refreshes credentials using {AWS.STS.assumeRoleWithSAML}\n *\n * @callback callback function(err)\n * Called when the STS service responds (or fails). When\n * this callback is called with no error, it means that the credentials\n * information has been loaded into the object (as the `accessKeyId`,\n * `secretAccessKey`, and `sessionToken` properties).\n * @param err [Error] if an error occurred, this value will be filled\n * @see get\n */\n refresh: function refresh(callback) {\n this.coalesceRefresh(callback || AWS.util.fn.callback);\n },\n\n /**\n * @api private\n */\n load: function load(callback) {\n var self = this;\n self.createClients();\n self.service.assumeRoleWithSAML(function (err, data) {\n if (!err) {\n self.service.credentialsFrom(data, self);\n }\n callback(err);\n });\n },\n\n /**\n * @api private\n */\n createClients: function() {\n this.service = this.service || new STS({params: this.params});\n }\n\n});\n","var AWS = require('../core');\nvar STS = require('../../clients/sts');\nvar iniLoader = AWS.util.iniLoader;\n\nvar ASSUME_ROLE_DEFAULT_REGION = 'us-east-1';\n\n/**\n * Represents credentials loaded from shared credentials file\n * (defaulting to ~/.aws/credentials or defined by the\n * `AWS_SHARED_CREDENTIALS_FILE` environment variable).\n *\n * ## Using the shared credentials file\n *\n * This provider is checked by default in the Node.js environment. To use the\n * credentials file provider, simply add your access and secret keys to the\n * ~/.aws/credentials file in the following format:\n *\n * [default]\n * aws_access_key_id = AKID...\n * aws_secret_access_key = YOUR_SECRET_KEY\n *\n * ## Using custom profiles\n *\n * The SDK supports loading credentials for separate profiles. This can be done\n * in two ways:\n *\n * 1. Set the `AWS_PROFILE` environment variable in your process prior to\n * loading the SDK.\n * 2. Directly load the AWS.SharedIniFileCredentials provider:\n *\n * ```javascript\n * var creds = new AWS.SharedIniFileCredentials({profile: 'myprofile'});\n * AWS.config.credentials = creds;\n * ```\n *\n * @!macro nobrowser\n */\nAWS.SharedIniFileCredentials = AWS.util.inherit(AWS.Credentials, {\n /**\n * Creates a new SharedIniFileCredentials object.\n *\n * @param options [map] a set of options\n * @option options profile [String] (AWS_PROFILE env var or 'default')\n * the name of the profile to load.\n * @option options filename [String] ('~/.aws/credentials' or defined by\n * AWS_SHARED_CREDENTIALS_FILE process env var)\n * the filename to use when loading credentials.\n * @option options disableAssumeRole [Boolean] (false) True to disable\n * support for profiles that assume an IAM role. If true, and an assume\n * role profile is selected, an error is raised.\n * @option options preferStaticCredentials [Boolean] (false) True to\n * prefer static credentials to role_arn if both are present.\n * @option options tokenCodeFn [Function] (null) Function to provide\n * STS Assume Role TokenCode, if mfa_serial is provided for profile in ini\n * file. Function is called with value of mfa_serial and callback, and\n * should provide the TokenCode or an error to the callback in the format\n * callback(err, token)\n * @option options callback [Function] (err) Credentials are eagerly loaded\n * by the constructor. When the callback is called with no error, the\n * credentials have been loaded successfully.\n * @option options httpOptions [map] A set of options to pass to the low-level\n * HTTP request. Currently supported options are:\n * * **proxy** [String] — the URL to proxy requests through\n * * **agent** [http.Agent, https.Agent] — the Agent object to perform\n * HTTP requests with. Used for connection pooling. Defaults to the global\n * agent (`http.globalAgent`) for non-SSL connections. Note that for\n * SSL connections, a special Agent object is used in order to enable\n * peer certificate verification. This feature is only available in the\n * Node.js environment.\n * * **connectTimeout** [Integer] — Sets the socket to timeout after\n * failing to establish a connection with the server after\n * `connectTimeout` milliseconds. This timeout has no effect once a socket\n * connection has been established.\n * * **timeout** [Integer] — The number of milliseconds a request can\n * take before automatically being terminated.\n * Defaults to two minutes (120000).\n */\n constructor: function SharedIniFileCredentials(options) {\n AWS.Credentials.call(this);\n\n options = options || {};\n\n this.filename = options.filename;\n this.profile = options.profile || process.env.AWS_PROFILE || AWS.util.defaultProfile;\n this.disableAssumeRole = Boolean(options.disableAssumeRole);\n this.preferStaticCredentials = Boolean(options.preferStaticCredentials);\n this.tokenCodeFn = options.tokenCodeFn || null;\n this.httpOptions = options.httpOptions || null;\n this.get(options.callback || AWS.util.fn.noop);\n },\n\n /**\n * @api private\n */\n load: function load(callback) {\n var self = this;\n try {\n var profiles = AWS.util.getProfilesFromSharedConfig(iniLoader, this.filename);\n var profile = profiles[this.profile] || {};\n\n if (Object.keys(profile).length === 0) {\n throw AWS.util.error(\n new Error('Profile ' + this.profile + ' not found'),\n { code: 'SharedIniFileCredentialsProviderFailure' }\n );\n }\n\n /*\n In the CLI, the presence of both a role_arn and static credentials have\n different meanings depending on how many profiles have been visited. For\n the first profile processed, role_arn takes precedence over any static\n credentials, but for all subsequent profiles, static credentials are\n used if present, and only in their absence will the profile's\n source_profile and role_arn keys be used to load another set of\n credentials. This var is intended to yield compatible behaviour in this\n sdk.\n */\n var preferStaticCredentialsToRoleArn = Boolean(\n this.preferStaticCredentials\n && profile['aws_access_key_id']\n && profile['aws_secret_access_key']\n );\n\n if (profile['role_arn'] && !preferStaticCredentialsToRoleArn) {\n this.loadRoleProfile(profiles, profile, function(err, data) {\n if (err) {\n callback(err);\n } else {\n self.expired = false;\n self.accessKeyId = data.Credentials.AccessKeyId;\n self.secretAccessKey = data.Credentials.SecretAccessKey;\n self.sessionToken = data.Credentials.SessionToken;\n self.expireTime = data.Credentials.Expiration;\n callback(null);\n }\n });\n return;\n }\n\n this.accessKeyId = profile['aws_access_key_id'];\n this.secretAccessKey = profile['aws_secret_access_key'];\n this.sessionToken = profile['aws_session_token'];\n\n if (!this.accessKeyId || !this.secretAccessKey) {\n throw AWS.util.error(\n new Error('Credentials not set for profile ' + this.profile),\n { code: 'SharedIniFileCredentialsProviderFailure' }\n );\n }\n this.expired = false;\n callback(null);\n } catch (err) {\n callback(err);\n }\n },\n\n /**\n * Loads the credentials from the shared credentials file\n *\n * @callback callback function(err)\n * Called after the shared INI file on disk is read and parsed. When this\n * callback is called with no error, it means that the credentials\n * information has been loaded into the object (as the `accessKeyId`,\n * `secretAccessKey`, and `sessionToken` properties).\n * @param err [Error] if an error occurred, this value will be filled\n * @see get\n */\n refresh: function refresh(callback) {\n iniLoader.clearCachedFiles();\n this.coalesceRefresh(\n callback || AWS.util.fn.callback,\n this.disableAssumeRole\n );\n },\n\n /**\n * @api private\n */\n loadRoleProfile: function loadRoleProfile(creds, roleProfile, callback) {\n if (this.disableAssumeRole) {\n throw AWS.util.error(\n new Error('Role assumption profiles are disabled. ' +\n 'Failed to load profile ' + this.profile +\n ' from ' + creds.filename),\n { code: 'SharedIniFileCredentialsProviderFailure' }\n );\n }\n\n var self = this;\n var roleArn = roleProfile['role_arn'];\n var roleSessionName = roleProfile['role_session_name'];\n var externalId = roleProfile['external_id'];\n var mfaSerial = roleProfile['mfa_serial'];\n var sourceProfileName = roleProfile['source_profile'];\n\n // From experimentation, the following behavior mimics the AWS CLI:\n //\n // 1. Use region from the profile if present.\n // 2. Otherwise fall back to N. Virginia (global endpoint).\n //\n // It is necessary to do the fallback explicitly, because if\n // 'AWS_STS_REGIONAL_ENDPOINTS=regional', the underlying STS client will\n // otherwise throw an error if region is left 'undefined'.\n //\n // Experimentation shows that the AWS CLI (tested at version 1.18.136)\n // ignores the following potential sources of a region for the purposes of\n // this AssumeRole call:\n //\n // - The [default] profile\n // - The AWS_REGION environment variable\n //\n // Ignoring the [default] profile for the purposes of AssumeRole is arguably\n // a bug in the CLI since it does use the [default] region for service\n // calls... but right now we're matching behavior of the other tool.\n var profileRegion = roleProfile['region'] || ASSUME_ROLE_DEFAULT_REGION;\n\n if (!sourceProfileName) {\n throw AWS.util.error(\n new Error('source_profile is not set using profile ' + this.profile),\n { code: 'SharedIniFileCredentialsProviderFailure' }\n );\n }\n\n var sourceProfileExistanceTest = creds[sourceProfileName];\n\n if (typeof sourceProfileExistanceTest !== 'object') {\n throw AWS.util.error(\n new Error('source_profile ' + sourceProfileName + ' using profile '\n + this.profile + ' does not exist'),\n { code: 'SharedIniFileCredentialsProviderFailure' }\n );\n }\n\n var sourceCredentials = new AWS.SharedIniFileCredentials(\n AWS.util.merge(this.options || {}, {\n profile: sourceProfileName,\n preferStaticCredentials: true\n })\n );\n\n this.roleArn = roleArn;\n var sts = new STS({\n credentials: sourceCredentials,\n region: profileRegion,\n httpOptions: this.httpOptions\n });\n\n var roleParams = {\n RoleArn: roleArn,\n RoleSessionName: roleSessionName || 'aws-sdk-js-' + Date.now()\n };\n\n if (externalId) {\n roleParams.ExternalId = externalId;\n }\n\n if (mfaSerial && self.tokenCodeFn) {\n roleParams.SerialNumber = mfaSerial;\n self.tokenCodeFn(mfaSerial, function(err, token) {\n if (err) {\n var message;\n if (err instanceof Error) {\n message = err.message;\n } else {\n message = err;\n }\n callback(\n AWS.util.error(\n new Error('Error fetching MFA token: ' + message),\n { code: 'SharedIniFileCredentialsProviderFailure' }\n ));\n return;\n }\n\n roleParams.TokenCode = token;\n sts.assumeRole(roleParams, callback);\n });\n return;\n }\n sts.assumeRole(roleParams, callback);\n }\n});\n","var AWS = require('../core');\nvar STS = require('../../clients/sts');\n\n/**\n * Represents temporary credentials retrieved from {AWS.STS}. Without any\n * extra parameters, credentials will be fetched from the\n * {AWS.STS.getSessionToken} operation. If an IAM role is provided, the\n * {AWS.STS.assumeRole} operation will be used to fetch credentials for the\n * role instead.\n *\n * @note AWS.TemporaryCredentials is deprecated, but remains available for\n * backwards compatibility. {AWS.ChainableTemporaryCredentials} is the\n * preferred class for temporary credentials.\n *\n * To setup temporary credentials, configure a set of master credentials\n * using the standard credentials providers (environment, EC2 instance metadata,\n * or from the filesystem), then set the global credentials to a new\n * temporary credentials object:\n *\n * ```javascript\n * // Note that environment credentials are loaded by default,\n * // the following line is shown for clarity:\n * AWS.config.credentials = new AWS.EnvironmentCredentials('AWS');\n *\n * // Now set temporary credentials seeded from the master credentials\n * AWS.config.credentials = new AWS.TemporaryCredentials();\n *\n * // subsequent requests will now use temporary credentials from AWS STS.\n * new AWS.S3().listBucket(function(err, data) { ... });\n * ```\n *\n * @!attribute masterCredentials\n * @return [AWS.Credentials] the master (non-temporary) credentials used to\n * get and refresh temporary credentials from AWS STS.\n * @note (see constructor)\n */\nAWS.TemporaryCredentials = AWS.util.inherit(AWS.Credentials, {\n /**\n * Creates a new temporary credentials object.\n *\n * @note In order to create temporary credentials, you first need to have\n * \"master\" credentials configured in {AWS.Config.credentials}. These\n * master credentials are necessary to retrieve the temporary credentials,\n * as well as refresh the credentials when they expire.\n * @param params [map] a map of options that are passed to the\n * {AWS.STS.assumeRole} or {AWS.STS.getSessionToken} operations.\n * If a `RoleArn` parameter is passed in, credentials will be based on the\n * IAM role.\n * @param masterCredentials [AWS.Credentials] the master (non-temporary) credentials\n * used to get and refresh temporary credentials from AWS STS.\n * @example Creating a new credentials object for generic temporary credentials\n * AWS.config.credentials = new AWS.TemporaryCredentials();\n * @example Creating a new credentials object for an IAM role\n * AWS.config.credentials = new AWS.TemporaryCredentials({\n * RoleArn: 'arn:aws:iam::1234567890:role/TemporaryCredentials',\n * });\n * @see AWS.STS.assumeRole\n * @see AWS.STS.getSessionToken\n */\n constructor: function TemporaryCredentials(params, masterCredentials) {\n AWS.Credentials.call(this);\n this.loadMasterCredentials(masterCredentials);\n this.expired = true;\n\n this.params = params || {};\n if (this.params.RoleArn) {\n this.params.RoleSessionName =\n this.params.RoleSessionName || 'temporary-credentials';\n }\n },\n\n /**\n * Refreshes credentials using {AWS.STS.assumeRole} or\n * {AWS.STS.getSessionToken}, depending on whether an IAM role ARN was passed\n * to the credentials {constructor}.\n *\n * @callback callback function(err)\n * Called when the STS service responds (or fails). When\n * this callback is called with no error, it means that the credentials\n * information has been loaded into the object (as the `accessKeyId`,\n * `secretAccessKey`, and `sessionToken` properties).\n * @param err [Error] if an error occurred, this value will be filled\n * @see get\n */\n refresh: function refresh (callback) {\n this.coalesceRefresh(callback || AWS.util.fn.callback);\n },\n\n /**\n * @api private\n */\n load: function load (callback) {\n var self = this;\n self.createClients();\n self.masterCredentials.get(function () {\n self.service.config.credentials = self.masterCredentials;\n var operation = self.params.RoleArn ?\n self.service.assumeRole : self.service.getSessionToken;\n operation.call(self.service, function (err, data) {\n if (!err) {\n self.service.credentialsFrom(data, self);\n }\n callback(err);\n });\n });\n },\n\n /**\n * @api private\n */\n loadMasterCredentials: function loadMasterCredentials (masterCredentials) {\n this.masterCredentials = masterCredentials || AWS.config.credentials;\n while (this.masterCredentials.masterCredentials) {\n this.masterCredentials = this.masterCredentials.masterCredentials;\n }\n\n if (typeof this.masterCredentials.get !== 'function') {\n this.masterCredentials = new AWS.Credentials(this.masterCredentials);\n }\n },\n\n /**\n * @api private\n */\n createClients: function () {\n this.service = this.service || new STS({params: this.params});\n }\n\n});\n","var AWS = require('../core');\nvar fs = require('fs');\nvar STS = require('../../clients/sts');\nvar iniLoader = AWS.util.iniLoader;\n\n/**\n * Represents OIDC credentials from a file on disk\n * If the credentials expire, the SDK can {refresh} the credentials\n * from the file.\n *\n * ## Using the web identity token file\n *\n * This provider is checked by default in the Node.js environment. To use\n * the provider simply add your OIDC token to a file (ASCII encoding) and\n * share the filename in either AWS_WEB_IDENTITY_TOKEN_FILE environment\n * variable or web_identity_token_file shared config variable\n *\n * The file contains encoded OIDC token and the characters are\n * ASCII encoded. OIDC tokens are JSON Web Tokens (JWT).\n * JWT's are 3 base64 encoded strings joined by the '.' character.\n *\n * This class will read filename from AWS_WEB_IDENTITY_TOKEN_FILE\n * environment variable or web_identity_token_file shared config variable,\n * and get the OIDC token from filename.\n * It will also read IAM role to be assumed from AWS_ROLE_ARN\n * environment variable or role_arn shared config variable.\n * This provider gets credetials using the {AWS.STS.assumeRoleWithWebIdentity}\n * service operation\n *\n * @!macro nobrowser\n */\nAWS.TokenFileWebIdentityCredentials = AWS.util.inherit(AWS.Credentials, {\n\n /**\n * @example Creating a new credentials object\n * AWS.config.credentials = new AWS.TokenFileWebIdentityCredentials(\n * // optionally provide configuration to apply to the underlying AWS.STS service client\n * // if configuration is not provided, then configuration will be pulled from AWS.config\n * {\n * // specify timeout options\n * httpOptions: {\n * timeout: 100\n * }\n * });\n * @see AWS.Config\n */\n constructor: function TokenFileWebIdentityCredentials(clientConfig) {\n AWS.Credentials.call(this);\n this.data = null;\n this.clientConfig = AWS.util.copy(clientConfig || {});\n },\n\n /**\n * Returns params from environment variables\n *\n * @api private\n */\n getParamsFromEnv: function getParamsFromEnv() {\n var ENV_TOKEN_FILE = 'AWS_WEB_IDENTITY_TOKEN_FILE',\n ENV_ROLE_ARN = 'AWS_ROLE_ARN';\n if (process.env[ENV_TOKEN_FILE] && process.env[ENV_ROLE_ARN]) {\n return [{\n envTokenFile: process.env[ENV_TOKEN_FILE],\n roleArn: process.env[ENV_ROLE_ARN],\n roleSessionName: process.env['AWS_ROLE_SESSION_NAME']\n }];\n }\n },\n\n /**\n * Returns params from shared config variables\n *\n * @api private\n */\n getParamsFromSharedConfig: function getParamsFromSharedConfig() {\n var profiles = AWS.util.getProfilesFromSharedConfig(iniLoader);\n var profileName = process.env.AWS_PROFILE || AWS.util.defaultProfile;\n var profile = profiles[profileName] || {};\n\n if (Object.keys(profile).length === 0) {\n throw AWS.util.error(\n new Error('Profile ' + profileName + ' not found'),\n { code: 'TokenFileWebIdentityCredentialsProviderFailure' }\n );\n }\n\n var paramsArray = [];\n\n while (!profile['web_identity_token_file'] && profile['source_profile']) {\n paramsArray.unshift({\n roleArn: profile['role_arn'],\n roleSessionName: profile['role_session_name']\n });\n var sourceProfile = profile['source_profile'];\n profile = profiles[sourceProfile];\n }\n\n paramsArray.unshift({\n envTokenFile: profile['web_identity_token_file'],\n roleArn: profile['role_arn'],\n roleSessionName: profile['role_session_name']\n });\n\n return paramsArray;\n },\n\n /**\n * Refreshes credentials using {AWS.STS.assumeRoleWithWebIdentity}\n *\n * @callback callback function(err)\n * Called when the STS service responds (or fails). When\n * this callback is called with no error, it means that the credentials\n * information has been loaded into the object (as the `accessKeyId`,\n * `secretAccessKey`, and `sessionToken` properties).\n * @param err [Error] if an error occurred, this value will be filled\n * @see AWS.Credentials.get\n */\n refresh: function refresh(callback) {\n this.coalesceRefresh(callback || AWS.util.fn.callback);\n },\n\n /**\n * @api private\n */\n assumeRoleChaining: function assumeRoleChaining(paramsArray, callback) {\n var self = this;\n if (paramsArray.length === 0) {\n self.service.credentialsFrom(self.data, self);\n callback();\n } else {\n var params = paramsArray.shift();\n self.service.config.credentials = self.service.credentialsFrom(self.data, self);\n self.service.assumeRole(\n {\n RoleArn: params.roleArn,\n RoleSessionName: params.roleSessionName || 'token-file-web-identity'\n },\n function (err, data) {\n self.data = null;\n if (err) {\n callback(err);\n } else {\n self.data = data;\n self.assumeRoleChaining(paramsArray, callback);\n }\n }\n );\n }\n },\n\n /**\n * @api private\n */\n load: function load(callback) {\n var self = this;\n try {\n var paramsArray = self.getParamsFromEnv();\n if (!paramsArray) {\n paramsArray = self.getParamsFromSharedConfig();\n }\n if (paramsArray) {\n var params = paramsArray.shift();\n var oidcToken = fs.readFileSync(params.envTokenFile, {encoding: 'ascii'});\n if (!self.service) {\n self.createClients();\n }\n self.service.assumeRoleWithWebIdentity(\n {\n WebIdentityToken: oidcToken,\n RoleArn: params.roleArn,\n RoleSessionName: params.roleSessionName || 'token-file-web-identity'\n },\n function (err, data) {\n self.data = null;\n if (err) {\n callback(err);\n } else {\n self.data = data;\n self.assumeRoleChaining(paramsArray, callback);\n }\n }\n );\n }\n } catch (err) {\n callback(err);\n }\n },\n\n /**\n * @api private\n */\n createClients: function() {\n if (!this.service) {\n var stsConfig = AWS.util.merge({}, this.clientConfig);\n this.service = new STS(stsConfig);\n\n // Retry in case of IDPCommunicationErrorException or InvalidIdentityToken\n this.service.retryableError = function(error) {\n if (error.code === 'IDPCommunicationErrorException' || error.code === 'InvalidIdentityToken') {\n return true;\n } else {\n return AWS.Service.prototype.retryableError.call(this, error);\n }\n };\n }\n }\n});\n","var AWS = require('../core');\nvar STS = require('../../clients/sts');\n\n/**\n * Represents credentials retrieved from STS Web Identity Federation support.\n *\n * By default this provider gets credentials using the\n * {AWS.STS.assumeRoleWithWebIdentity} service operation. This operation\n * requires a `RoleArn` containing the ARN of the IAM trust policy for the\n * application for which credentials will be given. In addition, the\n * `WebIdentityToken` must be set to the token provided by the identity\n * provider. See {constructor} for an example on creating a credentials\n * object with proper `RoleArn` and `WebIdentityToken` values.\n *\n * ## Refreshing Credentials from Identity Service\n *\n * In addition to AWS credentials expiring after a given amount of time, the\n * login token from the identity provider will also expire. Once this token\n * expires, it will not be usable to refresh AWS credentials, and another\n * token will be needed. The SDK does not manage refreshing of the token value,\n * but this can be done through a \"refresh token\" supported by most identity\n * providers. Consult the documentation for the identity provider for refreshing\n * tokens. Once the refreshed token is acquired, you should make sure to update\n * this new token in the credentials object's {params} property. The following\n * code will update the WebIdentityToken, assuming you have retrieved an updated\n * token from the identity provider:\n *\n * ```javascript\n * AWS.config.credentials.params.WebIdentityToken = updatedToken;\n * ```\n *\n * Future calls to `credentials.refresh()` will now use the new token.\n *\n * @!attribute params\n * @return [map] the map of params passed to\n * {AWS.STS.assumeRoleWithWebIdentity}. To update the token, set the\n * `params.WebIdentityToken` property.\n * @!attribute data\n * @return [map] the raw data response from the call to\n * {AWS.STS.assumeRoleWithWebIdentity}. Use this if you want to get\n * access to other properties from the response.\n */\nAWS.WebIdentityCredentials = AWS.util.inherit(AWS.Credentials, {\n /**\n * Creates a new credentials object.\n * @param (see AWS.STS.assumeRoleWithWebIdentity)\n * @example Creating a new credentials object\n * AWS.config.credentials = new AWS.WebIdentityCredentials({\n * RoleArn: 'arn:aws:iam::1234567890:role/WebIdentity',\n * WebIdentityToken: 'ABCDEFGHIJKLMNOP', // token from identity service\n * RoleSessionName: 'web' // optional name, defaults to web-identity\n * }, {\n * // optionally provide configuration to apply to the underlying AWS.STS service client\n * // if configuration is not provided, then configuration will be pulled from AWS.config\n *\n * // specify timeout options\n * httpOptions: {\n * timeout: 100\n * }\n * });\n * @see AWS.STS.assumeRoleWithWebIdentity\n * @see AWS.Config\n */\n constructor: function WebIdentityCredentials(params, clientConfig) {\n AWS.Credentials.call(this);\n this.expired = true;\n this.params = params;\n this.params.RoleSessionName = this.params.RoleSessionName || 'web-identity';\n this.data = null;\n this._clientConfig = AWS.util.copy(clientConfig || {});\n },\n\n /**\n * Refreshes credentials using {AWS.STS.assumeRoleWithWebIdentity}\n *\n * @callback callback function(err)\n * Called when the STS service responds (or fails). When\n * this callback is called with no error, it means that the credentials\n * information has been loaded into the object (as the `accessKeyId`,\n * `secretAccessKey`, and `sessionToken` properties).\n * @param err [Error] if an error occurred, this value will be filled\n * @see get\n */\n refresh: function refresh(callback) {\n this.coalesceRefresh(callback || AWS.util.fn.callback);\n },\n\n /**\n * @api private\n */\n load: function load(callback) {\n var self = this;\n self.createClients();\n self.service.assumeRoleWithWebIdentity(function (err, data) {\n self.data = null;\n if (!err) {\n self.data = data;\n self.service.credentialsFrom(data, self);\n }\n callback(err);\n });\n },\n\n /**\n * @api private\n */\n createClients: function() {\n if (!this.service) {\n var stsConfig = AWS.util.merge({}, this._clientConfig);\n stsConfig.params = this.params;\n this.service = new STS(stsConfig);\n }\n }\n\n});\n","var AWS = require('./core');\nvar util = require('./util');\nvar endpointDiscoveryEnabledEnvs = ['AWS_ENABLE_ENDPOINT_DISCOVERY', 'AWS_ENDPOINT_DISCOVERY_ENABLED'];\n\n/**\n * Generate key (except resources and operation part) to index the endpoints in the cache\n * If input shape has endpointdiscoveryid trait then use\n * accessKey + operation + resources + region + service as cache key\n * If input shape doesn't have endpointdiscoveryid trait then use\n * accessKey + region + service as cache key\n * @return [map<String,String>] object with keys to index endpoints.\n * @api private\n */\nfunction getCacheKey(request) {\n var service = request.service;\n var api = service.api || {};\n var operations = api.operations;\n var identifiers = {};\n if (service.config.region) {\n identifiers.region = service.config.region;\n }\n if (api.serviceId) {\n identifiers.serviceId = api.serviceId;\n }\n if (service.config.credentials.accessKeyId) {\n identifiers.accessKeyId = service.config.credentials.accessKeyId;\n }\n return identifiers;\n}\n\n/**\n * Recursive helper for marshallCustomIdentifiers().\n * Looks for required string input members that have 'endpointdiscoveryid' trait.\n * @api private\n */\nfunction marshallCustomIdentifiersHelper(result, params, shape) {\n if (!shape || params === undefined || params === null) return;\n if (shape.type === 'structure' && shape.required && shape.required.length > 0) {\n util.arrayEach(shape.required, function(name) {\n var memberShape = shape.members[name];\n if (memberShape.endpointDiscoveryId === true) {\n var locationName = memberShape.isLocationName ? memberShape.name : name;\n result[locationName] = String(params[name]);\n } else {\n marshallCustomIdentifiersHelper(result, params[name], memberShape);\n }\n });\n }\n}\n\n/**\n * Get custom identifiers for cache key.\n * Identifies custom identifiers by checking each shape's `endpointDiscoveryId` trait.\n * @param [object] request object\n * @param [object] input shape of the given operation's api\n * @api private\n */\nfunction marshallCustomIdentifiers(request, shape) {\n var identifiers = {};\n marshallCustomIdentifiersHelper(identifiers, request.params, shape);\n return identifiers;\n}\n\n/**\n * Call endpoint discovery operation when it's optional.\n * When endpoint is available in cache then use the cached endpoints. If endpoints\n * are unavailable then use regional endpoints and call endpoint discovery operation\n * asynchronously. This is turned off by default.\n * @param [object] request object\n * @api private\n */\nfunction optionalDiscoverEndpoint(request) {\n var service = request.service;\n var api = service.api;\n var operationModel = api.operations ? api.operations[request.operation] : undefined;\n var inputShape = operationModel ? operationModel.input : undefined;\n\n var identifiers = marshallCustomIdentifiers(request, inputShape);\n var cacheKey = getCacheKey(request);\n if (Object.keys(identifiers).length > 0) {\n cacheKey = util.update(cacheKey, identifiers);\n if (operationModel) cacheKey.operation = operationModel.name;\n }\n var endpoints = AWS.endpointCache.get(cacheKey);\n if (endpoints && endpoints.length === 1 && endpoints[0].Address === '') {\n //endpoint operation is being made but response not yet received\n //or endpoint operation just failed in 1 minute\n return;\n } else if (endpoints && endpoints.length > 0) {\n //found endpoint record from cache\n request.httpRequest.updateEndpoint(endpoints[0].Address);\n } else {\n //endpoint record not in cache or outdated. make discovery operation\n var endpointRequest = service.makeRequest(api.endpointOperation, {\n Operation: operationModel.name,\n Identifiers: identifiers,\n });\n addApiVersionHeader(endpointRequest);\n endpointRequest.removeListener('validate', AWS.EventListeners.Core.VALIDATE_PARAMETERS);\n endpointRequest.removeListener('retry', AWS.EventListeners.Core.RETRY_CHECK);\n //put in a placeholder for endpoints already requested, prevent\n //too much in-flight calls\n AWS.endpointCache.put(cacheKey, [{\n Address: '',\n CachePeriodInMinutes: 1\n }]);\n endpointRequest.send(function(err, data) {\n if (data && data.Endpoints) {\n AWS.endpointCache.put(cacheKey, data.Endpoints);\n } else if (err) {\n AWS.endpointCache.put(cacheKey, [{\n Address: '',\n CachePeriodInMinutes: 1 //not to make more endpoint operation in next 1 minute\n }]);\n }\n });\n }\n}\n\nvar requestQueue = {};\n\n/**\n * Call endpoint discovery operation when it's required.\n * When endpoint is available in cache then use cached ones. If endpoints are\n * unavailable then SDK should call endpoint operation then use returned new\n * endpoint for the api call. SDK will automatically attempt to do endpoint\n * discovery. This is turned off by default\n * @param [object] request object\n * @api private\n */\nfunction requiredDiscoverEndpoint(request, done) {\n var service = request.service;\n var api = service.api;\n var operationModel = api.operations ? api.operations[request.operation] : undefined;\n var inputShape = operationModel ? operationModel.input : undefined;\n\n var identifiers = marshallCustomIdentifiers(request, inputShape);\n var cacheKey = getCacheKey(request);\n if (Object.keys(identifiers).length > 0) {\n cacheKey = util.update(cacheKey, identifiers);\n if (operationModel) cacheKey.operation = operationModel.name;\n }\n var cacheKeyStr = AWS.EndpointCache.getKeyString(cacheKey);\n var endpoints = AWS.endpointCache.get(cacheKeyStr); //endpoint cache also accepts string keys\n if (endpoints && endpoints.length === 1 && endpoints[0].Address === '') {\n //endpoint operation is being made but response not yet received\n //push request object to a pending queue\n if (!requestQueue[cacheKeyStr]) requestQueue[cacheKeyStr] = [];\n requestQueue[cacheKeyStr].push({request: request, callback: done});\n return;\n } else if (endpoints && endpoints.length > 0) {\n request.httpRequest.updateEndpoint(endpoints[0].Address);\n done();\n } else {\n var endpointRequest = service.makeRequest(api.endpointOperation, {\n Operation: operationModel.name,\n Identifiers: identifiers,\n });\n endpointRequest.removeListener('validate', AWS.EventListeners.Core.VALIDATE_PARAMETERS);\n addApiVersionHeader(endpointRequest);\n\n //put in a placeholder for endpoints already requested, prevent\n //too much in-flight calls\n AWS.endpointCache.put(cacheKeyStr, [{\n Address: '',\n CachePeriodInMinutes: 60 //long-live cache\n }]);\n endpointRequest.send(function(err, data) {\n if (err) {\n request.response.error = util.error(err, { retryable: false });\n AWS.endpointCache.remove(cacheKey);\n\n //fail all the pending requests in batch\n if (requestQueue[cacheKeyStr]) {\n var pendingRequests = requestQueue[cacheKeyStr];\n util.arrayEach(pendingRequests, function(requestContext) {\n requestContext.request.response.error = util.error(err, { retryable: false });\n requestContext.callback();\n });\n delete requestQueue[cacheKeyStr];\n }\n } else if (data) {\n AWS.endpointCache.put(cacheKeyStr, data.Endpoints);\n request.httpRequest.updateEndpoint(data.Endpoints[0].Address);\n\n //update the endpoint for all the pending requests in batch\n if (requestQueue[cacheKeyStr]) {\n var pendingRequests = requestQueue[cacheKeyStr];\n util.arrayEach(pendingRequests, function(requestContext) {\n requestContext.request.httpRequest.updateEndpoint(data.Endpoints[0].Address);\n requestContext.callback();\n });\n delete requestQueue[cacheKeyStr];\n }\n }\n done();\n });\n }\n}\n\n/**\n * add api version header to endpoint operation\n * @api private\n */\nfunction addApiVersionHeader(endpointRequest) {\n var api = endpointRequest.service.api;\n var apiVersion = api.apiVersion;\n if (apiVersion && !endpointRequest.httpRequest.headers['x-amz-api-version']) {\n endpointRequest.httpRequest.headers['x-amz-api-version'] = apiVersion;\n }\n}\n\n/**\n * If api call gets invalid endpoint exception, SDK should attempt to remove the invalid\n * endpoint from cache.\n * @api private\n */\nfunction invalidateCachedEndpoints(response) {\n var error = response.error;\n var httpResponse = response.httpResponse;\n if (error &&\n (error.code === 'InvalidEndpointException' || httpResponse.statusCode === 421)\n ) {\n var request = response.request;\n var operations = request.service.api.operations || {};\n var inputShape = operations[request.operation] ? operations[request.operation].input : undefined;\n var identifiers = marshallCustomIdentifiers(request, inputShape);\n var cacheKey = getCacheKey(request);\n if (Object.keys(identifiers).length > 0) {\n cacheKey = util.update(cacheKey, identifiers);\n if (operations[request.operation]) cacheKey.operation = operations[request.operation].name;\n }\n AWS.endpointCache.remove(cacheKey);\n }\n}\n\n/**\n * If endpoint is explicitly configured, SDK should not do endpoint discovery in anytime.\n * @param [object] client Service client object.\n * @api private\n */\nfunction hasCustomEndpoint(client) {\n //if set endpoint is set for specific client, enable endpoint discovery will raise an error.\n if (client._originalConfig && client._originalConfig.endpoint && client._originalConfig.endpointDiscoveryEnabled === true) {\n throw util.error(new Error(), {\n code: 'ConfigurationException',\n message: 'Custom endpoint is supplied; endpointDiscoveryEnabled must not be true.'\n });\n };\n var svcConfig = AWS.config[client.serviceIdentifier] || {};\n return Boolean(AWS.config.endpoint || svcConfig.endpoint || (client._originalConfig && client._originalConfig.endpoint));\n}\n\n/**\n * @api private\n */\nfunction isFalsy(value) {\n return ['false', '0'].indexOf(value) >= 0;\n}\n\n/**\n * If endpoint discovery should perform for this request when no operation requires endpoint\n * discovery for the given service.\n * SDK performs config resolution in order like below:\n * 1. If set in client configuration.\n * 2. If set in env AWS_ENABLE_ENDPOINT_DISCOVERY.\n * 3. If set in shared ini config file with key 'endpoint_discovery_enabled'.\n * @param [object] request request object.\n * @returns [boolean|undefined] if endpoint discovery config is not set in any source, this\n * function returns undefined\n * @api private\n */\nfunction resolveEndpointDiscoveryConfig(request) {\n var service = request.service || {};\n if (service.config.endpointDiscoveryEnabled !== undefined) {\n return service.config.endpointDiscoveryEnabled;\n }\n\n //shared ini file is only available in Node\n //not to check env in browser\n if (util.isBrowser()) return undefined;\n\n // If any of recognized endpoint discovery config env is set\n for (var i = 0; i < endpointDiscoveryEnabledEnvs.length; i++) {\n var env = endpointDiscoveryEnabledEnvs[i];\n if (Object.prototype.hasOwnProperty.call(process.env, env)) {\n if (process.env[env] === '' || process.env[env] === undefined) {\n throw util.error(new Error(), {\n code: 'ConfigurationException',\n message: 'environmental variable ' + env + ' cannot be set to nothing'\n });\n }\n return !isFalsy(process.env[env]);\n }\n }\n\n var configFile = {};\n try {\n configFile = AWS.util.iniLoader ? AWS.util.iniLoader.loadFrom({\n isConfig: true,\n filename: process.env[AWS.util.sharedConfigFileEnv]\n }) : {};\n } catch (e) {}\n var sharedFileConfig = configFile[\n process.env.AWS_PROFILE || AWS.util.defaultProfile\n ] || {};\n if (Object.prototype.hasOwnProperty.call(sharedFileConfig, 'endpoint_discovery_enabled')) {\n if (sharedFileConfig.endpoint_discovery_enabled === undefined) {\n throw util.error(new Error(), {\n code: 'ConfigurationException',\n message: 'config file entry \\'endpoint_discovery_enabled\\' cannot be set to nothing'\n });\n }\n return !isFalsy(sharedFileConfig.endpoint_discovery_enabled);\n }\n return undefined;\n}\n\n/**\n * attach endpoint discovery logic to request object\n * @param [object] request\n * @api private\n */\nfunction discoverEndpoint(request, done) {\n var service = request.service || {};\n if (hasCustomEndpoint(service) || request.isPresigned()) return done();\n\n var operations = service.api.operations || {};\n var operationModel = operations[request.operation];\n var isEndpointDiscoveryRequired = operationModel ? operationModel.endpointDiscoveryRequired : 'NULL';\n var isEnabled = resolveEndpointDiscoveryConfig(request);\n var hasRequiredEndpointDiscovery = service.api.hasRequiredEndpointDiscovery;\n if (isEnabled || hasRequiredEndpointDiscovery) {\n // Once a customer enables endpoint discovery, the SDK should start appending\n // the string endpoint-discovery to the user-agent on all requests.\n request.httpRequest.appendToUserAgent('endpoint-discovery');\n }\n switch (isEndpointDiscoveryRequired) {\n case 'OPTIONAL':\n if (isEnabled || hasRequiredEndpointDiscovery) {\n // For a given service; if at least one operation requires endpoint discovery then the SDK must enable endpoint discovery\n // by default for all operations of that service, including operations where endpoint discovery is optional.\n optionalDiscoverEndpoint(request);\n request.addNamedListener('INVALIDATE_CACHED_ENDPOINTS', 'extractError', invalidateCachedEndpoints);\n }\n done();\n break;\n case 'REQUIRED':\n if (isEnabled === false) {\n // For a given operation; if endpoint discovery is required and it has been disabled on the SDK client,\n // then the SDK must return a clear and actionable exception.\n request.response.error = util.error(new Error(), {\n code: 'ConfigurationException',\n message: 'Endpoint Discovery is disabled but ' + service.api.className + '.' + request.operation +\n '() requires it. Please check your configurations.'\n });\n done();\n break;\n }\n request.addNamedListener('INVALIDATE_CACHED_ENDPOINTS', 'extractError', invalidateCachedEndpoints);\n requiredDiscoverEndpoint(request, done);\n break;\n case 'NULL':\n default:\n done();\n break;\n }\n}\n\nmodule.exports = {\n discoverEndpoint: discoverEndpoint,\n requiredDiscoverEndpoint: requiredDiscoverEndpoint,\n optionalDiscoverEndpoint: optionalDiscoverEndpoint,\n marshallCustomIdentifiers: marshallCustomIdentifiers,\n getCacheKey: getCacheKey,\n invalidateCachedEndpoint: invalidateCachedEndpoints,\n};\n","var AWS = require('../core');\nvar util = AWS.util;\nvar typeOf = require('./types').typeOf;\nvar DynamoDBSet = require('./set');\nvar NumberValue = require('./numberValue');\n\nAWS.DynamoDB.Converter = {\n /**\n * Convert a JavaScript value to its equivalent DynamoDB AttributeValue type\n *\n * @param data [any] The data to convert to a DynamoDB AttributeValue\n * @param options [map]\n * @option options convertEmptyValues [Boolean] Whether to automatically\n * convert empty strings, blobs,\n * and sets to `null`\n * @option options wrapNumbers [Boolean] Whether to return numbers as a\n * NumberValue object instead of\n * converting them to native JavaScript\n * numbers. This allows for the safe\n * round-trip transport of numbers of\n * arbitrary size.\n * @return [map] An object in the Amazon DynamoDB AttributeValue format\n *\n * @see AWS.DynamoDB.Converter.marshall AWS.DynamoDB.Converter.marshall to\n * convert entire records (rather than individual attributes)\n */\n input: function convertInput(data, options) {\n options = options || {};\n var type = typeOf(data);\n if (type === 'Object') {\n return formatMap(data, options);\n } else if (type === 'Array') {\n return formatList(data, options);\n } else if (type === 'Set') {\n return formatSet(data, options);\n } else if (type === 'String') {\n if (data.length === 0 && options.convertEmptyValues) {\n return convertInput(null);\n }\n return { S: data };\n } else if (type === 'Number' || type === 'NumberValue') {\n return { N: data.toString() };\n } else if (type === 'Binary') {\n if (data.length === 0 && options.convertEmptyValues) {\n return convertInput(null);\n }\n return { B: data };\n } else if (type === 'Boolean') {\n return { BOOL: data };\n } else if (type === 'null') {\n return { NULL: true };\n } else if (type !== 'undefined' && type !== 'Function') {\n // this value has a custom constructor\n return formatMap(data, options);\n }\n },\n\n /**\n * Convert a JavaScript object into a DynamoDB record.\n *\n * @param data [any] The data to convert to a DynamoDB record\n * @param options [map]\n * @option options convertEmptyValues [Boolean] Whether to automatically\n * convert empty strings, blobs,\n * and sets to `null`\n * @option options wrapNumbers [Boolean] Whether to return numbers as a\n * NumberValue object instead of\n * converting them to native JavaScript\n * numbers. This allows for the safe\n * round-trip transport of numbers of\n * arbitrary size.\n *\n * @return [map] An object in the DynamoDB record format.\n *\n * @example Convert a JavaScript object into a DynamoDB record\n * var marshalled = AWS.DynamoDB.Converter.marshall({\n * string: 'foo',\n * list: ['fizz', 'buzz', 'pop'],\n * map: {\n * nestedMap: {\n * key: 'value',\n * }\n * },\n * number: 123,\n * nullValue: null,\n * boolValue: true,\n * stringSet: new DynamoDBSet(['foo', 'bar', 'baz'])\n * });\n */\n marshall: function marshallItem(data, options) {\n return AWS.DynamoDB.Converter.input(data, options).M;\n },\n\n /**\n * Convert a DynamoDB AttributeValue object to its equivalent JavaScript type.\n *\n * @param data [map] An object in the Amazon DynamoDB AttributeValue format\n * @param options [map]\n * @option options convertEmptyValues [Boolean] Whether to automatically\n * convert empty strings, blobs,\n * and sets to `null`\n * @option options wrapNumbers [Boolean] Whether to return numbers as a\n * NumberValue object instead of\n * converting them to native JavaScript\n * numbers. This allows for the safe\n * round-trip transport of numbers of\n * arbitrary size.\n *\n * @return [Object|Array|String|Number|Boolean|null]\n *\n * @see AWS.DynamoDB.Converter.unmarshall AWS.DynamoDB.Converter.unmarshall to\n * convert entire records (rather than individual attributes)\n */\n output: function convertOutput(data, options) {\n options = options || {};\n var list, map, i;\n for (var type in data) {\n var values = data[type];\n if (type === 'M') {\n map = {};\n for (var key in values) {\n map[key] = convertOutput(values[key], options);\n }\n return map;\n } else if (type === 'L') {\n list = [];\n for (i = 0; i < values.length; i++) {\n list.push(convertOutput(values[i], options));\n }\n return list;\n } else if (type === 'SS') {\n list = [];\n for (i = 0; i < values.length; i++) {\n list.push(values[i] + '');\n }\n return new DynamoDBSet(list);\n } else if (type === 'NS') {\n list = [];\n for (i = 0; i < values.length; i++) {\n list.push(convertNumber(values[i], options.wrapNumbers));\n }\n return new DynamoDBSet(list);\n } else if (type === 'BS') {\n list = [];\n for (i = 0; i < values.length; i++) {\n list.push(AWS.util.buffer.toBuffer(values[i]));\n }\n return new DynamoDBSet(list);\n } else if (type === 'S') {\n return values + '';\n } else if (type === 'N') {\n return convertNumber(values, options.wrapNumbers);\n } else if (type === 'B') {\n return util.buffer.toBuffer(values);\n } else if (type === 'BOOL') {\n return (values === 'true' || values === 'TRUE' || values === true);\n } else if (type === 'NULL') {\n return null;\n }\n }\n },\n\n /**\n * Convert a DynamoDB record into a JavaScript object.\n *\n * @param data [any] The DynamoDB record\n * @param options [map]\n * @option options convertEmptyValues [Boolean] Whether to automatically\n * convert empty strings, blobs,\n * and sets to `null`\n * @option options wrapNumbers [Boolean] Whether to return numbers as a\n * NumberValue object instead of\n * converting them to native JavaScript\n * numbers. This allows for the safe\n * round-trip transport of numbers of\n * arbitrary size.\n *\n * @return [map] An object whose properties have been converted from\n * DynamoDB's AttributeValue format into their corresponding native\n * JavaScript types.\n *\n * @example Convert a record received from a DynamoDB stream\n * var unmarshalled = AWS.DynamoDB.Converter.unmarshall({\n * string: {S: 'foo'},\n * list: {L: [{S: 'fizz'}, {S: 'buzz'}, {S: 'pop'}]},\n * map: {\n * M: {\n * nestedMap: {\n * M: {\n * key: {S: 'value'}\n * }\n * }\n * }\n * },\n * number: {N: '123'},\n * nullValue: {NULL: true},\n * boolValue: {BOOL: true}\n * });\n */\n unmarshall: function unmarshall(data, options) {\n return AWS.DynamoDB.Converter.output({M: data}, options);\n }\n};\n\n/**\n * @api private\n * @param data [Array]\n * @param options [map]\n */\nfunction formatList(data, options) {\n var list = {L: []};\n for (var i = 0; i < data.length; i++) {\n list['L'].push(AWS.DynamoDB.Converter.input(data[i], options));\n }\n return list;\n}\n\n/**\n * @api private\n * @param value [String]\n * @param wrapNumbers [Boolean]\n */\nfunction convertNumber(value, wrapNumbers) {\n return wrapNumbers ? new NumberValue(value) : Number(value);\n}\n\n/**\n * @api private\n * @param data [map]\n * @param options [map]\n */\nfunction formatMap(data, options) {\n var map = {M: {}};\n for (var key in data) {\n var formatted = AWS.DynamoDB.Converter.input(data[key], options);\n if (formatted !== void 0) {\n map['M'][key] = formatted;\n }\n }\n return map;\n}\n\n/**\n * @api private\n */\nfunction formatSet(data, options) {\n options = options || {};\n var values = data.values;\n if (options.convertEmptyValues) {\n values = filterEmptySetValues(data);\n if (values.length === 0) {\n return AWS.DynamoDB.Converter.input(null);\n }\n }\n\n var map = {};\n switch (data.type) {\n case 'String': map['SS'] = values; break;\n case 'Binary': map['BS'] = values; break;\n case 'Number': map['NS'] = values.map(function (value) {\n return value.toString();\n });\n }\n return map;\n}\n\n/**\n * @api private\n */\nfunction filterEmptySetValues(set) {\n var nonEmptyValues = [];\n var potentiallyEmptyTypes = {\n String: true,\n Binary: true,\n Number: false\n };\n if (potentiallyEmptyTypes[set.type]) {\n for (var i = 0; i < set.values.length; i++) {\n if (set.values[i].length === 0) {\n continue;\n }\n nonEmptyValues.push(set.values[i]);\n }\n\n return nonEmptyValues;\n }\n\n return set.values;\n}\n\n/**\n * @api private\n */\nmodule.exports = AWS.DynamoDB.Converter;\n","var AWS = require('../core');\nvar Translator = require('./translator');\nvar DynamoDBSet = require('./set');\n\n/**\n * The document client simplifies working with items in Amazon DynamoDB\n * by abstracting away the notion of attribute values. This abstraction\n * annotates native JavaScript types supplied as input parameters, as well\n * as converts annotated response data to native JavaScript types.\n *\n * ## Marshalling Input and Unmarshalling Response Data\n *\n * The document client affords developers the use of native JavaScript types\n * instead of `AttributeValue`s to simplify the JavaScript development\n * experience with Amazon DynamoDB. JavaScript objects passed in as parameters\n * are marshalled into `AttributeValue` shapes required by Amazon DynamoDB.\n * Responses from DynamoDB are unmarshalled into plain JavaScript objects\n * by the `DocumentClient`. The `DocumentClient`, does not accept\n * `AttributeValue`s in favor of native JavaScript types.\n *\n * | JavaScript Type | DynamoDB AttributeValue |\n * |:----------------------------------------------------------------------:|-------------------------|\n * | String | S |\n * | Number | N |\n * | Boolean | BOOL |\n * | null | NULL |\n * | Array | L |\n * | Object | M |\n * | Buffer, File, Blob, ArrayBuffer, DataView, and JavaScript typed arrays | B |\n *\n * ## Support for Sets\n *\n * The `DocumentClient` offers a convenient way to create sets from\n * JavaScript Arrays. The type of set is inferred from the first element\n * in the array. DynamoDB supports string, number, and binary sets. To\n * learn more about supported types see the\n * [Amazon DynamoDB Data Model Documentation](http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataModel.html)\n * For more information see {AWS.DynamoDB.DocumentClient.createSet}\n *\n */\nAWS.DynamoDB.DocumentClient = AWS.util.inherit({\n\n /**\n * Creates a DynamoDB document client with a set of configuration options.\n *\n * @option options params [map] An optional map of parameters to bind to every\n * request sent by this service object.\n * @option options service [AWS.DynamoDB] An optional pre-configured instance\n * of the AWS.DynamoDB service object to use for requests. The object may\n * bound parameters used by the document client.\n * @option options convertEmptyValues [Boolean] set to true if you would like\n * the document client to convert empty values (0-length strings, binary\n * buffers, and sets) to be converted to NULL types when persisting to\n * DynamoDB.\n * @option options wrapNumbers [Boolean] Set to true to return numbers as a\n * NumberValue object instead of converting them to native JavaScript numbers.\n * This allows for the safe round-trip transport of numbers of arbitrary size.\n * @see AWS.DynamoDB.constructor\n *\n */\n constructor: function DocumentClient(options) {\n var self = this;\n self.options = options || {};\n self.configure(self.options);\n },\n\n /**\n * @api private\n */\n configure: function configure(options) {\n var self = this;\n self.service = options.service;\n self.bindServiceObject(options);\n self.attrValue = options.attrValue =\n self.service.api.operations.putItem.input.members.Item.value.shape;\n },\n\n /**\n * @api private\n */\n bindServiceObject: function bindServiceObject(options) {\n var self = this;\n options = options || {};\n\n if (!self.service) {\n self.service = new AWS.DynamoDB(options);\n } else {\n var config = AWS.util.copy(self.service.config);\n self.service = new self.service.constructor.__super__(config);\n self.service.config.params =\n AWS.util.merge(self.service.config.params || {}, options.params);\n }\n },\n\n /**\n * @api private\n */\n makeServiceRequest: function(operation, params, callback) {\n var self = this;\n var request = self.service[operation](params);\n self.setupRequest(request);\n self.setupResponse(request);\n if (typeof callback === 'function') {\n request.send(callback);\n }\n return request;\n },\n\n /**\n * @api private\n */\n serviceClientOperationsMap: {\n batchGet: 'batchGetItem',\n batchWrite: 'batchWriteItem',\n delete: 'deleteItem',\n get: 'getItem',\n put: 'putItem',\n query: 'query',\n scan: 'scan',\n update: 'updateItem',\n transactGet: 'transactGetItems',\n transactWrite: 'transactWriteItems'\n },\n\n /**\n * Returns the attributes of one or more items from one or more tables\n * by delegating to `AWS.DynamoDB.batchGetItem()`.\n *\n * Supply the same parameters as {AWS.DynamoDB.batchGetItem} with\n * `AttributeValue`s substituted by native JavaScript types.\n *\n * @see AWS.DynamoDB.batchGetItem\n * @example Get items from multiple tables\n * var params = {\n * RequestItems: {\n * 'Table-1': {\n * Keys: [\n * {\n * HashKey: 'haskey',\n * NumberRangeKey: 1\n * }\n * ]\n * },\n * 'Table-2': {\n * Keys: [\n * { foo: 'bar' },\n * ]\n * }\n * }\n * };\n *\n * var documentClient = new AWS.DynamoDB.DocumentClient();\n *\n * documentClient.batchGet(params, function(err, data) {\n * if (err) console.log(err);\n * else console.log(data);\n * });\n *\n */\n batchGet: function(params, callback) {\n var operation = this.serviceClientOperationsMap['batchGet'];\n return this.makeServiceRequest(operation, params, callback);\n },\n\n /**\n * Puts or deletes multiple items in one or more tables by delegating\n * to `AWS.DynamoDB.batchWriteItem()`.\n *\n * Supply the same parameters as {AWS.DynamoDB.batchWriteItem} with\n * `AttributeValue`s substituted by native JavaScript types.\n *\n * @see AWS.DynamoDB.batchWriteItem\n * @example Write to and delete from a table\n * var params = {\n * RequestItems: {\n * 'Table-1': [\n * {\n * DeleteRequest: {\n * Key: { HashKey: 'someKey' }\n * }\n * },\n * {\n * PutRequest: {\n * Item: {\n * HashKey: 'anotherKey',\n * NumAttribute: 1,\n * BoolAttribute: true,\n * ListAttribute: [1, 'two', false],\n * MapAttribute: { foo: 'bar' }\n * }\n * }\n * }\n * ]\n * }\n * };\n *\n * var documentClient = new AWS.DynamoDB.DocumentClient();\n *\n * documentClient.batchWrite(params, function(err, data) {\n * if (err) console.log(err);\n * else console.log(data);\n * });\n *\n */\n batchWrite: function(params, callback) {\n var operation = this.serviceClientOperationsMap['batchWrite'];\n return this.makeServiceRequest(operation, params, callback);\n },\n\n /**\n * Deletes a single item in a table by primary key by delegating to\n * `AWS.DynamoDB.deleteItem()`\n *\n * Supply the same parameters as {AWS.DynamoDB.deleteItem} with\n * `AttributeValue`s substituted by native JavaScript types.\n *\n * @see AWS.DynamoDB.deleteItem\n * @example Delete an item from a table\n * var params = {\n * TableName : 'Table',\n * Key: {\n * HashKey: 'hashkey',\n * NumberRangeKey: 1\n * }\n * };\n *\n * var documentClient = new AWS.DynamoDB.DocumentClient();\n *\n * documentClient.delete(params, function(err, data) {\n * if (err) console.log(err);\n * else console.log(data);\n * });\n *\n */\n delete: function(params, callback) {\n var operation = this.serviceClientOperationsMap['delete'];\n return this.makeServiceRequest(operation, params, callback);\n },\n\n /**\n * Returns a set of attributes for the item with the given primary key\n * by delegating to `AWS.DynamoDB.getItem()`.\n *\n * Supply the same parameters as {AWS.DynamoDB.getItem} with\n * `AttributeValue`s substituted by native JavaScript types.\n *\n * @see AWS.DynamoDB.getItem\n * @example Get an item from a table\n * var params = {\n * TableName : 'Table',\n * Key: {\n * HashKey: 'hashkey'\n * }\n * };\n *\n * var documentClient = new AWS.DynamoDB.DocumentClient();\n *\n * documentClient.get(params, function(err, data) {\n * if (err) console.log(err);\n * else console.log(data);\n * });\n *\n */\n get: function(params, callback) {\n var operation = this.serviceClientOperationsMap['get'];\n return this.makeServiceRequest(operation, params, callback);\n },\n\n /**\n * Creates a new item, or replaces an old item with a new item by\n * delegating to `AWS.DynamoDB.putItem()`.\n *\n * Supply the same parameters as {AWS.DynamoDB.putItem} with\n * `AttributeValue`s substituted by native JavaScript types.\n *\n * @see AWS.DynamoDB.putItem\n * @example Create a new item in a table\n * var params = {\n * TableName : 'Table',\n * Item: {\n * HashKey: 'haskey',\n * NumAttribute: 1,\n * BoolAttribute: true,\n * ListAttribute: [1, 'two', false],\n * MapAttribute: { foo: 'bar'},\n * NullAttribute: null\n * }\n * };\n *\n * var documentClient = new AWS.DynamoDB.DocumentClient();\n *\n * documentClient.put(params, function(err, data) {\n * if (err) console.log(err);\n * else console.log(data);\n * });\n *\n */\n put: function(params, callback) {\n var operation = this.serviceClientOperationsMap['put'];\n return this.makeServiceRequest(operation, params, callback);\n },\n\n /**\n * Edits an existing item's attributes, or adds a new item to the table if\n * it does not already exist by delegating to `AWS.DynamoDB.updateItem()`.\n *\n * Supply the same parameters as {AWS.DynamoDB.updateItem} with\n * `AttributeValue`s substituted by native JavaScript types.\n *\n * @see AWS.DynamoDB.updateItem\n * @example Update an item with expressions\n * var params = {\n * TableName: 'Table',\n * Key: { HashKey : 'hashkey' },\n * UpdateExpression: 'set #a = :x + :y',\n * ConditionExpression: '#a < :MAX',\n * ExpressionAttributeNames: {'#a' : 'Sum'},\n * ExpressionAttributeValues: {\n * ':x' : 20,\n * ':y' : 45,\n * ':MAX' : 100,\n * }\n * };\n *\n * var documentClient = new AWS.DynamoDB.DocumentClient();\n *\n * documentClient.update(params, function(err, data) {\n * if (err) console.log(err);\n * else console.log(data);\n * });\n *\n */\n update: function(params, callback) {\n var operation = this.serviceClientOperationsMap['update'];\n return this.makeServiceRequest(operation, params, callback);\n },\n\n /**\n * Returns one or more items and item attributes by accessing every item\n * in a table or a secondary index.\n *\n * Supply the same parameters as {AWS.DynamoDB.scan} with\n * `AttributeValue`s substituted by native JavaScript types.\n *\n * @see AWS.DynamoDB.scan\n * @example Scan the table with a filter expression\n * var params = {\n * TableName : 'Table',\n * FilterExpression : 'Year = :this_year',\n * ExpressionAttributeValues : {':this_year' : 2015}\n * };\n *\n * var documentClient = new AWS.DynamoDB.DocumentClient();\n *\n * documentClient.scan(params, function(err, data) {\n * if (err) console.log(err);\n * else console.log(data);\n * });\n *\n */\n scan: function(params, callback) {\n var operation = this.serviceClientOperationsMap['scan'];\n return this.makeServiceRequest(operation, params, callback);\n },\n\n /**\n * Directly access items from a table by primary key or a secondary index.\n *\n * Supply the same parameters as {AWS.DynamoDB.query} with\n * `AttributeValue`s substituted by native JavaScript types.\n *\n * @see AWS.DynamoDB.query\n * @example Query an index\n * var params = {\n * TableName: 'Table',\n * IndexName: 'Index',\n * KeyConditionExpression: 'HashKey = :hkey and RangeKey > :rkey',\n * ExpressionAttributeValues: {\n * ':hkey': 'key',\n * ':rkey': 2015\n * }\n * };\n *\n * var documentClient = new AWS.DynamoDB.DocumentClient();\n *\n * documentClient.query(params, function(err, data) {\n * if (err) console.log(err);\n * else console.log(data);\n * });\n *\n */\n query: function(params, callback) {\n var operation = this.serviceClientOperationsMap['query'];\n return this.makeServiceRequest(operation, params, callback);\n },\n\n /**\n * Synchronous write operation that groups up to 10 action requests\n *\n * Supply the same parameters as {AWS.DynamoDB.transactWriteItems} with\n * `AttributeValue`s substituted by native JavaScript types.\n *\n * @see AWS.DynamoDB.transactWriteItems\n * @example Get items from multiple tables\n * var params = {\n * TransactItems: [{\n * Put: {\n * TableName : 'Table0',\n * Item: {\n * HashKey: 'haskey',\n * NumAttribute: 1,\n * BoolAttribute: true,\n * ListAttribute: [1, 'two', false],\n * MapAttribute: { foo: 'bar'},\n * NullAttribute: null\n * }\n * }\n * }, {\n * Update: {\n * TableName: 'Table1',\n * Key: { HashKey : 'hashkey' },\n * UpdateExpression: 'set #a = :x + :y',\n * ConditionExpression: '#a < :MAX',\n * ExpressionAttributeNames: {'#a' : 'Sum'},\n * ExpressionAttributeValues: {\n * ':x' : 20,\n * ':y' : 45,\n * ':MAX' : 100,\n * }\n * }\n * }]\n * };\n *\n * documentClient.transactWrite(params, function(err, data) {\n * if (err) console.log(err);\n * else console.log(data);\n * });\n */\n transactWrite: function(params, callback) {\n var operation = this.serviceClientOperationsMap['transactWrite'];\n return this.makeServiceRequest(operation, params, callback);\n },\n\n /**\n * Atomically retrieves multiple items from one or more tables (but not from indexes)\n * in a single account and region.\n *\n * Supply the same parameters as {AWS.DynamoDB.transactGetItems} with\n * `AttributeValue`s substituted by native JavaScript types.\n *\n * @see AWS.DynamoDB.transactGetItems\n * @example Get items from multiple tables\n * var params = {\n * TransactItems: [{\n * Get: {\n * TableName : 'Table0',\n * Key: {\n * HashKey: 'hashkey0'\n * }\n * }\n * }, {\n * Get: {\n * TableName : 'Table1',\n * Key: {\n * HashKey: 'hashkey1'\n * }\n * }\n * }]\n * };\n *\n * documentClient.transactGet(params, function(err, data) {\n * if (err) console.log(err);\n * else console.log(data);\n * });\n */\n transactGet: function(params, callback) {\n var operation = this.serviceClientOperationsMap['transactGet'];\n return this.makeServiceRequest(operation, params, callback);\n },\n\n /**\n * Creates a set of elements inferring the type of set from\n * the type of the first element. Amazon DynamoDB currently supports\n * the number sets, string sets, and binary sets. For more information\n * about DynamoDB data types see the documentation on the\n * [Amazon DynamoDB Data Model](http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataModel.html#DataModel.DataTypes).\n *\n * @param list [Array] Collection to represent your DynamoDB Set\n * @param options [map]\n * * **validate** [Boolean] set to true if you want to validate the type\n * of each element in the set. Defaults to `false`.\n * @example Creating a number set\n * var documentClient = new AWS.DynamoDB.DocumentClient();\n *\n * var params = {\n * Item: {\n * hashkey: 'hashkey'\n * numbers: documentClient.createSet([1, 2, 3]);\n * }\n * };\n *\n * documentClient.put(params, function(err, data) {\n * if (err) console.log(err);\n * else console.log(data);\n * });\n *\n */\n createSet: function(list, options) {\n options = options || {};\n return new DynamoDBSet(list, options);\n },\n\n /**\n * @api private\n */\n getTranslator: function() {\n return new Translator(this.options);\n },\n\n /**\n * @api private\n */\n setupRequest: function setupRequest(request) {\n var self = this;\n var translator = self.getTranslator();\n var operation = request.operation;\n var inputShape = request.service.api.operations[operation].input;\n request._events.validate.unshift(function(req) {\n req.rawParams = AWS.util.copy(req.params);\n req.params = translator.translateInput(req.rawParams, inputShape);\n });\n },\n\n /**\n * @api private\n */\n setupResponse: function setupResponse(request) {\n var self = this;\n var translator = self.getTranslator();\n var outputShape = self.service.api.operations[request.operation].output;\n request.on('extractData', function(response) {\n response.data = translator.translateOutput(response.data, outputShape);\n });\n\n var response = request.response;\n response.nextPage = function(cb) {\n var resp = this;\n var req = resp.request;\n var config;\n var service = req.service;\n var operation = req.operation;\n try {\n config = service.paginationConfig(operation, true);\n } catch (e) { resp.error = e; }\n\n if (!resp.hasNextPage()) {\n if (cb) cb(resp.error, null);\n else if (resp.error) throw resp.error;\n return null;\n }\n\n var params = AWS.util.copy(req.rawParams);\n if (!resp.nextPageTokens) {\n return cb ? cb(null, null) : null;\n } else {\n var inputTokens = config.inputToken;\n if (typeof inputTokens === 'string') inputTokens = [inputTokens];\n for (var i = 0; i < inputTokens.length; i++) {\n params[inputTokens[i]] = resp.nextPageTokens[i];\n }\n return self[operation](params, cb);\n }\n };\n }\n\n});\n\n/**\n * @api private\n */\nmodule.exports = AWS.DynamoDB.DocumentClient;\n","var util = require('../core').util;\n\n/**\n * An object recognizable as a numeric value that stores the underlying number\n * as a string.\n *\n * Intended to be a deserialization target for the DynamoDB Document Client when\n * the `wrapNumbers` flag is set. This allows for numeric values that lose\n * precision when converted to JavaScript's `number` type.\n */\nvar DynamoDBNumberValue = util.inherit({\n constructor: function NumberValue(value) {\n this.wrapperName = 'NumberValue';\n this.value = value.toString();\n },\n\n /**\n * Render the underlying value as a number when converting to JSON.\n */\n toJSON: function () {\n return this.toNumber();\n },\n\n /**\n * Convert the underlying value to a JavaScript number.\n */\n toNumber: function () {\n return Number(this.value);\n },\n\n /**\n * Return a string representing the unaltered value provided to the\n * constructor.\n */\n toString: function () {\n return this.value;\n }\n});\n\n/**\n * @api private\n */\nmodule.exports = DynamoDBNumberValue;\n","var util = require('../core').util;\nvar typeOf = require('./types').typeOf;\n\n/**\n * @api private\n */\nvar memberTypeToSetType = {\n 'String': 'String',\n 'Number': 'Number',\n 'NumberValue': 'Number',\n 'Binary': 'Binary'\n};\n\n/**\n * @api private\n */\nvar DynamoDBSet = util.inherit({\n\n constructor: function Set(list, options) {\n options = options || {};\n this.wrapperName = 'Set';\n this.initialize(list, options.validate);\n },\n\n initialize: function(list, validate) {\n var self = this;\n self.values = [].concat(list);\n self.detectType();\n if (validate) {\n self.validate();\n }\n },\n\n detectType: function() {\n this.type = memberTypeToSetType[typeOf(this.values[0])];\n if (!this.type) {\n throw util.error(new Error(), {\n code: 'InvalidSetType',\n message: 'Sets can contain string, number, or binary values'\n });\n }\n },\n\n validate: function() {\n var self = this;\n var length = self.values.length;\n var values = self.values;\n for (var i = 0; i < length; i++) {\n if (memberTypeToSetType[typeOf(values[i])] !== self.type) {\n throw util.error(new Error(), {\n code: 'InvalidType',\n message: self.type + ' Set contains ' + typeOf(values[i]) + ' value'\n });\n }\n }\n },\n\n /**\n * Render the underlying values only when converting to JSON.\n */\n toJSON: function() {\n var self = this;\n return self.values;\n }\n\n});\n\n/**\n * @api private\n */\nmodule.exports = DynamoDBSet;\n","var util = require('../core').util;\nvar convert = require('./converter');\n\nvar Translator = function(options) {\n options = options || {};\n this.attrValue = options.attrValue;\n this.convertEmptyValues = Boolean(options.convertEmptyValues);\n this.wrapNumbers = Boolean(options.wrapNumbers);\n};\n\nTranslator.prototype.translateInput = function(value, shape) {\n this.mode = 'input';\n return this.translate(value, shape);\n};\n\nTranslator.prototype.translateOutput = function(value, shape) {\n this.mode = 'output';\n return this.translate(value, shape);\n};\n\nTranslator.prototype.translate = function(value, shape) {\n var self = this;\n if (!shape || value === undefined) return undefined;\n\n if (shape.shape === self.attrValue) {\n return convert[self.mode](value, {\n convertEmptyValues: self.convertEmptyValues,\n wrapNumbers: self.wrapNumbers,\n });\n }\n switch (shape.type) {\n case 'structure': return self.translateStructure(value, shape);\n case 'map': return self.translateMap(value, shape);\n case 'list': return self.translateList(value, shape);\n default: return self.translateScalar(value, shape);\n }\n};\n\nTranslator.prototype.translateStructure = function(structure, shape) {\n var self = this;\n if (structure == null) return undefined;\n\n var struct = {};\n util.each(structure, function(name, value) {\n var memberShape = shape.members[name];\n if (memberShape) {\n var result = self.translate(value, memberShape);\n if (result !== undefined) struct[name] = result;\n }\n });\n return struct;\n};\n\nTranslator.prototype.translateList = function(list, shape) {\n var self = this;\n if (list == null) return undefined;\n\n var out = [];\n util.arrayEach(list, function(value) {\n var result = self.translate(value, shape.member);\n if (result === undefined) out.push(null);\n else out.push(result);\n });\n return out;\n};\n\nTranslator.prototype.translateMap = function(map, shape) {\n var self = this;\n if (map == null) return undefined;\n\n var out = {};\n util.each(map, function(key, value) {\n var result = self.translate(value, shape.value);\n if (result === undefined) out[key] = null;\n else out[key] = result;\n });\n return out;\n};\n\nTranslator.prototype.translateScalar = function(value, shape) {\n return shape.toType(value);\n};\n\n/**\n * @api private\n */\nmodule.exports = Translator;\n","var util = require('../core').util;\n\nfunction typeOf(data) {\n if (data === null && typeof data === 'object') {\n return 'null';\n } else if (data !== undefined && isBinary(data)) {\n return 'Binary';\n } else if (data !== undefined && data.constructor) {\n return data.wrapperName || util.typeName(data.constructor);\n } else if (data !== undefined && typeof data === 'object') {\n // this object is the result of Object.create(null), hence the absence of a\n // defined constructor\n return 'Object';\n } else {\n return 'undefined';\n }\n}\n\nfunction isBinary(data) {\n var types = [\n 'Buffer', 'File', 'Blob', 'ArrayBuffer', 'DataView',\n 'Int8Array', 'Uint8Array', 'Uint8ClampedArray',\n 'Int16Array', 'Uint16Array', 'Int32Array', 'Uint32Array',\n 'Float32Array', 'Float64Array'\n ];\n if (util.isNode()) {\n var Stream = util.stream.Stream;\n if (util.Buffer.isBuffer(data) || data instanceof Stream) {\n return true;\n }\n }\n\n for (var i = 0; i < types.length; i++) {\n if (data !== undefined && data.constructor) {\n if (util.isType(data, types[i])) return true;\n if (util.typeName(data.constructor) === types[i]) return true;\n }\n }\n\n return false;\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n typeOf: typeOf,\n isBinary: isBinary\n};\n","var eventMessageChunker = require('../event-stream/event-message-chunker').eventMessageChunker;\nvar parseEvent = require('./parse-event').parseEvent;\n\nfunction createEventStream(body, parser, model) {\n var eventMessages = eventMessageChunker(body);\n\n var events = [];\n\n for (var i = 0; i < eventMessages.length; i++) {\n events.push(parseEvent(parser, eventMessages[i], model));\n }\n\n return events;\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n createEventStream: createEventStream\n};\n","var util = require('../core').util;\nvar Transform = require('stream').Transform;\nvar allocBuffer = util.buffer.alloc;\n\n/** @type {Transform} */\nfunction EventMessageChunkerStream(options) {\n Transform.call(this, options);\n\n this.currentMessageTotalLength = 0;\n this.currentMessagePendingLength = 0;\n /** @type {Buffer} */\n this.currentMessage = null;\n\n /** @type {Buffer} */\n this.messageLengthBuffer = null;\n}\n\nEventMessageChunkerStream.prototype = Object.create(Transform.prototype);\n\n/**\n *\n * @param {Buffer} chunk\n * @param {string} encoding\n * @param {*} callback\n */\nEventMessageChunkerStream.prototype._transform = function(chunk, encoding, callback) {\n var chunkLength = chunk.length;\n var currentOffset = 0;\n\n while (currentOffset < chunkLength) {\n // create new message if necessary\n if (!this.currentMessage) {\n // working on a new message, determine total length\n var bytesRemaining = chunkLength - currentOffset;\n // prevent edge case where total length spans 2 chunks\n if (!this.messageLengthBuffer) {\n this.messageLengthBuffer = allocBuffer(4);\n }\n var numBytesForTotal = Math.min(\n 4 - this.currentMessagePendingLength, // remaining bytes to fill the messageLengthBuffer\n bytesRemaining // bytes left in chunk\n );\n\n chunk.copy(\n this.messageLengthBuffer,\n this.currentMessagePendingLength,\n currentOffset,\n currentOffset + numBytesForTotal\n );\n\n this.currentMessagePendingLength += numBytesForTotal;\n currentOffset += numBytesForTotal;\n\n if (this.currentMessagePendingLength < 4) {\n // not enough information to create the current message\n break;\n }\n this.allocateMessage(this.messageLengthBuffer.readUInt32BE(0));\n this.messageLengthBuffer = null;\n }\n\n // write data into current message\n var numBytesToWrite = Math.min(\n this.currentMessageTotalLength - this.currentMessagePendingLength, // number of bytes left to complete message\n chunkLength - currentOffset // number of bytes left in the original chunk\n );\n chunk.copy(\n this.currentMessage, // target buffer\n this.currentMessagePendingLength, // target offset\n currentOffset, // chunk offset\n currentOffset + numBytesToWrite // chunk end to write\n );\n this.currentMessagePendingLength += numBytesToWrite;\n currentOffset += numBytesToWrite;\n\n // check if a message is ready to be pushed\n if (this.currentMessageTotalLength && this.currentMessageTotalLength === this.currentMessagePendingLength) {\n // push out the message\n this.push(this.currentMessage);\n // cleanup\n this.currentMessage = null;\n this.currentMessageTotalLength = 0;\n this.currentMessagePendingLength = 0;\n }\n }\n\n callback();\n};\n\nEventMessageChunkerStream.prototype._flush = function(callback) {\n if (this.currentMessageTotalLength) {\n if (this.currentMessageTotalLength === this.currentMessagePendingLength) {\n callback(null, this.currentMessage);\n } else {\n callback(new Error('Truncated event message received.'));\n }\n } else {\n callback();\n }\n};\n\n/**\n * @param {number} size Size of the message to be allocated.\n * @api private\n */\nEventMessageChunkerStream.prototype.allocateMessage = function(size) {\n if (typeof size !== 'number') {\n throw new Error('Attempted to allocate an event message where size was not a number: ' + size);\n }\n this.currentMessageTotalLength = size;\n this.currentMessagePendingLength = 4;\n this.currentMessage = allocBuffer(size);\n this.currentMessage.writeUInt32BE(size, 0);\n};\n\n/**\n * @api private\n */\nmodule.exports = {\n EventMessageChunkerStream: EventMessageChunkerStream\n};\n","/**\n * Takes in a buffer of event messages and splits them into individual messages.\n * @param {Buffer} buffer\n * @api private\n */\nfunction eventMessageChunker(buffer) {\n /** @type Buffer[] */\n var messages = [];\n var offset = 0;\n\n while (offset < buffer.length) {\n var totalLength = buffer.readInt32BE(offset);\n\n // create new buffer for individual message (shares memory with original)\n var message = buffer.slice(offset, totalLength + offset);\n // increment offset to it starts at the next message\n offset += totalLength;\n\n messages.push(message);\n }\n\n return messages;\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n eventMessageChunker: eventMessageChunker\n};\n","var Transform = require('stream').Transform;\nvar parseEvent = require('./parse-event').parseEvent;\n\n/** @type {Transform} */\nfunction EventUnmarshallerStream(options) {\n options = options || {};\n // set output to object mode\n options.readableObjectMode = true;\n Transform.call(this, options);\n this._readableState.objectMode = true;\n\n this.parser = options.parser;\n this.eventStreamModel = options.eventStreamModel;\n}\n\nEventUnmarshallerStream.prototype = Object.create(Transform.prototype);\n\n/**\n *\n * @param {Buffer} chunk\n * @param {string} encoding\n * @param {*} callback\n */\nEventUnmarshallerStream.prototype._transform = function(chunk, encoding, callback) {\n try {\n var event = parseEvent(this.parser, chunk, this.eventStreamModel);\n this.push(event);\n return callback();\n } catch (err) {\n callback(err);\n }\n};\n\n/**\n * @api private\n */\nmodule.exports = {\n EventUnmarshallerStream: EventUnmarshallerStream\n};\n","var util = require('../core').util;\nvar toBuffer = util.buffer.toBuffer;\n\n/**\n * A lossless representation of a signed, 64-bit integer. Instances of this\n * class may be used in arithmetic expressions as if they were numeric\n * primitives, but the binary representation will be preserved unchanged as the\n * `bytes` property of the object. The bytes should be encoded as big-endian,\n * two's complement integers.\n * @param {Buffer} bytes\n *\n * @api private\n */\nfunction Int64(bytes) {\n if (bytes.length !== 8) {\n throw new Error('Int64 buffers must be exactly 8 bytes');\n }\n if (!util.Buffer.isBuffer(bytes)) bytes = toBuffer(bytes);\n\n this.bytes = bytes;\n}\n\n/**\n * @param {number} number\n * @returns {Int64}\n *\n * @api private\n */\nInt64.fromNumber = function(number) {\n if (number > 9223372036854775807 || number < -9223372036854775808) {\n throw new Error(\n number + ' is too large (or, if negative, too small) to represent as an Int64'\n );\n }\n\n var bytes = new Uint8Array(8);\n for (\n var i = 7, remaining = Math.abs(Math.round(number));\n i > -1 && remaining > 0;\n i--, remaining /= 256\n ) {\n bytes[i] = remaining;\n }\n\n if (number < 0) {\n negate(bytes);\n }\n\n return new Int64(bytes);\n};\n\n/**\n * @returns {number}\n *\n * @api private\n */\nInt64.prototype.valueOf = function() {\n var bytes = this.bytes.slice(0);\n var negative = bytes[0] & 128;\n if (negative) {\n negate(bytes);\n }\n\n return parseInt(bytes.toString('hex'), 16) * (negative ? -1 : 1);\n};\n\nInt64.prototype.toString = function() {\n return String(this.valueOf());\n};\n\n/**\n * @param {Buffer} bytes\n *\n * @api private\n */\nfunction negate(bytes) {\n for (var i = 0; i < 8; i++) {\n bytes[i] ^= 0xFF;\n }\n for (var i = 7; i > -1; i--) {\n bytes[i]++;\n if (bytes[i] !== 0) {\n break;\n }\n }\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n Int64: Int64\n};\n","var parseMessage = require('./parse-message').parseMessage;\n\n/**\n *\n * @param {*} parser\n * @param {Buffer} message\n * @param {*} shape\n * @api private\n */\nfunction parseEvent(parser, message, shape) {\n var parsedMessage = parseMessage(message);\n\n // check if message is an event or error\n var messageType = parsedMessage.headers[':message-type'];\n if (messageType) {\n if (messageType.value === 'error') {\n throw parseError(parsedMessage);\n } else if (messageType.value !== 'event') {\n // not sure how to parse non-events/non-errors, ignore for now\n return;\n }\n }\n\n // determine event type\n var eventType = parsedMessage.headers[':event-type'];\n // check that the event type is modeled\n var eventModel = shape.members[eventType.value];\n if (!eventModel) {\n return;\n }\n\n var result = {};\n // check if an event payload exists\n var eventPayloadMemberName = eventModel.eventPayloadMemberName;\n if (eventPayloadMemberName) {\n var payloadShape = eventModel.members[eventPayloadMemberName];\n // if the shape is binary, return the byte array\n if (payloadShape.type === 'binary') {\n result[eventPayloadMemberName] = parsedMessage.body;\n } else {\n result[eventPayloadMemberName] = parser.parse(parsedMessage.body.toString(), payloadShape);\n }\n }\n\n // read event headers\n var eventHeaderNames = eventModel.eventHeaderMemberNames;\n for (var i = 0; i < eventHeaderNames.length; i++) {\n var name = eventHeaderNames[i];\n if (parsedMessage.headers[name]) {\n // parse the header!\n result[name] = eventModel.members[name].toType(parsedMessage.headers[name].value);\n }\n }\n\n var output = {};\n output[eventType.value] = result;\n return output;\n}\n\nfunction parseError(message) {\n var errorCode = message.headers[':error-code'];\n var errorMessage = message.headers[':error-message'];\n var error = new Error(errorMessage.value || errorMessage);\n error.code = error.name = errorCode.value || errorCode;\n return error;\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n parseEvent: parseEvent\n};\n","var Int64 = require('./int64').Int64;\n\nvar splitMessage = require('./split-message').splitMessage;\n\nvar BOOLEAN_TAG = 'boolean';\nvar BYTE_TAG = 'byte';\nvar SHORT_TAG = 'short';\nvar INT_TAG = 'integer';\nvar LONG_TAG = 'long';\nvar BINARY_TAG = 'binary';\nvar STRING_TAG = 'string';\nvar TIMESTAMP_TAG = 'timestamp';\nvar UUID_TAG = 'uuid';\n\n/**\n * @api private\n *\n * @param {Buffer} headers\n */\nfunction parseHeaders(headers) {\n var out = {};\n var position = 0;\n while (position < headers.length) {\n var nameLength = headers.readUInt8(position++);\n var name = headers.slice(position, position + nameLength).toString();\n position += nameLength;\n switch (headers.readUInt8(position++)) {\n case 0 /* boolTrue */:\n out[name] = {\n type: BOOLEAN_TAG,\n value: true\n };\n break;\n case 1 /* boolFalse */:\n out[name] = {\n type: BOOLEAN_TAG,\n value: false\n };\n break;\n case 2 /* byte */:\n out[name] = {\n type: BYTE_TAG,\n value: headers.readInt8(position++)\n };\n break;\n case 3 /* short */:\n out[name] = {\n type: SHORT_TAG,\n value: headers.readInt16BE(position)\n };\n position += 2;\n break;\n case 4 /* integer */:\n out[name] = {\n type: INT_TAG,\n value: headers.readInt32BE(position)\n };\n position += 4;\n break;\n case 5 /* long */:\n out[name] = {\n type: LONG_TAG,\n value: new Int64(headers.slice(position, position + 8))\n };\n position += 8;\n break;\n case 6 /* byteArray */:\n var binaryLength = headers.readUInt16BE(position);\n position += 2;\n out[name] = {\n type: BINARY_TAG,\n value: headers.slice(position, position + binaryLength)\n };\n position += binaryLength;\n break;\n case 7 /* string */:\n var stringLength = headers.readUInt16BE(position);\n position += 2;\n out[name] = {\n type: STRING_TAG,\n value: headers.slice(\n position,\n position + stringLength\n ).toString()\n };\n position += stringLength;\n break;\n case 8 /* timestamp */:\n out[name] = {\n type: TIMESTAMP_TAG,\n value: new Date(\n new Int64(headers.slice(position, position + 8))\n .valueOf()\n )\n };\n position += 8;\n break;\n case 9 /* uuid */:\n var uuidChars = headers.slice(position, position + 16)\n .toString('hex');\n position += 16;\n out[name] = {\n type: UUID_TAG,\n value: uuidChars.substr(0, 8) + '-' +\n uuidChars.substr(8, 4) + '-' +\n uuidChars.substr(12, 4) + '-' +\n uuidChars.substr(16, 4) + '-' +\n uuidChars.substr(20)\n };\n break;\n default:\n throw new Error('Unrecognized header type tag');\n }\n }\n return out;\n}\n\nfunction parseMessage(message) {\n var parsed = splitMessage(message);\n return { headers: parseHeaders(parsed.headers), body: parsed.body };\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n parseMessage: parseMessage\n};\n","var util = require('../core').util;\nvar toBuffer = util.buffer.toBuffer;\n\n// All prelude components are unsigned, 32-bit integers\nvar PRELUDE_MEMBER_LENGTH = 4;\n// The prelude consists of two components\nvar PRELUDE_LENGTH = PRELUDE_MEMBER_LENGTH * 2;\n// Checksums are always CRC32 hashes.\nvar CHECKSUM_LENGTH = 4;\n// Messages must include a full prelude, a prelude checksum, and a message checksum\nvar MINIMUM_MESSAGE_LENGTH = PRELUDE_LENGTH + CHECKSUM_LENGTH * 2;\n\n/**\n * @api private\n *\n * @param {Buffer} message\n */\nfunction splitMessage(message) {\n if (!util.Buffer.isBuffer(message)) message = toBuffer(message);\n\n if (message.length < MINIMUM_MESSAGE_LENGTH) {\n throw new Error('Provided message too short to accommodate event stream message overhead');\n }\n\n if (message.length !== message.readUInt32BE(0)) {\n throw new Error('Reported message length does not match received message length');\n }\n\n var expectedPreludeChecksum = message.readUInt32BE(PRELUDE_LENGTH);\n\n if (\n expectedPreludeChecksum !== util.crypto.crc32(\n message.slice(0, PRELUDE_LENGTH)\n )\n ) {\n throw new Error(\n 'The prelude checksum specified in the message (' +\n expectedPreludeChecksum +\n ') does not match the calculated CRC32 checksum.'\n );\n }\n\n var expectedMessageChecksum = message.readUInt32BE(message.length - CHECKSUM_LENGTH);\n\n if (\n expectedMessageChecksum !== util.crypto.crc32(\n message.slice(0, message.length - CHECKSUM_LENGTH)\n )\n ) {\n throw new Error(\n 'The message checksum did not match the expected value of ' +\n expectedMessageChecksum\n );\n }\n\n var headersStart = PRELUDE_LENGTH + CHECKSUM_LENGTH;\n var headersEnd = headersStart + message.readUInt32BE(PRELUDE_MEMBER_LENGTH);\n\n return {\n headers: message.slice(headersStart, headersEnd),\n body: message.slice(headersEnd, message.length - CHECKSUM_LENGTH),\n };\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n splitMessage: splitMessage\n};\n","/**\n * What is necessary to create an event stream in node?\n * - http response stream\n * - parser\n * - event stream model\n */\n\nvar EventMessageChunkerStream = require('../event-stream/event-message-chunker-stream').EventMessageChunkerStream;\nvar EventUnmarshallerStream = require('../event-stream/event-message-unmarshaller-stream').EventUnmarshallerStream;\n\nfunction createEventStream(stream, parser, model) {\n var eventStream = new EventUnmarshallerStream({\n parser: parser,\n eventStreamModel: model\n });\n\n var eventMessageChunker = new EventMessageChunkerStream();\n\n stream.pipe(\n eventMessageChunker\n ).pipe(eventStream);\n\n stream.on('error', function(err) {\n eventMessageChunker.emit('error', err);\n });\n\n eventMessageChunker.on('error', function(err) {\n eventStream.emit('error', err);\n });\n\n return eventStream;\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n createEventStream: createEventStream\n};\n","var AWS = require('./core');\nvar SequentialExecutor = require('./sequential_executor');\nvar DISCOVER_ENDPOINT = require('./discover_endpoint').discoverEndpoint;\n/**\n * The namespace used to register global event listeners for request building\n * and sending.\n */\nAWS.EventListeners = {\n /**\n * @!attribute VALIDATE_CREDENTIALS\n * A request listener that validates whether the request is being\n * sent with credentials.\n * Handles the {AWS.Request~validate 'validate' Request event}\n * @example Sending a request without validating credentials\n * var listener = AWS.EventListeners.Core.VALIDATE_CREDENTIALS;\n * request.removeListener('validate', listener);\n * @readonly\n * @return [Function]\n * @!attribute VALIDATE_REGION\n * A request listener that validates whether the region is set\n * for a request.\n * Handles the {AWS.Request~validate 'validate' Request event}\n * @example Sending a request without validating region configuration\n * var listener = AWS.EventListeners.Core.VALIDATE_REGION;\n * request.removeListener('validate', listener);\n * @readonly\n * @return [Function]\n * @!attribute VALIDATE_PARAMETERS\n * A request listener that validates input parameters in a request.\n * Handles the {AWS.Request~validate 'validate' Request event}\n * @example Sending a request without validating parameters\n * var listener = AWS.EventListeners.Core.VALIDATE_PARAMETERS;\n * request.removeListener('validate', listener);\n * @example Disable parameter validation globally\n * AWS.EventListeners.Core.removeListener('validate',\n * AWS.EventListeners.Core.VALIDATE_REGION);\n * @readonly\n * @return [Function]\n * @!attribute SEND\n * A request listener that initiates the HTTP connection for a\n * request being sent. Handles the {AWS.Request~send 'send' Request event}\n * @example Replacing the HTTP handler\n * var listener = AWS.EventListeners.Core.SEND;\n * request.removeListener('send', listener);\n * request.on('send', function(response) {\n * customHandler.send(response);\n * });\n * @return [Function]\n * @readonly\n * @!attribute HTTP_DATA\n * A request listener that reads data from the HTTP connection in order\n * to build the response data.\n * Handles the {AWS.Request~httpData 'httpData' Request event}.\n * Remove this handler if you are overriding the 'httpData' event and\n * do not want extra data processing and buffering overhead.\n * @example Disabling default data processing\n * var listener = AWS.EventListeners.Core.HTTP_DATA;\n * request.removeListener('httpData', listener);\n * @return [Function]\n * @readonly\n */\n Core: {} /* doc hack */\n};\n\n/**\n * @api private\n */\nfunction getOperationAuthtype(req) {\n if (!req.service.api.operations) {\n return '';\n }\n var operation = req.service.api.operations[req.operation];\n return operation ? operation.authtype : '';\n}\n\nAWS.EventListeners = {\n Core: new SequentialExecutor().addNamedListeners(function(add, addAsync) {\n addAsync('VALIDATE_CREDENTIALS', 'validate',\n function VALIDATE_CREDENTIALS(req, done) {\n if (!req.service.api.signatureVersion && !req.service.config.signatureVersion) return done(); // none\n req.service.config.getCredentials(function(err) {\n if (err) {\n req.response.error = AWS.util.error(err,\n {code: 'CredentialsError', message: 'Missing credentials in config, if using AWS_CONFIG_FILE, set AWS_SDK_LOAD_CONFIG=1'});\n }\n done();\n });\n });\n\n add('VALIDATE_REGION', 'validate', function VALIDATE_REGION(req) {\n if (!req.service.isGlobalEndpoint) {\n var dnsHostRegex = new RegExp(/^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9])$/);\n if (!req.service.config.region) {\n req.response.error = AWS.util.error(new Error(),\n {code: 'ConfigError', message: 'Missing region in config'});\n } else if (!dnsHostRegex.test(req.service.config.region)) {\n req.response.error = AWS.util.error(new Error(),\n {code: 'ConfigError', message: 'Invalid region in config'});\n }\n }\n });\n\n add('BUILD_IDEMPOTENCY_TOKENS', 'validate', function BUILD_IDEMPOTENCY_TOKENS(req) {\n if (!req.service.api.operations) {\n return;\n }\n var operation = req.service.api.operations[req.operation];\n if (!operation) {\n return;\n }\n var idempotentMembers = operation.idempotentMembers;\n if (!idempotentMembers.length) {\n return;\n }\n // creates a copy of params so user's param object isn't mutated\n var params = AWS.util.copy(req.params);\n for (var i = 0, iLen = idempotentMembers.length; i < iLen; i++) {\n if (!params[idempotentMembers[i]]) {\n // add the member\n params[idempotentMembers[i]] = AWS.util.uuid.v4();\n }\n }\n req.params = params;\n });\n\n add('VALIDATE_PARAMETERS', 'validate', function VALIDATE_PARAMETERS(req) {\n if (!req.service.api.operations) {\n return;\n }\n var rules = req.service.api.operations[req.operation].input;\n var validation = req.service.config.paramValidation;\n new AWS.ParamValidator(validation).validate(rules, req.params);\n });\n\n addAsync('COMPUTE_SHA256', 'afterBuild', function COMPUTE_SHA256(req, done) {\n req.haltHandlersOnError();\n if (!req.service.api.operations) {\n return;\n }\n var operation = req.service.api.operations[req.operation];\n var authtype = operation ? operation.authtype : '';\n if (!req.service.api.signatureVersion && !authtype && !req.service.config.signatureVersion) return done(); // none\n if (req.service.getSignerClass(req) === AWS.Signers.V4) {\n var body = req.httpRequest.body || '';\n if (authtype.indexOf('unsigned-body') >= 0) {\n req.httpRequest.headers['X-Amz-Content-Sha256'] = 'UNSIGNED-PAYLOAD';\n return done();\n }\n AWS.util.computeSha256(body, function(err, sha) {\n if (err) {\n done(err);\n }\n else {\n req.httpRequest.headers['X-Amz-Content-Sha256'] = sha;\n done();\n }\n });\n } else {\n done();\n }\n });\n\n add('SET_CONTENT_LENGTH', 'afterBuild', function SET_CONTENT_LENGTH(req) {\n var authtype = getOperationAuthtype(req);\n var payloadMember = AWS.util.getRequestPayloadShape(req);\n if (req.httpRequest.headers['Content-Length'] === undefined) {\n try {\n var length = AWS.util.string.byteLength(req.httpRequest.body);\n req.httpRequest.headers['Content-Length'] = length;\n } catch (err) {\n if (payloadMember && payloadMember.isStreaming) {\n if (payloadMember.requiresLength) {\n //streaming payload requires length(s3, glacier)\n throw err;\n } else if (authtype.indexOf('unsigned-body') >= 0) {\n //unbounded streaming payload(lex, mediastore)\n req.httpRequest.headers['Transfer-Encoding'] = 'chunked';\n return;\n } else {\n throw err;\n }\n }\n throw err;\n }\n }\n });\n\n add('SET_HTTP_HOST', 'afterBuild', function SET_HTTP_HOST(req) {\n req.httpRequest.headers['Host'] = req.httpRequest.endpoint.host;\n });\n\n add('RESTART', 'restart', function RESTART() {\n var err = this.response.error;\n if (!err || !err.retryable) return;\n\n this.httpRequest = new AWS.HttpRequest(\n this.service.endpoint,\n this.service.region\n );\n\n if (this.response.retryCount < this.service.config.maxRetries) {\n this.response.retryCount++;\n } else {\n this.response.error = null;\n }\n });\n\n var addToHead = true;\n addAsync('DISCOVER_ENDPOINT', 'sign', DISCOVER_ENDPOINT, addToHead);\n\n addAsync('SIGN', 'sign', function SIGN(req, done) {\n var service = req.service;\n var operations = req.service.api.operations || {};\n var operation = operations[req.operation];\n var authtype = operation ? operation.authtype : '';\n if (!service.api.signatureVersion && !authtype && !service.config.signatureVersion) return done(); // none\n\n service.config.getCredentials(function (err, credentials) {\n if (err) {\n req.response.error = err;\n return done();\n }\n\n try {\n var date = service.getSkewCorrectedDate();\n var SignerClass = service.getSignerClass(req);\n var signer = new SignerClass(req.httpRequest,\n service.getSigningName(),\n {\n signatureCache: service.config.signatureCache,\n operation: operation,\n signatureVersion: service.api.signatureVersion\n });\n signer.setServiceClientId(service._clientId);\n\n // clear old authorization headers\n delete req.httpRequest.headers['Authorization'];\n delete req.httpRequest.headers['Date'];\n delete req.httpRequest.headers['X-Amz-Date'];\n\n // add new authorization\n signer.addAuthorization(credentials, date);\n req.signedAt = date;\n } catch (e) {\n req.response.error = e;\n }\n done();\n });\n });\n\n add('VALIDATE_RESPONSE', 'validateResponse', function VALIDATE_RESPONSE(resp) {\n if (this.service.successfulResponse(resp, this)) {\n resp.data = {};\n resp.error = null;\n } else {\n resp.data = null;\n resp.error = AWS.util.error(new Error(),\n {code: 'UnknownError', message: 'An unknown error occurred.'});\n }\n });\n\n addAsync('SEND', 'send', function SEND(resp, done) {\n resp.httpResponse._abortCallback = done;\n resp.error = null;\n resp.data = null;\n\n function callback(httpResp) {\n resp.httpResponse.stream = httpResp;\n var stream = resp.request.httpRequest.stream;\n var service = resp.request.service;\n var api = service.api;\n var operationName = resp.request.operation;\n var operation = api.operations[operationName] || {};\n\n httpResp.on('headers', function onHeaders(statusCode, headers, statusMessage) {\n resp.request.emit(\n 'httpHeaders',\n [statusCode, headers, resp, statusMessage]\n );\n\n if (!resp.httpResponse.streaming) {\n if (AWS.HttpClient.streamsApiVersion === 2) { // streams2 API check\n // if we detect event streams, we're going to have to\n // return the stream immediately\n if (operation.hasEventOutput && service.successfulResponse(resp)) {\n // skip reading the IncomingStream\n resp.request.emit('httpDone');\n done();\n return;\n }\n\n httpResp.on('readable', function onReadable() {\n var data = httpResp.read();\n if (data !== null) {\n resp.request.emit('httpData', [data, resp]);\n }\n });\n } else { // legacy streams API\n httpResp.on('data', function onData(data) {\n resp.request.emit('httpData', [data, resp]);\n });\n }\n }\n });\n\n httpResp.on('end', function onEnd() {\n if (!stream || !stream.didCallback) {\n if (AWS.HttpClient.streamsApiVersion === 2 && (operation.hasEventOutput && service.successfulResponse(resp))) {\n // don't concatenate response chunks when streaming event stream data when response is successful\n return;\n }\n resp.request.emit('httpDone');\n done();\n }\n });\n }\n\n function progress(httpResp) {\n httpResp.on('sendProgress', function onSendProgress(value) {\n resp.request.emit('httpUploadProgress', [value, resp]);\n });\n\n httpResp.on('receiveProgress', function onReceiveProgress(value) {\n resp.request.emit('httpDownloadProgress', [value, resp]);\n });\n }\n\n function error(err) {\n if (err.code !== 'RequestAbortedError') {\n var errCode = err.code === 'TimeoutError' ? err.code : 'NetworkingError';\n err = AWS.util.error(err, {\n code: errCode,\n region: resp.request.httpRequest.region,\n hostname: resp.request.httpRequest.endpoint.hostname,\n retryable: true\n });\n }\n resp.error = err;\n resp.request.emit('httpError', [resp.error, resp], function() {\n done();\n });\n }\n\n function executeSend() {\n var http = AWS.HttpClient.getInstance();\n var httpOptions = resp.request.service.config.httpOptions || {};\n try {\n var stream = http.handleRequest(resp.request.httpRequest, httpOptions,\n callback, error);\n progress(stream);\n } catch (err) {\n error(err);\n }\n }\n var timeDiff = (resp.request.service.getSkewCorrectedDate() - this.signedAt) / 1000;\n if (timeDiff >= 60 * 10) { // if we signed 10min ago, re-sign\n this.emit('sign', [this], function(err) {\n if (err) done(err);\n else executeSend();\n });\n } else {\n executeSend();\n }\n });\n\n add('HTTP_HEADERS', 'httpHeaders',\n function HTTP_HEADERS(statusCode, headers, resp, statusMessage) {\n resp.httpResponse.statusCode = statusCode;\n resp.httpResponse.statusMessage = statusMessage;\n resp.httpResponse.headers = headers;\n resp.httpResponse.body = AWS.util.buffer.toBuffer('');\n resp.httpResponse.buffers = [];\n resp.httpResponse.numBytes = 0;\n var dateHeader = headers.date || headers.Date;\n var service = resp.request.service;\n if (dateHeader) {\n var serverTime = Date.parse(dateHeader);\n if (service.config.correctClockSkew\n && service.isClockSkewed(serverTime)) {\n service.applyClockOffset(serverTime);\n }\n }\n });\n\n add('HTTP_DATA', 'httpData', function HTTP_DATA(chunk, resp) {\n if (chunk) {\n if (AWS.util.isNode()) {\n resp.httpResponse.numBytes += chunk.length;\n\n var total = resp.httpResponse.headers['content-length'];\n var progress = { loaded: resp.httpResponse.numBytes, total: total };\n resp.request.emit('httpDownloadProgress', [progress, resp]);\n }\n\n resp.httpResponse.buffers.push(AWS.util.buffer.toBuffer(chunk));\n }\n });\n\n add('HTTP_DONE', 'httpDone', function HTTP_DONE(resp) {\n // convert buffers array into single buffer\n if (resp.httpResponse.buffers && resp.httpResponse.buffers.length > 0) {\n var body = AWS.util.buffer.concat(resp.httpResponse.buffers);\n resp.httpResponse.body = body;\n }\n delete resp.httpResponse.numBytes;\n delete resp.httpResponse.buffers;\n });\n\n add('FINALIZE_ERROR', 'retry', function FINALIZE_ERROR(resp) {\n if (resp.httpResponse.statusCode) {\n resp.error.statusCode = resp.httpResponse.statusCode;\n if (resp.error.retryable === undefined) {\n resp.error.retryable = this.service.retryableError(resp.error, this);\n }\n }\n });\n\n add('INVALIDATE_CREDENTIALS', 'retry', function INVALIDATE_CREDENTIALS(resp) {\n if (!resp.error) return;\n switch (resp.error.code) {\n case 'RequestExpired': // EC2 only\n case 'ExpiredTokenException':\n case 'ExpiredToken':\n resp.error.retryable = true;\n resp.request.service.config.credentials.expired = true;\n }\n });\n\n add('EXPIRED_SIGNATURE', 'retry', function EXPIRED_SIGNATURE(resp) {\n var err = resp.error;\n if (!err) return;\n if (typeof err.code === 'string' && typeof err.message === 'string') {\n if (err.code.match(/Signature/) && err.message.match(/expired/)) {\n resp.error.retryable = true;\n }\n }\n });\n\n add('CLOCK_SKEWED', 'retry', function CLOCK_SKEWED(resp) {\n if (!resp.error) return;\n if (this.service.clockSkewError(resp.error)\n && this.service.config.correctClockSkew) {\n resp.error.retryable = true;\n }\n });\n\n add('REDIRECT', 'retry', function REDIRECT(resp) {\n if (resp.error && resp.error.statusCode >= 300 &&\n resp.error.statusCode < 400 && resp.httpResponse.headers['location']) {\n this.httpRequest.endpoint =\n new AWS.Endpoint(resp.httpResponse.headers['location']);\n this.httpRequest.headers['Host'] = this.httpRequest.endpoint.host;\n resp.error.redirect = true;\n resp.error.retryable = true;\n }\n });\n\n add('RETRY_CHECK', 'retry', function RETRY_CHECK(resp) {\n if (resp.error) {\n if (resp.error.redirect && resp.redirectCount < resp.maxRedirects) {\n resp.error.retryDelay = 0;\n } else if (resp.retryCount < resp.maxRetries) {\n resp.error.retryDelay = this.service.retryDelays(resp.retryCount, resp.error) || 0;\n }\n }\n });\n\n addAsync('RESET_RETRY_STATE', 'afterRetry', function RESET_RETRY_STATE(resp, done) {\n var delay, willRetry = false;\n\n if (resp.error) {\n delay = resp.error.retryDelay || 0;\n if (resp.error.retryable && resp.retryCount < resp.maxRetries) {\n resp.retryCount++;\n willRetry = true;\n } else if (resp.error.redirect && resp.redirectCount < resp.maxRedirects) {\n resp.redirectCount++;\n willRetry = true;\n }\n }\n\n // delay < 0 is a signal from customBackoff to skip retries\n if (willRetry && delay >= 0) {\n resp.error = null;\n setTimeout(done, delay);\n } else {\n done();\n }\n });\n }),\n\n CorePost: new SequentialExecutor().addNamedListeners(function(add) {\n add('EXTRACT_REQUEST_ID', 'extractData', AWS.util.extractRequestId);\n add('EXTRACT_REQUEST_ID', 'extractError', AWS.util.extractRequestId);\n\n add('ENOTFOUND_ERROR', 'httpError', function ENOTFOUND_ERROR(err) {\n function isDNSError(err) {\n return err.errno === 'ENOTFOUND' ||\n typeof err.errno === 'number' &&\n typeof AWS.util.getSystemErrorName === 'function' &&\n ['EAI_NONAME', 'EAI_NODATA'].indexOf(AWS.util.getSystemErrorName(err.errno) >= 0);\n }\n if (err.code === 'NetworkingError' && isDNSError(err)) {\n var message = 'Inaccessible host: `' + err.hostname +\n '\\'. This service may not be available in the `' + err.region +\n '\\' region.';\n this.response.error = AWS.util.error(new Error(message), {\n code: 'UnknownEndpoint',\n region: err.region,\n hostname: err.hostname,\n retryable: true,\n originalError: err\n });\n }\n });\n }),\n\n Logger: new SequentialExecutor().addNamedListeners(function(add) {\n add('LOG_REQUEST', 'complete', function LOG_REQUEST(resp) {\n var req = resp.request;\n var logger = req.service.config.logger;\n if (!logger) return;\n function filterSensitiveLog(inputShape, shape) {\n if (!shape) {\n return shape;\n }\n if (inputShape.isSensitive) {\n return '***SensitiveInformation***';\n }\n switch (inputShape.type) {\n case 'structure':\n var struct = {};\n AWS.util.each(shape, function(subShapeName, subShape) {\n if (Object.prototype.hasOwnProperty.call(inputShape.members, subShapeName)) {\n struct[subShapeName] = filterSensitiveLog(inputShape.members[subShapeName], subShape);\n } else {\n struct[subShapeName] = subShape;\n }\n });\n return struct;\n case 'list':\n var list = [];\n AWS.util.arrayEach(shape, function(subShape, index) {\n list.push(filterSensitiveLog(inputShape.member, subShape));\n });\n return list;\n case 'map':\n var map = {};\n AWS.util.each(shape, function(key, value) {\n map[key] = filterSensitiveLog(inputShape.value, value);\n });\n return map;\n default:\n return shape;\n }\n }\n\n function buildMessage() {\n var time = resp.request.service.getSkewCorrectedDate().getTime();\n var delta = (time - req.startTime.getTime()) / 1000;\n var ansi = logger.isTTY ? true : false;\n var status = resp.httpResponse.statusCode;\n var censoredParams = req.params;\n if (\n req.service.api.operations &&\n req.service.api.operations[req.operation] &&\n req.service.api.operations[req.operation].input\n ) {\n var inputShape = req.service.api.operations[req.operation].input;\n censoredParams = filterSensitiveLog(inputShape, req.params);\n }\n var params = require('util').inspect(censoredParams, true, null);\n var message = '';\n if (ansi) message += '\\x1B[33m';\n message += '[AWS ' + req.service.serviceIdentifier + ' ' + status;\n message += ' ' + delta.toString() + 's ' + resp.retryCount + ' retries]';\n if (ansi) message += '\\x1B[0;1m';\n message += ' ' + AWS.util.string.lowerFirst(req.operation);\n message += '(' + params + ')';\n if (ansi) message += '\\x1B[0m';\n return message;\n }\n\n var line = buildMessage();\n if (typeof logger.log === 'function') {\n logger.log(line);\n } else if (typeof logger.write === 'function') {\n logger.write(line + '\\n');\n }\n });\n }),\n\n Json: new SequentialExecutor().addNamedListeners(function(add) {\n var svc = require('./protocol/json');\n add('BUILD', 'build', svc.buildRequest);\n add('EXTRACT_DATA', 'extractData', svc.extractData);\n add('EXTRACT_ERROR', 'extractError', svc.extractError);\n }),\n\n Rest: new SequentialExecutor().addNamedListeners(function(add) {\n var svc = require('./protocol/rest');\n add('BUILD', 'build', svc.buildRequest);\n add('EXTRACT_DATA', 'extractData', svc.extractData);\n add('EXTRACT_ERROR', 'extractError', svc.extractError);\n }),\n\n RestJson: new SequentialExecutor().addNamedListeners(function(add) {\n var svc = require('./protocol/rest_json');\n add('BUILD', 'build', svc.buildRequest);\n add('EXTRACT_DATA', 'extractData', svc.extractData);\n add('EXTRACT_ERROR', 'extractError', svc.extractError);\n }),\n\n RestXml: new SequentialExecutor().addNamedListeners(function(add) {\n var svc = require('./protocol/rest_xml');\n add('BUILD', 'build', svc.buildRequest);\n add('EXTRACT_DATA', 'extractData', svc.extractData);\n add('EXTRACT_ERROR', 'extractError', svc.extractError);\n }),\n\n Query: new SequentialExecutor().addNamedListeners(function(add) {\n var svc = require('./protocol/query');\n add('BUILD', 'build', svc.buildRequest);\n add('EXTRACT_DATA', 'extractData', svc.extractData);\n add('EXTRACT_ERROR', 'extractError', svc.extractError);\n })\n};\n","var AWS = require('./core');\nvar inherit = AWS.util.inherit;\n\n/**\n * The endpoint that a service will talk to, for example,\n * `'https://ec2.ap-southeast-1.amazonaws.com'`. If\n * you need to override an endpoint for a service, you can\n * set the endpoint on a service by passing the endpoint\n * object with the `endpoint` option key:\n *\n * ```javascript\n * var ep = new AWS.Endpoint('awsproxy.example.com');\n * var s3 = new AWS.S3({endpoint: ep});\n * s3.service.endpoint.hostname == 'awsproxy.example.com'\n * ```\n *\n * Note that if you do not specify a protocol, the protocol will\n * be selected based on your current {AWS.config} configuration.\n *\n * @!attribute protocol\n * @return [String] the protocol (http or https) of the endpoint\n * URL\n * @!attribute hostname\n * @return [String] the host portion of the endpoint, e.g.,\n * example.com\n * @!attribute host\n * @return [String] the host portion of the endpoint including\n * the port, e.g., example.com:80\n * @!attribute port\n * @return [Integer] the port of the endpoint\n * @!attribute href\n * @return [String] the full URL of the endpoint\n */\nAWS.Endpoint = inherit({\n\n /**\n * @overload Endpoint(endpoint)\n * Constructs a new endpoint given an endpoint URL. If the\n * URL omits a protocol (http or https), the default protocol\n * set in the global {AWS.config} will be used.\n * @param endpoint [String] the URL to construct an endpoint from\n */\n constructor: function Endpoint(endpoint, config) {\n AWS.util.hideProperties(this, ['slashes', 'auth', 'hash', 'search', 'query']);\n\n if (typeof endpoint === 'undefined' || endpoint === null) {\n throw new Error('Invalid endpoint: ' + endpoint);\n } else if (typeof endpoint !== 'string') {\n return AWS.util.copy(endpoint);\n }\n\n if (!endpoint.match(/^http/)) {\n var useSSL = config && config.sslEnabled !== undefined ?\n config.sslEnabled : AWS.config.sslEnabled;\n endpoint = (useSSL ? 'https' : 'http') + '://' + endpoint;\n }\n\n AWS.util.update(this, AWS.util.urlParse(endpoint));\n\n // Ensure the port property is set as an integer\n if (this.port) {\n this.port = parseInt(this.port, 10);\n } else {\n this.port = this.protocol === 'https:' ? 443 : 80;\n }\n }\n\n});\n\n/**\n * The low level HTTP request object, encapsulating all HTTP header\n * and body data sent by a service request.\n *\n * @!attribute method\n * @return [String] the HTTP method of the request\n * @!attribute path\n * @return [String] the path portion of the URI, e.g.,\n * \"/list/?start=5&num=10\"\n * @!attribute headers\n * @return [map<String,String>]\n * a map of header keys and their respective values\n * @!attribute body\n * @return [String] the request body payload\n * @!attribute endpoint\n * @return [AWS.Endpoint] the endpoint for the request\n * @!attribute region\n * @api private\n * @return [String] the region, for signing purposes only.\n */\nAWS.HttpRequest = inherit({\n\n /**\n * @api private\n */\n constructor: function HttpRequest(endpoint, region) {\n endpoint = new AWS.Endpoint(endpoint);\n this.method = 'POST';\n this.path = endpoint.path || '/';\n this.headers = {};\n this.body = '';\n this.endpoint = endpoint;\n this.region = region;\n this._userAgent = '';\n this.setUserAgent();\n },\n\n /**\n * @api private\n */\n setUserAgent: function setUserAgent() {\n this._userAgent = this.headers[this.getUserAgentHeaderName()] = AWS.util.userAgent();\n },\n\n getUserAgentHeaderName: function getUserAgentHeaderName() {\n var prefix = AWS.util.isBrowser() ? 'X-Amz-' : '';\n return prefix + 'User-Agent';\n },\n\n /**\n * @api private\n */\n appendToUserAgent: function appendToUserAgent(agentPartial) {\n if (typeof agentPartial === 'string' && agentPartial) {\n this._userAgent += ' ' + agentPartial;\n }\n this.headers[this.getUserAgentHeaderName()] = this._userAgent;\n },\n\n /**\n * @api private\n */\n getUserAgent: function getUserAgent() {\n return this._userAgent;\n },\n\n /**\n * @return [String] the part of the {path} excluding the\n * query string\n */\n pathname: function pathname() {\n return this.path.split('?', 1)[0];\n },\n\n /**\n * @return [String] the query string portion of the {path}\n */\n search: function search() {\n var query = this.path.split('?', 2)[1];\n if (query) {\n query = AWS.util.queryStringParse(query);\n return AWS.util.queryParamsToString(query);\n }\n return '';\n },\n\n /**\n * @api private\n * update httpRequest endpoint with endpoint string\n */\n updateEndpoint: function updateEndpoint(endpointStr) {\n var newEndpoint = new AWS.Endpoint(endpointStr);\n this.endpoint = newEndpoint;\n this.path = newEndpoint.path || '/';\n if (this.headers['Host']) {\n this.headers['Host'] = newEndpoint.host;\n }\n }\n});\n\n/**\n * The low level HTTP response object, encapsulating all HTTP header\n * and body data returned from the request.\n *\n * @!attribute statusCode\n * @return [Integer] the HTTP status code of the response (e.g., 200, 404)\n * @!attribute headers\n * @return [map<String,String>]\n * a map of response header keys and their respective values\n * @!attribute body\n * @return [String] the response body payload\n * @!attribute [r] streaming\n * @return [Boolean] whether this response is being streamed at a low-level.\n * Defaults to `false` (buffered reads). Do not modify this manually, use\n * {createUnbufferedStream} to convert the stream to unbuffered mode\n * instead.\n */\nAWS.HttpResponse = inherit({\n\n /**\n * @api private\n */\n constructor: function HttpResponse() {\n this.statusCode = undefined;\n this.headers = {};\n this.body = undefined;\n this.streaming = false;\n this.stream = null;\n },\n\n /**\n * Disables buffering on the HTTP response and returns the stream for reading.\n * @return [Stream, XMLHttpRequest, null] the underlying stream object.\n * Use this object to directly read data off of the stream.\n * @note This object is only available after the {AWS.Request~httpHeaders}\n * event has fired. This method must be called prior to\n * {AWS.Request~httpData}.\n * @example Taking control of a stream\n * request.on('httpHeaders', function(statusCode, headers) {\n * if (statusCode < 300) {\n * if (headers.etag === 'xyz') {\n * // pipe the stream, disabling buffering\n * var stream = this.response.httpResponse.createUnbufferedStream();\n * stream.pipe(process.stdout);\n * } else { // abort this request and set a better error message\n * this.abort();\n * this.response.error = new Error('Invalid ETag');\n * }\n * }\n * }).send(console.log);\n */\n createUnbufferedStream: function createUnbufferedStream() {\n this.streaming = true;\n return this.stream;\n }\n});\n\n\nAWS.HttpClient = inherit({});\n\n/**\n * @api private\n */\nAWS.HttpClient.getInstance = function getInstance() {\n if (this.singleton === undefined) {\n this.singleton = new this();\n }\n return this.singleton;\n};\n","var AWS = require('../core');\nvar Stream = AWS.util.stream.Stream;\nvar TransformStream = AWS.util.stream.Transform;\nvar ReadableStream = AWS.util.stream.Readable;\nrequire('../http');\nvar CONNECTION_REUSE_ENV_NAME = 'AWS_NODEJS_CONNECTION_REUSE_ENABLED';\n\n/**\n * @api private\n */\nAWS.NodeHttpClient = AWS.util.inherit({\n handleRequest: function handleRequest(httpRequest, httpOptions, callback, errCallback) {\n var self = this;\n var endpoint = httpRequest.endpoint;\n var pathPrefix = '';\n if (!httpOptions) httpOptions = {};\n if (httpOptions.proxy) {\n pathPrefix = endpoint.protocol + '//' + endpoint.hostname;\n if (endpoint.port !== 80 && endpoint.port !== 443) {\n pathPrefix += ':' + endpoint.port;\n }\n endpoint = new AWS.Endpoint(httpOptions.proxy);\n }\n\n var useSSL = endpoint.protocol === 'https:';\n var http = useSSL ? require('https') : require('http');\n var options = {\n host: endpoint.hostname,\n port: endpoint.port,\n method: httpRequest.method,\n headers: httpRequest.headers,\n path: pathPrefix + httpRequest.path\n };\n\n if (!httpOptions.agent) {\n options.agent = this.getAgent(useSSL, {\n keepAlive: process.env[CONNECTION_REUSE_ENV_NAME] === '1' ? true : false\n });\n }\n\n AWS.util.update(options, httpOptions);\n delete options.proxy; // proxy isn't an HTTP option\n delete options.timeout; // timeout isn't an HTTP option\n\n var stream = http.request(options, function (httpResp) {\n if (stream.didCallback) return;\n\n callback(httpResp);\n httpResp.emit(\n 'headers',\n httpResp.statusCode,\n httpResp.headers,\n httpResp.statusMessage\n );\n });\n httpRequest.stream = stream; // attach stream to httpRequest\n stream.didCallback = false;\n\n // connection timeout support\n if (httpOptions.connectTimeout) {\n var connectTimeoutId;\n stream.on('socket', function(socket) {\n if (socket.connecting) {\n connectTimeoutId = setTimeout(function connectTimeout() {\n if (stream.didCallback) return; stream.didCallback = true;\n\n stream.abort();\n errCallback(AWS.util.error(\n new Error('Socket timed out without establishing a connection'),\n {code: 'TimeoutError'}\n ));\n }, httpOptions.connectTimeout);\n socket.on('connect', function() {\n clearTimeout(connectTimeoutId);\n connectTimeoutId = null;\n });\n }\n });\n }\n\n // timeout support\n stream.setTimeout(httpOptions.timeout || 0, function() {\n if (stream.didCallback) return; stream.didCallback = true;\n\n var msg = 'Connection timed out after ' + httpOptions.timeout + 'ms';\n errCallback(AWS.util.error(new Error(msg), {code: 'TimeoutError'}));\n stream.abort();\n });\n\n stream.on('error', function() {\n if (connectTimeoutId) {\n clearTimeout(connectTimeoutId);\n connectTimeoutId = null;\n }\n if (stream.didCallback) return; stream.didCallback = true;\n errCallback.apply(stream, arguments);\n });\n\n var expect = httpRequest.headers.Expect || httpRequest.headers.expect;\n if (expect === '100-continue') {\n stream.on('continue', function() {\n self.writeBody(stream, httpRequest);\n });\n } else {\n this.writeBody(stream, httpRequest);\n }\n\n return stream;\n },\n\n writeBody: function writeBody(stream, httpRequest) {\n var body = httpRequest.body;\n var totalBytes = parseInt(httpRequest.headers['Content-Length'], 10);\n\n if (body instanceof Stream) {\n // For progress support of streaming content -\n // pipe the data through a transform stream to emit 'sendProgress' events\n var progressStream = this.progressStream(stream, totalBytes);\n if (progressStream) {\n body.pipe(progressStream).pipe(stream);\n } else {\n body.pipe(stream);\n }\n } else if (body) {\n // The provided body is a buffer/string and is already fully available in memory -\n // For performance it's best to send it as a whole by calling stream.end(body),\n // Callers expect a 'sendProgress' event which is best emitted once\n // the http request stream has been fully written and all data flushed.\n // The use of totalBytes is important over body.length for strings where\n // length is char length and not byte length.\n stream.once('finish', function() {\n stream.emit('sendProgress', {\n loaded: totalBytes,\n total: totalBytes\n });\n });\n stream.end(body);\n } else {\n // no request body\n stream.end();\n }\n },\n\n /**\n * Create the https.Agent or http.Agent according to the request schema.\n */\n getAgent: function getAgent(useSSL, agentOptions) {\n var http = useSSL ? require('https') : require('http');\n if (useSSL) {\n if (!AWS.NodeHttpClient.sslAgent) {\n AWS.NodeHttpClient.sslAgent = new http.Agent(AWS.util.merge({\n rejectUnauthorized: process.env.NODE_TLS_REJECT_UNAUTHORIZED === '0' ? false : true\n }, agentOptions || {}));\n AWS.NodeHttpClient.sslAgent.setMaxListeners(0);\n\n // delegate maxSockets to globalAgent, set a default limit of 50 if current value is Infinity.\n // Users can bypass this default by supplying their own Agent as part of SDK configuration.\n Object.defineProperty(AWS.NodeHttpClient.sslAgent, 'maxSockets', {\n enumerable: true,\n get: function() {\n var defaultMaxSockets = 50;\n var globalAgent = http.globalAgent;\n if (globalAgent && globalAgent.maxSockets !== Infinity && typeof globalAgent.maxSockets === 'number') {\n return globalAgent.maxSockets;\n }\n return defaultMaxSockets;\n }\n });\n }\n return AWS.NodeHttpClient.sslAgent;\n } else {\n if (!AWS.NodeHttpClient.agent) {\n AWS.NodeHttpClient.agent = new http.Agent(agentOptions);\n }\n return AWS.NodeHttpClient.agent;\n }\n },\n\n progressStream: function progressStream(stream, totalBytes) {\n if (typeof TransformStream === 'undefined') {\n // for node 0.8 there is no streaming progress\n return;\n }\n var loadedBytes = 0;\n var reporter = new TransformStream();\n reporter._transform = function(chunk, encoding, callback) {\n if (chunk) {\n loadedBytes += chunk.length;\n stream.emit('sendProgress', {\n loaded: loadedBytes,\n total: totalBytes\n });\n }\n callback(null, chunk);\n };\n return reporter;\n },\n\n emitter: null\n});\n\n/**\n * @!ignore\n */\n\n/**\n * @api private\n */\nAWS.HttpClient.prototype = AWS.NodeHttpClient.prototype;\n\n/**\n * @api private\n */\nAWS.HttpClient.streamsApiVersion = ReadableStream ? 2 : 1;\n","var util = require('../util');\n\nfunction JsonBuilder() { }\n\nJsonBuilder.prototype.build = function(value, shape) {\n return JSON.stringify(translate(value, shape));\n};\n\nfunction translate(value, shape) {\n if (!shape || value === undefined || value === null) return undefined;\n\n switch (shape.type) {\n case 'structure': return translateStructure(value, shape);\n case 'map': return translateMap(value, shape);\n case 'list': return translateList(value, shape);\n default: return translateScalar(value, shape);\n }\n}\n\nfunction translateStructure(structure, shape) {\n var struct = {};\n util.each(structure, function(name, value) {\n var memberShape = shape.members[name];\n if (memberShape) {\n if (memberShape.location !== 'body') return;\n var locationName = memberShape.isLocationName ? memberShape.name : name;\n var result = translate(value, memberShape);\n if (result !== undefined) struct[locationName] = result;\n }\n });\n return struct;\n}\n\nfunction translateList(list, shape) {\n var out = [];\n util.arrayEach(list, function(value) {\n var result = translate(value, shape.member);\n if (result !== undefined) out.push(result);\n });\n return out;\n}\n\nfunction translateMap(map, shape) {\n var out = {};\n util.each(map, function(key, value) {\n var result = translate(value, shape.value);\n if (result !== undefined) out[key] = result;\n });\n return out;\n}\n\nfunction translateScalar(value, shape) {\n return shape.toWireFormat(value);\n}\n\n/**\n * @api private\n */\nmodule.exports = JsonBuilder;\n","var util = require('../util');\n\nfunction JsonParser() { }\n\nJsonParser.prototype.parse = function(value, shape) {\n return translate(JSON.parse(value), shape);\n};\n\nfunction translate(value, shape) {\n if (!shape || value === undefined) return undefined;\n\n switch (shape.type) {\n case 'structure': return translateStructure(value, shape);\n case 'map': return translateMap(value, shape);\n case 'list': return translateList(value, shape);\n default: return translateScalar(value, shape);\n }\n}\n\nfunction translateStructure(structure, shape) {\n if (structure == null) return undefined;\n\n var struct = {};\n var shapeMembers = shape.members;\n util.each(shapeMembers, function(name, memberShape) {\n var locationName = memberShape.isLocationName ? memberShape.name : name;\n if (Object.prototype.hasOwnProperty.call(structure, locationName)) {\n var value = structure[locationName];\n var result = translate(value, memberShape);\n if (result !== undefined) struct[name] = result;\n }\n });\n return struct;\n}\n\nfunction translateList(list, shape) {\n if (list == null) return undefined;\n\n var out = [];\n util.arrayEach(list, function(value) {\n var result = translate(value, shape.member);\n if (result === undefined) out.push(null);\n else out.push(result);\n });\n return out;\n}\n\nfunction translateMap(map, shape) {\n if (map == null) return undefined;\n\n var out = {};\n util.each(map, function(key, value) {\n var result = translate(value, shape.value);\n if (result === undefined) out[key] = null;\n else out[key] = result;\n });\n return out;\n}\n\nfunction translateScalar(value, shape) {\n return shape.toType(value);\n}\n\n/**\n * @api private\n */\nmodule.exports = JsonParser;\n","var AWS = require('./core');\nrequire('./http');\nvar inherit = AWS.util.inherit;\n\n/**\n * Represents a metadata service available on EC2 instances. Using the\n * {request} method, you can receieve metadata about any available resource\n * on the metadata service.\n *\n * You can disable the use of the IMDS by setting the AWS_EC2_METADATA_DISABLED\n * environment variable to a truthy value.\n *\n * @!attribute [r] httpOptions\n * @return [map] a map of options to pass to the underlying HTTP request:\n *\n * * **timeout** (Number) — a timeout value in milliseconds to wait\n * before aborting the connection. Set to 0 for no timeout.\n *\n * @!macro nobrowser\n */\nAWS.MetadataService = inherit({\n /**\n * @return [String] the hostname of the instance metadata service\n */\n host: '169.254.169.254',\n\n /**\n * @!ignore\n */\n\n /**\n * Default HTTP options. By default, the metadata service is set to not\n * timeout on long requests. This means that on non-EC2 machines, this\n * request will never return. If you are calling this operation from an\n * environment that may not always run on EC2, set a `timeout` value so\n * the SDK will abort the request after a given number of milliseconds.\n */\n httpOptions: { timeout: 0 },\n\n /**\n * when enabled, metadata service will not fetch token\n */\n disableFetchToken: false,\n\n /**\n * Creates a new MetadataService object with a given set of options.\n *\n * @option options host [String] the hostname of the instance metadata\n * service\n * @option options httpOptions [map] a map of options to pass to the\n * underlying HTTP request:\n *\n * * **timeout** (Number) — a timeout value in milliseconds to wait\n * before aborting the connection. Set to 0 for no timeout.\n * @option options maxRetries [Integer] the maximum number of retries to\n * perform for timeout errors\n * @option options retryDelayOptions [map] A set of options to configure the\n * retry delay on retryable errors. See AWS.Config for details.\n */\n constructor: function MetadataService(options) {\n AWS.util.update(this, options);\n },\n\n /**\n * Sends a request to the instance metadata service for a given resource.\n *\n * @param path [String] the path of the resource to get\n *\n * @param options [map] an optional map used to make request\n *\n * * **method** (String) — HTTP request method\n *\n * * **headers** (map<String,String>) — a map of response header keys and their respective values\n *\n * @callback callback function(err, data)\n * Called when a response is available from the service.\n * @param err [Error, null] if an error occurred, this value will be set\n * @param data [String, null] if the request was successful, the body of\n * the response\n */\n request: function request(path, options, callback) {\n if (arguments.length === 2) {\n callback = options;\n options = {};\n }\n\n if (process.env[AWS.util.imdsDisabledEnv]) {\n callback(new Error('EC2 Instance Metadata Service access disabled'));\n return;\n }\n\n path = path || '/';\n var httpRequest = new AWS.HttpRequest('http://' + this.host + path);\n httpRequest.method = options.method || 'GET';\n if (options.headers) {\n httpRequest.headers = options.headers;\n }\n AWS.util.handleRequestWithRetries(httpRequest, this, callback);\n },\n\n /**\n * @api private\n */\n loadCredentialsCallbacks: [],\n\n /**\n * Fetches metadata token used for getting credentials\n *\n * @api private\n * @callback callback function(err, token)\n * Called when token is loaded from the resource\n */\n fetchMetadataToken: function fetchMetadataToken(callback) {\n var self = this;\n var tokenFetchPath = '/latest/api/token';\n self.request(\n tokenFetchPath,\n {\n 'method': 'PUT',\n 'headers': {\n 'x-aws-ec2-metadata-token-ttl-seconds': '21600'\n }\n },\n callback\n );\n },\n\n /**\n * Fetches credentials\n *\n * @api private\n * @callback cb function(err, creds)\n * Called when credentials are loaded from the resource\n */\n fetchCredentials: function fetchCredentials(options, cb) {\n var self = this;\n var basePath = '/latest/meta-data/iam/security-credentials/';\n\n self.request(basePath, options, function (err, roleName) {\n if (err) {\n self.disableFetchToken = !(err.statusCode === 401);\n cb(AWS.util.error(\n err,\n {\n message: 'EC2 Metadata roleName request returned error'\n }\n ));\n return;\n }\n roleName = roleName.split('\\n')[0]; // grab first (and only) role\n self.request(basePath + roleName, options, function (credErr, credData) {\n if (credErr) {\n self.disableFetchToken = !(credErr.statusCode === 401);\n cb(AWS.util.error(\n credErr,\n {\n message: 'EC2 Metadata creds request returned error'\n }\n ));\n return;\n }\n try {\n var credentials = JSON.parse(credData);\n cb(null, credentials);\n } catch (parseError) {\n cb(parseError);\n }\n });\n });\n },\n\n /**\n * Loads a set of credentials stored in the instance metadata service\n *\n * @api private\n * @callback callback function(err, credentials)\n * Called when credentials are loaded from the resource\n * @param err [Error] if an error occurred, this value will be set\n * @param credentials [Object] the raw JSON object containing all\n * metadata from the credentials resource\n */\n loadCredentials: function loadCredentials(callback) {\n var self = this;\n self.loadCredentialsCallbacks.push(callback);\n if (self.loadCredentialsCallbacks.length > 1) { return; }\n\n function callbacks(err, creds) {\n var cb;\n while ((cb = self.loadCredentialsCallbacks.shift()) !== undefined) {\n cb(err, creds);\n }\n }\n\n if (self.disableFetchToken) {\n self.fetchCredentials({}, callbacks);\n } else {\n self.fetchMetadataToken(function(tokenError, token) {\n if (tokenError) {\n if (tokenError.code === 'TimeoutError') {\n self.disableFetchToken = true;\n } else if (tokenError.retryable === true) {\n callbacks(AWS.util.error(\n tokenError,\n {\n message: 'EC2 Metadata token request returned error'\n }\n ));\n return;\n } else if (tokenError.statusCode === 400) {\n callbacks(AWS.util.error(\n tokenError,\n {\n message: 'EC2 Metadata token request returned 400'\n }\n ));\n return;\n }\n }\n var options = {};\n if (token) {\n options.headers = {\n 'x-aws-ec2-metadata-token': token\n };\n }\n self.fetchCredentials(options, callbacks);\n });\n\n }\n }\n});\n\n/**\n * @api private\n */\nmodule.exports = AWS.MetadataService;\n","var Collection = require('./collection');\nvar Operation = require('./operation');\nvar Shape = require('./shape');\nvar Paginator = require('./paginator');\nvar ResourceWaiter = require('./resource_waiter');\nvar metadata = require('../../apis/metadata.json');\n\nvar util = require('../util');\nvar property = util.property;\nvar memoizedProperty = util.memoizedProperty;\n\nfunction Api(api, options) {\n var self = this;\n api = api || {};\n options = options || {};\n options.api = this;\n\n api.metadata = api.metadata || {};\n\n var serviceIdentifier = options.serviceIdentifier;\n delete options.serviceIdentifier;\n\n property(this, 'isApi', true, false);\n property(this, 'apiVersion', api.metadata.apiVersion);\n property(this, 'endpointPrefix', api.metadata.endpointPrefix);\n property(this, 'signingName', api.metadata.signingName);\n property(this, 'globalEndpoint', api.metadata.globalEndpoint);\n property(this, 'signatureVersion', api.metadata.signatureVersion);\n property(this, 'jsonVersion', api.metadata.jsonVersion);\n property(this, 'targetPrefix', api.metadata.targetPrefix);\n property(this, 'protocol', api.metadata.protocol);\n property(this, 'timestampFormat', api.metadata.timestampFormat);\n property(this, 'xmlNamespaceUri', api.metadata.xmlNamespace);\n property(this, 'abbreviation', api.metadata.serviceAbbreviation);\n property(this, 'fullName', api.metadata.serviceFullName);\n property(this, 'serviceId', api.metadata.serviceId);\n if (serviceIdentifier && metadata[serviceIdentifier]) {\n property(this, 'xmlNoDefaultLists', metadata[serviceIdentifier].xmlNoDefaultLists, false);\n }\n\n memoizedProperty(this, 'className', function() {\n var name = api.metadata.serviceAbbreviation || api.metadata.serviceFullName;\n if (!name) return null;\n\n name = name.replace(/^Amazon|AWS\\s*|\\(.*|\\s+|\\W+/g, '');\n if (name === 'ElasticLoadBalancing') name = 'ELB';\n return name;\n });\n\n function addEndpointOperation(name, operation) {\n if (operation.endpointoperation === true) {\n property(self, 'endpointOperation', util.string.lowerFirst(name));\n }\n if (operation.endpointdiscovery && !self.hasRequiredEndpointDiscovery) {\n property(\n self,\n 'hasRequiredEndpointDiscovery',\n operation.endpointdiscovery.required === true\n );\n }\n }\n\n property(this, 'operations', new Collection(api.operations, options, function(name, operation) {\n return new Operation(name, operation, options);\n }, util.string.lowerFirst, addEndpointOperation));\n\n property(this, 'shapes', new Collection(api.shapes, options, function(name, shape) {\n return Shape.create(shape, options);\n }));\n\n property(this, 'paginators', new Collection(api.paginators, options, function(name, paginator) {\n return new Paginator(name, paginator, options);\n }));\n\n property(this, 'waiters', new Collection(api.waiters, options, function(name, waiter) {\n return new ResourceWaiter(name, waiter, options);\n }, util.string.lowerFirst));\n\n if (options.documentation) {\n property(this, 'documentation', api.documentation);\n property(this, 'documentationUrl', api.documentationUrl);\n }\n}\n\n/**\n * @api private\n */\nmodule.exports = Api;\n","var memoizedProperty = require('../util').memoizedProperty;\n\nfunction memoize(name, value, factory, nameTr) {\n memoizedProperty(this, nameTr(name), function() {\n return factory(name, value);\n });\n}\n\nfunction Collection(iterable, options, factory, nameTr, callback) {\n nameTr = nameTr || String;\n var self = this;\n\n for (var id in iterable) {\n if (Object.prototype.hasOwnProperty.call(iterable, id)) {\n memoize.call(self, id, iterable[id], factory, nameTr);\n if (callback) callback(id, iterable[id]);\n }\n }\n}\n\n/**\n * @api private\n */\nmodule.exports = Collection;\n","var Shape = require('./shape');\n\nvar util = require('../util');\nvar property = util.property;\nvar memoizedProperty = util.memoizedProperty;\n\nfunction Operation(name, operation, options) {\n var self = this;\n options = options || {};\n\n property(this, 'name', operation.name || name);\n property(this, 'api', options.api, false);\n\n operation.http = operation.http || {};\n property(this, 'endpoint', operation.endpoint);\n property(this, 'httpMethod', operation.http.method || 'POST');\n property(this, 'httpPath', operation.http.requestUri || '/');\n property(this, 'authtype', operation.authtype || '');\n property(\n this,\n 'endpointDiscoveryRequired',\n operation.endpointdiscovery ?\n (operation.endpointdiscovery.required ? 'REQUIRED' : 'OPTIONAL') :\n 'NULL'\n );\n\n memoizedProperty(this, 'input', function() {\n if (!operation.input) {\n return new Shape.create({type: 'structure'}, options);\n }\n return Shape.create(operation.input, options);\n });\n\n memoizedProperty(this, 'output', function() {\n if (!operation.output) {\n return new Shape.create({type: 'structure'}, options);\n }\n return Shape.create(operation.output, options);\n });\n\n memoizedProperty(this, 'errors', function() {\n var list = [];\n if (!operation.errors) return null;\n\n for (var i = 0; i < operation.errors.length; i++) {\n list.push(Shape.create(operation.errors[i], options));\n }\n\n return list;\n });\n\n memoizedProperty(this, 'paginator', function() {\n return options.api.paginators[name];\n });\n\n if (options.documentation) {\n property(this, 'documentation', operation.documentation);\n property(this, 'documentationUrl', operation.documentationUrl);\n }\n\n // idempotentMembers only tracks top-level input shapes\n memoizedProperty(this, 'idempotentMembers', function() {\n var idempotentMembers = [];\n var input = self.input;\n var members = input.members;\n if (!input.members) {\n return idempotentMembers;\n }\n for (var name in members) {\n if (!members.hasOwnProperty(name)) {\n continue;\n }\n if (members[name].isIdempotent === true) {\n idempotentMembers.push(name);\n }\n }\n return idempotentMembers;\n });\n\n memoizedProperty(this, 'hasEventOutput', function() {\n var output = self.output;\n return hasEventStream(output);\n });\n}\n\nfunction hasEventStream(topLevelShape) {\n var members = topLevelShape.members;\n var payload = topLevelShape.payload;\n\n if (!topLevelShape.members) {\n return false;\n }\n\n if (payload) {\n var payloadMember = members[payload];\n return payloadMember.isEventStream;\n }\n\n // check if any member is an event stream\n for (var name in members) {\n if (!members.hasOwnProperty(name)) {\n if (members[name].isEventStream === true) {\n return true;\n }\n }\n }\n return false;\n}\n\n/**\n * @api private\n */\nmodule.exports = Operation;\n","var property = require('../util').property;\n\nfunction Paginator(name, paginator) {\n property(this, 'inputToken', paginator.input_token);\n property(this, 'limitKey', paginator.limit_key);\n property(this, 'moreResults', paginator.more_results);\n property(this, 'outputToken', paginator.output_token);\n property(this, 'resultKey', paginator.result_key);\n}\n\n/**\n * @api private\n */\nmodule.exports = Paginator;\n","var util = require('../util');\nvar property = util.property;\n\nfunction ResourceWaiter(name, waiter, options) {\n options = options || {};\n property(this, 'name', name);\n property(this, 'api', options.api, false);\n\n if (waiter.operation) {\n property(this, 'operation', util.string.lowerFirst(waiter.operation));\n }\n\n var self = this;\n var keys = [\n 'type',\n 'description',\n 'delay',\n 'maxAttempts',\n 'acceptors'\n ];\n\n keys.forEach(function(key) {\n var value = waiter[key];\n if (value) {\n property(self, key, value);\n }\n });\n}\n\n/**\n * @api private\n */\nmodule.exports = ResourceWaiter;\n","var Collection = require('./collection');\n\nvar util = require('../util');\n\nfunction property(obj, name, value) {\n if (value !== null && value !== undefined) {\n util.property.apply(this, arguments);\n }\n}\n\nfunction memoizedProperty(obj, name) {\n if (!obj.constructor.prototype[name]) {\n util.memoizedProperty.apply(this, arguments);\n }\n}\n\nfunction Shape(shape, options, memberName) {\n options = options || {};\n\n property(this, 'shape', shape.shape);\n property(this, 'api', options.api, false);\n property(this, 'type', shape.type);\n property(this, 'enum', shape.enum);\n property(this, 'min', shape.min);\n property(this, 'max', shape.max);\n property(this, 'pattern', shape.pattern);\n property(this, 'location', shape.location || this.location || 'body');\n property(this, 'name', this.name || shape.xmlName || shape.queryName ||\n shape.locationName || memberName);\n property(this, 'isStreaming', shape.streaming || this.isStreaming || false);\n property(this, 'requiresLength', shape.requiresLength, false);\n property(this, 'isComposite', shape.isComposite || false);\n property(this, 'isShape', true, false);\n property(this, 'isQueryName', Boolean(shape.queryName), false);\n property(this, 'isLocationName', Boolean(shape.locationName), false);\n property(this, 'isIdempotent', shape.idempotencyToken === true);\n property(this, 'isJsonValue', shape.jsonvalue === true);\n property(this, 'isSensitive', shape.sensitive === true || shape.prototype && shape.prototype.sensitive === true);\n property(this, 'isEventStream', Boolean(shape.eventstream), false);\n property(this, 'isEvent', Boolean(shape.event), false);\n property(this, 'isEventPayload', Boolean(shape.eventpayload), false);\n property(this, 'isEventHeader', Boolean(shape.eventheader), false);\n property(this, 'isTimestampFormatSet', Boolean(shape.timestampFormat) || shape.prototype && shape.prototype.isTimestampFormatSet === true, false);\n property(this, 'endpointDiscoveryId', Boolean(shape.endpointdiscoveryid), false);\n property(this, 'hostLabel', Boolean(shape.hostLabel), false);\n\n if (options.documentation) {\n property(this, 'documentation', shape.documentation);\n property(this, 'documentationUrl', shape.documentationUrl);\n }\n\n if (shape.xmlAttribute) {\n property(this, 'isXmlAttribute', shape.xmlAttribute || false);\n }\n\n // type conversion and parsing\n property(this, 'defaultValue', null);\n this.toWireFormat = function(value) {\n if (value === null || value === undefined) return '';\n return value;\n };\n this.toType = function(value) { return value; };\n}\n\n/**\n * @api private\n */\nShape.normalizedTypes = {\n character: 'string',\n double: 'float',\n long: 'integer',\n short: 'integer',\n biginteger: 'integer',\n bigdecimal: 'float',\n blob: 'binary'\n};\n\n/**\n * @api private\n */\nShape.types = {\n 'structure': StructureShape,\n 'list': ListShape,\n 'map': MapShape,\n 'boolean': BooleanShape,\n 'timestamp': TimestampShape,\n 'float': FloatShape,\n 'integer': IntegerShape,\n 'string': StringShape,\n 'base64': Base64Shape,\n 'binary': BinaryShape\n};\n\nShape.resolve = function resolve(shape, options) {\n if (shape.shape) {\n var refShape = options.api.shapes[shape.shape];\n if (!refShape) {\n throw new Error('Cannot find shape reference: ' + shape.shape);\n }\n\n return refShape;\n } else {\n return null;\n }\n};\n\nShape.create = function create(shape, options, memberName) {\n if (shape.isShape) return shape;\n\n var refShape = Shape.resolve(shape, options);\n if (refShape) {\n var filteredKeys = Object.keys(shape);\n if (!options.documentation) {\n filteredKeys = filteredKeys.filter(function(name) {\n return !name.match(/documentation/);\n });\n }\n\n // create an inline shape with extra members\n var InlineShape = function() {\n refShape.constructor.call(this, shape, options, memberName);\n };\n InlineShape.prototype = refShape;\n return new InlineShape();\n } else {\n // set type if not set\n if (!shape.type) {\n if (shape.members) shape.type = 'structure';\n else if (shape.member) shape.type = 'list';\n else if (shape.key) shape.type = 'map';\n else shape.type = 'string';\n }\n\n // normalize types\n var origType = shape.type;\n if (Shape.normalizedTypes[shape.type]) {\n shape.type = Shape.normalizedTypes[shape.type];\n }\n\n if (Shape.types[shape.type]) {\n return new Shape.types[shape.type](shape, options, memberName);\n } else {\n throw new Error('Unrecognized shape type: ' + origType);\n }\n }\n};\n\nfunction CompositeShape(shape) {\n Shape.apply(this, arguments);\n property(this, 'isComposite', true);\n\n if (shape.flattened) {\n property(this, 'flattened', shape.flattened || false);\n }\n}\n\nfunction StructureShape(shape, options) {\n var self = this;\n var requiredMap = null, firstInit = !this.isShape;\n\n CompositeShape.apply(this, arguments);\n\n if (firstInit) {\n property(this, 'defaultValue', function() { return {}; });\n property(this, 'members', {});\n property(this, 'memberNames', []);\n property(this, 'required', []);\n property(this, 'isRequired', function() { return false; });\n }\n\n if (shape.members) {\n property(this, 'members', new Collection(shape.members, options, function(name, member) {\n return Shape.create(member, options, name);\n }));\n memoizedProperty(this, 'memberNames', function() {\n return shape.xmlOrder || Object.keys(shape.members);\n });\n\n if (shape.event) {\n memoizedProperty(this, 'eventPayloadMemberName', function() {\n var members = self.members;\n var memberNames = self.memberNames;\n // iterate over members to find ones that are event payloads\n for (var i = 0, iLen = memberNames.length; i < iLen; i++) {\n if (members[memberNames[i]].isEventPayload) {\n return memberNames[i];\n }\n }\n });\n\n memoizedProperty(this, 'eventHeaderMemberNames', function() {\n var members = self.members;\n var memberNames = self.memberNames;\n var eventHeaderMemberNames = [];\n // iterate over members to find ones that are event headers\n for (var i = 0, iLen = memberNames.length; i < iLen; i++) {\n if (members[memberNames[i]].isEventHeader) {\n eventHeaderMemberNames.push(memberNames[i]);\n }\n }\n return eventHeaderMemberNames;\n });\n }\n }\n\n if (shape.required) {\n property(this, 'required', shape.required);\n property(this, 'isRequired', function(name) {\n if (!requiredMap) {\n requiredMap = {};\n for (var i = 0; i < shape.required.length; i++) {\n requiredMap[shape.required[i]] = true;\n }\n }\n\n return requiredMap[name];\n }, false, true);\n }\n\n property(this, 'resultWrapper', shape.resultWrapper || null);\n\n if (shape.payload) {\n property(this, 'payload', shape.payload);\n }\n\n if (typeof shape.xmlNamespace === 'string') {\n property(this, 'xmlNamespaceUri', shape.xmlNamespace);\n } else if (typeof shape.xmlNamespace === 'object') {\n property(this, 'xmlNamespacePrefix', shape.xmlNamespace.prefix);\n property(this, 'xmlNamespaceUri', shape.xmlNamespace.uri);\n }\n}\n\nfunction ListShape(shape, options) {\n var self = this, firstInit = !this.isShape;\n CompositeShape.apply(this, arguments);\n\n if (firstInit) {\n property(this, 'defaultValue', function() { return []; });\n }\n\n if (shape.member) {\n memoizedProperty(this, 'member', function() {\n return Shape.create(shape.member, options);\n });\n }\n\n if (this.flattened) {\n var oldName = this.name;\n memoizedProperty(this, 'name', function() {\n return self.member.name || oldName;\n });\n }\n}\n\nfunction MapShape(shape, options) {\n var firstInit = !this.isShape;\n CompositeShape.apply(this, arguments);\n\n if (firstInit) {\n property(this, 'defaultValue', function() { return {}; });\n property(this, 'key', Shape.create({type: 'string'}, options));\n property(this, 'value', Shape.create({type: 'string'}, options));\n }\n\n if (shape.key) {\n memoizedProperty(this, 'key', function() {\n return Shape.create(shape.key, options);\n });\n }\n if (shape.value) {\n memoizedProperty(this, 'value', function() {\n return Shape.create(shape.value, options);\n });\n }\n}\n\nfunction TimestampShape(shape) {\n var self = this;\n Shape.apply(this, arguments);\n\n if (shape.timestampFormat) {\n property(this, 'timestampFormat', shape.timestampFormat);\n } else if (self.isTimestampFormatSet && this.timestampFormat) {\n property(this, 'timestampFormat', this.timestampFormat);\n } else if (this.location === 'header') {\n property(this, 'timestampFormat', 'rfc822');\n } else if (this.location === 'querystring') {\n property(this, 'timestampFormat', 'iso8601');\n } else if (this.api) {\n switch (this.api.protocol) {\n case 'json':\n case 'rest-json':\n property(this, 'timestampFormat', 'unixTimestamp');\n break;\n case 'rest-xml':\n case 'query':\n case 'ec2':\n property(this, 'timestampFormat', 'iso8601');\n break;\n }\n }\n\n this.toType = function(value) {\n if (value === null || value === undefined) return null;\n if (typeof value.toUTCString === 'function') return value;\n return typeof value === 'string' || typeof value === 'number' ?\n util.date.parseTimestamp(value) : null;\n };\n\n this.toWireFormat = function(value) {\n return util.date.format(value, self.timestampFormat);\n };\n}\n\nfunction StringShape() {\n Shape.apply(this, arguments);\n\n var nullLessProtocols = ['rest-xml', 'query', 'ec2'];\n this.toType = function(value) {\n value = this.api && nullLessProtocols.indexOf(this.api.protocol) > -1 ?\n value || '' : value;\n if (this.isJsonValue) {\n return JSON.parse(value);\n }\n\n return value && typeof value.toString === 'function' ?\n value.toString() : value;\n };\n\n this.toWireFormat = function(value) {\n return this.isJsonValue ? JSON.stringify(value) : value;\n };\n}\n\nfunction FloatShape() {\n Shape.apply(this, arguments);\n\n this.toType = function(value) {\n if (value === null || value === undefined) return null;\n return parseFloat(value);\n };\n this.toWireFormat = this.toType;\n}\n\nfunction IntegerShape() {\n Shape.apply(this, arguments);\n\n this.toType = function(value) {\n if (value === null || value === undefined) return null;\n return parseInt(value, 10);\n };\n this.toWireFormat = this.toType;\n}\n\nfunction BinaryShape() {\n Shape.apply(this, arguments);\n this.toType = function(value) {\n var buf = util.base64.decode(value);\n if (this.isSensitive && util.isNode() && typeof util.Buffer.alloc === 'function') {\n /* Node.js can create a Buffer that is not isolated.\n * i.e. buf.byteLength !== buf.buffer.byteLength\n * This means that the sensitive data is accessible to anyone with access to buf.buffer.\n * If this is the node shared Buffer, then other code within this process _could_ find this secret.\n * Copy sensitive data to an isolated Buffer and zero the sensitive data.\n * While this is safe to do here, copying this code somewhere else may produce unexpected results.\n */\n var secureBuf = util.Buffer.alloc(buf.length, buf);\n buf.fill(0);\n buf = secureBuf;\n }\n return buf;\n };\n this.toWireFormat = util.base64.encode;\n}\n\nfunction Base64Shape() {\n BinaryShape.apply(this, arguments);\n}\n\nfunction BooleanShape() {\n Shape.apply(this, arguments);\n\n this.toType = function(value) {\n if (typeof value === 'boolean') return value;\n if (value === null || value === undefined) return null;\n return value === 'true';\n };\n}\n\n/**\n * @api private\n */\nShape.shapes = {\n StructureShape: StructureShape,\n ListShape: ListShape,\n MapShape: MapShape,\n StringShape: StringShape,\n BooleanShape: BooleanShape,\n Base64Shape: Base64Shape\n};\n\n/**\n * @api private\n */\nmodule.exports = Shape;\n","var util = require('./util');\n\nutil.isBrowser = function() { return false; };\nutil.isNode = function() { return true; };\n\n// node.js specific modules\nutil.crypto.lib = require('crypto');\nutil.Buffer = require('buffer').Buffer;\nutil.domain = require('domain');\nutil.stream = require('stream');\nutil.url = require('url');\nutil.querystring = require('querystring');\nutil.environment = 'nodejs';\nutil.createEventStream = util.stream.Readable ?\n require('./event-stream/streaming-create-event-stream').createEventStream : require('./event-stream/buffered-create-event-stream').createEventStream;\nutil.realClock = require('./realclock/nodeClock');\nutil.clientSideMonitoring = {\n Publisher: require('./publisher').Publisher,\n configProvider: require('./publisher/configuration'),\n};\nutil.iniLoader = require('./shared-ini').iniLoader;\nutil.getSystemErrorName = require('util').getSystemErrorName;\n\nvar AWS;\n\n/**\n * @api private\n */\nmodule.exports = AWS = require('./core');\n\nrequire('./credentials');\nrequire('./credentials/credential_provider_chain');\nrequire('./credentials/temporary_credentials');\nrequire('./credentials/chainable_temporary_credentials');\nrequire('./credentials/web_identity_credentials');\nrequire('./credentials/cognito_identity_credentials');\nrequire('./credentials/saml_credentials');\nrequire('./credentials/process_credentials');\n\n// Load the xml2js XML parser\nAWS.XML.Parser = require('./xml/node_parser');\n\n// Load Node HTTP client\nrequire('./http/node');\n\nrequire('./shared-ini/ini-loader');\n\n// Load custom credential providers\nrequire('./credentials/token_file_web_identity_credentials');\nrequire('./credentials/ec2_metadata_credentials');\nrequire('./credentials/remote_credentials');\nrequire('./credentials/ecs_credentials');\nrequire('./credentials/environment_credentials');\nrequire('./credentials/file_system_credentials');\nrequire('./credentials/shared_ini_file_credentials');\nrequire('./credentials/process_credentials');\n\n// Setup default chain providers\n// If this changes, please update documentation for\n// AWS.CredentialProviderChain.defaultProviders in\n// credentials/credential_provider_chain.js\nAWS.CredentialProviderChain.defaultProviders = [\n function () { return new AWS.EnvironmentCredentials('AWS'); },\n function () { return new AWS.EnvironmentCredentials('AMAZON'); },\n function () { return new AWS.SharedIniFileCredentials(); },\n function () { return new AWS.ECSCredentials(); },\n function () { return new AWS.ProcessCredentials(); },\n function () { return new AWS.TokenFileWebIdentityCredentials(); },\n function () { return new AWS.EC2MetadataCredentials(); }\n];\n\n// Update configuration keys\nAWS.util.update(AWS.Config.prototype.keys, {\n credentials: function () {\n var credentials = null;\n new AWS.CredentialProviderChain([\n function () { return new AWS.EnvironmentCredentials('AWS'); },\n function () { return new AWS.EnvironmentCredentials('AMAZON'); },\n function () { return new AWS.SharedIniFileCredentials({ disableAssumeRole: true }); }\n ]).resolve(function(err, creds) {\n if (!err) credentials = creds;\n });\n return credentials;\n },\n credentialProvider: function() {\n return new AWS.CredentialProviderChain();\n },\n logger: function () {\n return process.env.AWSJS_DEBUG ? console : null;\n },\n region: function() {\n var env = process.env;\n var region = env.AWS_REGION || env.AMAZON_REGION;\n if (env[AWS.util.configOptInEnv]) {\n var toCheck = [\n {filename: env[AWS.util.sharedCredentialsFileEnv]},\n {isConfig: true, filename: env[AWS.util.sharedConfigFileEnv]}\n ];\n var iniLoader = AWS.util.iniLoader;\n while (!region && toCheck.length) {\n var configFile = iniLoader.loadFrom(toCheck.shift());\n var profile = configFile[env.AWS_PROFILE || AWS.util.defaultProfile];\n region = profile && profile.region;\n }\n }\n return region;\n }\n});\n\n// Reset configuration\nAWS.config = new AWS.Config();\n","var AWS = require('./core');\n\n/**\n * @api private\n */\nAWS.ParamValidator = AWS.util.inherit({\n /**\n * Create a new validator object.\n *\n * @param validation [Boolean|map] whether input parameters should be\n * validated against the operation description before sending the\n * request. Pass a map to enable any of the following specific\n * validation features:\n *\n * * **min** [Boolean] — Validates that a value meets the min\n * constraint. This is enabled by default when paramValidation is set\n * to `true`.\n * * **max** [Boolean] — Validates that a value meets the max\n * constraint.\n * * **pattern** [Boolean] — Validates that a string value matches a\n * regular expression.\n * * **enum** [Boolean] — Validates that a string value matches one\n * of the allowable enum values.\n */\n constructor: function ParamValidator(validation) {\n if (validation === true || validation === undefined) {\n validation = {'min': true};\n }\n this.validation = validation;\n },\n\n validate: function validate(shape, params, context) {\n this.errors = [];\n this.validateMember(shape, params || {}, context || 'params');\n\n if (this.errors.length > 1) {\n var msg = this.errors.join('\\n* ');\n msg = 'There were ' + this.errors.length +\n ' validation errors:\\n* ' + msg;\n throw AWS.util.error(new Error(msg),\n {code: 'MultipleValidationErrors', errors: this.errors});\n } else if (this.errors.length === 1) {\n throw this.errors[0];\n } else {\n return true;\n }\n },\n\n fail: function fail(code, message) {\n this.errors.push(AWS.util.error(new Error(message), {code: code}));\n },\n\n validateStructure: function validateStructure(shape, params, context) {\n this.validateType(params, context, ['object'], 'structure');\n\n var paramName;\n for (var i = 0; shape.required && i < shape.required.length; i++) {\n paramName = shape.required[i];\n var value = params[paramName];\n if (value === undefined || value === null) {\n this.fail('MissingRequiredParameter',\n 'Missing required key \\'' + paramName + '\\' in ' + context);\n }\n }\n\n // validate hash members\n for (paramName in params) {\n if (!Object.prototype.hasOwnProperty.call(params, paramName)) continue;\n\n var paramValue = params[paramName],\n memberShape = shape.members[paramName];\n\n if (memberShape !== undefined) {\n var memberContext = [context, paramName].join('.');\n this.validateMember(memberShape, paramValue, memberContext);\n } else if (paramValue !== undefined && paramValue !== null) {\n this.fail('UnexpectedParameter',\n 'Unexpected key \\'' + paramName + '\\' found in ' + context);\n }\n }\n\n return true;\n },\n\n validateMember: function validateMember(shape, param, context) {\n switch (shape.type) {\n case 'structure':\n return this.validateStructure(shape, param, context);\n case 'list':\n return this.validateList(shape, param, context);\n case 'map':\n return this.validateMap(shape, param, context);\n default:\n return this.validateScalar(shape, param, context);\n }\n },\n\n validateList: function validateList(shape, params, context) {\n if (this.validateType(params, context, [Array])) {\n this.validateRange(shape, params.length, context, 'list member count');\n // validate array members\n for (var i = 0; i < params.length; i++) {\n this.validateMember(shape.member, params[i], context + '[' + i + ']');\n }\n }\n },\n\n validateMap: function validateMap(shape, params, context) {\n if (this.validateType(params, context, ['object'], 'map')) {\n // Build up a count of map members to validate range traits.\n var mapCount = 0;\n for (var param in params) {\n if (!Object.prototype.hasOwnProperty.call(params, param)) continue;\n // Validate any map key trait constraints\n this.validateMember(shape.key, param,\n context + '[key=\\'' + param + '\\']');\n this.validateMember(shape.value, params[param],\n context + '[\\'' + param + '\\']');\n mapCount++;\n }\n this.validateRange(shape, mapCount, context, 'map member count');\n }\n },\n\n validateScalar: function validateScalar(shape, value, context) {\n switch (shape.type) {\n case null:\n case undefined:\n case 'string':\n return this.validateString(shape, value, context);\n case 'base64':\n case 'binary':\n return this.validatePayload(value, context);\n case 'integer':\n case 'float':\n return this.validateNumber(shape, value, context);\n case 'boolean':\n return this.validateType(value, context, ['boolean']);\n case 'timestamp':\n return this.validateType(value, context, [Date,\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?Z$/, 'number'],\n 'Date object, ISO-8601 string, or a UNIX timestamp');\n default:\n return this.fail('UnkownType', 'Unhandled type ' +\n shape.type + ' for ' + context);\n }\n },\n\n validateString: function validateString(shape, value, context) {\n var validTypes = ['string'];\n if (shape.isJsonValue) {\n validTypes = validTypes.concat(['number', 'object', 'boolean']);\n }\n if (value !== null && this.validateType(value, context, validTypes)) {\n this.validateEnum(shape, value, context);\n this.validateRange(shape, value.length, context, 'string length');\n this.validatePattern(shape, value, context);\n this.validateUri(shape, value, context);\n }\n },\n\n validateUri: function validateUri(shape, value, context) {\n if (shape['location'] === 'uri') {\n if (value.length === 0) {\n this.fail('UriParameterError', 'Expected uri parameter to have length >= 1,'\n + ' but found \"' + value +'\" for ' + context);\n }\n }\n },\n\n validatePattern: function validatePattern(shape, value, context) {\n if (this.validation['pattern'] && shape['pattern'] !== undefined) {\n if (!(new RegExp(shape['pattern'])).test(value)) {\n this.fail('PatternMatchError', 'Provided value \"' + value + '\" '\n + 'does not match regex pattern /' + shape['pattern'] + '/ for '\n + context);\n }\n }\n },\n\n validateRange: function validateRange(shape, value, context, descriptor) {\n if (this.validation['min']) {\n if (shape['min'] !== undefined && value < shape['min']) {\n this.fail('MinRangeError', 'Expected ' + descriptor + ' >= '\n + shape['min'] + ', but found ' + value + ' for ' + context);\n }\n }\n if (this.validation['max']) {\n if (shape['max'] !== undefined && value > shape['max']) {\n this.fail('MaxRangeError', 'Expected ' + descriptor + ' <= '\n + shape['max'] + ', but found ' + value + ' for ' + context);\n }\n }\n },\n\n validateEnum: function validateRange(shape, value, context) {\n if (this.validation['enum'] && shape['enum'] !== undefined) {\n // Fail if the string value is not present in the enum list\n if (shape['enum'].indexOf(value) === -1) {\n this.fail('EnumError', 'Found string value of ' + value + ', but '\n + 'expected ' + shape['enum'].join('|') + ' for ' + context);\n }\n }\n },\n\n validateType: function validateType(value, context, acceptedTypes, type) {\n // We will not log an error for null or undefined, but we will return\n // false so that callers know that the expected type was not strictly met.\n if (value === null || value === undefined) return false;\n\n var foundInvalidType = false;\n for (var i = 0; i < acceptedTypes.length; i++) {\n if (typeof acceptedTypes[i] === 'string') {\n if (typeof value === acceptedTypes[i]) return true;\n } else if (acceptedTypes[i] instanceof RegExp) {\n if ((value || '').toString().match(acceptedTypes[i])) return true;\n } else {\n if (value instanceof acceptedTypes[i]) return true;\n if (AWS.util.isType(value, acceptedTypes[i])) return true;\n if (!type && !foundInvalidType) acceptedTypes = acceptedTypes.slice();\n acceptedTypes[i] = AWS.util.typeName(acceptedTypes[i]);\n }\n foundInvalidType = true;\n }\n\n var acceptedType = type;\n if (!acceptedType) {\n acceptedType = acceptedTypes.join(', ').replace(/,([^,]+)$/, ', or$1');\n }\n\n var vowel = acceptedType.match(/^[aeiou]/i) ? 'n' : '';\n this.fail('InvalidParameterType', 'Expected ' + context + ' to be a' +\n vowel + ' ' + acceptedType);\n return false;\n },\n\n validateNumber: function validateNumber(shape, value, context) {\n if (value === null || value === undefined) return;\n if (typeof value === 'string') {\n var castedValue = parseFloat(value);\n if (castedValue.toString() === value) value = castedValue;\n }\n if (this.validateType(value, context, ['number'])) {\n this.validateRange(shape, value, context, 'numeric value');\n }\n },\n\n validatePayload: function validatePayload(value, context) {\n if (value === null || value === undefined) return;\n if (typeof value === 'string') return;\n if (value && typeof value.byteLength === 'number') return; // typed arrays\n if (AWS.util.isNode()) { // special check for buffer/stream in Node.js\n var Stream = AWS.util.stream.Stream;\n if (AWS.util.Buffer.isBuffer(value) || value instanceof Stream) return;\n } else {\n if (typeof Blob !== void 0 && value instanceof Blob) return;\n }\n\n var types = ['Buffer', 'Stream', 'File', 'Blob', 'ArrayBuffer', 'DataView'];\n if (value) {\n for (var i = 0; i < types.length; i++) {\n if (AWS.util.isType(value, types[i])) return;\n if (AWS.util.typeName(value.constructor) === types[i]) return;\n }\n }\n\n this.fail('InvalidParameterType', 'Expected ' + context + ' to be a ' +\n 'string, Buffer, Stream, Blob, or typed array object');\n }\n});\n","var util = require('../util');\nvar AWS = require('../core');\n\n/**\n * Prepend prefix defined by API model to endpoint that's already\n * constructed. This feature does not apply to operations using\n * endpoint discovery and can be disabled.\n * @api private\n */\nfunction populateHostPrefix(request) {\n var enabled = request.service.config.hostPrefixEnabled;\n if (!enabled) return request;\n var operationModel = request.service.api.operations[request.operation];\n //don't marshal host prefix when operation has endpoint discovery traits\n if (hasEndpointDiscover(request)) return request;\n if (operationModel.endpoint && operationModel.endpoint.hostPrefix) {\n var hostPrefixNotation = operationModel.endpoint.hostPrefix;\n var hostPrefix = expandHostPrefix(hostPrefixNotation, request.params, operationModel.input);\n prependEndpointPrefix(request.httpRequest.endpoint, hostPrefix);\n validateHostname(request.httpRequest.endpoint.hostname);\n }\n return request;\n}\n\n/**\n * @api private\n */\nfunction hasEndpointDiscover(request) {\n var api = request.service.api;\n var operationModel = api.operations[request.operation];\n var isEndpointOperation = api.endpointOperation && (api.endpointOperation === util.string.lowerFirst(operationModel.name));\n return (operationModel.endpointDiscoveryRequired !== 'NULL' || isEndpointOperation === true);\n}\n\n/**\n * @api private\n */\nfunction expandHostPrefix(hostPrefixNotation, params, shape) {\n util.each(shape.members, function(name, member) {\n if (member.hostLabel === true) {\n if (typeof params[name] !== 'string' || params[name] === '') {\n throw util.error(new Error(), {\n message: 'Parameter ' + name + ' should be a non-empty string.',\n code: 'InvalidParameter'\n });\n }\n var regex = new RegExp('\\\\{' + name + '\\\\}', 'g');\n hostPrefixNotation = hostPrefixNotation.replace(regex, params[name]);\n }\n });\n return hostPrefixNotation;\n}\n\n/**\n * @api private\n */\nfunction prependEndpointPrefix(endpoint, prefix) {\n if (endpoint.host) {\n endpoint.host = prefix + endpoint.host;\n }\n if (endpoint.hostname) {\n endpoint.hostname = prefix + endpoint.hostname;\n }\n}\n\n/**\n * @api private\n */\nfunction validateHostname(hostname) {\n var labels = hostname.split('.');\n //Reference: https://tools.ietf.org/html/rfc1123#section-2\n var hostPattern = /^[a-zA-Z0-9]{1}$|^[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9]$/;\n util.arrayEach(labels, function(label) {\n if (!label.length || label.length < 1 || label.length > 63) {\n throw util.error(new Error(), {\n code: 'ValidationError',\n message: 'Hostname label length should be between 1 to 63 characters, inclusive.'\n });\n }\n if (!hostPattern.test(label)) {\n throw AWS.util.error(new Error(),\n {code: 'ValidationError', message: label + ' is not hostname compatible.'});\n }\n });\n}\n\nmodule.exports = {\n populateHostPrefix: populateHostPrefix\n};\n","var util = require('../util');\nvar JsonBuilder = require('../json/builder');\nvar JsonParser = require('../json/parser');\nvar populateHostPrefix = require('./helpers').populateHostPrefix;\n\nfunction buildRequest(req) {\n var httpRequest = req.httpRequest;\n var api = req.service.api;\n var target = api.targetPrefix + '.' + api.operations[req.operation].name;\n var version = api.jsonVersion || '1.0';\n var input = api.operations[req.operation].input;\n var builder = new JsonBuilder();\n\n if (version === 1) version = '1.0';\n httpRequest.body = builder.build(req.params || {}, input);\n httpRequest.headers['Content-Type'] = 'application/x-amz-json-' + version;\n httpRequest.headers['X-Amz-Target'] = target;\n\n populateHostPrefix(req);\n}\n\nfunction extractError(resp) {\n var error = {};\n var httpResponse = resp.httpResponse;\n\n error.code = httpResponse.headers['x-amzn-errortype'] || 'UnknownError';\n if (typeof error.code === 'string') {\n error.code = error.code.split(':')[0];\n }\n\n if (httpResponse.body.length > 0) {\n try {\n var e = JSON.parse(httpResponse.body.toString());\n var code = e.__type || e.code || e.Code;\n if (code) {\n error.code = code.split('#').pop();\n }\n if (error.code === 'RequestEntityTooLarge') {\n error.message = 'Request body must be less than 1 MB';\n } else {\n error.message = (e.message || e.Message || null);\n }\n } catch (e) {\n error.statusCode = httpResponse.statusCode;\n error.message = httpResponse.statusMessage;\n }\n } else {\n error.statusCode = httpResponse.statusCode;\n error.message = httpResponse.statusCode.toString();\n }\n\n resp.error = util.error(new Error(), error);\n}\n\nfunction extractData(resp) {\n var body = resp.httpResponse.body.toString() || '{}';\n if (resp.request.service.config.convertResponseTypes === false) {\n resp.data = JSON.parse(body);\n } else {\n var operation = resp.request.service.api.operations[resp.request.operation];\n var shape = operation.output || {};\n var parser = new JsonParser();\n resp.data = parser.parse(body, shape);\n }\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n buildRequest: buildRequest,\n extractError: extractError,\n extractData: extractData\n};\n","var AWS = require('../core');\nvar util = require('../util');\nvar QueryParamSerializer = require('../query/query_param_serializer');\nvar Shape = require('../model/shape');\nvar populateHostPrefix = require('./helpers').populateHostPrefix;\n\nfunction buildRequest(req) {\n var operation = req.service.api.operations[req.operation];\n var httpRequest = req.httpRequest;\n httpRequest.headers['Content-Type'] =\n 'application/x-www-form-urlencoded; charset=utf-8';\n httpRequest.params = {\n Version: req.service.api.apiVersion,\n Action: operation.name\n };\n\n // convert the request parameters into a list of query params,\n // e.g. Deeply.NestedParam.0.Name=value\n var builder = new QueryParamSerializer();\n builder.serialize(req.params, operation.input, function(name, value) {\n httpRequest.params[name] = value;\n });\n httpRequest.body = util.queryParamsToString(httpRequest.params);\n\n populateHostPrefix(req);\n}\n\nfunction extractError(resp) {\n var data, body = resp.httpResponse.body.toString();\n if (body.match('<UnknownOperationException')) {\n data = {\n Code: 'UnknownOperation',\n Message: 'Unknown operation ' + resp.request.operation\n };\n } else {\n try {\n data = new AWS.XML.Parser().parse(body);\n } catch (e) {\n data = {\n Code: resp.httpResponse.statusCode,\n Message: resp.httpResponse.statusMessage\n };\n }\n }\n\n if (data.requestId && !resp.requestId) resp.requestId = data.requestId;\n if (data.Errors) data = data.Errors;\n if (data.Error) data = data.Error;\n if (data.Code) {\n resp.error = util.error(new Error(), {\n code: data.Code,\n message: data.Message\n });\n } else {\n resp.error = util.error(new Error(), {\n code: resp.httpResponse.statusCode,\n message: null\n });\n }\n}\n\nfunction extractData(resp) {\n var req = resp.request;\n var operation = req.service.api.operations[req.operation];\n var shape = operation.output || {};\n var origRules = shape;\n\n if (origRules.resultWrapper) {\n var tmp = Shape.create({type: 'structure'});\n tmp.members[origRules.resultWrapper] = shape;\n tmp.memberNames = [origRules.resultWrapper];\n util.property(shape, 'name', shape.resultWrapper);\n shape = tmp;\n }\n\n var parser = new AWS.XML.Parser();\n\n // TODO: Refactor XML Parser to parse RequestId from response.\n if (shape && shape.members && !shape.members._XAMZRequestId) {\n var requestIdShape = Shape.create(\n { type: 'string' },\n { api: { protocol: 'query' } },\n 'requestId'\n );\n shape.members._XAMZRequestId = requestIdShape;\n }\n\n var data = parser.parse(resp.httpResponse.body.toString(), shape);\n resp.requestId = data._XAMZRequestId || data.requestId;\n\n if (data._XAMZRequestId) delete data._XAMZRequestId;\n\n if (origRules.resultWrapper) {\n if (data[origRules.resultWrapper]) {\n util.update(data, data[origRules.resultWrapper]);\n delete data[origRules.resultWrapper];\n }\n }\n\n resp.data = data;\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n buildRequest: buildRequest,\n extractError: extractError,\n extractData: extractData\n};\n","var util = require('../util');\nvar populateHostPrefix = require('./helpers').populateHostPrefix;\n\nfunction populateMethod(req) {\n req.httpRequest.method = req.service.api.operations[req.operation].httpMethod;\n}\n\nfunction generateURI(endpointPath, operationPath, input, params) {\n var uri = [endpointPath, operationPath].join('/');\n uri = uri.replace(/\\/+/g, '/');\n\n var queryString = {}, queryStringSet = false;\n util.each(input.members, function (name, member) {\n var paramValue = params[name];\n if (paramValue === null || paramValue === undefined) return;\n if (member.location === 'uri') {\n var regex = new RegExp('\\\\{' + member.name + '(\\\\+)?\\\\}');\n uri = uri.replace(regex, function(_, plus) {\n var fn = plus ? util.uriEscapePath : util.uriEscape;\n return fn(String(paramValue));\n });\n } else if (member.location === 'querystring') {\n queryStringSet = true;\n\n if (member.type === 'list') {\n queryString[member.name] = paramValue.map(function(val) {\n return util.uriEscape(member.member.toWireFormat(val).toString());\n });\n } else if (member.type === 'map') {\n util.each(paramValue, function(key, value) {\n if (Array.isArray(value)) {\n queryString[key] = value.map(function(val) {\n return util.uriEscape(String(val));\n });\n } else {\n queryString[key] = util.uriEscape(String(value));\n }\n });\n } else {\n queryString[member.name] = util.uriEscape(member.toWireFormat(paramValue).toString());\n }\n }\n });\n\n if (queryStringSet) {\n uri += (uri.indexOf('?') >= 0 ? '&' : '?');\n var parts = [];\n util.arrayEach(Object.keys(queryString).sort(), function(key) {\n if (!Array.isArray(queryString[key])) {\n queryString[key] = [queryString[key]];\n }\n for (var i = 0; i < queryString[key].length; i++) {\n parts.push(util.uriEscape(String(key)) + '=' + queryString[key][i]);\n }\n });\n uri += parts.join('&');\n }\n\n return uri;\n}\n\nfunction populateURI(req) {\n var operation = req.service.api.operations[req.operation];\n var input = operation.input;\n\n var uri = generateURI(req.httpRequest.endpoint.path, operation.httpPath, input, req.params);\n req.httpRequest.path = uri;\n}\n\nfunction populateHeaders(req) {\n var operation = req.service.api.operations[req.operation];\n util.each(operation.input.members, function (name, member) {\n var value = req.params[name];\n if (value === null || value === undefined) return;\n\n if (member.location === 'headers' && member.type === 'map') {\n util.each(value, function(key, memberValue) {\n req.httpRequest.headers[member.name + key] = memberValue;\n });\n } else if (member.location === 'header') {\n value = member.toWireFormat(value).toString();\n if (member.isJsonValue) {\n value = util.base64.encode(value);\n }\n req.httpRequest.headers[member.name] = value;\n }\n });\n}\n\nfunction buildRequest(req) {\n populateMethod(req);\n populateURI(req);\n populateHeaders(req);\n populateHostPrefix(req);\n}\n\nfunction extractError() {\n}\n\nfunction extractData(resp) {\n var req = resp.request;\n var data = {};\n var r = resp.httpResponse;\n var operation = req.service.api.operations[req.operation];\n var output = operation.output;\n\n // normalize headers names to lower-cased keys for matching\n var headers = {};\n util.each(r.headers, function (k, v) {\n headers[k.toLowerCase()] = v;\n });\n\n util.each(output.members, function(name, member) {\n var header = (member.name || name).toLowerCase();\n if (member.location === 'headers' && member.type === 'map') {\n data[name] = {};\n var location = member.isLocationName ? member.name : '';\n var pattern = new RegExp('^' + location + '(.+)', 'i');\n util.each(r.headers, function (k, v) {\n var result = k.match(pattern);\n if (result !== null) {\n data[name][result[1]] = v;\n }\n });\n } else if (member.location === 'header') {\n if (headers[header] !== undefined) {\n var value = member.isJsonValue ?\n util.base64.decode(headers[header]) :\n headers[header];\n data[name] = member.toType(value);\n }\n } else if (member.location === 'statusCode') {\n data[name] = parseInt(r.statusCode, 10);\n }\n });\n\n resp.data = data;\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n buildRequest: buildRequest,\n extractError: extractError,\n extractData: extractData,\n generateURI: generateURI\n};\n","var util = require('../util');\nvar Rest = require('./rest');\nvar Json = require('./json');\nvar JsonBuilder = require('../json/builder');\nvar JsonParser = require('../json/parser');\n\nfunction populateBody(req) {\n var builder = new JsonBuilder();\n var input = req.service.api.operations[req.operation].input;\n\n if (input.payload) {\n var params = {};\n var payloadShape = input.members[input.payload];\n params = req.params[input.payload];\n if (params === undefined) return;\n\n if (payloadShape.type === 'structure') {\n req.httpRequest.body = builder.build(params, payloadShape);\n applyContentTypeHeader(req);\n } else { // non-JSON payload\n req.httpRequest.body = params;\n if (payloadShape.type === 'binary' || payloadShape.isStreaming) {\n applyContentTypeHeader(req, true);\n }\n }\n } else {\n var body = builder.build(req.params, input);\n if (body !== '{}' || req.httpRequest.method !== 'GET') { //don't send empty body for GET method\n req.httpRequest.body = body;\n }\n applyContentTypeHeader(req);\n }\n}\n\nfunction applyContentTypeHeader(req, isBinary) {\n var operation = req.service.api.operations[req.operation];\n var input = operation.input;\n\n if (!req.httpRequest.headers['Content-Type']) {\n var type = isBinary ? 'binary/octet-stream' : 'application/json';\n req.httpRequest.headers['Content-Type'] = type;\n }\n}\n\nfunction buildRequest(req) {\n Rest.buildRequest(req);\n\n // never send body payload on HEAD/DELETE\n if (['HEAD', 'DELETE'].indexOf(req.httpRequest.method) < 0) {\n populateBody(req);\n }\n}\n\nfunction extractError(resp) {\n Json.extractError(resp);\n}\n\nfunction extractData(resp) {\n Rest.extractData(resp);\n\n var req = resp.request;\n var operation = req.service.api.operations[req.operation];\n var rules = req.service.api.operations[req.operation].output || {};\n var parser;\n var hasEventOutput = operation.hasEventOutput;\n\n if (rules.payload) {\n var payloadMember = rules.members[rules.payload];\n var body = resp.httpResponse.body;\n if (payloadMember.isEventStream) {\n parser = new JsonParser();\n resp.data[payload] = util.createEventStream(\n AWS.HttpClient.streamsApiVersion === 2 ? resp.httpResponse.stream : body,\n parser,\n payloadMember\n );\n } else if (payloadMember.type === 'structure' || payloadMember.type === 'list') {\n var parser = new JsonParser();\n resp.data[rules.payload] = parser.parse(body, payloadMember);\n } else if (payloadMember.type === 'binary' || payloadMember.isStreaming) {\n resp.data[rules.payload] = body;\n } else {\n resp.data[rules.payload] = payloadMember.toType(body);\n }\n } else {\n var data = resp.data;\n Json.extractData(resp);\n resp.data = util.merge(data, resp.data);\n }\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n buildRequest: buildRequest,\n extractError: extractError,\n extractData: extractData\n};\n","var AWS = require('../core');\nvar util = require('../util');\nvar Rest = require('./rest');\n\nfunction populateBody(req) {\n var input = req.service.api.operations[req.operation].input;\n var builder = new AWS.XML.Builder();\n var params = req.params;\n\n var payload = input.payload;\n if (payload) {\n var payloadMember = input.members[payload];\n params = params[payload];\n if (params === undefined) return;\n\n if (payloadMember.type === 'structure') {\n var rootElement = payloadMember.name;\n req.httpRequest.body = builder.toXML(params, payloadMember, rootElement, true);\n } else { // non-xml payload\n req.httpRequest.body = params;\n }\n } else {\n req.httpRequest.body = builder.toXML(params, input, input.name ||\n input.shape || util.string.upperFirst(req.operation) + 'Request');\n }\n}\n\nfunction buildRequest(req) {\n Rest.buildRequest(req);\n\n // never send body payload on GET/HEAD\n if (['GET', 'HEAD'].indexOf(req.httpRequest.method) < 0) {\n populateBody(req);\n }\n}\n\nfunction extractError(resp) {\n Rest.extractError(resp);\n\n var data;\n try {\n data = new AWS.XML.Parser().parse(resp.httpResponse.body.toString());\n } catch (e) {\n data = {\n Code: resp.httpResponse.statusCode,\n Message: resp.httpResponse.statusMessage\n };\n }\n\n if (data.Errors) data = data.Errors;\n if (data.Error) data = data.Error;\n if (data.Code) {\n resp.error = util.error(new Error(), {\n code: data.Code,\n message: data.Message\n });\n } else {\n resp.error = util.error(new Error(), {\n code: resp.httpResponse.statusCode,\n message: null\n });\n }\n}\n\nfunction extractData(resp) {\n Rest.extractData(resp);\n\n var parser;\n var req = resp.request;\n var body = resp.httpResponse.body;\n var operation = req.service.api.operations[req.operation];\n var output = operation.output;\n\n var hasEventOutput = operation.hasEventOutput;\n\n var payload = output.payload;\n if (payload) {\n var payloadMember = output.members[payload];\n if (payloadMember.isEventStream) {\n parser = new AWS.XML.Parser();\n resp.data[payload] = util.createEventStream(\n AWS.HttpClient.streamsApiVersion === 2 ? resp.httpResponse.stream : resp.httpResponse.body,\n parser,\n payloadMember\n );\n } else if (payloadMember.type === 'structure') {\n parser = new AWS.XML.Parser();\n resp.data[payload] = parser.parse(body.toString(), payloadMember);\n } else if (payloadMember.type === 'binary' || payloadMember.isStreaming) {\n resp.data[payload] = body;\n } else {\n resp.data[payload] = payloadMember.toType(body);\n }\n } else if (body.length > 0) {\n parser = new AWS.XML.Parser();\n var data = parser.parse(body.toString(), output);\n util.update(resp.data, data);\n }\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n buildRequest: buildRequest,\n extractError: extractError,\n extractData: extractData\n};\n","var AWS = require('../core');\n\n/**\n * Resolve client-side monitoring configuration from either environmental variables\n * or shared config file. Configurations from environmental variables have higher priority\n * than those from shared config file. The resolver will try to read the shared config file\n * no matter whether the AWS_SDK_LOAD_CONFIG variable is set.\n * @api private\n */\nfunction resolveMonitoringConfig() {\n var config = {\n port: undefined,\n clientId: undefined,\n enabled: undefined,\n host: undefined\n };\n if (fromEnvironment(config) || fromConfigFile(config)) return toJSType(config);\n return toJSType(config);\n}\n\n/**\n * Resolve configurations from environmental variables.\n * @param {object} client side monitoring config object needs to be resolved\n * @returns {boolean} whether resolving configurations is done\n * @api private\n */\nfunction fromEnvironment(config) {\n config.port = config.port || process.env.AWS_CSM_PORT;\n config.enabled = config.enabled || process.env.AWS_CSM_ENABLED;\n config.clientId = config.clientId || process.env.AWS_CSM_CLIENT_ID;\n config.host = config.host || process.env.AWS_CSM_HOST;\n return config.port && config.enabled && config.clientId && config.host ||\n ['false', '0'].indexOf(config.enabled) >= 0; //no need to read shared config file if explicitely disabled\n}\n\n/**\n * Resolve cofigurations from shared config file with specified role name\n * @param {object} client side monitoring config object needs to be resolved\n * @returns {boolean} whether resolving configurations is done\n * @api private\n */\nfunction fromConfigFile(config) {\n var sharedFileConfig;\n try {\n var configFile = AWS.util.iniLoader.loadFrom({\n isConfig: true,\n filename: process.env[AWS.util.sharedConfigFileEnv]\n });\n var sharedFileConfig = configFile[\n process.env.AWS_PROFILE || AWS.util.defaultProfile\n ];\n } catch (err) {\n return false;\n }\n if (!sharedFileConfig) return config;\n config.port = config.port || sharedFileConfig.csm_port;\n config.enabled = config.enabled || sharedFileConfig.csm_enabled;\n config.clientId = config.clientId || sharedFileConfig.csm_client_id;\n config.host = config.host || sharedFileConfig.csm_host;\n return config.port && config.enabled && config.clientId && config.host;\n}\n\n/**\n * Transfer the resolved configuration value to proper types: port as number, enabled\n * as boolean and clientId as string. The 'enabled' flag is valued to false when set\n * to 'false' or '0'.\n * @param {object} resolved client side monitoring config\n * @api private\n */\nfunction toJSType(config) {\n //config.XXX is either undefined or string\n var falsyNotations = ['false', '0', undefined];\n if (!config.enabled || falsyNotations.indexOf(config.enabled.toLowerCase()) >= 0) {\n config.enabled = false;\n } else {\n config.enabled = true;\n }\n config.port = config.port ? parseInt(config.port, 10) : undefined;\n return config;\n}\n\nmodule.exports = resolveMonitoringConfig;\n","var util = require('../core').util;\nvar dgram = require('dgram');\nvar stringToBuffer = util.buffer.toBuffer;\n\nvar MAX_MESSAGE_SIZE = 1024 * 8; // 8 KB\n\n/**\n * Publishes metrics via udp.\n * @param {object} options Paramters for Publisher constructor\n * @param {number} [options.port = 31000] Port number\n * @param {string} [options.clientId = ''] Client Identifier\n * @param {boolean} [options.enabled = false] enable sending metrics datagram\n * @api private\n */\nfunction Publisher(options) {\n // handle configuration\n options = options || {};\n this.enabled = options.enabled || false;\n this.port = options.port || 31000;\n this.clientId = options.clientId || '';\n this.address = options.host || '127.0.0.1';\n if (this.clientId.length > 255) {\n // ClientId has a max length of 255\n this.clientId = this.clientId.substr(0, 255);\n }\n this.messagesInFlight = 0;\n}\n\nPublisher.prototype.fieldsToTrim = {\n UserAgent: 256,\n SdkException: 128,\n SdkExceptionMessage: 512,\n AwsException: 128,\n AwsExceptionMessage: 512,\n FinalSdkException: 128,\n FinalSdkExceptionMessage: 512,\n FinalAwsException: 128,\n FinalAwsExceptionMessage: 512\n\n};\n\n/**\n * Trims fields that have a specified max length.\n * @param {object} event ApiCall or ApiCallAttempt event.\n * @returns {object}\n * @api private\n */\nPublisher.prototype.trimFields = function(event) {\n var trimmableFields = Object.keys(this.fieldsToTrim);\n for (var i = 0, iLen = trimmableFields.length; i < iLen; i++) {\n var field = trimmableFields[i];\n if (event.hasOwnProperty(field)) {\n var maxLength = this.fieldsToTrim[field];\n var value = event[field];\n if (value && value.length > maxLength) {\n event[field] = value.substr(0, maxLength);\n }\n }\n }\n return event;\n};\n\n/**\n * Handles ApiCall and ApiCallAttempt events.\n * @param {Object} event apiCall or apiCallAttempt event.\n * @api private\n */\nPublisher.prototype.eventHandler = function(event) {\n // set the clientId\n event.ClientId = this.clientId;\n\n this.trimFields(event);\n\n var message = stringToBuffer(JSON.stringify(event));\n if (!this.enabled || message.length > MAX_MESSAGE_SIZE) {\n // drop the message if publisher not enabled or it is too large\n return;\n }\n\n this.publishDatagram(message);\n};\n\n/**\n * Publishes message to an agent.\n * @param {Buffer} message JSON message to send to agent.\n * @api private\n */\nPublisher.prototype.publishDatagram = function(message) {\n var self = this;\n var client = this.getClient();\n\n this.messagesInFlight++;\n this.client.send(message, 0, message.length, this.port, this.address, function(err, bytes) {\n if (--self.messagesInFlight <= 0) {\n // destroy existing client so the event loop isn't kept open\n self.destroyClient();\n }\n });\n};\n\n/**\n * Returns an existing udp socket, or creates one if it doesn't already exist.\n * @api private\n */\nPublisher.prototype.getClient = function() {\n if (!this.client) {\n this.client = dgram.createSocket('udp4');\n }\n return this.client;\n};\n\n/**\n * Destroys the udp socket.\n * @api private\n */\nPublisher.prototype.destroyClient = function() {\n if (this.client) {\n this.client.close();\n this.client = void 0;\n }\n};\n\nmodule.exports = {\n Publisher: Publisher\n};\n","var util = require('../util');\n\nfunction QueryParamSerializer() {\n}\n\nQueryParamSerializer.prototype.serialize = function(params, shape, fn) {\n serializeStructure('', params, shape, fn);\n};\n\nfunction ucfirst(shape) {\n if (shape.isQueryName || shape.api.protocol !== 'ec2') {\n return shape.name;\n } else {\n return shape.name[0].toUpperCase() + shape.name.substr(1);\n }\n}\n\nfunction serializeStructure(prefix, struct, rules, fn) {\n util.each(rules.members, function(name, member) {\n var value = struct[name];\n if (value === null || value === undefined) return;\n\n var memberName = ucfirst(member);\n memberName = prefix ? prefix + '.' + memberName : memberName;\n serializeMember(memberName, value, member, fn);\n });\n}\n\nfunction serializeMap(name, map, rules, fn) {\n var i = 1;\n util.each(map, function (key, value) {\n var prefix = rules.flattened ? '.' : '.entry.';\n var position = prefix + (i++) + '.';\n var keyName = position + (rules.key.name || 'key');\n var valueName = position + (rules.value.name || 'value');\n serializeMember(name + keyName, key, rules.key, fn);\n serializeMember(name + valueName, value, rules.value, fn);\n });\n}\n\nfunction serializeList(name, list, rules, fn) {\n var memberRules = rules.member || {};\n\n if (list.length === 0) {\n fn.call(this, name, null);\n return;\n }\n\n util.arrayEach(list, function (v, n) {\n var suffix = '.' + (n + 1);\n if (rules.api.protocol === 'ec2') {\n // Do nothing for EC2\n suffix = suffix + ''; // make linter happy\n } else if (rules.flattened) {\n if (memberRules.name) {\n var parts = name.split('.');\n parts.pop();\n parts.push(ucfirst(memberRules));\n name = parts.join('.');\n }\n } else {\n suffix = '.' + (memberRules.name ? memberRules.name : 'member') + suffix;\n }\n serializeMember(name + suffix, v, memberRules, fn);\n });\n}\n\nfunction serializeMember(name, value, rules, fn) {\n if (value === null || value === undefined) return;\n if (rules.type === 'structure') {\n serializeStructure(name, value, rules, fn);\n } else if (rules.type === 'list') {\n serializeList(name, value, rules, fn);\n } else if (rules.type === 'map') {\n serializeMap(name, value, rules, fn);\n } else {\n fn(name, rules.toWireFormat(value).toString());\n }\n}\n\n/**\n * @api private\n */\nmodule.exports = QueryParamSerializer;\n","module.exports = {\n //provide realtime clock for performance measurement\n now: function now() {\n var second = process.hrtime();\n return second[0] * 1000 + (second[1] / 1000000);\n }\n};\n","var util = require('./util');\nvar regionConfig = require('./region_config_data.json');\n\nfunction generateRegionPrefix(region) {\n if (!region) return null;\n\n var parts = region.split('-');\n if (parts.length < 3) return null;\n return parts.slice(0, parts.length - 2).join('-') + '-*';\n}\n\nfunction derivedKeys(service) {\n var region = service.config.region;\n var regionPrefix = generateRegionPrefix(region);\n var endpointPrefix = service.api.endpointPrefix;\n\n return [\n [region, endpointPrefix],\n [regionPrefix, endpointPrefix],\n [region, '*'],\n [regionPrefix, '*'],\n ['*', endpointPrefix],\n ['*', '*']\n ].map(function(item) {\n return item[0] && item[1] ? item.join('/') : null;\n });\n}\n\nfunction applyConfig(service, config) {\n util.each(config, function(key, value) {\n if (key === 'globalEndpoint') return;\n if (service.config[key] === undefined || service.config[key] === null) {\n service.config[key] = value;\n }\n });\n}\n\nfunction configureEndpoint(service) {\n var keys = derivedKeys(service);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!key) continue;\n\n if (Object.prototype.hasOwnProperty.call(regionConfig.rules, key)) {\n var config = regionConfig.rules[key];\n if (typeof config === 'string') {\n config = regionConfig.patterns[config];\n }\n\n // set dualstack endpoint\n if (service.config.useDualstack && util.isDualstackAvailable(service)) {\n config = util.copy(config);\n config.endpoint = config.endpoint.replace(\n /{service}\\.({region}\\.)?/,\n '{service}.dualstack.{region}.'\n );\n }\n\n // set global endpoint\n service.isGlobalEndpoint = !!config.globalEndpoint;\n if (config.signingRegion) {\n service.signingRegion = config.signingRegion;\n }\n\n // signature version\n if (!config.signatureVersion) config.signatureVersion = 'v4';\n\n // merge config\n applyConfig(service, config);\n return;\n }\n }\n}\n\nfunction getEndpointSuffix(region) {\n var regionRegexes = {\n '^(us|eu|ap|sa|ca|me)\\\\-\\\\w+\\\\-\\\\d+$': 'amazonaws.com',\n '^cn\\\\-\\\\w+\\\\-\\\\d+$': 'amazonaws.com.cn',\n '^us\\\\-gov\\\\-\\\\w+\\\\-\\\\d+$': 'amazonaws.com',\n '^us\\\\-iso\\\\-\\\\w+\\\\-\\\\d+$': 'c2s.ic.gov',\n '^us\\\\-isob\\\\-\\\\w+\\\\-\\\\d+$': 'sc2s.sgov.gov'\n };\n var defaultSuffix = 'amazonaws.com';\n var regexes = Object.keys(regionRegexes);\n for (var i = 0; i < regexes.length; i++) {\n var regionPattern = RegExp(regexes[i]);\n var dnsSuffix = regionRegexes[regexes[i]];\n if (regionPattern.test(region)) return dnsSuffix;\n }\n return defaultSuffix;\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n configureEndpoint: configureEndpoint,\n getEndpointSuffix: getEndpointSuffix\n};\n","var AWS = require('./core');\nvar AcceptorStateMachine = require('./state_machine');\nvar inherit = AWS.util.inherit;\nvar domain = AWS.util.domain;\nvar jmespath = require('jmespath');\n\n/**\n * @api private\n */\nvar hardErrorStates = {success: 1, error: 1, complete: 1};\n\nfunction isTerminalState(machine) {\n return Object.prototype.hasOwnProperty.call(hardErrorStates, machine._asm.currentState);\n}\n\nvar fsm = new AcceptorStateMachine();\nfsm.setupStates = function() {\n var transition = function(_, done) {\n var self = this;\n self._haltHandlersOnError = false;\n\n self.emit(self._asm.currentState, function(err) {\n if (err) {\n if (isTerminalState(self)) {\n if (domain && self.domain instanceof domain.Domain) {\n err.domainEmitter = self;\n err.domain = self.domain;\n err.domainThrown = false;\n self.domain.emit('error', err);\n } else {\n throw err;\n }\n } else {\n self.response.error = err;\n done(err);\n }\n } else {\n done(self.response.error);\n }\n });\n\n };\n\n this.addState('validate', 'build', 'error', transition);\n this.addState('build', 'afterBuild', 'restart', transition);\n this.addState('afterBuild', 'sign', 'restart', transition);\n this.addState('sign', 'send', 'retry', transition);\n this.addState('retry', 'afterRetry', 'afterRetry', transition);\n this.addState('afterRetry', 'sign', 'error', transition);\n this.addState('send', 'validateResponse', 'retry', transition);\n this.addState('validateResponse', 'extractData', 'extractError', transition);\n this.addState('extractError', 'extractData', 'retry', transition);\n this.addState('extractData', 'success', 'retry', transition);\n this.addState('restart', 'build', 'error', transition);\n this.addState('success', 'complete', 'complete', transition);\n this.addState('error', 'complete', 'complete', transition);\n this.addState('complete', null, null, transition);\n};\nfsm.setupStates();\n\n/**\n * ## Asynchronous Requests\n *\n * All requests made through the SDK are asynchronous and use a\n * callback interface. Each service method that kicks off a request\n * returns an `AWS.Request` object that you can use to register\n * callbacks.\n *\n * For example, the following service method returns the request\n * object as \"request\", which can be used to register callbacks:\n *\n * ```javascript\n * // request is an AWS.Request object\n * var request = ec2.describeInstances();\n *\n * // register callbacks on request to retrieve response data\n * request.on('success', function(response) {\n * console.log(response.data);\n * });\n * ```\n *\n * When a request is ready to be sent, the {send} method should\n * be called:\n *\n * ```javascript\n * request.send();\n * ```\n *\n * Since registered callbacks may or may not be idempotent, requests should only\n * be sent once. To perform the same operation multiple times, you will need to\n * create multiple request objects, each with its own registered callbacks.\n *\n * ## Removing Default Listeners for Events\n *\n * Request objects are built with default listeners for the various events,\n * depending on the service type. In some cases, you may want to remove\n * some built-in listeners to customize behaviour. Doing this requires\n * access to the built-in listener functions, which are exposed through\n * the {AWS.EventListeners.Core} namespace. For instance, you may\n * want to customize the HTTP handler used when sending a request. In this\n * case, you can remove the built-in listener associated with the 'send'\n * event, the {AWS.EventListeners.Core.SEND} listener and add your own.\n *\n * ## Multiple Callbacks and Chaining\n *\n * You can register multiple callbacks on any request object. The\n * callbacks can be registered for different events, or all for the\n * same event. In addition, you can chain callback registration, for\n * example:\n *\n * ```javascript\n * request.\n * on('success', function(response) {\n * console.log(\"Success!\");\n * }).\n * on('error', function(error, response) {\n * console.log(\"Error!\");\n * }).\n * on('complete', function(response) {\n * console.log(\"Always!\");\n * }).\n * send();\n * ```\n *\n * The above example will print either \"Success! Always!\", or \"Error! Always!\",\n * depending on whether the request succeeded or not.\n *\n * @!attribute httpRequest\n * @readonly\n * @!group HTTP Properties\n * @return [AWS.HttpRequest] the raw HTTP request object\n * containing request headers and body information\n * sent by the service.\n *\n * @!attribute startTime\n * @readonly\n * @!group Operation Properties\n * @return [Date] the time that the request started\n *\n * @!group Request Building Events\n *\n * @!event validate(request)\n * Triggered when a request is being validated. Listeners\n * should throw an error if the request should not be sent.\n * @param request [Request] the request object being sent\n * @see AWS.EventListeners.Core.VALIDATE_CREDENTIALS\n * @see AWS.EventListeners.Core.VALIDATE_REGION\n * @example Ensuring that a certain parameter is set before sending a request\n * var req = s3.putObject(params);\n * req.on('validate', function() {\n * if (!req.params.Body.match(/^Hello\\s/)) {\n * throw new Error('Body must start with \"Hello \"');\n * }\n * });\n * req.send(function(err, data) { ... });\n *\n * @!event build(request)\n * Triggered when the request payload is being built. Listeners\n * should fill the necessary information to send the request\n * over HTTP.\n * @param (see AWS.Request~validate)\n * @example Add a custom HTTP header to a request\n * var req = s3.putObject(params);\n * req.on('build', function() {\n * req.httpRequest.headers['Custom-Header'] = 'value';\n * });\n * req.send(function(err, data) { ... });\n *\n * @!event sign(request)\n * Triggered when the request is being signed. Listeners should\n * add the correct authentication headers and/or adjust the body,\n * depending on the authentication mechanism being used.\n * @param (see AWS.Request~validate)\n *\n * @!group Request Sending Events\n *\n * @!event send(response)\n * Triggered when the request is ready to be sent. Listeners\n * should call the underlying transport layer to initiate\n * the sending of the request.\n * @param response [Response] the response object\n * @context [Request] the request object that was sent\n * @see AWS.EventListeners.Core.SEND\n *\n * @!event retry(response)\n * Triggered when a request failed and might need to be retried or redirected.\n * If the response is retryable, the listener should set the\n * `response.error.retryable` property to `true`, and optionally set\n * `response.error.retryDelay` to the millisecond delay for the next attempt.\n * In the case of a redirect, `response.error.redirect` should be set to\n * `true` with `retryDelay` set to an optional delay on the next request.\n *\n * If a listener decides that a request should not be retried,\n * it should set both `retryable` and `redirect` to false.\n *\n * Note that a retryable error will be retried at most\n * {AWS.Config.maxRetries} times (based on the service object's config).\n * Similarly, a request that is redirected will only redirect at most\n * {AWS.Config.maxRedirects} times.\n *\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n * @example Adding a custom retry for a 404 response\n * request.on('retry', function(response) {\n * // this resource is not yet available, wait 10 seconds to get it again\n * if (response.httpResponse.statusCode === 404 && response.error) {\n * response.error.retryable = true; // retry this error\n * response.error.retryDelay = 10000; // wait 10 seconds\n * }\n * });\n *\n * @!group Data Parsing Events\n *\n * @!event extractError(response)\n * Triggered on all non-2xx requests so that listeners can extract\n * error details from the response body. Listeners to this event\n * should set the `response.error` property.\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n *\n * @!event extractData(response)\n * Triggered in successful requests to allow listeners to\n * de-serialize the response body into `response.data`.\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n *\n * @!group Completion Events\n *\n * @!event success(response)\n * Triggered when the request completed successfully.\n * `response.data` will contain the response data and\n * `response.error` will be null.\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n *\n * @!event error(error, response)\n * Triggered when an error occurs at any point during the\n * request. `response.error` will contain details about the error\n * that occurred. `response.data` will be null.\n * @param error [Error] the error object containing details about\n * the error that occurred.\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n *\n * @!event complete(response)\n * Triggered whenever a request cycle completes. `response.error`\n * should be checked, since the request may have failed.\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n *\n * @!group HTTP Events\n *\n * @!event httpHeaders(statusCode, headers, response, statusMessage)\n * Triggered when headers are sent by the remote server\n * @param statusCode [Integer] the HTTP response code\n * @param headers [map<String,String>] the response headers\n * @param (see AWS.Request~send)\n * @param statusMessage [String] A status message corresponding to the HTTP\n * response code\n * @context (see AWS.Request~send)\n *\n * @!event httpData(chunk, response)\n * Triggered when data is sent by the remote server\n * @param chunk [Buffer] the buffer data containing the next data chunk\n * from the server\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n * @see AWS.EventListeners.Core.HTTP_DATA\n *\n * @!event httpUploadProgress(progress, response)\n * Triggered when the HTTP request has uploaded more data\n * @param progress [map] An object containing the `loaded` and `total` bytes\n * of the request.\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n * @note This event will not be emitted in Node.js 0.8.x.\n *\n * @!event httpDownloadProgress(progress, response)\n * Triggered when the HTTP request has downloaded more data\n * @param progress [map] An object containing the `loaded` and `total` bytes\n * of the request.\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n * @note This event will not be emitted in Node.js 0.8.x.\n *\n * @!event httpError(error, response)\n * Triggered when the HTTP request failed\n * @param error [Error] the error object that was thrown\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n *\n * @!event httpDone(response)\n * Triggered when the server is finished sending data\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n *\n * @see AWS.Response\n */\nAWS.Request = inherit({\n\n /**\n * Creates a request for an operation on a given service with\n * a set of input parameters.\n *\n * @param service [AWS.Service] the service to perform the operation on\n * @param operation [String] the operation to perform on the service\n * @param params [Object] parameters to send to the operation.\n * See the operation's documentation for the format of the\n * parameters.\n */\n constructor: function Request(service, operation, params) {\n var endpoint = service.endpoint;\n var region = service.config.region;\n var customUserAgent = service.config.customUserAgent;\n\n if (service.isGlobalEndpoint) {\n if (service.signingRegion) {\n region = service.signingRegion;\n } else {\n region = 'us-east-1';\n }\n }\n\n this.domain = domain && domain.active;\n this.service = service;\n this.operation = operation;\n this.params = params || {};\n this.httpRequest = new AWS.HttpRequest(endpoint, region);\n this.httpRequest.appendToUserAgent(customUserAgent);\n this.startTime = service.getSkewCorrectedDate();\n\n this.response = new AWS.Response(this);\n this._asm = new AcceptorStateMachine(fsm.states, 'validate');\n this._haltHandlersOnError = false;\n\n AWS.SequentialExecutor.call(this);\n this.emit = this.emitEvent;\n },\n\n /**\n * @!group Sending a Request\n */\n\n /**\n * @overload send(callback = null)\n * Sends the request object.\n *\n * @callback callback function(err, data)\n * If a callback is supplied, it is called when a response is returned\n * from the service.\n * @context [AWS.Request] the request object being sent.\n * @param err [Error] the error object returned from the request.\n * Set to `null` if the request is successful.\n * @param data [Object] the de-serialized data returned from\n * the request. Set to `null` if a request error occurs.\n * @example Sending a request with a callback\n * request = s3.putObject({Bucket: 'bucket', Key: 'key'});\n * request.send(function(err, data) { console.log(err, data); });\n * @example Sending a request with no callback (using event handlers)\n * request = s3.putObject({Bucket: 'bucket', Key: 'key'});\n * request.on('complete', function(response) { ... }); // register a callback\n * request.send();\n */\n send: function send(callback) {\n if (callback) {\n // append to user agent\n this.httpRequest.appendToUserAgent('callback');\n this.on('complete', function (resp) {\n callback.call(resp, resp.error, resp.data);\n });\n }\n this.runTo();\n\n return this.response;\n },\n\n /**\n * @!method promise()\n * Sends the request and returns a 'thenable' promise.\n *\n * Two callbacks can be provided to the `then` method on the returned promise.\n * The first callback will be called if the promise is fulfilled, and the second\n * callback will be called if the promise is rejected.\n * @callback fulfilledCallback function(data)\n * Called if the promise is fulfilled.\n * @param data [Object] the de-serialized data returned from the request.\n * @callback rejectedCallback function(error)\n * Called if the promise is rejected.\n * @param error [Error] the error object returned from the request.\n * @return [Promise] A promise that represents the state of the request.\n * @example Sending a request using promises.\n * var request = s3.putObject({Bucket: 'bucket', Key: 'key'});\n * var result = request.promise();\n * result.then(function(data) { ... }, function(error) { ... });\n */\n\n /**\n * @api private\n */\n build: function build(callback) {\n return this.runTo('send', callback);\n },\n\n /**\n * @api private\n */\n runTo: function runTo(state, done) {\n this._asm.runTo(state, done, this);\n return this;\n },\n\n /**\n * Aborts a request, emitting the error and complete events.\n *\n * @!macro nobrowser\n * @example Aborting a request after sending\n * var params = {\n * Bucket: 'bucket', Key: 'key',\n * Body: Buffer.alloc(1024 * 1024 * 5) // 5MB payload\n * };\n * var request = s3.putObject(params);\n * request.send(function (err, data) {\n * if (err) console.log(\"Error:\", err.code, err.message);\n * else console.log(data);\n * });\n *\n * // abort request in 1 second\n * setTimeout(request.abort.bind(request), 1000);\n *\n * // prints \"Error: RequestAbortedError Request aborted by user\"\n * @return [AWS.Request] the same request object, for chaining.\n * @since v1.4.0\n */\n abort: function abort() {\n this.removeAllListeners('validateResponse');\n this.removeAllListeners('extractError');\n this.on('validateResponse', function addAbortedError(resp) {\n resp.error = AWS.util.error(new Error('Request aborted by user'), {\n code: 'RequestAbortedError', retryable: false\n });\n });\n\n if (this.httpRequest.stream && !this.httpRequest.stream.didCallback) { // abort HTTP stream\n this.httpRequest.stream.abort();\n if (this.httpRequest._abortCallback) {\n this.httpRequest._abortCallback();\n } else {\n this.removeAllListeners('send'); // haven't sent yet, so let's not\n }\n }\n\n return this;\n },\n\n /**\n * Iterates over each page of results given a pageable request, calling\n * the provided callback with each page of data. After all pages have been\n * retrieved, the callback is called with `null` data.\n *\n * @note This operation can generate multiple requests to a service.\n * @example Iterating over multiple pages of objects in an S3 bucket\n * var pages = 1;\n * s3.listObjects().eachPage(function(err, data) {\n * if (err) return;\n * console.log(\"Page\", pages++);\n * console.log(data);\n * });\n * @example Iterating over multiple pages with an asynchronous callback\n * s3.listObjects(params).eachPage(function(err, data, done) {\n * doSomethingAsyncAndOrExpensive(function() {\n * // The next page of results isn't fetched until done is called\n * done();\n * });\n * });\n * @callback callback function(err, data, [doneCallback])\n * Called with each page of resulting data from the request. If the\n * optional `doneCallback` is provided in the function, it must be called\n * when the callback is complete.\n *\n * @param err [Error] an error object, if an error occurred.\n * @param data [Object] a single page of response data. If there is no\n * more data, this object will be `null`.\n * @param doneCallback [Function] an optional done callback. If this\n * argument is defined in the function declaration, it should be called\n * when the next page is ready to be retrieved. This is useful for\n * controlling serial pagination across asynchronous operations.\n * @return [Boolean] if the callback returns `false`, pagination will\n * stop.\n *\n * @see AWS.Request.eachItem\n * @see AWS.Response.nextPage\n * @since v1.4.0\n */\n eachPage: function eachPage(callback) {\n // Make all callbacks async-ish\n callback = AWS.util.fn.makeAsync(callback, 3);\n\n function wrappedCallback(response) {\n callback.call(response, response.error, response.data, function (result) {\n if (result === false) return;\n\n if (response.hasNextPage()) {\n response.nextPage().on('complete', wrappedCallback).send();\n } else {\n callback.call(response, null, null, AWS.util.fn.noop);\n }\n });\n }\n\n this.on('complete', wrappedCallback).send();\n },\n\n /**\n * Enumerates over individual items of a request, paging the responses if\n * necessary.\n *\n * @api experimental\n * @since v1.4.0\n */\n eachItem: function eachItem(callback) {\n var self = this;\n function wrappedCallback(err, data) {\n if (err) return callback(err, null);\n if (data === null) return callback(null, null);\n\n var config = self.service.paginationConfig(self.operation);\n var resultKey = config.resultKey;\n if (Array.isArray(resultKey)) resultKey = resultKey[0];\n var items = jmespath.search(data, resultKey);\n var continueIteration = true;\n AWS.util.arrayEach(items, function(item) {\n continueIteration = callback(null, item);\n if (continueIteration === false) {\n return AWS.util.abort;\n }\n });\n return continueIteration;\n }\n\n this.eachPage(wrappedCallback);\n },\n\n /**\n * @return [Boolean] whether the operation can return multiple pages of\n * response data.\n * @see AWS.Response.eachPage\n * @since v1.4.0\n */\n isPageable: function isPageable() {\n return this.service.paginationConfig(this.operation) ? true : false;\n },\n\n /**\n * Sends the request and converts the request object into a readable stream\n * that can be read from or piped into a writable stream.\n *\n * @note The data read from a readable stream contains only\n * the raw HTTP body contents.\n * @example Manually reading from a stream\n * request.createReadStream().on('data', function(data) {\n * console.log(\"Got data:\", data.toString());\n * });\n * @example Piping a request body into a file\n * var out = fs.createWriteStream('/path/to/outfile.jpg');\n * s3.service.getObject(params).createReadStream().pipe(out);\n * @return [Stream] the readable stream object that can be piped\n * or read from (by registering 'data' event listeners).\n * @!macro nobrowser\n */\n createReadStream: function createReadStream() {\n var streams = AWS.util.stream;\n var req = this;\n var stream = null;\n\n if (AWS.HttpClient.streamsApiVersion === 2) {\n stream = new streams.PassThrough();\n process.nextTick(function() { req.send(); });\n } else {\n stream = new streams.Stream();\n stream.readable = true;\n\n stream.sent = false;\n stream.on('newListener', function(event) {\n if (!stream.sent && event === 'data') {\n stream.sent = true;\n process.nextTick(function() { req.send(); });\n }\n });\n }\n\n this.on('error', function(err) {\n stream.emit('error', err);\n });\n\n this.on('httpHeaders', function streamHeaders(statusCode, headers, resp) {\n if (statusCode < 300) {\n req.removeListener('httpData', AWS.EventListeners.Core.HTTP_DATA);\n req.removeListener('httpError', AWS.EventListeners.Core.HTTP_ERROR);\n req.on('httpError', function streamHttpError(error) {\n resp.error = error;\n resp.error.retryable = false;\n });\n\n var shouldCheckContentLength = false;\n var expectedLen;\n if (req.httpRequest.method !== 'HEAD') {\n expectedLen = parseInt(headers['content-length'], 10);\n }\n if (expectedLen !== undefined && !isNaN(expectedLen) && expectedLen >= 0) {\n shouldCheckContentLength = true;\n var receivedLen = 0;\n }\n\n var checkContentLengthAndEmit = function checkContentLengthAndEmit() {\n if (shouldCheckContentLength && receivedLen !== expectedLen) {\n stream.emit('error', AWS.util.error(\n new Error('Stream content length mismatch. Received ' +\n receivedLen + ' of ' + expectedLen + ' bytes.'),\n { code: 'StreamContentLengthMismatch' }\n ));\n } else if (AWS.HttpClient.streamsApiVersion === 2) {\n stream.end();\n } else {\n stream.emit('end');\n }\n };\n\n var httpStream = resp.httpResponse.createUnbufferedStream();\n\n if (AWS.HttpClient.streamsApiVersion === 2) {\n if (shouldCheckContentLength) {\n var lengthAccumulator = new streams.PassThrough();\n lengthAccumulator._write = function(chunk) {\n if (chunk && chunk.length) {\n receivedLen += chunk.length;\n }\n return streams.PassThrough.prototype._write.apply(this, arguments);\n };\n\n lengthAccumulator.on('end', checkContentLengthAndEmit);\n stream.on('error', function(err) {\n shouldCheckContentLength = false;\n httpStream.unpipe(lengthAccumulator);\n lengthAccumulator.emit('end');\n lengthAccumulator.end();\n });\n httpStream.pipe(lengthAccumulator).pipe(stream, { end: false });\n } else {\n httpStream.pipe(stream);\n }\n } else {\n\n if (shouldCheckContentLength) {\n httpStream.on('data', function(arg) {\n if (arg && arg.length) {\n receivedLen += arg.length;\n }\n });\n }\n\n httpStream.on('data', function(arg) {\n stream.emit('data', arg);\n });\n httpStream.on('end', checkContentLengthAndEmit);\n }\n\n httpStream.on('error', function(err) {\n shouldCheckContentLength = false;\n stream.emit('error', err);\n });\n }\n });\n\n return stream;\n },\n\n /**\n * @param [Array,Response] args This should be the response object,\n * or an array of args to send to the event.\n * @api private\n */\n emitEvent: function emit(eventName, args, done) {\n if (typeof args === 'function') { done = args; args = null; }\n if (!done) done = function() { };\n if (!args) args = this.eventParameters(eventName, this.response);\n\n var origEmit = AWS.SequentialExecutor.prototype.emit;\n origEmit.call(this, eventName, args, function (err) {\n if (err) this.response.error = err;\n done.call(this, err);\n });\n },\n\n /**\n * @api private\n */\n eventParameters: function eventParameters(eventName) {\n switch (eventName) {\n case 'restart':\n case 'validate':\n case 'sign':\n case 'build':\n case 'afterValidate':\n case 'afterBuild':\n return [this];\n case 'error':\n return [this.response.error, this.response];\n default:\n return [this.response];\n }\n },\n\n /**\n * @api private\n */\n presign: function presign(expires, callback) {\n if (!callback && typeof expires === 'function') {\n callback = expires;\n expires = null;\n }\n return new AWS.Signers.Presign().sign(this.toGet(), expires, callback);\n },\n\n /**\n * @api private\n */\n isPresigned: function isPresigned() {\n return Object.prototype.hasOwnProperty.call(this.httpRequest.headers, 'presigned-expires');\n },\n\n /**\n * @api private\n */\n toUnauthenticated: function toUnauthenticated() {\n this._unAuthenticated = true;\n this.removeListener('validate', AWS.EventListeners.Core.VALIDATE_CREDENTIALS);\n this.removeListener('sign', AWS.EventListeners.Core.SIGN);\n return this;\n },\n\n /**\n * @api private\n */\n toGet: function toGet() {\n if (this.service.api.protocol === 'query' ||\n this.service.api.protocol === 'ec2') {\n this.removeListener('build', this.buildAsGet);\n this.addListener('build', this.buildAsGet);\n }\n return this;\n },\n\n /**\n * @api private\n */\n buildAsGet: function buildAsGet(request) {\n request.httpRequest.method = 'GET';\n request.httpRequest.path = request.service.endpoint.path +\n '?' + request.httpRequest.body;\n request.httpRequest.body = '';\n\n // don't need these headers on a GET request\n delete request.httpRequest.headers['Content-Length'];\n delete request.httpRequest.headers['Content-Type'];\n },\n\n /**\n * @api private\n */\n haltHandlersOnError: function haltHandlersOnError() {\n this._haltHandlersOnError = true;\n }\n});\n\n/**\n * @api private\n */\nAWS.Request.addPromisesToClass = function addPromisesToClass(PromiseDependency) {\n this.prototype.promise = function promise() {\n var self = this;\n // append to user agent\n this.httpRequest.appendToUserAgent('promise');\n return new PromiseDependency(function(resolve, reject) {\n self.on('complete', function(resp) {\n if (resp.error) {\n reject(resp.error);\n } else {\n // define $response property so that it is not enumerable\n // this prevents circular reference errors when stringifying the JSON object\n resolve(Object.defineProperty(\n resp.data || {},\n '$response',\n {value: resp}\n ));\n }\n });\n self.runTo();\n });\n };\n};\n\n/**\n * @api private\n */\nAWS.Request.deletePromisesFromClass = function deletePromisesFromClass() {\n delete this.prototype.promise;\n};\n\nAWS.util.addPromises(AWS.Request);\n\nAWS.util.mixin(AWS.Request, AWS.SequentialExecutor);\n","/**\n * Copyright 2012-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You\n * may not use this file except in compliance with the License. A copy of\n * the License is located at\n *\n * http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific\n * language governing permissions and limitations under the License.\n */\n\nvar AWS = require('./core');\nvar inherit = AWS.util.inherit;\nvar jmespath = require('jmespath');\n\n/**\n * @api private\n */\nfunction CHECK_ACCEPTORS(resp) {\n var waiter = resp.request._waiter;\n var acceptors = waiter.config.acceptors;\n var acceptorMatched = false;\n var state = 'retry';\n\n acceptors.forEach(function(acceptor) {\n if (!acceptorMatched) {\n var matcher = waiter.matchers[acceptor.matcher];\n if (matcher && matcher(resp, acceptor.expected, acceptor.argument)) {\n acceptorMatched = true;\n state = acceptor.state;\n }\n }\n });\n\n if (!acceptorMatched && resp.error) state = 'failure';\n\n if (state === 'success') {\n waiter.setSuccess(resp);\n } else {\n waiter.setError(resp, state === 'retry');\n }\n}\n\n/**\n * @api private\n */\nAWS.ResourceWaiter = inherit({\n /**\n * Waits for a given state on a service object\n * @param service [Service] the service object to wait on\n * @param state [String] the state (defined in waiter configuration) to wait\n * for.\n * @example Create a waiter for running EC2 instances\n * var ec2 = new AWS.EC2;\n * var waiter = new AWS.ResourceWaiter(ec2, 'instanceRunning');\n */\n constructor: function constructor(service, state) {\n this.service = service;\n this.state = state;\n this.loadWaiterConfig(this.state);\n },\n\n service: null,\n\n state: null,\n\n config: null,\n\n matchers: {\n path: function(resp, expected, argument) {\n try {\n var result = jmespath.search(resp.data, argument);\n } catch (err) {\n return false;\n }\n\n return jmespath.strictDeepEqual(result,expected);\n },\n\n pathAll: function(resp, expected, argument) {\n try {\n var results = jmespath.search(resp.data, argument);\n } catch (err) {\n return false;\n }\n\n if (!Array.isArray(results)) results = [results];\n var numResults = results.length;\n if (!numResults) return false;\n for (var ind = 0 ; ind < numResults; ind++) {\n if (!jmespath.strictDeepEqual(results[ind], expected)) {\n return false;\n }\n }\n return true;\n },\n\n pathAny: function(resp, expected, argument) {\n try {\n var results = jmespath.search(resp.data, argument);\n } catch (err) {\n return false;\n }\n\n if (!Array.isArray(results)) results = [results];\n var numResults = results.length;\n for (var ind = 0 ; ind < numResults; ind++) {\n if (jmespath.strictDeepEqual(results[ind], expected)) {\n return true;\n }\n }\n return false;\n },\n\n status: function(resp, expected) {\n var statusCode = resp.httpResponse.statusCode;\n return (typeof statusCode === 'number') && (statusCode === expected);\n },\n\n error: function(resp, expected) {\n if (typeof expected === 'string' && resp.error) {\n return expected === resp.error.code;\n }\n // if expected is not string, can be boolean indicating presence of error\n return expected === !!resp.error;\n }\n },\n\n listeners: new AWS.SequentialExecutor().addNamedListeners(function(add) {\n add('RETRY_CHECK', 'retry', function(resp) {\n var waiter = resp.request._waiter;\n if (resp.error && resp.error.code === 'ResourceNotReady') {\n resp.error.retryDelay = (waiter.config.delay || 0) * 1000;\n }\n });\n\n add('CHECK_OUTPUT', 'extractData', CHECK_ACCEPTORS);\n\n add('CHECK_ERROR', 'extractError', CHECK_ACCEPTORS);\n }),\n\n /**\n * @return [AWS.Request]\n */\n wait: function wait(params, callback) {\n if (typeof params === 'function') {\n callback = params; params = undefined;\n }\n\n if (params && params.$waiter) {\n params = AWS.util.copy(params);\n if (typeof params.$waiter.delay === 'number') {\n this.config.delay = params.$waiter.delay;\n }\n if (typeof params.$waiter.maxAttempts === 'number') {\n this.config.maxAttempts = params.$waiter.maxAttempts;\n }\n delete params.$waiter;\n }\n\n var request = this.service.makeRequest(this.config.operation, params);\n request._waiter = this;\n request.response.maxRetries = this.config.maxAttempts;\n request.addListeners(this.listeners);\n\n if (callback) request.send(callback);\n return request;\n },\n\n setSuccess: function setSuccess(resp) {\n resp.error = null;\n resp.data = resp.data || {};\n resp.request.removeAllListeners('extractData');\n },\n\n setError: function setError(resp, retryable) {\n resp.data = null;\n resp.error = AWS.util.error(resp.error || new Error(), {\n code: 'ResourceNotReady',\n message: 'Resource is not in the state ' + this.state,\n retryable: retryable\n });\n },\n\n /**\n * Loads waiter configuration from API configuration\n *\n * @api private\n */\n loadWaiterConfig: function loadWaiterConfig(state) {\n if (!this.service.api.waiters[state]) {\n throw new AWS.util.error(new Error(), {\n code: 'StateNotFoundError',\n message: 'State ' + state + ' not found.'\n });\n }\n\n this.config = AWS.util.copy(this.service.api.waiters[state]);\n }\n});\n","var AWS = require('./core');\nvar inherit = AWS.util.inherit;\nvar jmespath = require('jmespath');\n\n/**\n * This class encapsulates the response information\n * from a service request operation sent through {AWS.Request}.\n * The response object has two main properties for getting information\n * back from a request:\n *\n * ## The `data` property\n *\n * The `response.data` property contains the serialized object data\n * retrieved from the service request. For instance, for an\n * Amazon DynamoDB `listTables` method call, the response data might\n * look like:\n *\n * ```\n * > resp.data\n * { TableNames:\n * [ 'table1', 'table2', ... ] }\n * ```\n *\n * The `data` property can be null if an error occurs (see below).\n *\n * ## The `error` property\n *\n * In the event of a service error (or transfer error), the\n * `response.error` property will be filled with the given\n * error data in the form:\n *\n * ```\n * { code: 'SHORT_UNIQUE_ERROR_CODE',\n * message: 'Some human readable error message' }\n * ```\n *\n * In the case of an error, the `data` property will be `null`.\n * Note that if you handle events that can be in a failure state,\n * you should always check whether `response.error` is set\n * before attempting to access the `response.data` property.\n *\n * @!attribute data\n * @readonly\n * @!group Data Properties\n * @note Inside of a {AWS.Request~httpData} event, this\n * property contains a single raw packet instead of the\n * full de-serialized service response.\n * @return [Object] the de-serialized response data\n * from the service.\n *\n * @!attribute error\n * An structure containing information about a service\n * or networking error.\n * @readonly\n * @!group Data Properties\n * @note This attribute is only filled if a service or\n * networking error occurs.\n * @return [Error]\n * * code [String] a unique short code representing the\n * error that was emitted.\n * * message [String] a longer human readable error message\n * * retryable [Boolean] whether the error message is\n * retryable.\n * * statusCode [Numeric] in the case of a request that reached the service,\n * this value contains the response status code.\n * * time [Date] the date time object when the error occurred.\n * * hostname [String] set when a networking error occurs to easily\n * identify the endpoint of the request.\n * * region [String] set when a networking error occurs to easily\n * identify the region of the request.\n *\n * @!attribute requestId\n * @readonly\n * @!group Data Properties\n * @return [String] the unique request ID associated with the response.\n * Log this value when debugging requests for AWS support.\n *\n * @!attribute retryCount\n * @readonly\n * @!group Operation Properties\n * @return [Integer] the number of retries that were\n * attempted before the request was completed.\n *\n * @!attribute redirectCount\n * @readonly\n * @!group Operation Properties\n * @return [Integer] the number of redirects that were\n * followed before the request was completed.\n *\n * @!attribute httpResponse\n * @readonly\n * @!group HTTP Properties\n * @return [AWS.HttpResponse] the raw HTTP response object\n * containing the response headers and body information\n * from the server.\n *\n * @see AWS.Request\n */\nAWS.Response = inherit({\n\n /**\n * @api private\n */\n constructor: function Response(request) {\n this.request = request;\n this.data = null;\n this.error = null;\n this.retryCount = 0;\n this.redirectCount = 0;\n this.httpResponse = new AWS.HttpResponse();\n if (request) {\n this.maxRetries = request.service.numRetries();\n this.maxRedirects = request.service.config.maxRedirects;\n }\n },\n\n /**\n * Creates a new request for the next page of response data, calling the\n * callback with the page data if a callback is provided.\n *\n * @callback callback function(err, data)\n * Called when a page of data is returned from the next request.\n *\n * @param err [Error] an error object, if an error occurred in the request\n * @param data [Object] the next page of data, or null, if there are no\n * more pages left.\n * @return [AWS.Request] the request object for the next page of data\n * @return [null] if no callback is provided and there are no pages left\n * to retrieve.\n * @since v1.4.0\n */\n nextPage: function nextPage(callback) {\n var config;\n var service = this.request.service;\n var operation = this.request.operation;\n try {\n config = service.paginationConfig(operation, true);\n } catch (e) { this.error = e; }\n\n if (!this.hasNextPage()) {\n if (callback) callback(this.error, null);\n else if (this.error) throw this.error;\n return null;\n }\n\n var params = AWS.util.copy(this.request.params);\n if (!this.nextPageTokens) {\n return callback ? callback(null, null) : null;\n } else {\n var inputTokens = config.inputToken;\n if (typeof inputTokens === 'string') inputTokens = [inputTokens];\n for (var i = 0; i < inputTokens.length; i++) {\n params[inputTokens[i]] = this.nextPageTokens[i];\n }\n return service.makeRequest(this.request.operation, params, callback);\n }\n },\n\n /**\n * @return [Boolean] whether more pages of data can be returned by further\n * requests\n * @since v1.4.0\n */\n hasNextPage: function hasNextPage() {\n this.cacheNextPageTokens();\n if (this.nextPageTokens) return true;\n if (this.nextPageTokens === undefined) return undefined;\n else return false;\n },\n\n /**\n * @api private\n */\n cacheNextPageTokens: function cacheNextPageTokens() {\n if (Object.prototype.hasOwnProperty.call(this, 'nextPageTokens')) return this.nextPageTokens;\n this.nextPageTokens = undefined;\n\n var config = this.request.service.paginationConfig(this.request.operation);\n if (!config) return this.nextPageTokens;\n\n this.nextPageTokens = null;\n if (config.moreResults) {\n if (!jmespath.search(this.data, config.moreResults)) {\n return this.nextPageTokens;\n }\n }\n\n var exprs = config.outputToken;\n if (typeof exprs === 'string') exprs = [exprs];\n AWS.util.arrayEach.call(this, exprs, function (expr) {\n var output = jmespath.search(this.data, expr);\n if (output) {\n this.nextPageTokens = this.nextPageTokens || [];\n this.nextPageTokens.push(output);\n }\n });\n\n return this.nextPageTokens;\n }\n\n});\n","var AWS = require('../core');\nvar byteLength = AWS.util.string.byteLength;\nvar Buffer = AWS.util.Buffer;\n\n/**\n * The managed uploader allows for easy and efficient uploading of buffers,\n * blobs, or streams, using a configurable amount of concurrency to perform\n * multipart uploads where possible. This abstraction also enables uploading\n * streams of unknown size due to the use of multipart uploads.\n *\n * To construct a managed upload object, see the {constructor} function.\n *\n * ## Tracking upload progress\n *\n * The managed upload object can also track progress by attaching an\n * 'httpUploadProgress' listener to the upload manager. This event is similar\n * to {AWS.Request~httpUploadProgress} but groups all concurrent upload progress\n * into a single event. See {AWS.S3.ManagedUpload~httpUploadProgress} for more\n * information.\n *\n * ## Handling Multipart Cleanup\n *\n * By default, this class will automatically clean up any multipart uploads\n * when an individual part upload fails. This behavior can be disabled in order\n * to manually handle failures by setting the `leavePartsOnError` configuration\n * option to `true` when initializing the upload object.\n *\n * @!event httpUploadProgress(progress)\n * Triggered when the uploader has uploaded more data.\n * @note The `total` property may not be set if the stream being uploaded has\n * not yet finished chunking. In this case the `total` will be undefined\n * until the total stream size is known.\n * @note This event will not be emitted in Node.js 0.8.x.\n * @param progress [map] An object containing the `loaded` and `total` bytes\n * of the request and the `key` of the S3 object. Note that `total` may be undefined until the payload\n * size is known.\n * @context (see AWS.Request~send)\n */\nAWS.S3.ManagedUpload = AWS.util.inherit({\n /**\n * Creates a managed upload object with a set of configuration options.\n *\n * @note A \"Body\" parameter is required to be set prior to calling {send}.\n * @note In Node.js, sending \"Body\" as {https://nodejs.org/dist/latest/docs/api/stream.html#stream_object_mode object-mode stream}\n * may result in upload hangs. Using buffer stream is preferable.\n * @option options params [map] a map of parameters to pass to the upload\n * requests. The \"Body\" parameter is required to be specified either on\n * the service or in the params option.\n * @note ContentMD5 should not be provided when using the managed upload object.\n * Instead, setting \"computeChecksums\" to true will enable automatic ContentMD5 generation\n * by the managed upload object.\n * @option options queueSize [Number] (4) the size of the concurrent queue\n * manager to upload parts in parallel. Set to 1 for synchronous uploading\n * of parts. Note that the uploader will buffer at most queueSize * partSize\n * bytes into memory at any given time.\n * @option options partSize [Number] (5mb) the size in bytes for each\n * individual part to be uploaded. Adjust the part size to ensure the number\n * of parts does not exceed {maxTotalParts}. See {minPartSize} for the\n * minimum allowed part size.\n * @option options leavePartsOnError [Boolean] (false) whether to abort the\n * multipart upload if an error occurs. Set to true if you want to handle\n * failures manually.\n * @option options service [AWS.S3] an optional S3 service object to use for\n * requests. This object might have bound parameters used by the uploader.\n * @option options tags [Array<map>] The tags to apply to the uploaded object.\n * Each tag should have a `Key` and `Value` keys.\n * @example Creating a default uploader for a stream object\n * var upload = new AWS.S3.ManagedUpload({\n * params: {Bucket: 'bucket', Key: 'key', Body: stream}\n * });\n * @example Creating an uploader with concurrency of 1 and partSize of 10mb\n * var upload = new AWS.S3.ManagedUpload({\n * partSize: 10 * 1024 * 1024, queueSize: 1,\n * params: {Bucket: 'bucket', Key: 'key', Body: stream}\n * });\n * @example Creating an uploader with tags\n * var upload = new AWS.S3.ManagedUpload({\n * params: {Bucket: 'bucket', Key: 'key', Body: stream},\n * tags: [{Key: 'tag1', Value: 'value1'}, {Key: 'tag2', Value: 'value2'}]\n * });\n * @see send\n */\n constructor: function ManagedUpload(options) {\n var self = this;\n AWS.SequentialExecutor.call(self);\n self.body = null;\n self.sliceFn = null;\n self.callback = null;\n self.parts = {};\n self.completeInfo = [];\n self.fillQueue = function() {\n self.callback(new Error('Unsupported body payload ' + typeof self.body));\n };\n\n self.configure(options);\n },\n\n /**\n * @api private\n */\n configure: function configure(options) {\n options = options || {};\n this.partSize = this.minPartSize;\n\n if (options.queueSize) this.queueSize = options.queueSize;\n if (options.partSize) this.partSize = options.partSize;\n if (options.leavePartsOnError) this.leavePartsOnError = true;\n if (options.tags) {\n if (!Array.isArray(options.tags)) {\n throw new Error('Tags must be specified as an array; ' +\n typeof options.tags + ' provided.');\n }\n this.tags = options.tags;\n }\n\n if (this.partSize < this.minPartSize) {\n throw new Error('partSize must be greater than ' +\n this.minPartSize);\n }\n\n this.service = options.service;\n this.bindServiceObject(options.params);\n this.validateBody();\n this.adjustTotalBytes();\n },\n\n /**\n * @api private\n */\n leavePartsOnError: false,\n\n /**\n * @api private\n */\n queueSize: 4,\n\n /**\n * @api private\n */\n partSize: null,\n\n /**\n * @readonly\n * @return [Number] the minimum number of bytes for an individual part\n * upload.\n */\n minPartSize: 1024 * 1024 * 5,\n\n /**\n * @readonly\n * @return [Number] the maximum allowed number of parts in a multipart upload.\n */\n maxTotalParts: 10000,\n\n /**\n * Initiates the managed upload for the payload.\n *\n * @callback callback function(err, data)\n * @param err [Error] an error or null if no error occurred.\n * @param data [map] The response data from the successful upload:\n * * `Location` (String) the URL of the uploaded object\n * * `ETag` (String) the ETag of the uploaded object\n * * `Bucket` (String) the bucket to which the object was uploaded\n * * `Key` (String) the key to which the object was uploaded\n * @example Sending a managed upload object\n * var params = {Bucket: 'bucket', Key: 'key', Body: stream};\n * var upload = new AWS.S3.ManagedUpload({params: params});\n * upload.send(function(err, data) {\n * console.log(err, data);\n * });\n */\n send: function(callback) {\n var self = this;\n self.failed = false;\n self.callback = callback || function(err) { if (err) throw err; };\n\n var runFill = true;\n if (self.sliceFn) {\n self.fillQueue = self.fillBuffer;\n } else if (AWS.util.isNode()) {\n var Stream = AWS.util.stream.Stream;\n if (self.body instanceof Stream) {\n runFill = false;\n self.fillQueue = self.fillStream;\n self.partBuffers = [];\n self.body.\n on('error', function(err) { self.cleanup(err); }).\n on('readable', function() { self.fillQueue(); }).\n on('end', function() {\n self.isDoneChunking = true;\n self.numParts = self.totalPartNumbers;\n self.fillQueue.call(self);\n\n if (self.isDoneChunking && self.totalPartNumbers >= 1 && self.doneParts === self.numParts) {\n self.finishMultiPart();\n }\n });\n }\n }\n\n if (runFill) self.fillQueue.call(self);\n },\n\n /**\n * @!method promise()\n * Returns a 'thenable' promise.\n *\n * Two callbacks can be provided to the `then` method on the returned promise.\n * The first callback will be called if the promise is fulfilled, and the second\n * callback will be called if the promise is rejected.\n * @callback fulfilledCallback function(data)\n * Called if the promise is fulfilled.\n * @param data [map] The response data from the successful upload:\n * `Location` (String) the URL of the uploaded object\n * `ETag` (String) the ETag of the uploaded object\n * `Bucket` (String) the bucket to which the object was uploaded\n * `Key` (String) the key to which the object was uploaded\n * @callback rejectedCallback function(err)\n * Called if the promise is rejected.\n * @param err [Error] an error or null if no error occurred.\n * @return [Promise] A promise that represents the state of the upload request.\n * @example Sending an upload request using promises.\n * var upload = s3.upload({Bucket: 'bucket', Key: 'key', Body: stream});\n * var promise = upload.promise();\n * promise.then(function(data) { ... }, function(err) { ... });\n */\n\n /**\n * Aborts a managed upload, including all concurrent upload requests.\n * @note By default, calling this function will cleanup a multipart upload\n * if one was created. To leave the multipart upload around after aborting\n * a request, configure `leavePartsOnError` to `true` in the {constructor}.\n * @note Calling {abort} in the browser environment will not abort any requests\n * that are already in flight. If a multipart upload was created, any parts\n * not yet uploaded will not be sent, and the multipart upload will be cleaned up.\n * @example Aborting an upload\n * var params = {\n * Bucket: 'bucket', Key: 'key',\n * Body: Buffer.alloc(1024 * 1024 * 25) // 25MB payload\n * };\n * var upload = s3.upload(params);\n * upload.send(function (err, data) {\n * if (err) console.log(\"Error:\", err.code, err.message);\n * else console.log(data);\n * });\n *\n * // abort request in 1 second\n * setTimeout(upload.abort.bind(upload), 1000);\n */\n abort: function() {\n var self = this;\n //abort putObject request\n if (self.isDoneChunking === true && self.totalPartNumbers === 1 && self.singlePart) {\n self.singlePart.abort();\n } else {\n self.cleanup(AWS.util.error(new Error('Request aborted by user'), {\n code: 'RequestAbortedError', retryable: false\n }));\n }\n },\n\n /**\n * @api private\n */\n validateBody: function validateBody() {\n var self = this;\n self.body = self.service.config.params.Body;\n if (typeof self.body === 'string') {\n self.body = AWS.util.buffer.toBuffer(self.body);\n } else if (!self.body) {\n throw new Error('params.Body is required');\n }\n self.sliceFn = AWS.util.arraySliceFn(self.body);\n },\n\n /**\n * @api private\n */\n bindServiceObject: function bindServiceObject(params) {\n params = params || {};\n var self = this;\n // bind parameters to new service object\n if (!self.service) {\n self.service = new AWS.S3({params: params});\n } else {\n var service = self.service;\n var config = AWS.util.copy(service._originalConfig || {});\n config.signatureVersion = service.getSignatureVersion();\n self.service = new service.constructor.__super__(config);\n self.service.config.params =\n AWS.util.merge(self.service.config.params || {}, params);\n }\n },\n\n /**\n * @api private\n */\n adjustTotalBytes: function adjustTotalBytes() {\n var self = this;\n try { // try to get totalBytes\n self.totalBytes = byteLength(self.body);\n } catch (e) { }\n\n // try to adjust partSize if we know payload length\n if (self.totalBytes) {\n var newPartSize = Math.ceil(self.totalBytes / self.maxTotalParts);\n if (newPartSize > self.partSize) self.partSize = newPartSize;\n } else {\n self.totalBytes = undefined;\n }\n },\n\n /**\n * @api private\n */\n isDoneChunking: false,\n\n /**\n * @api private\n */\n partPos: 0,\n\n /**\n * @api private\n */\n totalChunkedBytes: 0,\n\n /**\n * @api private\n */\n totalUploadedBytes: 0,\n\n /**\n * @api private\n */\n totalBytes: undefined,\n\n /**\n * @api private\n */\n numParts: 0,\n\n /**\n * @api private\n */\n totalPartNumbers: 0,\n\n /**\n * @api private\n */\n activeParts: 0,\n\n /**\n * @api private\n */\n doneParts: 0,\n\n /**\n * @api private\n */\n parts: null,\n\n /**\n * @api private\n */\n completeInfo: null,\n\n /**\n * @api private\n */\n failed: false,\n\n /**\n * @api private\n */\n multipartReq: null,\n\n /**\n * @api private\n */\n partBuffers: null,\n\n /**\n * @api private\n */\n partBufferLength: 0,\n\n /**\n * @api private\n */\n fillBuffer: function fillBuffer() {\n var self = this;\n var bodyLen = byteLength(self.body);\n\n if (bodyLen === 0) {\n self.isDoneChunking = true;\n self.numParts = 1;\n self.nextChunk(self.body);\n return;\n }\n\n while (self.activeParts < self.queueSize && self.partPos < bodyLen) {\n var endPos = Math.min(self.partPos + self.partSize, bodyLen);\n var buf = self.sliceFn.call(self.body, self.partPos, endPos);\n self.partPos += self.partSize;\n\n if (byteLength(buf) < self.partSize || self.partPos === bodyLen) {\n self.isDoneChunking = true;\n self.numParts = self.totalPartNumbers + 1;\n }\n self.nextChunk(buf);\n }\n },\n\n /**\n * @api private\n */\n fillStream: function fillStream() {\n var self = this;\n if (self.activeParts >= self.queueSize) return;\n\n var buf = self.body.read(self.partSize - self.partBufferLength) ||\n self.body.read();\n if (buf) {\n self.partBuffers.push(buf);\n self.partBufferLength += buf.length;\n self.totalChunkedBytes += buf.length;\n }\n\n if (self.partBufferLength >= self.partSize) {\n // if we have single buffer we avoid copyfull concat\n var pbuf = self.partBuffers.length === 1 ?\n self.partBuffers[0] : Buffer.concat(self.partBuffers);\n self.partBuffers = [];\n self.partBufferLength = 0;\n\n // if we have more than partSize, push the rest back on the queue\n if (pbuf.length > self.partSize) {\n var rest = pbuf.slice(self.partSize);\n self.partBuffers.push(rest);\n self.partBufferLength += rest.length;\n pbuf = pbuf.slice(0, self.partSize);\n }\n\n self.nextChunk(pbuf);\n }\n\n if (self.isDoneChunking && !self.isDoneSending) {\n // if we have single buffer we avoid copyfull concat\n pbuf = self.partBuffers.length === 1 ?\n self.partBuffers[0] : Buffer.concat(self.partBuffers);\n self.partBuffers = [];\n self.partBufferLength = 0;\n self.totalBytes = self.totalChunkedBytes;\n self.isDoneSending = true;\n\n if (self.numParts === 0 || pbuf.length > 0) {\n self.numParts++;\n self.nextChunk(pbuf);\n }\n }\n\n self.body.read(0);\n },\n\n /**\n * @api private\n */\n nextChunk: function nextChunk(chunk) {\n var self = this;\n if (self.failed) return null;\n\n var partNumber = ++self.totalPartNumbers;\n if (self.isDoneChunking && partNumber === 1) {\n var params = {Body: chunk};\n if (this.tags) {\n params.Tagging = this.getTaggingHeader();\n }\n var req = self.service.putObject(params);\n req._managedUpload = self;\n req.on('httpUploadProgress', self.progress).send(self.finishSinglePart);\n self.singlePart = req; //save the single part request\n return null;\n } else if (self.service.config.params.ContentMD5) {\n var err = AWS.util.error(new Error('The Content-MD5 you specified is invalid for multi-part uploads.'), {\n code: 'InvalidDigest', retryable: false\n });\n\n self.cleanup(err);\n return null;\n }\n\n if (self.completeInfo[partNumber] && self.completeInfo[partNumber].ETag !== null) {\n return null; // Already uploaded this part.\n }\n\n self.activeParts++;\n if (!self.service.config.params.UploadId) {\n\n if (!self.multipartReq) { // create multipart\n self.multipartReq = self.service.createMultipartUpload();\n self.multipartReq.on('success', function(resp) {\n self.service.config.params.UploadId = resp.data.UploadId;\n self.multipartReq = null;\n });\n self.queueChunks(chunk, partNumber);\n self.multipartReq.on('error', function(err) {\n self.cleanup(err);\n });\n self.multipartReq.send();\n } else {\n self.queueChunks(chunk, partNumber);\n }\n } else { // multipart is created, just send\n self.uploadPart(chunk, partNumber);\n }\n },\n\n /**\n * @api private\n */\n getTaggingHeader: function getTaggingHeader() {\n var kvPairStrings = [];\n for (var i = 0; i < this.tags.length; i++) {\n kvPairStrings.push(AWS.util.uriEscape(this.tags[i].Key) + '=' +\n AWS.util.uriEscape(this.tags[i].Value));\n }\n\n return kvPairStrings.join('&');\n },\n\n /**\n * @api private\n */\n uploadPart: function uploadPart(chunk, partNumber) {\n var self = this;\n\n var partParams = {\n Body: chunk,\n ContentLength: AWS.util.string.byteLength(chunk),\n PartNumber: partNumber\n };\n\n var partInfo = {ETag: null, PartNumber: partNumber};\n self.completeInfo[partNumber] = partInfo;\n\n var req = self.service.uploadPart(partParams);\n self.parts[partNumber] = req;\n req._lastUploadedBytes = 0;\n req._managedUpload = self;\n req.on('httpUploadProgress', self.progress);\n req.send(function(err, data) {\n delete self.parts[partParams.PartNumber];\n self.activeParts--;\n\n if (!err && (!data || !data.ETag)) {\n var message = 'No access to ETag property on response.';\n if (AWS.util.isBrowser()) {\n message += ' Check CORS configuration to expose ETag header.';\n }\n\n err = AWS.util.error(new Error(message), {\n code: 'ETagMissing', retryable: false\n });\n }\n if (err) return self.cleanup(err);\n //prevent sending part being returned twice (https://github.com/aws/aws-sdk-js/issues/2304)\n if (self.completeInfo[partNumber] && self.completeInfo[partNumber].ETag !== null) return null;\n partInfo.ETag = data.ETag;\n self.doneParts++;\n if (self.isDoneChunking && self.doneParts === self.numParts) {\n self.finishMultiPart();\n } else {\n self.fillQueue.call(self);\n }\n });\n },\n\n /**\n * @api private\n */\n queueChunks: function queueChunks(chunk, partNumber) {\n var self = this;\n self.multipartReq.on('success', function() {\n self.uploadPart(chunk, partNumber);\n });\n },\n\n /**\n * @api private\n */\n cleanup: function cleanup(err) {\n var self = this;\n if (self.failed) return;\n\n // clean up stream\n if (typeof self.body.removeAllListeners === 'function' &&\n typeof self.body.resume === 'function') {\n self.body.removeAllListeners('readable');\n self.body.removeAllListeners('end');\n self.body.resume();\n }\n\n // cleanup multipartReq listeners\n if (self.multipartReq) {\n self.multipartReq.removeAllListeners('success');\n self.multipartReq.removeAllListeners('error');\n self.multipartReq.removeAllListeners('complete');\n delete self.multipartReq;\n }\n\n if (self.service.config.params.UploadId && !self.leavePartsOnError) {\n self.service.abortMultipartUpload().send();\n } else if (self.leavePartsOnError) {\n self.isDoneChunking = false;\n }\n\n AWS.util.each(self.parts, function(partNumber, part) {\n part.removeAllListeners('complete');\n part.abort();\n });\n\n self.activeParts = 0;\n self.partPos = 0;\n self.numParts = 0;\n self.totalPartNumbers = 0;\n self.parts = {};\n self.failed = true;\n self.callback(err);\n },\n\n /**\n * @api private\n */\n finishMultiPart: function finishMultiPart() {\n var self = this;\n var completeParams = { MultipartUpload: { Parts: self.completeInfo.slice(1) } };\n self.service.completeMultipartUpload(completeParams, function(err, data) {\n if (err) {\n return self.cleanup(err);\n }\n\n if (data && typeof data.Location === 'string') {\n data.Location = data.Location.replace(/%2F/g, '/');\n }\n\n if (Array.isArray(self.tags)) {\n for (var i = 0; i < self.tags.length; i++) {\n self.tags[i].Value = String(self.tags[i].Value);\n }\n self.service.putObjectTagging(\n {Tagging: {TagSet: self.tags}},\n function(e, d) {\n if (e) {\n self.callback(e);\n } else {\n self.callback(e, data);\n }\n }\n );\n } else {\n self.callback(err, data);\n }\n });\n },\n\n /**\n * @api private\n */\n finishSinglePart: function finishSinglePart(err, data) {\n var upload = this.request._managedUpload;\n var httpReq = this.request.httpRequest;\n var endpoint = httpReq.endpoint;\n if (err) return upload.callback(err);\n data.Location =\n [endpoint.protocol, '//', endpoint.host, httpReq.path].join('');\n data.key = this.request.params.Key; // will stay undocumented\n data.Key = this.request.params.Key;\n data.Bucket = this.request.params.Bucket;\n upload.callback(err, data);\n },\n\n /**\n * @api private\n */\n progress: function progress(info) {\n var upload = this._managedUpload;\n if (this.operation === 'putObject') {\n info.part = 1;\n info.key = this.params.Key;\n } else {\n upload.totalUploadedBytes += info.loaded - this._lastUploadedBytes;\n this._lastUploadedBytes = info.loaded;\n info = {\n loaded: upload.totalUploadedBytes,\n total: upload.totalBytes,\n part: this.params.PartNumber,\n key: this.params.Key\n };\n }\n upload.emit('httpUploadProgress', [info]);\n }\n});\n\nAWS.util.mixin(AWS.S3.ManagedUpload, AWS.SequentialExecutor);\n\n/**\n * @api private\n */\nAWS.S3.ManagedUpload.addPromisesToClass = function addPromisesToClass(PromiseDependency) {\n this.prototype.promise = AWS.util.promisifyMethod('send', PromiseDependency);\n};\n\n/**\n * @api private\n */\nAWS.S3.ManagedUpload.deletePromisesFromClass = function deletePromisesFromClass() {\n delete this.prototype.promise;\n};\n\nAWS.util.addPromises(AWS.S3.ManagedUpload);\n\n/**\n * @api private\n */\nmodule.exports = AWS.S3.ManagedUpload;\n","var AWS = require('./core');\n\n/**\n * @api private\n * @!method on(eventName, callback)\n * Registers an event listener callback for the event given by `eventName`.\n * Parameters passed to the callback function depend on the individual event\n * being triggered. See the event documentation for those parameters.\n *\n * @param eventName [String] the event name to register the listener for\n * @param callback [Function] the listener callback function\n * @param toHead [Boolean] attach the listener callback to the head of callback array if set to true.\n * Default to be false.\n * @return [AWS.SequentialExecutor] the same object for chaining\n */\nAWS.SequentialExecutor = AWS.util.inherit({\n\n constructor: function SequentialExecutor() {\n this._events = {};\n },\n\n /**\n * @api private\n */\n listeners: function listeners(eventName) {\n return this._events[eventName] ? this._events[eventName].slice(0) : [];\n },\n\n on: function on(eventName, listener, toHead) {\n if (this._events[eventName]) {\n toHead ?\n this._events[eventName].unshift(listener) :\n this._events[eventName].push(listener);\n } else {\n this._events[eventName] = [listener];\n }\n return this;\n },\n\n onAsync: function onAsync(eventName, listener, toHead) {\n listener._isAsync = true;\n return this.on(eventName, listener, toHead);\n },\n\n removeListener: function removeListener(eventName, listener) {\n var listeners = this._events[eventName];\n if (listeners) {\n var length = listeners.length;\n var position = -1;\n for (var i = 0; i < length; ++i) {\n if (listeners[i] === listener) {\n position = i;\n }\n }\n if (position > -1) {\n listeners.splice(position, 1);\n }\n }\n return this;\n },\n\n removeAllListeners: function removeAllListeners(eventName) {\n if (eventName) {\n delete this._events[eventName];\n } else {\n this._events = {};\n }\n return this;\n },\n\n /**\n * @api private\n */\n emit: function emit(eventName, eventArgs, doneCallback) {\n if (!doneCallback) doneCallback = function() { };\n var listeners = this.listeners(eventName);\n var count = listeners.length;\n this.callListeners(listeners, eventArgs, doneCallback);\n return count > 0;\n },\n\n /**\n * @api private\n */\n callListeners: function callListeners(listeners, args, doneCallback, prevError) {\n var self = this;\n var error = prevError || null;\n\n function callNextListener(err) {\n if (err) {\n error = AWS.util.error(error || new Error(), err);\n if (self._haltHandlersOnError) {\n return doneCallback.call(self, error);\n }\n }\n self.callListeners(listeners, args, doneCallback, error);\n }\n\n while (listeners.length > 0) {\n var listener = listeners.shift();\n if (listener._isAsync) { // asynchronous listener\n listener.apply(self, args.concat([callNextListener]));\n return; // stop here, callNextListener will continue\n } else { // synchronous listener\n try {\n listener.apply(self, args);\n } catch (err) {\n error = AWS.util.error(error || new Error(), err);\n }\n if (error && self._haltHandlersOnError) {\n doneCallback.call(self, error);\n return;\n }\n }\n }\n doneCallback.call(self, error);\n },\n\n /**\n * Adds or copies a set of listeners from another list of\n * listeners or SequentialExecutor object.\n *\n * @param listeners [map<String,Array<Function>>, AWS.SequentialExecutor]\n * a list of events and callbacks, or an event emitter object\n * containing listeners to add to this emitter object.\n * @return [AWS.SequentialExecutor] the emitter object, for chaining.\n * @example Adding listeners from a map of listeners\n * emitter.addListeners({\n * event1: [function() { ... }, function() { ... }],\n * event2: [function() { ... }]\n * });\n * emitter.emit('event1'); // emitter has event1\n * emitter.emit('event2'); // emitter has event2\n * @example Adding listeners from another emitter object\n * var emitter1 = new AWS.SequentialExecutor();\n * emitter1.on('event1', function() { ... });\n * emitter1.on('event2', function() { ... });\n * var emitter2 = new AWS.SequentialExecutor();\n * emitter2.addListeners(emitter1);\n * emitter2.emit('event1'); // emitter2 has event1\n * emitter2.emit('event2'); // emitter2 has event2\n */\n addListeners: function addListeners(listeners) {\n var self = this;\n\n // extract listeners if parameter is an SequentialExecutor object\n if (listeners._events) listeners = listeners._events;\n\n AWS.util.each(listeners, function(event, callbacks) {\n if (typeof callbacks === 'function') callbacks = [callbacks];\n AWS.util.arrayEach(callbacks, function(callback) {\n self.on(event, callback);\n });\n });\n\n return self;\n },\n\n /**\n * Registers an event with {on} and saves the callback handle function\n * as a property on the emitter object using a given `name`.\n *\n * @param name [String] the property name to set on this object containing\n * the callback function handle so that the listener can be removed in\n * the future.\n * @param (see on)\n * @return (see on)\n * @example Adding a named listener DATA_CALLBACK\n * var listener = function() { doSomething(); };\n * emitter.addNamedListener('DATA_CALLBACK', 'data', listener);\n *\n * // the following prints: true\n * console.log(emitter.DATA_CALLBACK == listener);\n */\n addNamedListener: function addNamedListener(name, eventName, callback, toHead) {\n this[name] = callback;\n this.addListener(eventName, callback, toHead);\n return this;\n },\n\n /**\n * @api private\n */\n addNamedAsyncListener: function addNamedAsyncListener(name, eventName, callback, toHead) {\n callback._isAsync = true;\n return this.addNamedListener(name, eventName, callback, toHead);\n },\n\n /**\n * Helper method to add a set of named listeners using\n * {addNamedListener}. The callback contains a parameter\n * with a handle to the `addNamedListener` method.\n *\n * @callback callback function(add)\n * The callback function is called immediately in order to provide\n * the `add` function to the block. This simplifies the addition of\n * a large group of named listeners.\n * @param add [Function] the {addNamedListener} function to call\n * when registering listeners.\n * @example Adding a set of named listeners\n * emitter.addNamedListeners(function(add) {\n * add('DATA_CALLBACK', 'data', function() { ... });\n * add('OTHER', 'otherEvent', function() { ... });\n * add('LAST', 'lastEvent', function() { ... });\n * });\n *\n * // these properties are now set:\n * emitter.DATA_CALLBACK;\n * emitter.OTHER;\n * emitter.LAST;\n */\n addNamedListeners: function addNamedListeners(callback) {\n var self = this;\n callback(\n function() {\n self.addNamedListener.apply(self, arguments);\n },\n function() {\n self.addNamedAsyncListener.apply(self, arguments);\n }\n );\n return this;\n }\n});\n\n/**\n * {on} is the prefered method.\n * @api private\n */\nAWS.SequentialExecutor.prototype.addListener = AWS.SequentialExecutor.prototype.on;\n\n/**\n * @api private\n */\nmodule.exports = AWS.SequentialExecutor;\n","var AWS = require('./core');\nvar Api = require('./model/api');\nvar regionConfig = require('./region_config');\n\nvar inherit = AWS.util.inherit;\nvar clientCount = 0;\n\n/**\n * The service class representing an AWS service.\n *\n * @class_abstract This class is an abstract class.\n *\n * @!attribute apiVersions\n * @return [Array<String>] the list of API versions supported by this service.\n * @readonly\n */\nAWS.Service = inherit({\n /**\n * Create a new service object with a configuration object\n *\n * @param config [map] a map of configuration options\n */\n constructor: function Service(config) {\n if (!this.loadServiceClass) {\n throw AWS.util.error(new Error(),\n 'Service must be constructed with `new\\' operator');\n }\n var ServiceClass = this.loadServiceClass(config || {});\n if (ServiceClass) {\n var originalConfig = AWS.util.copy(config);\n var svc = new ServiceClass(config);\n Object.defineProperty(svc, '_originalConfig', {\n get: function() { return originalConfig; },\n enumerable: false,\n configurable: true\n });\n svc._clientId = ++clientCount;\n return svc;\n }\n this.initialize(config);\n },\n\n /**\n * @api private\n */\n initialize: function initialize(config) {\n var svcConfig = AWS.config[this.serviceIdentifier];\n this.config = new AWS.Config(AWS.config);\n if (svcConfig) this.config.update(svcConfig, true);\n if (config) this.config.update(config, true);\n\n this.validateService();\n if (!this.config.endpoint) regionConfig.configureEndpoint(this);\n\n this.config.endpoint = this.endpointFromTemplate(this.config.endpoint);\n this.setEndpoint(this.config.endpoint);\n //enable attaching listeners to service client\n AWS.SequentialExecutor.call(this);\n AWS.Service.addDefaultMonitoringListeners(this);\n if ((this.config.clientSideMonitoring || AWS.Service._clientSideMonitoring) && this.publisher) {\n var publisher = this.publisher;\n this.addNamedListener('PUBLISH_API_CALL', 'apiCall', function PUBLISH_API_CALL(event) {\n process.nextTick(function() {publisher.eventHandler(event);});\n });\n this.addNamedListener('PUBLISH_API_ATTEMPT', 'apiCallAttempt', function PUBLISH_API_ATTEMPT(event) {\n process.nextTick(function() {publisher.eventHandler(event);});\n });\n }\n },\n\n /**\n * @api private\n */\n validateService: function validateService() {\n },\n\n /**\n * @api private\n */\n loadServiceClass: function loadServiceClass(serviceConfig) {\n var config = serviceConfig;\n if (!AWS.util.isEmpty(this.api)) {\n return null;\n } else if (config.apiConfig) {\n return AWS.Service.defineServiceApi(this.constructor, config.apiConfig);\n } else if (!this.constructor.services) {\n return null;\n } else {\n config = new AWS.Config(AWS.config);\n config.update(serviceConfig, true);\n var version = config.apiVersions[this.constructor.serviceIdentifier];\n version = version || config.apiVersion;\n return this.getLatestServiceClass(version);\n }\n },\n\n /**\n * @api private\n */\n getLatestServiceClass: function getLatestServiceClass(version) {\n version = this.getLatestServiceVersion(version);\n if (this.constructor.services[version] === null) {\n AWS.Service.defineServiceApi(this.constructor, version);\n }\n\n return this.constructor.services[version];\n },\n\n /**\n * @api private\n */\n getLatestServiceVersion: function getLatestServiceVersion(version) {\n if (!this.constructor.services || this.constructor.services.length === 0) {\n throw new Error('No services defined on ' +\n this.constructor.serviceIdentifier);\n }\n\n if (!version) {\n version = 'latest';\n } else if (AWS.util.isType(version, Date)) {\n version = AWS.util.date.iso8601(version).split('T')[0];\n }\n\n if (Object.hasOwnProperty(this.constructor.services, version)) {\n return version;\n }\n\n var keys = Object.keys(this.constructor.services).sort();\n var selectedVersion = null;\n for (var i = keys.length - 1; i >= 0; i--) {\n // versions that end in \"*\" are not available on disk and can be\n // skipped, so do not choose these as selectedVersions\n if (keys[i][keys[i].length - 1] !== '*') {\n selectedVersion = keys[i];\n }\n if (keys[i].substr(0, 10) <= version) {\n return selectedVersion;\n }\n }\n\n throw new Error('Could not find ' + this.constructor.serviceIdentifier +\n ' API to satisfy version constraint `' + version + '\\'');\n },\n\n /**\n * @api private\n */\n api: {},\n\n /**\n * @api private\n */\n defaultRetryCount: 3,\n\n /**\n * @api private\n */\n customizeRequests: function customizeRequests(callback) {\n if (!callback) {\n this.customRequestHandler = null;\n } else if (typeof callback === 'function') {\n this.customRequestHandler = callback;\n } else {\n throw new Error('Invalid callback type \\'' + typeof callback + '\\' provided in customizeRequests');\n }\n },\n\n /**\n * Calls an operation on a service with the given input parameters.\n *\n * @param operation [String] the name of the operation to call on the service.\n * @param params [map] a map of input options for the operation\n * @callback callback function(err, data)\n * If a callback is supplied, it is called when a response is returned\n * from the service.\n * @param err [Error] the error object returned from the request.\n * Set to `null` if the request is successful.\n * @param data [Object] the de-serialized data returned from\n * the request. Set to `null` if a request error occurs.\n */\n makeRequest: function makeRequest(operation, params, callback) {\n if (typeof params === 'function') {\n callback = params;\n params = null;\n }\n\n params = params || {};\n if (this.config.params) { // copy only toplevel bound params\n var rules = this.api.operations[operation];\n if (rules) {\n params = AWS.util.copy(params);\n AWS.util.each(this.config.params, function(key, value) {\n if (rules.input.members[key]) {\n if (params[key] === undefined || params[key] === null) {\n params[key] = value;\n }\n }\n });\n }\n }\n\n var request = new AWS.Request(this, operation, params);\n this.addAllRequestListeners(request);\n this.attachMonitoringEmitter(request);\n if (callback) request.send(callback);\n return request;\n },\n\n /**\n * Calls an operation on a service with the given input parameters, without\n * any authentication data. This method is useful for \"public\" API operations.\n *\n * @param operation [String] the name of the operation to call on the service.\n * @param params [map] a map of input options for the operation\n * @callback callback function(err, data)\n * If a callback is supplied, it is called when a response is returned\n * from the service.\n * @param err [Error] the error object returned from the request.\n * Set to `null` if the request is successful.\n * @param data [Object] the de-serialized data returned from\n * the request. Set to `null` if a request error occurs.\n */\n makeUnauthenticatedRequest: function makeUnauthenticatedRequest(operation, params, callback) {\n if (typeof params === 'function') {\n callback = params;\n params = {};\n }\n\n var request = this.makeRequest(operation, params).toUnauthenticated();\n return callback ? request.send(callback) : request;\n },\n\n /**\n * Waits for a given state\n *\n * @param state [String] the state on the service to wait for\n * @param params [map] a map of parameters to pass with each request\n * @option params $waiter [map] a map of configuration options for the waiter\n * @option params $waiter.delay [Number] The number of seconds to wait between\n * requests\n * @option params $waiter.maxAttempts [Number] The maximum number of requests\n * to send while waiting\n * @callback callback function(err, data)\n * If a callback is supplied, it is called when a response is returned\n * from the service.\n * @param err [Error] the error object returned from the request.\n * Set to `null` if the request is successful.\n * @param data [Object] the de-serialized data returned from\n * the request. Set to `null` if a request error occurs.\n */\n waitFor: function waitFor(state, params, callback) {\n var waiter = new AWS.ResourceWaiter(this, state);\n return waiter.wait(params, callback);\n },\n\n /**\n * @api private\n */\n addAllRequestListeners: function addAllRequestListeners(request) {\n var list = [AWS.events, AWS.EventListeners.Core, this.serviceInterface(),\n AWS.EventListeners.CorePost];\n for (var i = 0; i < list.length; i++) {\n if (list[i]) request.addListeners(list[i]);\n }\n\n // disable parameter validation\n if (!this.config.paramValidation) {\n request.removeListener('validate',\n AWS.EventListeners.Core.VALIDATE_PARAMETERS);\n }\n\n if (this.config.logger) { // add logging events\n request.addListeners(AWS.EventListeners.Logger);\n }\n\n this.setupRequestListeners(request);\n // call prototype's customRequestHandler\n if (typeof this.constructor.prototype.customRequestHandler === 'function') {\n this.constructor.prototype.customRequestHandler(request);\n }\n // call instance's customRequestHandler\n if (Object.prototype.hasOwnProperty.call(this, 'customRequestHandler') && typeof this.customRequestHandler === 'function') {\n this.customRequestHandler(request);\n }\n },\n\n /**\n * Event recording metrics for a whole API call.\n * @returns {object} a subset of api call metrics\n * @api private\n */\n apiCallEvent: function apiCallEvent(request) {\n var api = request.service.api.operations[request.operation];\n var monitoringEvent = {\n Type: 'ApiCall',\n Api: api ? api.name : request.operation,\n Version: 1,\n Service: request.service.api.serviceId || request.service.api.endpointPrefix,\n Region: request.httpRequest.region,\n MaxRetriesExceeded: 0,\n UserAgent: request.httpRequest.getUserAgent(),\n };\n var response = request.response;\n if (response.httpResponse.statusCode) {\n monitoringEvent.FinalHttpStatusCode = response.httpResponse.statusCode;\n }\n if (response.error) {\n var error = response.error;\n var statusCode = response.httpResponse.statusCode;\n if (statusCode > 299) {\n if (error.code) monitoringEvent.FinalAwsException = error.code;\n if (error.message) monitoringEvent.FinalAwsExceptionMessage = error.message;\n } else {\n if (error.code || error.name) monitoringEvent.FinalSdkException = error.code || error.name;\n if (error.message) monitoringEvent.FinalSdkExceptionMessage = error.message;\n }\n }\n return monitoringEvent;\n },\n\n /**\n * Event recording metrics for an API call attempt.\n * @returns {object} a subset of api call attempt metrics\n * @api private\n */\n apiAttemptEvent: function apiAttemptEvent(request) {\n var api = request.service.api.operations[request.operation];\n var monitoringEvent = {\n Type: 'ApiCallAttempt',\n Api: api ? api.name : request.operation,\n Version: 1,\n Service: request.service.api.serviceId || request.service.api.endpointPrefix,\n Fqdn: request.httpRequest.endpoint.hostname,\n UserAgent: request.httpRequest.getUserAgent(),\n };\n var response = request.response;\n if (response.httpResponse.statusCode) {\n monitoringEvent.HttpStatusCode = response.httpResponse.statusCode;\n }\n if (\n !request._unAuthenticated &&\n request.service.config.credentials &&\n request.service.config.credentials.accessKeyId\n ) {\n monitoringEvent.AccessKey = request.service.config.credentials.accessKeyId;\n }\n if (!response.httpResponse.headers) return monitoringEvent;\n if (request.httpRequest.headers['x-amz-security-token']) {\n monitoringEvent.SessionToken = request.httpRequest.headers['x-amz-security-token'];\n }\n if (response.httpResponse.headers['x-amzn-requestid']) {\n monitoringEvent.XAmznRequestId = response.httpResponse.headers['x-amzn-requestid'];\n }\n if (response.httpResponse.headers['x-amz-request-id']) {\n monitoringEvent.XAmzRequestId = response.httpResponse.headers['x-amz-request-id'];\n }\n if (response.httpResponse.headers['x-amz-id-2']) {\n monitoringEvent.XAmzId2 = response.httpResponse.headers['x-amz-id-2'];\n }\n return monitoringEvent;\n },\n\n /**\n * Add metrics of failed request.\n * @api private\n */\n attemptFailEvent: function attemptFailEvent(request) {\n var monitoringEvent = this.apiAttemptEvent(request);\n var response = request.response;\n var error = response.error;\n if (response.httpResponse.statusCode > 299 ) {\n if (error.code) monitoringEvent.AwsException = error.code;\n if (error.message) monitoringEvent.AwsExceptionMessage = error.message;\n } else {\n if (error.code || error.name) monitoringEvent.SdkException = error.code || error.name;\n if (error.message) monitoringEvent.SdkExceptionMessage = error.message;\n }\n return monitoringEvent;\n },\n\n /**\n * Attach listeners to request object to fetch metrics of each request\n * and emit data object through \\'ApiCall\\' and \\'ApiCallAttempt\\' events.\n * @api private\n */\n attachMonitoringEmitter: function attachMonitoringEmitter(request) {\n var attemptTimestamp; //timestamp marking the beginning of a request attempt\n var attemptStartRealTime; //Start time of request attempt. Used to calculating attemptLatency\n var attemptLatency; //latency from request sent out to http response reaching SDK\n var callStartRealTime; //Start time of API call. Used to calculating API call latency\n var attemptCount = 0; //request.retryCount is not reliable here\n var region; //region cache region for each attempt since it can be updated in plase (e.g. s3)\n var callTimestamp; //timestamp when the request is created\n var self = this;\n var addToHead = true;\n\n request.on('validate', function () {\n callStartRealTime = AWS.util.realClock.now();\n callTimestamp = Date.now();\n }, addToHead);\n request.on('sign', function () {\n attemptStartRealTime = AWS.util.realClock.now();\n attemptTimestamp = Date.now();\n region = request.httpRequest.region;\n attemptCount++;\n }, addToHead);\n request.on('validateResponse', function() {\n attemptLatency = Math.round(AWS.util.realClock.now() - attemptStartRealTime);\n });\n request.addNamedListener('API_CALL_ATTEMPT', 'success', function API_CALL_ATTEMPT() {\n var apiAttemptEvent = self.apiAttemptEvent(request);\n apiAttemptEvent.Timestamp = attemptTimestamp;\n apiAttemptEvent.AttemptLatency = attemptLatency >= 0 ? attemptLatency : 0;\n apiAttemptEvent.Region = region;\n self.emit('apiCallAttempt', [apiAttemptEvent]);\n });\n request.addNamedListener('API_CALL_ATTEMPT_RETRY', 'retry', function API_CALL_ATTEMPT_RETRY() {\n var apiAttemptEvent = self.attemptFailEvent(request);\n apiAttemptEvent.Timestamp = attemptTimestamp;\n //attemptLatency may not be available if fail before response\n attemptLatency = attemptLatency ||\n Math.round(AWS.util.realClock.now() - attemptStartRealTime);\n apiAttemptEvent.AttemptLatency = attemptLatency >= 0 ? attemptLatency : 0;\n apiAttemptEvent.Region = region;\n self.emit('apiCallAttempt', [apiAttemptEvent]);\n });\n request.addNamedListener('API_CALL', 'complete', function API_CALL() {\n var apiCallEvent = self.apiCallEvent(request);\n apiCallEvent.AttemptCount = attemptCount;\n if (apiCallEvent.AttemptCount <= 0) return;\n apiCallEvent.Timestamp = callTimestamp;\n var latency = Math.round(AWS.util.realClock.now() - callStartRealTime);\n apiCallEvent.Latency = latency >= 0 ? latency : 0;\n var response = request.response;\n if (\n response.error &&\n response.error.retryable &&\n typeof response.retryCount === 'number' &&\n typeof response.maxRetries === 'number' &&\n (response.retryCount >= response.maxRetries)\n ) {\n apiCallEvent.MaxRetriesExceeded = 1;\n }\n self.emit('apiCall', [apiCallEvent]);\n });\n },\n\n /**\n * Override this method to setup any custom request listeners for each\n * new request to the service.\n *\n * @method_abstract This is an abstract method.\n */\n setupRequestListeners: function setupRequestListeners(request) {\n },\n\n /**\n * Gets the signing name for a given request\n * @api private\n */\n getSigningName: function getSigningName() {\n return this.api.signingName || this.api.endpointPrefix;\n },\n\n /**\n * Gets the signer class for a given request\n * @api private\n */\n getSignerClass: function getSignerClass(request) {\n var version;\n // get operation authtype if present\n var operation = null;\n var authtype = '';\n if (request) {\n var operations = request.service.api.operations || {};\n operation = operations[request.operation] || null;\n authtype = operation ? operation.authtype : '';\n }\n if (this.config.signatureVersion) {\n version = this.config.signatureVersion;\n } else if (authtype === 'v4' || authtype === 'v4-unsigned-body') {\n version = 'v4';\n } else {\n version = this.api.signatureVersion;\n }\n return AWS.Signers.RequestSigner.getVersion(version);\n },\n\n /**\n * @api private\n */\n serviceInterface: function serviceInterface() {\n switch (this.api.protocol) {\n case 'ec2': return AWS.EventListeners.Query;\n case 'query': return AWS.EventListeners.Query;\n case 'json': return AWS.EventListeners.Json;\n case 'rest-json': return AWS.EventListeners.RestJson;\n case 'rest-xml': return AWS.EventListeners.RestXml;\n }\n if (this.api.protocol) {\n throw new Error('Invalid service `protocol\\' ' +\n this.api.protocol + ' in API config');\n }\n },\n\n /**\n * @api private\n */\n successfulResponse: function successfulResponse(resp) {\n return resp.httpResponse.statusCode < 300;\n },\n\n /**\n * How many times a failed request should be retried before giving up.\n * the defaultRetryCount can be overriden by service classes.\n *\n * @api private\n */\n numRetries: function numRetries() {\n if (this.config.maxRetries !== undefined) {\n return this.config.maxRetries;\n } else {\n return this.defaultRetryCount;\n }\n },\n\n /**\n * @api private\n */\n retryDelays: function retryDelays(retryCount, err) {\n return AWS.util.calculateRetryDelay(retryCount, this.config.retryDelayOptions, err);\n },\n\n /**\n * @api private\n */\n retryableError: function retryableError(error) {\n if (this.timeoutError(error)) return true;\n if (this.networkingError(error)) return true;\n if (this.expiredCredentialsError(error)) return true;\n if (this.throttledError(error)) return true;\n if (error.statusCode >= 500) return true;\n return false;\n },\n\n /**\n * @api private\n */\n networkingError: function networkingError(error) {\n return error.code === 'NetworkingError';\n },\n\n /**\n * @api private\n */\n timeoutError: function timeoutError(error) {\n return error.code === 'TimeoutError';\n },\n\n /**\n * @api private\n */\n expiredCredentialsError: function expiredCredentialsError(error) {\n // TODO : this only handles *one* of the expired credential codes\n return (error.code === 'ExpiredTokenException');\n },\n\n /**\n * @api private\n */\n clockSkewError: function clockSkewError(error) {\n switch (error.code) {\n case 'RequestTimeTooSkewed':\n case 'RequestExpired':\n case 'InvalidSignatureException':\n case 'SignatureDoesNotMatch':\n case 'AuthFailure':\n case 'RequestInTheFuture':\n return true;\n default: return false;\n }\n },\n\n /**\n * @api private\n */\n getSkewCorrectedDate: function getSkewCorrectedDate() {\n return new Date(Date.now() + this.config.systemClockOffset);\n },\n\n /**\n * @api private\n */\n applyClockOffset: function applyClockOffset(newServerTime) {\n if (newServerTime) {\n this.config.systemClockOffset = newServerTime - Date.now();\n }\n },\n\n /**\n * @api private\n */\n isClockSkewed: function isClockSkewed(newServerTime) {\n if (newServerTime) {\n return Math.abs(this.getSkewCorrectedDate().getTime() - newServerTime) >= 300000;\n }\n },\n\n /**\n * @api private\n */\n throttledError: function throttledError(error) {\n // this logic varies between services\n if (error.statusCode === 429) return true;\n switch (error.code) {\n case 'ProvisionedThroughputExceededException':\n case 'Throttling':\n case 'ThrottlingException':\n case 'RequestLimitExceeded':\n case 'RequestThrottled':\n case 'RequestThrottledException':\n case 'TooManyRequestsException':\n case 'TransactionInProgressException': //dynamodb\n case 'EC2ThrottledException':\n return true;\n default:\n return false;\n }\n },\n\n /**\n * @api private\n */\n endpointFromTemplate: function endpointFromTemplate(endpoint) {\n if (typeof endpoint !== 'string') return endpoint;\n\n var e = endpoint;\n e = e.replace(/\\{service\\}/g, this.api.endpointPrefix);\n e = e.replace(/\\{region\\}/g, this.config.region);\n e = e.replace(/\\{scheme\\}/g, this.config.sslEnabled ? 'https' : 'http');\n return e;\n },\n\n /**\n * @api private\n */\n setEndpoint: function setEndpoint(endpoint) {\n this.endpoint = new AWS.Endpoint(endpoint, this.config);\n },\n\n /**\n * @api private\n */\n paginationConfig: function paginationConfig(operation, throwException) {\n var paginator = this.api.operations[operation].paginator;\n if (!paginator) {\n if (throwException) {\n var e = new Error();\n throw AWS.util.error(e, 'No pagination configuration for ' + operation);\n }\n return null;\n }\n\n return paginator;\n }\n});\n\nAWS.util.update(AWS.Service, {\n\n /**\n * Adds one method for each operation described in the api configuration\n *\n * @api private\n */\n defineMethods: function defineMethods(svc) {\n AWS.util.each(svc.prototype.api.operations, function iterator(method) {\n if (svc.prototype[method]) return;\n var operation = svc.prototype.api.operations[method];\n if (operation.authtype === 'none') {\n svc.prototype[method] = function (params, callback) {\n return this.makeUnauthenticatedRequest(method, params, callback);\n };\n } else {\n svc.prototype[method] = function (params, callback) {\n return this.makeRequest(method, params, callback);\n };\n }\n });\n },\n\n /**\n * Defines a new Service class using a service identifier and list of versions\n * including an optional set of features (functions) to apply to the class\n * prototype.\n *\n * @param serviceIdentifier [String] the identifier for the service\n * @param versions [Array<String>] a list of versions that work with this\n * service\n * @param features [Object] an object to attach to the prototype\n * @return [Class<Service>] the service class defined by this function.\n */\n defineService: function defineService(serviceIdentifier, versions, features) {\n AWS.Service._serviceMap[serviceIdentifier] = true;\n if (!Array.isArray(versions)) {\n features = versions;\n versions = [];\n }\n\n var svc = inherit(AWS.Service, features || {});\n\n if (typeof serviceIdentifier === 'string') {\n AWS.Service.addVersions(svc, versions);\n\n var identifier = svc.serviceIdentifier || serviceIdentifier;\n svc.serviceIdentifier = identifier;\n } else { // defineService called with an API\n svc.prototype.api = serviceIdentifier;\n AWS.Service.defineMethods(svc);\n }\n AWS.SequentialExecutor.call(this.prototype);\n //util.clientSideMonitoring is only available in node\n if (!this.prototype.publisher && AWS.util.clientSideMonitoring) {\n var Publisher = AWS.util.clientSideMonitoring.Publisher;\n var configProvider = AWS.util.clientSideMonitoring.configProvider;\n var publisherConfig = configProvider();\n this.prototype.publisher = new Publisher(publisherConfig);\n if (publisherConfig.enabled) {\n //if csm is enabled in environment, SDK should send all metrics\n AWS.Service._clientSideMonitoring = true;\n }\n }\n AWS.SequentialExecutor.call(svc.prototype);\n AWS.Service.addDefaultMonitoringListeners(svc.prototype);\n return svc;\n },\n\n /**\n * @api private\n */\n addVersions: function addVersions(svc, versions) {\n if (!Array.isArray(versions)) versions = [versions];\n\n svc.services = svc.services || {};\n for (var i = 0; i < versions.length; i++) {\n if (svc.services[versions[i]] === undefined) {\n svc.services[versions[i]] = null;\n }\n }\n\n svc.apiVersions = Object.keys(svc.services).sort();\n },\n\n /**\n * @api private\n */\n defineServiceApi: function defineServiceApi(superclass, version, apiConfig) {\n var svc = inherit(superclass, {\n serviceIdentifier: superclass.serviceIdentifier\n });\n\n function setApi(api) {\n if (api.isApi) {\n svc.prototype.api = api;\n } else {\n svc.prototype.api = new Api(api, {\n serviceIdentifier: superclass.serviceIdentifier\n });\n }\n }\n\n if (typeof version === 'string') {\n if (apiConfig) {\n setApi(apiConfig);\n } else {\n try {\n setApi(AWS.apiLoader(superclass.serviceIdentifier, version));\n } catch (err) {\n throw AWS.util.error(err, {\n message: 'Could not find API configuration ' +\n superclass.serviceIdentifier + '-' + version\n });\n }\n }\n if (!Object.prototype.hasOwnProperty.call(superclass.services, version)) {\n superclass.apiVersions = superclass.apiVersions.concat(version).sort();\n }\n superclass.services[version] = svc;\n } else {\n setApi(version);\n }\n\n AWS.Service.defineMethods(svc);\n return svc;\n },\n\n /**\n * @api private\n */\n hasService: function(identifier) {\n return Object.prototype.hasOwnProperty.call(AWS.Service._serviceMap, identifier);\n },\n\n /**\n * @param attachOn attach default monitoring listeners to object\n *\n * Each monitoring event should be emitted from service client to service constructor prototype and then\n * to global service prototype like bubbling up. These default monitoring events listener will transfer\n * the monitoring events to the upper layer.\n * @api private\n */\n addDefaultMonitoringListeners: function addDefaultMonitoringListeners(attachOn) {\n attachOn.addNamedListener('MONITOR_EVENTS_BUBBLE', 'apiCallAttempt', function EVENTS_BUBBLE(event) {\n var baseClass = Object.getPrototypeOf(attachOn);\n if (baseClass._events) baseClass.emit('apiCallAttempt', [event]);\n });\n attachOn.addNamedListener('CALL_EVENTS_BUBBLE', 'apiCall', function CALL_EVENTS_BUBBLE(event) {\n var baseClass = Object.getPrototypeOf(attachOn);\n if (baseClass._events) baseClass.emit('apiCall', [event]);\n });\n },\n\n /**\n * @api private\n */\n _serviceMap: {}\n});\n\nAWS.util.mixin(AWS.Service, AWS.SequentialExecutor);\n\n/**\n * @api private\n */\nmodule.exports = AWS.Service;\n","var AWS = require('../core');\nrequire('../dynamodb/document_client');\n\nAWS.util.update(AWS.DynamoDB.prototype, {\n /**\n * @api private\n */\n setupRequestListeners: function setupRequestListeners(request) {\n if (request.service.config.dynamoDbCrc32) {\n request.removeListener('extractData', AWS.EventListeners.Json.EXTRACT_DATA);\n request.addListener('extractData', this.checkCrc32);\n request.addListener('extractData', AWS.EventListeners.Json.EXTRACT_DATA);\n }\n },\n\n /**\n * @api private\n */\n checkCrc32: function checkCrc32(resp) {\n if (!resp.httpResponse.streaming && !resp.request.service.crc32IsValid(resp)) {\n resp.data = null;\n resp.error = AWS.util.error(new Error(), {\n code: 'CRC32CheckFailed',\n message: 'CRC32 integrity check failed',\n retryable: true\n });\n resp.request.haltHandlersOnError();\n throw (resp.error);\n }\n },\n\n /**\n * @api private\n */\n crc32IsValid: function crc32IsValid(resp) {\n var crc = resp.httpResponse.headers['x-amz-crc32'];\n if (!crc) return true; // no (valid) CRC32 header\n return parseInt(crc, 10) === AWS.util.crypto.crc32(resp.httpResponse.body);\n },\n\n /**\n * @api private\n */\n defaultRetryCount: 10,\n\n /**\n * @api private\n */\n retryDelays: function retryDelays(retryCount, err) {\n var retryDelayOptions = AWS.util.copy(this.config.retryDelayOptions);\n\n if (typeof retryDelayOptions.base !== 'number') {\n retryDelayOptions.base = 50; // default for dynamodb\n }\n var delay = AWS.util.calculateRetryDelay(retryCount, retryDelayOptions, err);\n return delay;\n }\n});\n","var AWS = require('../core');\n\nAWS.util.update(AWS.Lambda.prototype, {\n /**\n * @api private\n */\n setupRequestListeners: function setupRequestListeners(request) {\n if (request.operation === 'invoke') {\n request.addListener('extractData', AWS.util.convertPayloadToString);\n }\n }\n});\n\n","var AWS = require('../core');\nvar v4Credentials = require('../signers/v4_credentials');\nvar resolveRegionalEndpointsFlag = require('../config_regional_endpoint');\nvar s3util = require('./s3util');\nvar regionUtil = require('../region_config');\n\n// Pull in managed upload extension\nrequire('../s3/managed_upload');\n\n/**\n * @api private\n */\nvar operationsWith200StatusCodeError = {\n 'completeMultipartUpload': true,\n 'copyObject': true,\n 'uploadPartCopy': true\n};\n\n/**\n * @api private\n */\n var regionRedirectErrorCodes = [\n 'AuthorizationHeaderMalformed', // non-head operations on virtual-hosted global bucket endpoints\n 'BadRequest', // head operations on virtual-hosted global bucket endpoints\n 'PermanentRedirect', // non-head operations on path-style or regional endpoints\n 301 // head operations on path-style or regional endpoints\n ];\n\nAWS.util.update(AWS.S3.prototype, {\n /**\n * @api private\n */\n getSignatureVersion: function getSignatureVersion(request) {\n var defaultApiVersion = this.api.signatureVersion;\n var userDefinedVersion = this._originalConfig ? this._originalConfig.signatureVersion : null;\n var regionDefinedVersion = this.config.signatureVersion;\n var isPresigned = request ? request.isPresigned() : false;\n /*\n 1) User defined version specified:\n a) always return user defined version\n 2) No user defined version specified:\n a) If not using presigned urls, default to V4\n b) If using presigned urls, default to lowest version the region supports\n */\n if (userDefinedVersion) {\n userDefinedVersion = userDefinedVersion === 'v2' ? 's3' : userDefinedVersion;\n return userDefinedVersion;\n }\n if (isPresigned !== true) {\n defaultApiVersion = 'v4';\n } else if (regionDefinedVersion) {\n defaultApiVersion = regionDefinedVersion;\n }\n return defaultApiVersion;\n },\n\n /**\n * @api private\n */\n getSigningName: function getSigningName() {\n var _super = AWS.Service.prototype.getSigningName;\n return (this._parsedArn && this._parsedArn.service)\n ? this._parsedArn.service\n : _super.call(this);\n },\n\n /**\n * @api private\n */\n getSignerClass: function getSignerClass(request) {\n var signatureVersion = this.getSignatureVersion(request);\n return AWS.Signers.RequestSigner.getVersion(signatureVersion);\n },\n\n /**\n * @api private\n */\n validateService: function validateService() {\n var msg;\n var messages = [];\n\n // default to us-east-1 when no region is provided\n if (!this.config.region) this.config.region = 'us-east-1';\n\n if (!this.config.endpoint && this.config.s3BucketEndpoint) {\n messages.push('An endpoint must be provided when configuring ' +\n '`s3BucketEndpoint` to true.');\n }\n if (messages.length === 1) {\n msg = messages[0];\n } else if (messages.length > 1) {\n msg = 'Multiple configuration errors:\\n' + messages.join('\\n');\n }\n if (msg) {\n throw AWS.util.error(new Error(),\n {name: 'InvalidEndpoint', message: msg});\n }\n },\n\n /**\n * @api private\n */\n shouldDisableBodySigning: function shouldDisableBodySigning(request) {\n var signerClass = this.getSignerClass();\n if (this.config.s3DisableBodySigning === true && signerClass === AWS.Signers.V4\n && request.httpRequest.endpoint.protocol === 'https:') {\n return true;\n }\n return false;\n },\n\n /**\n * @api private\n */\n setupRequestListeners: function setupRequestListeners(request) {\n var prependListener = true;\n request.addListener('validate', this.validateScheme);\n request.addListener('validate', this.validateBucketName, prependListener);\n request.addListener('validate', this.optInUsEast1RegionalEndpoint, prependListener);\n\n request.removeListener('validate',\n AWS.EventListeners.Core.VALIDATE_REGION);\n request.addListener('build', this.addContentType);\n request.addListener('build', this.computeContentMd5);\n request.addListener('build', this.computeSseCustomerKeyMd5);\n request.addListener('build', this.populateURI);\n request.addListener('afterBuild', this.addExpect100Continue);\n request.addListener('extractError', this.extractError);\n request.addListener('extractData', AWS.util.hoistPayloadMember);\n request.addListener('extractData', this.extractData);\n request.addListener('extractData', this.extractErrorFrom200Response);\n request.addListener('beforePresign', this.prepareSignedUrl);\n if (this.shouldDisableBodySigning(request)) {\n request.removeListener('afterBuild', AWS.EventListeners.Core.COMPUTE_SHA256);\n request.addListener('afterBuild', this.disableBodySigning);\n }\n //deal with ARNs supplied to Bucket\n if (request.operation !== 'createBucket' && s3util.isArnInParam(request, 'Bucket')) {\n // avoid duplicate parsing in the future\n request.service._parsedArn = AWS.util.ARN.parse(request.params.Bucket);\n\n request.removeListener('validate', this.validateBucketName);\n request.removeListener('build', this.populateURI);\n if (request.service._parsedArn.service === 's3') {\n request.addListener('validate', s3util.validateS3AccessPointArn);\n request.addListener('validate', this.validateArnResourceType);\n } else if (request.service._parsedArn.service === 's3-outposts') {\n request.addListener('validate', s3util.validateOutpostsAccessPointArn);\n request.addListener('validate', s3util.validateOutpostsArn);\n }\n request.addListener('validate', s3util.validateArnRegion);\n request.addListener('validate', s3util.validateArnAccount);\n request.addListener('validate', s3util.validateArnService);\n request.addListener('build', this.populateUriFromAccessPointArn);\n request.addListener('build', s3util.validatePopulateUriFromArn);\n return;\n }\n //listeners regarding region inference\n request.addListener('validate', this.validateBucketEndpoint);\n request.addListener('validate', this.correctBucketRegionFromCache);\n request.onAsync('extractError', this.requestBucketRegion);\n if (AWS.util.isBrowser()) {\n request.onAsync('retry', this.reqRegionForNetworkingError);\n }\n },\n\n /**\n * @api private\n */\n validateScheme: function(req) {\n var params = req.params,\n scheme = req.httpRequest.endpoint.protocol,\n sensitive = params.SSECustomerKey || params.CopySourceSSECustomerKey;\n if (sensitive && scheme !== 'https:') {\n var msg = 'Cannot send SSE keys over HTTP. Set \\'sslEnabled\\'' +\n 'to \\'true\\' in your configuration';\n throw AWS.util.error(new Error(),\n { code: 'ConfigError', message: msg });\n }\n },\n\n /**\n * @api private\n */\n validateBucketEndpoint: function(req) {\n if (!req.params.Bucket && req.service.config.s3BucketEndpoint) {\n var msg = 'Cannot send requests to root API with `s3BucketEndpoint` set.';\n throw AWS.util.error(new Error(),\n { code: 'ConfigError', message: msg });\n }\n },\n\n /**\n * Validate resource-type supplied in S3 ARN\n */\n validateArnResourceType: function validateArnResourceType(req) {\n var resource = req.service._parsedArn.resource;\n\n if (\n resource.indexOf('accesspoint:') !== 0 &&\n resource.indexOf('accesspoint/') !== 0\n ) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidARN',\n message: 'ARN resource should begin with \\'accesspoint/\\''\n });\n }\n },\n\n /**\n * @api private\n */\n validateBucketName: function validateBucketName(req) {\n var service = req.service;\n var signatureVersion = service.getSignatureVersion(req);\n var bucket = req.params && req.params.Bucket;\n var key = req.params && req.params.Key;\n var slashIndex = bucket && bucket.indexOf('/');\n if (bucket && slashIndex >= 0) {\n if (typeof key === 'string' && slashIndex > 0) {\n req.params = AWS.util.copy(req.params);\n // Need to include trailing slash to match sigv2 behavior\n var prefix = bucket.substr(slashIndex + 1) || '';\n req.params.Key = prefix + '/' + key;\n req.params.Bucket = bucket.substr(0, slashIndex);\n } else if (signatureVersion === 'v4') {\n var msg = 'Bucket names cannot contain forward slashes. Bucket: ' + bucket;\n throw AWS.util.error(new Error(),\n { code: 'InvalidBucket', message: msg });\n }\n }\n },\n\n /**\n * @api private\n */\n isValidAccelerateOperation: function isValidAccelerateOperation(operation) {\n var invalidOperations = [\n 'createBucket',\n 'deleteBucket',\n 'listBuckets'\n ];\n return invalidOperations.indexOf(operation) === -1;\n },\n\n /**\n * When us-east-1 region endpoint configuration is set, in stead of sending request to\n * global endpoint(e.g. 's3.amazonaws.com'), we will send request to\n * 's3.us-east-1.amazonaws.com'.\n * @api private\n */\n optInUsEast1RegionalEndpoint: function optInUsEast1RegionalEndpoint(req) {\n var service = req.service;\n var config = service.config;\n config.s3UsEast1RegionalEndpoint = resolveRegionalEndpointsFlag(service._originalConfig, {\n env: 'AWS_S3_US_EAST_1_REGIONAL_ENDPOINT',\n sharedConfig: 's3_us_east_1_regional_endpoint',\n clientConfig: 's3UsEast1RegionalEndpoint'\n });\n if (\n !(service._originalConfig || {}).endpoint &&\n req.httpRequest.region === 'us-east-1' &&\n config.s3UsEast1RegionalEndpoint === 'regional' &&\n req.httpRequest.endpoint.hostname.indexOf('s3.amazonaws.com') >= 0\n ) {\n var insertPoint = config.endpoint.indexOf('.amazonaws.com');\n regionalEndpoint = config.endpoint.substring(0, insertPoint) +\n '.us-east-1' + config.endpoint.substring(insertPoint);\n req.httpRequest.updateEndpoint(regionalEndpoint);\n }\n },\n\n /**\n * S3 prefers dns-compatible bucket names to be moved from the uri path\n * to the hostname as a sub-domain. This is not possible, even for dns-compat\n * buckets when using SSL and the bucket name contains a dot ('.'). The\n * ssl wildcard certificate is only 1-level deep.\n *\n * @api private\n */\n populateURI: function populateURI(req) {\n var httpRequest = req.httpRequest;\n var b = req.params.Bucket;\n var service = req.service;\n var endpoint = httpRequest.endpoint;\n if (b) {\n if (!service.pathStyleBucketName(b)) {\n if (service.config.useAccelerateEndpoint && service.isValidAccelerateOperation(req.operation)) {\n if (service.config.useDualstack) {\n endpoint.hostname = b + '.s3-accelerate.dualstack.amazonaws.com';\n } else {\n endpoint.hostname = b + '.s3-accelerate.amazonaws.com';\n }\n } else if (!service.config.s3BucketEndpoint) {\n endpoint.hostname =\n b + '.' + endpoint.hostname;\n }\n\n var port = endpoint.port;\n if (port !== 80 && port !== 443) {\n endpoint.host = endpoint.hostname + ':' +\n endpoint.port;\n } else {\n endpoint.host = endpoint.hostname;\n }\n\n httpRequest.virtualHostedBucket = b; // needed for signing the request\n service.removeVirtualHostedBucketFromPath(req);\n }\n }\n },\n\n /**\n * Takes the bucket name out of the path if bucket is virtual-hosted\n *\n * @api private\n */\n removeVirtualHostedBucketFromPath: function removeVirtualHostedBucketFromPath(req) {\n var httpRequest = req.httpRequest;\n var bucket = httpRequest.virtualHostedBucket;\n if (bucket && httpRequest.path) {\n if (req.params && req.params.Key) {\n var encodedS3Key = '/' + AWS.util.uriEscapePath(req.params.Key);\n if (httpRequest.path.indexOf(encodedS3Key) === 0 && (httpRequest.path.length === encodedS3Key.length || httpRequest.path[encodedS3Key.length] === '?')) {\n //path only contains key or path contains only key and querystring\n return;\n }\n }\n httpRequest.path = httpRequest.path.replace(new RegExp('/' + bucket), '');\n if (httpRequest.path[0] !== '/') {\n httpRequest.path = '/' + httpRequest.path;\n }\n }\n },\n\n /**\n * When user supply an access point ARN in the Bucket parameter, we need to\n * populate the URI according to the ARN.\n */\n populateUriFromAccessPointArn: function populateUriFromAccessPointArn(req) {\n var accessPointArn = req.service._parsedArn;\n\n var isOutpostArn = accessPointArn.service === 's3-outposts';\n\n var outpostsSuffix = isOutpostArn ? '.' + accessPointArn.outpostId: '';\n var serviceName = isOutpostArn ? 's3-outposts': 's3-accesspoint';\n var dualStackSuffix = !isOutpostArn && req.service.config.useDualstack ? '.dualstack' : '';\n\n var endpoint = req.httpRequest.endpoint;\n var dnsSuffix = regionUtil.getEndpointSuffix(accessPointArn.region);\n var useArnRegion = req.service.config.s3UseArnRegion;\n\n endpoint.hostname = [\n accessPointArn.accessPoint + '-' + accessPointArn.accountId + outpostsSuffix,\n serviceName + dualStackSuffix,\n useArnRegion ? accessPointArn.region : req.service.config.region,\n dnsSuffix\n ].join('.');\n endpoint.host = endpoint.hostname;\n\n var encodedArn = AWS.util.uriEscape(req.params.Bucket);\n var path = req.httpRequest.path;\n //remove the Bucket value from path\n req.httpRequest.path = path.replace(new RegExp('/' + encodedArn), '');\n if (req.httpRequest.path[0] !== '/') {\n req.httpRequest.path = '/' + req.httpRequest.path;\n }\n req.httpRequest.region = accessPointArn.region; //region used to sign\n },\n\n /**\n * Adds Expect: 100-continue header if payload is greater-or-equal 1MB\n * @api private\n */\n addExpect100Continue: function addExpect100Continue(req) {\n var len = req.httpRequest.headers['Content-Length'];\n if (AWS.util.isNode() && (len >= 1024 * 1024 || req.params.Body instanceof AWS.util.stream.Stream)) {\n req.httpRequest.headers['Expect'] = '100-continue';\n }\n },\n\n /**\n * Adds a default content type if none is supplied.\n *\n * @api private\n */\n addContentType: function addContentType(req) {\n var httpRequest = req.httpRequest;\n if (httpRequest.method === 'GET' || httpRequest.method === 'HEAD') {\n // Content-Type is not set in GET/HEAD requests\n delete httpRequest.headers['Content-Type'];\n return;\n }\n\n if (!httpRequest.headers['Content-Type']) { // always have a Content-Type\n httpRequest.headers['Content-Type'] = 'application/octet-stream';\n }\n\n var contentType = httpRequest.headers['Content-Type'];\n if (AWS.util.isBrowser()) {\n if (typeof httpRequest.body === 'string' && !contentType.match(/;\\s*charset=/)) {\n var charset = '; charset=UTF-8';\n httpRequest.headers['Content-Type'] += charset;\n } else {\n var replaceFn = function(_, prefix, charsetName) {\n return prefix + charsetName.toUpperCase();\n };\n\n httpRequest.headers['Content-Type'] =\n contentType.replace(/(;\\s*charset=)(.+)$/, replaceFn);\n }\n }\n },\n\n /**\n * @api private\n */\n computableChecksumOperations: {\n putBucketCors: true,\n putBucketLifecycle: true,\n putBucketLifecycleConfiguration: true,\n putBucketTagging: true,\n deleteObjects: true,\n putBucketReplication: true,\n putObjectLegalHold: true,\n putObjectRetention: true,\n putObjectLockConfiguration: true\n },\n\n /**\n * Checks whether checksums should be computed for the request.\n * If the request requires checksums to be computed, this will always\n * return true, otherwise it depends on whether {AWS.Config.computeChecksums}\n * is set.\n *\n * @param req [AWS.Request] the request to check against\n * @return [Boolean] whether to compute checksums for a request.\n * @api private\n */\n willComputeChecksums: function willComputeChecksums(req) {\n if (this.computableChecksumOperations[req.operation]) return true;\n if (!this.config.computeChecksums) return false;\n\n // TODO: compute checksums for Stream objects\n if (!AWS.util.Buffer.isBuffer(req.httpRequest.body) &&\n typeof req.httpRequest.body !== 'string') {\n return false;\n }\n\n var rules = req.service.api.operations[req.operation].input.members;\n\n // Sha256 signing disabled, and not a presigned url\n if (req.service.shouldDisableBodySigning(req) && !Object.prototype.hasOwnProperty.call(req.httpRequest.headers, 'presigned-expires')) {\n if (rules.ContentMD5 && !req.params.ContentMD5) {\n return true;\n }\n }\n\n // V4 signer uses SHA256 signatures so only compute MD5 if it is required\n if (req.service.getSignerClass(req) === AWS.Signers.V4) {\n if (rules.ContentMD5 && !rules.ContentMD5.required) return false;\n }\n\n if (rules.ContentMD5 && !req.params.ContentMD5) return true;\n },\n\n /**\n * A listener that computes the Content-MD5 and sets it in the header.\n * @see AWS.S3.willComputeChecksums\n * @api private\n */\n computeContentMd5: function computeContentMd5(req) {\n if (req.service.willComputeChecksums(req)) {\n var md5 = AWS.util.crypto.md5(req.httpRequest.body, 'base64');\n req.httpRequest.headers['Content-MD5'] = md5;\n }\n },\n\n /**\n * @api private\n */\n computeSseCustomerKeyMd5: function computeSseCustomerKeyMd5(req) {\n var keys = {\n SSECustomerKey: 'x-amz-server-side-encryption-customer-key-MD5',\n CopySourceSSECustomerKey: 'x-amz-copy-source-server-side-encryption-customer-key-MD5'\n };\n AWS.util.each(keys, function(key, header) {\n if (req.params[key]) {\n var value = AWS.util.crypto.md5(req.params[key], 'base64');\n req.httpRequest.headers[header] = value;\n }\n });\n },\n\n /**\n * Returns true if the bucket name should be left in the URI path for\n * a request to S3. This function takes into account the current\n * endpoint protocol (e.g. http or https).\n *\n * @api private\n */\n pathStyleBucketName: function pathStyleBucketName(bucketName) {\n // user can force path style requests via the configuration\n if (this.config.s3ForcePathStyle) return true;\n if (this.config.s3BucketEndpoint) return false;\n\n if (s3util.dnsCompatibleBucketName(bucketName)) {\n return (this.config.sslEnabled && bucketName.match(/\\./)) ? true : false;\n } else {\n return true; // not dns compatible names must always use path style\n }\n },\n\n /**\n * For COPY operations, some can be error even with status code 200.\n * SDK treats the response as exception when response body indicates\n * an exception or body is empty.\n *\n * @api private\n */\n extractErrorFrom200Response: function extractErrorFrom200Response(resp) {\n if (!operationsWith200StatusCodeError[resp.request.operation]) return;\n var httpResponse = resp.httpResponse;\n if (httpResponse.body && httpResponse.body.toString().match('<Error>')) {\n // Response body with '<Error>...</Error>' indicates an exception.\n // Get S3 client object. In ManagedUpload, this.service refers to\n // S3 client object.\n resp.data = null;\n var service = this.service ? this.service : this;\n service.extractError(resp);\n throw resp.error;\n } else if (!httpResponse.body || !httpResponse.body.toString().match(/<[\\w_]/)) {\n // When body is empty or incomplete, S3 might stop the request on detecting client\n // side aborting the request.\n resp.data = null;\n throw AWS.util.error(new Error(), {\n code: 'InternalError',\n message: 'S3 aborted request'\n });\n }\n },\n\n /**\n * @return [Boolean] whether the error can be retried\n * @api private\n */\n retryableError: function retryableError(error, request) {\n if (operationsWith200StatusCodeError[request.operation] &&\n error.statusCode === 200) {\n return true;\n } else if (request._requestRegionForBucket &&\n request.service.bucketRegionCache[request._requestRegionForBucket]) {\n return false;\n } else if (error && error.code === 'RequestTimeout') {\n return true;\n } else if (error &&\n regionRedirectErrorCodes.indexOf(error.code) != -1 &&\n error.region && error.region != request.httpRequest.region) {\n request.httpRequest.region = error.region;\n if (error.statusCode === 301) {\n request.service.updateReqBucketRegion(request);\n }\n return true;\n } else {\n var _super = AWS.Service.prototype.retryableError;\n return _super.call(this, error, request);\n }\n },\n\n /**\n * Updates httpRequest with region. If region is not provided, then\n * the httpRequest will be updated based on httpRequest.region\n *\n * @api private\n */\n updateReqBucketRegion: function updateReqBucketRegion(request, region) {\n var httpRequest = request.httpRequest;\n if (typeof region === 'string' && region.length) {\n httpRequest.region = region;\n }\n if (!httpRequest.endpoint.host.match(/s3(?!-accelerate).*\\.amazonaws\\.com$/)) {\n return;\n }\n var service = request.service;\n var s3Config = service.config;\n var s3BucketEndpoint = s3Config.s3BucketEndpoint;\n if (s3BucketEndpoint) {\n delete s3Config.s3BucketEndpoint;\n }\n var newConfig = AWS.util.copy(s3Config);\n delete newConfig.endpoint;\n newConfig.region = httpRequest.region;\n\n httpRequest.endpoint = (new AWS.S3(newConfig)).endpoint;\n service.populateURI(request);\n s3Config.s3BucketEndpoint = s3BucketEndpoint;\n httpRequest.headers.Host = httpRequest.endpoint.host;\n\n if (request._asm.currentState === 'validate') {\n request.removeListener('build', service.populateURI);\n request.addListener('build', service.removeVirtualHostedBucketFromPath);\n }\n },\n\n /**\n * Provides a specialized parser for getBucketLocation -- all other\n * operations are parsed by the super class.\n *\n * @api private\n */\n extractData: function extractData(resp) {\n var req = resp.request;\n if (req.operation === 'getBucketLocation') {\n var match = resp.httpResponse.body.toString().match(/>(.+)<\\/Location/);\n delete resp.data['_'];\n if (match) {\n resp.data.LocationConstraint = match[1];\n } else {\n resp.data.LocationConstraint = '';\n }\n }\n var bucket = req.params.Bucket || null;\n if (req.operation === 'deleteBucket' && typeof bucket === 'string' && !resp.error) {\n req.service.clearBucketRegionCache(bucket);\n } else {\n var headers = resp.httpResponse.headers || {};\n var region = headers['x-amz-bucket-region'] || null;\n if (!region && req.operation === 'createBucket' && !resp.error) {\n var createBucketConfiguration = req.params.CreateBucketConfiguration;\n if (!createBucketConfiguration) {\n region = 'us-east-1';\n } else if (createBucketConfiguration.LocationConstraint === 'EU') {\n region = 'eu-west-1';\n } else {\n region = createBucketConfiguration.LocationConstraint;\n }\n }\n if (region) {\n if (bucket && region !== req.service.bucketRegionCache[bucket]) {\n req.service.bucketRegionCache[bucket] = region;\n }\n }\n }\n req.service.extractRequestIds(resp);\n },\n\n /**\n * Extracts an error object from the http response.\n *\n * @api private\n */\n extractError: function extractError(resp) {\n var codes = {\n 304: 'NotModified',\n 403: 'Forbidden',\n 400: 'BadRequest',\n 404: 'NotFound'\n };\n\n var req = resp.request;\n var code = resp.httpResponse.statusCode;\n var body = resp.httpResponse.body || '';\n\n var headers = resp.httpResponse.headers || {};\n var region = headers['x-amz-bucket-region'] || null;\n var bucket = req.params.Bucket || null;\n var bucketRegionCache = req.service.bucketRegionCache;\n if (region && bucket && region !== bucketRegionCache[bucket]) {\n bucketRegionCache[bucket] = region;\n }\n\n var cachedRegion;\n if (codes[code] && body.length === 0) {\n if (bucket && !region) {\n cachedRegion = bucketRegionCache[bucket] || null;\n if (cachedRegion !== req.httpRequest.region) {\n region = cachedRegion;\n }\n }\n resp.error = AWS.util.error(new Error(), {\n code: codes[code],\n message: null,\n region: region\n });\n } else {\n var data = new AWS.XML.Parser().parse(body.toString());\n\n if (data.Region && !region) {\n region = data.Region;\n if (bucket && region !== bucketRegionCache[bucket]) {\n bucketRegionCache[bucket] = region;\n }\n } else if (bucket && !region && !data.Region) {\n cachedRegion = bucketRegionCache[bucket] || null;\n if (cachedRegion !== req.httpRequest.region) {\n region = cachedRegion;\n }\n }\n\n resp.error = AWS.util.error(new Error(), {\n code: data.Code || code,\n message: data.Message || null,\n region: region\n });\n }\n req.service.extractRequestIds(resp);\n },\n\n /**\n * If region was not obtained synchronously, then send async request\n * to get bucket region for errors resulting from wrong region.\n *\n * @api private\n */\n requestBucketRegion: function requestBucketRegion(resp, done) {\n var error = resp.error;\n var req = resp.request;\n var bucket = req.params.Bucket || null;\n\n if (!error || !bucket || error.region || req.operation === 'listObjects' ||\n (AWS.util.isNode() && req.operation === 'headBucket') ||\n (error.statusCode === 400 && req.operation !== 'headObject') ||\n regionRedirectErrorCodes.indexOf(error.code) === -1) {\n return done();\n }\n var reqOperation = AWS.util.isNode() ? 'headBucket' : 'listObjects';\n var reqParams = {Bucket: bucket};\n if (reqOperation === 'listObjects') reqParams.MaxKeys = 0;\n var regionReq = req.service[reqOperation](reqParams);\n regionReq._requestRegionForBucket = bucket;\n regionReq.send(function() {\n var region = req.service.bucketRegionCache[bucket] || null;\n error.region = region;\n done();\n });\n },\n\n /**\n * For browser only. If NetworkingError received, will attempt to obtain\n * the bucket region.\n *\n * @api private\n */\n reqRegionForNetworkingError: function reqRegionForNetworkingError(resp, done) {\n if (!AWS.util.isBrowser()) {\n return done();\n }\n var error = resp.error;\n var request = resp.request;\n var bucket = request.params.Bucket;\n if (!error || error.code !== 'NetworkingError' || !bucket ||\n request.httpRequest.region === 'us-east-1') {\n return done();\n }\n var service = request.service;\n var bucketRegionCache = service.bucketRegionCache;\n var cachedRegion = bucketRegionCache[bucket] || null;\n\n if (cachedRegion && cachedRegion !== request.httpRequest.region) {\n service.updateReqBucketRegion(request, cachedRegion);\n done();\n } else if (!s3util.dnsCompatibleBucketName(bucket)) {\n service.updateReqBucketRegion(request, 'us-east-1');\n if (bucketRegionCache[bucket] !== 'us-east-1') {\n bucketRegionCache[bucket] = 'us-east-1';\n }\n done();\n } else if (request.httpRequest.virtualHostedBucket) {\n var getRegionReq = service.listObjects({Bucket: bucket, MaxKeys: 0});\n service.updateReqBucketRegion(getRegionReq, 'us-east-1');\n getRegionReq._requestRegionForBucket = bucket;\n\n getRegionReq.send(function() {\n var region = service.bucketRegionCache[bucket] || null;\n if (region && region !== request.httpRequest.region) {\n service.updateReqBucketRegion(request, region);\n }\n done();\n });\n } else {\n // DNS-compatible path-style\n // (s3ForcePathStyle or bucket name with dot over https)\n // Cannot obtain region information for this case\n done();\n }\n },\n\n /**\n * Cache for bucket region.\n *\n * @api private\n */\n bucketRegionCache: {},\n\n /**\n * Clears bucket region cache.\n *\n * @api private\n */\n clearBucketRegionCache: function(buckets) {\n var bucketRegionCache = this.bucketRegionCache;\n if (!buckets) {\n buckets = Object.keys(bucketRegionCache);\n } else if (typeof buckets === 'string') {\n buckets = [buckets];\n }\n for (var i = 0; i < buckets.length; i++) {\n delete bucketRegionCache[buckets[i]];\n }\n return bucketRegionCache;\n },\n\n /**\n * Corrects request region if bucket's cached region is different\n *\n * @api private\n */\n correctBucketRegionFromCache: function correctBucketRegionFromCache(req) {\n var bucket = req.params.Bucket || null;\n if (bucket) {\n var service = req.service;\n var requestRegion = req.httpRequest.region;\n var cachedRegion = service.bucketRegionCache[bucket];\n if (cachedRegion && cachedRegion !== requestRegion) {\n service.updateReqBucketRegion(req, cachedRegion);\n }\n }\n },\n\n /**\n * Extracts S3 specific request ids from the http response.\n *\n * @api private\n */\n extractRequestIds: function extractRequestIds(resp) {\n var extendedRequestId = resp.httpResponse.headers ? resp.httpResponse.headers['x-amz-id-2'] : null;\n var cfId = resp.httpResponse.headers ? resp.httpResponse.headers['x-amz-cf-id'] : null;\n resp.extendedRequestId = extendedRequestId;\n resp.cfId = cfId;\n\n if (resp.error) {\n resp.error.requestId = resp.requestId || null;\n resp.error.extendedRequestId = extendedRequestId;\n resp.error.cfId = cfId;\n }\n },\n\n /**\n * Get a pre-signed URL for a given operation name.\n *\n * @note You must ensure that you have static or previously resolved\n * credentials if you call this method synchronously (with no callback),\n * otherwise it may not properly sign the request. If you cannot guarantee\n * this (you are using an asynchronous credential provider, i.e., EC2\n * IAM roles), you should always call this method with an asynchronous\n * callback.\n * @note Not all operation parameters are supported when using pre-signed\n * URLs. Certain parameters, such as `SSECustomerKey`, `ACL`, `Expires`,\n * `ContentLength`, or `Tagging` must be provided as headers when sending a\n * request. If you are using pre-signed URLs to upload from a browser and\n * need to use these fields, see {createPresignedPost}.\n * @note The default signer allows altering the request by adding corresponding\n * headers to set some parameters (e.g. Range) and these added parameters\n * won't be signed. You must use signatureVersion v4 to to include these\n * parameters in the signed portion of the URL and enforce exact matching\n * between headers and signed params in the URL.\n * @note This operation cannot be used with a promise. See note above regarding\n * asynchronous credentials and use with a callback.\n * @param operation [String] the name of the operation to call\n * @param params [map] parameters to pass to the operation. See the given\n * operation for the expected operation parameters. In addition, you can\n * also pass the \"Expires\" parameter to inform S3 how long the URL should\n * work for.\n * @option params Expires [Integer] (900) the number of seconds to expire\n * the pre-signed URL operation in. Defaults to 15 minutes.\n * @param callback [Function] if a callback is provided, this function will\n * pass the URL as the second parameter (after the error parameter) to\n * the callback function.\n * @return [String] if called synchronously (with no callback), returns the\n * signed URL.\n * @return [null] nothing is returned if a callback is provided.\n * @example Pre-signing a getObject operation (synchronously)\n * var params = {Bucket: 'bucket', Key: 'key'};\n * var url = s3.getSignedUrl('getObject', params);\n * console.log('The URL is', url);\n * @example Pre-signing a putObject (asynchronously)\n * var params = {Bucket: 'bucket', Key: 'key'};\n * s3.getSignedUrl('putObject', params, function (err, url) {\n * console.log('The URL is', url);\n * });\n * @example Pre-signing a putObject operation with a specific payload\n * var params = {Bucket: 'bucket', Key: 'key', Body: 'body'};\n * var url = s3.getSignedUrl('putObject', params);\n * console.log('The URL is', url);\n * @example Passing in a 1-minute expiry time for a pre-signed URL\n * var params = {Bucket: 'bucket', Key: 'key', Expires: 60};\n * var url = s3.getSignedUrl('getObject', params);\n * console.log('The URL is', url); // expires in 60 seconds\n */\n getSignedUrl: function getSignedUrl(operation, params, callback) {\n params = AWS.util.copy(params || {});\n var expires = params.Expires || 900;\n\n if (typeof expires !== 'number') {\n throw AWS.util.error(new Error(),\n { code: 'InvalidParameterException', message: 'The expiration must be a number, received ' + typeof expires });\n }\n\n delete params.Expires; // we can't validate this\n var request = this.makeRequest(operation, params);\n\n if (callback) {\n AWS.util.defer(function() {\n request.presign(expires, callback);\n });\n } else {\n return request.presign(expires, callback);\n }\n },\n\n /**\n * @!method getSignedUrlPromise()\n * Returns a 'thenable' promise that will be resolved with a pre-signed URL\n * for a given operation name.\n *\n * Two callbacks can be provided to the `then` method on the returned promise.\n * The first callback will be called if the promise is fulfilled, and the second\n * callback will be called if the promise is rejected.\n * @note Not all operation parameters are supported when using pre-signed\n * URLs. Certain parameters, such as `SSECustomerKey`, `ACL`, `Expires`,\n * `ContentLength`, or `Tagging` must be provided as headers when sending a\n * request. If you are using pre-signed URLs to upload from a browser and\n * need to use these fields, see {createPresignedPost}.\n * @param operation [String] the name of the operation to call\n * @param params [map] parameters to pass to the operation. See the given\n * operation for the expected operation parameters. In addition, you can\n * also pass the \"Expires\" parameter to inform S3 how long the URL should\n * work for.\n * @option params Expires [Integer] (900) the number of seconds to expire\n * the pre-signed URL operation in. Defaults to 15 minutes.\n * @callback fulfilledCallback function(url)\n * Called if the promise is fulfilled.\n * @param url [String] the signed url\n * @callback rejectedCallback function(err)\n * Called if the promise is rejected.\n * @param err [Error] if an error occurred, this value will be filled\n * @return [Promise] A promise that represents the state of the `refresh` call.\n * @example Pre-signing a getObject operation\n * var params = {Bucket: 'bucket', Key: 'key'};\n * var promise = s3.getSignedUrlPromise('getObject', params);\n * promise.then(function(url) {\n * console.log('The URL is', url);\n * }, function(err) { ... });\n * @example Pre-signing a putObject operation with a specific payload\n * var params = {Bucket: 'bucket', Key: 'key', Body: 'body'};\n * var promise = s3.getSignedUrlPromise('putObject', params);\n * promise.then(function(url) {\n * console.log('The URL is', url);\n * }, function(err) { ... });\n * @example Passing in a 1-minute expiry time for a pre-signed URL\n * var params = {Bucket: 'bucket', Key: 'key', Expires: 60};\n * var promise = s3.getSignedUrlPromise('getObject', params);\n * promise.then(function(url) {\n * console.log('The URL is', url);\n * }, function(err) { ... });\n */\n\n /**\n * Get a pre-signed POST policy to support uploading to S3 directly from an\n * HTML form.\n *\n * @param params [map]\n * @option params Bucket [String] The bucket to which the post should be\n * uploaded\n * @option params Expires [Integer] (3600) The number of seconds for which\n * the presigned policy should be valid.\n * @option params Conditions [Array] An array of conditions that must be met\n * for the presigned policy to allow the\n * upload. This can include required tags,\n * the accepted range for content lengths,\n * etc.\n * @see http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-HTTPPOSTConstructPolicy.html\n * @option params Fields [map] Fields to include in the form. All\n * values passed in as fields will be\n * signed as exact match conditions.\n * @param callback [Function]\n *\n * @note All fields passed in when creating presigned post data will be signed\n * as exact match conditions. Any fields that will be interpolated by S3\n * must be added to the fields hash after signing, and an appropriate\n * condition for such fields must be explicitly added to the Conditions\n * array passed to this function before signing.\n *\n * @example Presiging post data with a known key\n * var params = {\n * Bucket: 'bucket',\n * Fields: {\n * key: 'key'\n * }\n * };\n * s3.createPresignedPost(params, function(err, data) {\n * if (err) {\n * console.error('Presigning post data encountered an error', err);\n * } else {\n * console.log('The post data is', data);\n * }\n * });\n *\n * @example Presigning post data with an interpolated key\n * var params = {\n * Bucket: 'bucket',\n * Conditions: [\n * ['starts-with', '$key', 'path/to/uploads/']\n * ]\n * };\n * s3.createPresignedPost(params, function(err, data) {\n * if (err) {\n * console.error('Presigning post data encountered an error', err);\n * } else {\n * data.Fields.key = 'path/to/uploads/${filename}';\n * console.log('The post data is', data);\n * }\n * });\n *\n * @note You must ensure that you have static or previously resolved\n * credentials if you call this method synchronously (with no callback),\n * otherwise it may not properly sign the request. If you cannot guarantee\n * this (you are using an asynchronous credential provider, i.e., EC2\n * IAM roles), you should always call this method with an asynchronous\n * callback.\n *\n * @return [map] If called synchronously (with no callback), returns a hash\n * with the url to set as the form action and a hash of fields\n * to include in the form.\n * @return [null] Nothing is returned if a callback is provided.\n *\n * @callback callback function (err, data)\n * @param err [Error] the error object returned from the policy signer\n * @param data [map] The data necessary to construct an HTML form\n * @param data.url [String] The URL to use as the action of the form\n * @param data.fields [map] A hash of fields that must be included in the\n * form for the upload to succeed. This hash will\n * include the signed POST policy, your access key\n * ID and security token (if present), etc. These\n * may be safely included as input elements of type\n * 'hidden.'\n */\n createPresignedPost: function createPresignedPost(params, callback) {\n if (typeof params === 'function' && callback === undefined) {\n callback = params;\n params = null;\n }\n\n params = AWS.util.copy(params || {});\n var boundParams = this.config.params || {};\n var bucket = params.Bucket || boundParams.Bucket,\n self = this,\n config = this.config,\n endpoint = AWS.util.copy(this.endpoint);\n if (!config.s3BucketEndpoint) {\n endpoint.pathname = '/' + bucket;\n }\n\n function finalizePost() {\n return {\n url: AWS.util.urlFormat(endpoint),\n fields: self.preparePostFields(\n config.credentials,\n config.region,\n bucket,\n params.Fields,\n params.Conditions,\n params.Expires\n )\n };\n }\n\n if (callback) {\n config.getCredentials(function (err) {\n if (err) {\n callback(err);\n } else {\n try {\n callback(null, finalizePost());\n } catch (err) {\n callback(err);\n }\n }\n });\n } else {\n return finalizePost();\n }\n },\n\n /**\n * @api private\n */\n preparePostFields: function preparePostFields(\n credentials,\n region,\n bucket,\n fields,\n conditions,\n expiresInSeconds\n ) {\n var now = this.getSkewCorrectedDate();\n if (!credentials || !region || !bucket) {\n throw new Error('Unable to create a POST object policy without a bucket,'\n + ' region, and credentials');\n }\n fields = AWS.util.copy(fields || {});\n conditions = (conditions || []).slice(0);\n expiresInSeconds = expiresInSeconds || 3600;\n\n var signingDate = AWS.util.date.iso8601(now).replace(/[:\\-]|\\.\\d{3}/g, '');\n var shortDate = signingDate.substr(0, 8);\n var scope = v4Credentials.createScope(shortDate, region, 's3');\n var credential = credentials.accessKeyId + '/' + scope;\n\n fields['bucket'] = bucket;\n fields['X-Amz-Algorithm'] = 'AWS4-HMAC-SHA256';\n fields['X-Amz-Credential'] = credential;\n fields['X-Amz-Date'] = signingDate;\n if (credentials.sessionToken) {\n fields['X-Amz-Security-Token'] = credentials.sessionToken;\n }\n for (var field in fields) {\n if (fields.hasOwnProperty(field)) {\n var condition = {};\n condition[field] = fields[field];\n conditions.push(condition);\n }\n }\n\n fields.Policy = this.preparePostPolicy(\n new Date(now.valueOf() + expiresInSeconds * 1000),\n conditions\n );\n fields['X-Amz-Signature'] = AWS.util.crypto.hmac(\n v4Credentials.getSigningKey(credentials, shortDate, region, 's3', true),\n fields.Policy,\n 'hex'\n );\n\n return fields;\n },\n\n /**\n * @api private\n */\n preparePostPolicy: function preparePostPolicy(expiration, conditions) {\n return AWS.util.base64.encode(JSON.stringify({\n expiration: AWS.util.date.iso8601(expiration),\n conditions: conditions\n }));\n },\n\n /**\n * @api private\n */\n prepareSignedUrl: function prepareSignedUrl(request) {\n request.addListener('validate', request.service.noPresignedContentLength);\n request.removeListener('build', request.service.addContentType);\n if (!request.params.Body) {\n // no Content-MD5/SHA-256 if body is not provided\n request.removeListener('build', request.service.computeContentMd5);\n } else {\n request.addListener('afterBuild', AWS.EventListeners.Core.COMPUTE_SHA256);\n }\n },\n\n /**\n * @api private\n * @param request\n */\n disableBodySigning: function disableBodySigning(request) {\n var headers = request.httpRequest.headers;\n // Add the header to anything that isn't a presigned url, unless that presigned url had a body defined\n if (!Object.prototype.hasOwnProperty.call(headers, 'presigned-expires')) {\n headers['X-Amz-Content-Sha256'] = 'UNSIGNED-PAYLOAD';\n }\n },\n\n /**\n * @api private\n */\n noPresignedContentLength: function noPresignedContentLength(request) {\n if (request.params.ContentLength !== undefined) {\n throw AWS.util.error(new Error(), {code: 'UnexpectedParameter',\n message: 'ContentLength is not supported in pre-signed URLs.'});\n }\n },\n\n createBucket: function createBucket(params, callback) {\n // When creating a bucket *outside* the classic region, the location\n // constraint must be set for the bucket and it must match the endpoint.\n // This chunk of code will set the location constraint param based\n // on the region (when possible), but it will not override a passed-in\n // location constraint.\n if (typeof params === 'function' || !params) {\n callback = callback || params;\n params = {};\n }\n var hostname = this.endpoint.hostname;\n // copy params so that appending keys does not unintentioinallly\n // mutate params object argument passed in by user\n var copiedParams = AWS.util.copy(params);\n\n if (hostname !== this.api.globalEndpoint && !params.CreateBucketConfiguration) {\n copiedParams.CreateBucketConfiguration = { LocationConstraint: this.config.region };\n }\n return this.makeRequest('createBucket', copiedParams, callback);\n },\n\n /**\n * @see AWS.S3.ManagedUpload\n * @overload upload(params = {}, [options], [callback])\n * Uploads an arbitrarily sized buffer, blob, or stream, using intelligent\n * concurrent handling of parts if the payload is large enough. You can\n * configure the concurrent queue size by setting `options`. Note that this\n * is the only operation for which the SDK can retry requests with stream\n * bodies.\n *\n * @param (see AWS.S3.putObject)\n * @option (see AWS.S3.ManagedUpload.constructor)\n * @return [AWS.S3.ManagedUpload] the managed upload object that can call\n * `send()` or track progress.\n * @example Uploading a stream object\n * var params = {Bucket: 'bucket', Key: 'key', Body: stream};\n * s3.upload(params, function(err, data) {\n * console.log(err, data);\n * });\n * @example Uploading a stream with concurrency of 1 and partSize of 10mb\n * var params = {Bucket: 'bucket', Key: 'key', Body: stream};\n * var options = {partSize: 10 * 1024 * 1024, queueSize: 1};\n * s3.upload(params, options, function(err, data) {\n * console.log(err, data);\n * });\n * @callback callback function(err, data)\n * @param err [Error] an error or null if no error occurred.\n * @param data [map] The response data from the successful upload:\n * @param data.Location [String] the URL of the uploaded object\n * @param data.ETag [String] the ETag of the uploaded object\n * @param data.Bucket [String] the bucket to which the object was uploaded\n * @param data.Key [String] the key to which the object was uploaded\n */\n upload: function upload(params, options, callback) {\n if (typeof options === 'function' && callback === undefined) {\n callback = options;\n options = null;\n }\n\n options = options || {};\n options = AWS.util.merge(options || {}, {service: this, params: params});\n\n var uploader = new AWS.S3.ManagedUpload(options);\n if (typeof callback === 'function') uploader.send(callback);\n return uploader;\n }\n});\n\n/**\n * @api private\n */\nAWS.S3.addPromisesToClass = function addPromisesToClass(PromiseDependency) {\n this.prototype.getSignedUrlPromise = AWS.util.promisifyMethod('getSignedUrl', PromiseDependency);\n};\n\n/**\n * @api private\n */\nAWS.S3.deletePromisesFromClass = function deletePromisesFromClass() {\n delete this.prototype.getSignedUrlPromise;\n};\n\nAWS.util.addPromises(AWS.S3);\n","var AWS = require('../core');\nvar regionUtil = require('../region_config');\n\nvar s3util = {\n /**\n * @api private\n */\n isArnInParam: function isArnInParam(req, paramName) {\n var inputShape = (req.service.api.operations[req.operation] || {}).input || {};\n var inputMembers = inputShape.members || {};\n if (!req.params[paramName] || !inputMembers[paramName]) return false;\n return AWS.util.ARN.validate(req.params[paramName]);\n },\n\n /**\n * Validate service component from ARN supplied in Bucket parameter\n */\n validateArnService: function validateArnService(req) {\n var parsedArn = req.service._parsedArn;\n\n if (parsedArn.service !== 's3' && parsedArn.service !== 's3-outposts') {\n throw AWS.util.error(new Error(), {\n code: 'InvalidARN',\n message: 'expect \\'s3\\' or \\'s3-outposts\\' in ARN service component'\n });\n }\n },\n\n /**\n * Validate account ID from ARN supplied in Bucket parameter is a valid account\n */\n validateArnAccount: function validateArnAccount(req) {\n var parsedArn = req.service._parsedArn;\n\n if (!/[0-9]{12}/.exec(parsedArn.accountId)) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidARN',\n message: 'ARN accountID does not match regex \"[0-9]{12}\"'\n });\n }\n },\n\n /**\n * Validate ARN supplied in Bucket parameter is a valid access point ARN\n */\n validateS3AccessPointArn: function validateS3AccessPointArn(req) {\n var parsedArn = req.service._parsedArn;\n\n //can be ':' or '/'\n var delimiter = parsedArn.resource['accesspoint'.length];\n\n if (parsedArn.resource.split(delimiter).length !== 2) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidARN',\n message: 'Access Point ARN should have one resource accesspoint/{accesspointName}'\n });\n }\n\n var accessPoint = parsedArn.resource.split(delimiter)[1];\n var accessPointPrefix = accessPoint + '-' + parsedArn.accountId;\n if (!s3util.dnsCompatibleBucketName(accessPointPrefix) || accessPointPrefix.match(/\\./)) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidARN',\n message: 'Access point resource in ARN is not DNS compatible. Got ' + accessPoint\n });\n }\n\n //set parsed valid access point\n req.service._parsedArn.accessPoint = accessPoint;\n },\n\n /**\n * Validate Outposts ARN supplied in Bucket parameter is a valid outposts ARN\n */\n validateOutpostsArn: function validateOutpostsArn(req) {\n var parsedArn = req.service._parsedArn;\n\n if (\n parsedArn.resource.indexOf('outpost:') !== 0 &&\n parsedArn.resource.indexOf('outpost/') !== 0\n ) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidARN',\n message: 'ARN resource should begin with \\'outpost/\\''\n });\n }\n\n //can be ':' or '/'\n var delimiter = parsedArn.resource['outpost'.length];\n var outpostId = parsedArn.resource.split(delimiter)[1];\n var dnsHostRegex = new RegExp(/^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9])$/);\n if (!dnsHostRegex.test(outpostId)) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidARN',\n message: 'Outpost resource in ARN is not DNS compatible. Got ' + outpostId\n });\n }\n req.service._parsedArn.outpostId = outpostId;\n },\n\n /**\n * Validate Outposts ARN supplied in Bucket parameter is a valid outposts ARN\n */\n validateOutpostsAccessPointArn: function validateOutpostsAccessPointArn(req) {\n var parsedArn = req.service._parsedArn;\n\n //can be ':' or '/'\n var delimiter = parsedArn.resource['outpost'.length];\n\n if (parsedArn.resource.split(delimiter).length !== 4) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidARN',\n message: 'Outposts ARN should have two resources outpost/{outpostId}/accesspoint/{accesspointName}'\n });\n }\n\n var accessPoint = parsedArn.resource.split(delimiter)[3];\n var accessPointPrefix = accessPoint + '-' + parsedArn.accountId;\n if (!s3util.dnsCompatibleBucketName(accessPointPrefix) || accessPointPrefix.match(/\\./)) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidARN',\n message: 'Access point resource in ARN is not DNS compatible. Got ' + accessPoint\n });\n }\n\n //set parsed valid access point\n req.service._parsedArn.accessPoint = accessPoint;\n },\n\n /**\n * Validate region field in ARN supplied in Bucket parameter is a valid region\n */\n validateArnRegion: function validateArnRegion(req) {\n var useArnRegion = s3util.loadUseArnRegionConfig(req);\n var regionFromArn = req.service._parsedArn.region;\n var clientRegion = req.service.config.region;\n\n if (!regionFromArn) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidARN',\n message: 'ARN region is empty'\n });\n }\n\n if (\n clientRegion.indexOf('fips') >= 0 ||\n regionFromArn.indexOf('fips') >= 0\n ) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidConfiguration',\n message: 'ARN endpoint is not compatible with FIPS region'\n });\n }\n\n if (!useArnRegion && regionFromArn !== clientRegion) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidConfiguration',\n message: 'Configured region conflicts with access point region'\n });\n } else if (\n useArnRegion &&\n regionUtil.getEndpointSuffix(regionFromArn) !== regionUtil.getEndpointSuffix(clientRegion)\n ) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidConfiguration',\n message: 'Configured region and access point region not in same partition'\n });\n }\n\n if (req.service.config.useAccelerateEndpoint) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidConfiguration',\n message: 'useAccelerateEndpoint config is not supported with access point ARN'\n });\n }\n\n if (req.service._parsedArn.service === 's3-outposts' && req.service.config.useDualstack) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidConfiguration',\n message: 'useDualstack config is not supported with outposts access point ARN'\n });\n }\n },\n\n loadUseArnRegionConfig: function loadUseArnRegionConfig(req) {\n var envName = 'AWS_S3_USE_ARN_REGION';\n var configName = 's3_use_arn_region';\n var useArnRegion = true;\n var originalConfig = req.service._originalConfig || {};\n if (req.service.config.s3UseArnRegion !== undefined) {\n return req.service.config.s3UseArnRegion;\n } else if (originalConfig.s3UseArnRegion !== undefined) {\n useArnRegion = originalConfig.s3UseArnRegion === true;\n } else if (AWS.util.isNode()) {\n //load from environmental variable AWS_USE_ARN_REGION\n if (process.env[envName]) {\n var value = process.env[envName].trim().toLowerCase();\n if (['false', 'true'].indexOf(value) < 0) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidConfiguration',\n message: envName + ' only accepts true or false. Got ' + process.env[envName],\n retryable: false\n });\n }\n useArnRegion = value === 'true';\n } else { //load from shared config property use_arn_region\n var profiles = {};\n var profile = {};\n try {\n profiles = AWS.util.getProfilesFromSharedConfig(AWS.util.iniLoader);\n profile = profiles[process.env.AWS_PROFILE || AWS.util.defaultProfile];\n } catch (e) {}\n if (profile[configName]) {\n if (['false', 'true'].indexOf(profile[configName].trim().toLowerCase()) < 0) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidConfiguration',\n message: configName + ' only accepts true or false. Got ' + profile[configName],\n retryable: false\n });\n }\n useArnRegion = profile[configName].trim().toLowerCase() === 'true';\n }\n }\n }\n req.service.config.s3UseArnRegion = useArnRegion;\n return useArnRegion;\n },\n\n /**\n * Validations before URI can be populated\n */\n validatePopulateUriFromArn: function validatePopulateUriFromArn(req) {\n if (req.service._originalConfig && req.service._originalConfig.endpoint) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidConfiguration',\n message: 'Custom endpoint is not compatible with access point ARN'\n });\n }\n\n if (req.service.config.s3ForcePathStyle) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidConfiguration',\n message: 'Cannot construct path-style endpoint with access point'\n });\n }\n },\n\n /**\n * Returns true if the bucket name is DNS compatible. Buckets created\n * outside of the classic region MUST be DNS compatible.\n *\n * @api private\n */\n dnsCompatibleBucketName: function dnsCompatibleBucketName(bucketName) {\n var b = bucketName;\n var domain = new RegExp(/^[a-z0-9][a-z0-9\\.\\-]{1,61}[a-z0-9]$/);\n var ipAddress = new RegExp(/(\\d+\\.){3}\\d+/);\n var dots = new RegExp(/\\.\\./);\n return (b.match(domain) && !b.match(ipAddress) && !b.match(dots)) ? true : false;\n },\n};\n\n/**\n * @api private\n */\nmodule.exports = s3util;\n","var AWS = require('../core');\nvar resolveRegionalEndpointsFlag = require('../config_regional_endpoint');\nvar ENV_REGIONAL_ENDPOINT_ENABLED = 'AWS_STS_REGIONAL_ENDPOINTS';\nvar CONFIG_REGIONAL_ENDPOINT_ENABLED = 'sts_regional_endpoints';\n\nAWS.util.update(AWS.STS.prototype, {\n /**\n * @overload credentialsFrom(data, credentials = null)\n * Creates a credentials object from STS response data containing\n * credentials information. Useful for quickly setting AWS credentials.\n *\n * @note This is a low-level utility function. If you want to load temporary\n * credentials into your process for subsequent requests to AWS resources,\n * you should use {AWS.TemporaryCredentials} instead.\n * @param data [map] data retrieved from a call to {getFederatedToken},\n * {getSessionToken}, {assumeRole}, or {assumeRoleWithWebIdentity}.\n * @param credentials [AWS.Credentials] an optional credentials object to\n * fill instead of creating a new object. Useful when modifying an\n * existing credentials object from a refresh call.\n * @return [AWS.TemporaryCredentials] the set of temporary credentials\n * loaded from a raw STS operation response.\n * @example Using credentialsFrom to load global AWS credentials\n * var sts = new AWS.STS();\n * sts.getSessionToken(function (err, data) {\n * if (err) console.log(\"Error getting credentials\");\n * else {\n * AWS.config.credentials = sts.credentialsFrom(data);\n * }\n * });\n * @see AWS.TemporaryCredentials\n */\n credentialsFrom: function credentialsFrom(data, credentials) {\n if (!data) return null;\n if (!credentials) credentials = new AWS.TemporaryCredentials();\n credentials.expired = false;\n credentials.accessKeyId = data.Credentials.AccessKeyId;\n credentials.secretAccessKey = data.Credentials.SecretAccessKey;\n credentials.sessionToken = data.Credentials.SessionToken;\n credentials.expireTime = data.Credentials.Expiration;\n return credentials;\n },\n\n assumeRoleWithWebIdentity: function assumeRoleWithWebIdentity(params, callback) {\n return this.makeUnauthenticatedRequest('assumeRoleWithWebIdentity', params, callback);\n },\n\n assumeRoleWithSAML: function assumeRoleWithSAML(params, callback) {\n return this.makeUnauthenticatedRequest('assumeRoleWithSAML', params, callback);\n },\n\n /**\n * @api private\n */\n setupRequestListeners: function setupRequestListeners(request) {\n request.addListener('validate', this.optInRegionalEndpoint, true);\n },\n\n /**\n * @api private\n */\n optInRegionalEndpoint: function optInRegionalEndpoint(req) {\n var service = req.service;\n var config = service.config;\n config.stsRegionalEndpoints = resolveRegionalEndpointsFlag(service._originalConfig, {\n env: ENV_REGIONAL_ENDPOINT_ENABLED,\n sharedConfig: CONFIG_REGIONAL_ENDPOINT_ENABLED,\n clientConfig: 'stsRegionalEndpoints'\n });\n if (\n config.stsRegionalEndpoints === 'regional' &&\n service.isGlobalEndpoint\n ) {\n //client will throw if region is not supplied; request will be signed with specified region\n if (!config.region) {\n throw AWS.util.error(new Error(),\n {code: 'ConfigError', message: 'Missing region in config'});\n }\n var insertPoint = config.endpoint.indexOf('.amazonaws.com');\n var regionalEndpoint = config.endpoint.substring(0, insertPoint) +\n '.' + config.region + config.endpoint.substring(insertPoint);\n req.httpRequest.updateEndpoint(regionalEndpoint);\n req.httpRequest.region = config.region;\n }\n }\n\n});\n","var IniLoader = require('./ini-loader').IniLoader;\n/**\n * Singleton object to load specified config/credentials files.\n * It will cache all the files ever loaded;\n */\nmodule.exports.iniLoader = new IniLoader();\n","var AWS = require('../core');\nvar os = require('os');\nvar path = require('path');\n\nfunction parseFile(filename, isConfig) {\n var content = AWS.util.ini.parse(AWS.util.readFileSync(filename));\n var tmpContent = {};\n Object.keys(content).forEach(function(profileName) {\n var profileContent = content[profileName];\n profileName = isConfig ? profileName.replace(/^profile\\s/, '') : profileName;\n Object.defineProperty(tmpContent, profileName, {\n value: profileContent,\n enumerable: true\n });\n });\n return tmpContent;\n}\n\n/**\n * Ini file loader class the same as that used in the SDK. It loads and\n * parses config and credentials files in .ini format and cache the content\n * to assure files are only read once.\n * Note that calling operations on the instance instantiated from this class\n * won't affect the behavior of SDK since SDK uses an internal singleton of\n * this class.\n * @!macro nobrowser\n */\nAWS.IniLoader = AWS.util.inherit({\n constructor: function IniLoader() {\n this.resolvedProfiles = {};\n },\n\n /** Remove all cached files. Used after config files are updated. */\n clearCachedFiles: function clearCachedFiles() {\n this.resolvedProfiles = {};\n },\n\n/**\n * Load configurations from config/credentials files and cache them\n * for later use. If no file is specified it will try to load default\n * files.\n * @param options [map] information describing the file\n * @option options filename [String] ('~/.aws/credentials' or defined by\n * AWS_SHARED_CREDENTIALS_FILE process env var or '~/.aws/config' if\n * isConfig is set to true)\n * path to the file to be read.\n * @option options isConfig [Boolean] (false) True to read config file.\n * @return [map<String,String>] object containing contents from file in key-value\n * pairs.\n */\n loadFrom: function loadFrom(options) {\n options = options || {};\n var isConfig = options.isConfig === true;\n var filename = options.filename || this.getDefaultFilePath(isConfig);\n if (!this.resolvedProfiles[filename]) {\n var fileContent = this.parseFile(filename, isConfig);\n Object.defineProperty(this.resolvedProfiles, filename, { value: fileContent });\n }\n return this.resolvedProfiles[filename];\n },\n\n /**\n * @api private\n */\n parseFile: parseFile,\n\n /**\n * @api private\n */\n getDefaultFilePath: function getDefaultFilePath(isConfig) {\n return path.join(\n this.getHomeDir(),\n '.aws',\n isConfig ? 'config' : 'credentials'\n );\n },\n\n /**\n * @api private\n */\n getHomeDir: function getHomeDir() {\n var env = process.env;\n var home = env.HOME ||\n env.USERPROFILE ||\n (env.HOMEPATH ? ((env.HOMEDRIVE || 'C:/') + env.HOMEPATH) : null);\n\n if (home) {\n return home;\n }\n\n if (typeof os.homedir === 'function') {\n return os.homedir();\n }\n\n throw AWS.util.error(\n new Error('Cannot load credentials, HOME path not set')\n );\n }\n});\n\nvar IniLoader = AWS.IniLoader;\n\nmodule.exports = {\n IniLoader: IniLoader,\n parseFile: parseFile,\n};\n","var AWS = require('../core');\nvar inherit = AWS.util.inherit;\n\n/**\n * @api private\n */\nvar expiresHeader = 'presigned-expires';\n\n/**\n * @api private\n */\nfunction signedUrlBuilder(request) {\n var expires = request.httpRequest.headers[expiresHeader];\n var signerClass = request.service.getSignerClass(request);\n\n delete request.httpRequest.headers['User-Agent'];\n delete request.httpRequest.headers['X-Amz-User-Agent'];\n\n if (signerClass === AWS.Signers.V4) {\n if (expires > 604800) { // one week expiry is invalid\n var message = 'Presigning does not support expiry time greater ' +\n 'than a week with SigV4 signing.';\n throw AWS.util.error(new Error(), {\n code: 'InvalidExpiryTime', message: message, retryable: false\n });\n }\n request.httpRequest.headers[expiresHeader] = expires;\n } else if (signerClass === AWS.Signers.S3) {\n var now = request.service ? request.service.getSkewCorrectedDate() : AWS.util.date.getDate();\n request.httpRequest.headers[expiresHeader] = parseInt(\n AWS.util.date.unixTimestamp(now) + expires, 10).toString();\n } else {\n throw AWS.util.error(new Error(), {\n message: 'Presigning only supports S3 or SigV4 signing.',\n code: 'UnsupportedSigner', retryable: false\n });\n }\n}\n\n/**\n * @api private\n */\nfunction signedUrlSigner(request) {\n var endpoint = request.httpRequest.endpoint;\n var parsedUrl = AWS.util.urlParse(request.httpRequest.path);\n var queryParams = {};\n\n if (parsedUrl.search) {\n queryParams = AWS.util.queryStringParse(parsedUrl.search.substr(1));\n }\n\n var auth = request.httpRequest.headers['Authorization'].split(' ');\n if (auth[0] === 'AWS') {\n auth = auth[1].split(':');\n queryParams['Signature'] = auth.pop();\n queryParams['AWSAccessKeyId'] = auth.join(':');\n\n AWS.util.each(request.httpRequest.headers, function (key, value) {\n if (key === expiresHeader) key = 'Expires';\n if (key.indexOf('x-amz-meta-') === 0) {\n // Delete existing, potentially not normalized key\n delete queryParams[key];\n key = key.toLowerCase();\n }\n queryParams[key] = value;\n });\n delete request.httpRequest.headers[expiresHeader];\n delete queryParams['Authorization'];\n delete queryParams['Host'];\n } else if (auth[0] === 'AWS4-HMAC-SHA256') { // SigV4 signing\n auth.shift();\n var rest = auth.join(' ');\n var signature = rest.match(/Signature=(.*?)(?:,|\\s|\\r?\\n|$)/)[1];\n queryParams['X-Amz-Signature'] = signature;\n delete queryParams['Expires'];\n }\n\n // build URL\n endpoint.pathname = parsedUrl.pathname;\n endpoint.search = AWS.util.queryParamsToString(queryParams);\n}\n\n/**\n * @api private\n */\nAWS.Signers.Presign = inherit({\n /**\n * @api private\n */\n sign: function sign(request, expireTime, callback) {\n request.httpRequest.headers[expiresHeader] = expireTime || 3600;\n request.on('build', signedUrlBuilder);\n request.on('sign', signedUrlSigner);\n request.removeListener('afterBuild',\n AWS.EventListeners.Core.SET_CONTENT_LENGTH);\n request.removeListener('afterBuild',\n AWS.EventListeners.Core.COMPUTE_SHA256);\n\n request.emit('beforePresign', [request]);\n\n if (callback) {\n request.build(function() {\n if (this.response.error) callback(this.response.error);\n else {\n callback(null, AWS.util.urlFormat(request.httpRequest.endpoint));\n }\n });\n } else {\n request.build();\n if (request.response.error) throw request.response.error;\n return AWS.util.urlFormat(request.httpRequest.endpoint);\n }\n }\n});\n\n/**\n * @api private\n */\nmodule.exports = AWS.Signers.Presign;\n","var AWS = require('../core');\n\nvar inherit = AWS.util.inherit;\n\n/**\n * @api private\n */\nAWS.Signers.RequestSigner = inherit({\n constructor: function RequestSigner(request) {\n this.request = request;\n },\n\n setServiceClientId: function setServiceClientId(id) {\n this.serviceClientId = id;\n },\n\n getServiceClientId: function getServiceClientId() {\n return this.serviceClientId;\n }\n});\n\nAWS.Signers.RequestSigner.getVersion = function getVersion(version) {\n switch (version) {\n case 'v2': return AWS.Signers.V2;\n case 'v3': return AWS.Signers.V3;\n case 's3v4': return AWS.Signers.V4;\n case 'v4': return AWS.Signers.V4;\n case 's3': return AWS.Signers.S3;\n case 'v3https': return AWS.Signers.V3Https;\n }\n throw new Error('Unknown signing version ' + version);\n};\n\nrequire('./v2');\nrequire('./v3');\nrequire('./v3https');\nrequire('./v4');\nrequire('./s3');\nrequire('./presign');\n","var AWS = require('../core');\nvar inherit = AWS.util.inherit;\n\n/**\n * @api private\n */\nAWS.Signers.S3 = inherit(AWS.Signers.RequestSigner, {\n /**\n * When building the stringToSign, these sub resource params should be\n * part of the canonical resource string with their NON-decoded values\n */\n subResources: {\n 'acl': 1,\n 'accelerate': 1,\n 'analytics': 1,\n 'cors': 1,\n 'lifecycle': 1,\n 'delete': 1,\n 'inventory': 1,\n 'location': 1,\n 'logging': 1,\n 'metrics': 1,\n 'notification': 1,\n 'partNumber': 1,\n 'policy': 1,\n 'requestPayment': 1,\n 'replication': 1,\n 'restore': 1,\n 'tagging': 1,\n 'torrent': 1,\n 'uploadId': 1,\n 'uploads': 1,\n 'versionId': 1,\n 'versioning': 1,\n 'versions': 1,\n 'website': 1\n },\n\n // when building the stringToSign, these querystring params should be\n // part of the canonical resource string with their NON-encoded values\n responseHeaders: {\n 'response-content-type': 1,\n 'response-content-language': 1,\n 'response-expires': 1,\n 'response-cache-control': 1,\n 'response-content-disposition': 1,\n 'response-content-encoding': 1\n },\n\n addAuthorization: function addAuthorization(credentials, date) {\n if (!this.request.headers['presigned-expires']) {\n this.request.headers['X-Amz-Date'] = AWS.util.date.rfc822(date);\n }\n\n if (credentials.sessionToken) {\n // presigned URLs require this header to be lowercased\n this.request.headers['x-amz-security-token'] = credentials.sessionToken;\n }\n\n var signature = this.sign(credentials.secretAccessKey, this.stringToSign());\n var auth = 'AWS ' + credentials.accessKeyId + ':' + signature;\n\n this.request.headers['Authorization'] = auth;\n },\n\n stringToSign: function stringToSign() {\n var r = this.request;\n\n var parts = [];\n parts.push(r.method);\n parts.push(r.headers['Content-MD5'] || '');\n parts.push(r.headers['Content-Type'] || '');\n\n // This is the \"Date\" header, but we use X-Amz-Date.\n // The S3 signing mechanism requires us to pass an empty\n // string for this Date header regardless.\n parts.push(r.headers['presigned-expires'] || '');\n\n var headers = this.canonicalizedAmzHeaders();\n if (headers) parts.push(headers);\n parts.push(this.canonicalizedResource());\n\n return parts.join('\\n');\n\n },\n\n canonicalizedAmzHeaders: function canonicalizedAmzHeaders() {\n\n var amzHeaders = [];\n\n AWS.util.each(this.request.headers, function (name) {\n if (name.match(/^x-amz-/i))\n amzHeaders.push(name);\n });\n\n amzHeaders.sort(function (a, b) {\n return a.toLowerCase() < b.toLowerCase() ? -1 : 1;\n });\n\n var parts = [];\n AWS.util.arrayEach.call(this, amzHeaders, function (name) {\n parts.push(name.toLowerCase() + ':' + String(this.request.headers[name]));\n });\n\n return parts.join('\\n');\n\n },\n\n canonicalizedResource: function canonicalizedResource() {\n\n var r = this.request;\n\n var parts = r.path.split('?');\n var path = parts[0];\n var querystring = parts[1];\n\n var resource = '';\n\n if (r.virtualHostedBucket)\n resource += '/' + r.virtualHostedBucket;\n\n resource += path;\n\n if (querystring) {\n\n // collect a list of sub resources and query params that need to be signed\n var resources = [];\n\n AWS.util.arrayEach.call(this, querystring.split('&'), function (param) {\n var name = param.split('=')[0];\n var value = param.split('=')[1];\n if (this.subResources[name] || this.responseHeaders[name]) {\n var subresource = { name: name };\n if (value !== undefined) {\n if (this.subResources[name]) {\n subresource.value = value;\n } else {\n subresource.value = decodeURIComponent(value);\n }\n }\n resources.push(subresource);\n }\n });\n\n resources.sort(function (a, b) { return a.name < b.name ? -1 : 1; });\n\n if (resources.length) {\n\n querystring = [];\n AWS.util.arrayEach(resources, function (res) {\n if (res.value === undefined) {\n querystring.push(res.name);\n } else {\n querystring.push(res.name + '=' + res.value);\n }\n });\n\n resource += '?' + querystring.join('&');\n }\n\n }\n\n return resource;\n\n },\n\n sign: function sign(secret, string) {\n return AWS.util.crypto.hmac(secret, string, 'base64', 'sha1');\n }\n});\n\n/**\n * @api private\n */\nmodule.exports = AWS.Signers.S3;\n","var AWS = require('../core');\nvar inherit = AWS.util.inherit;\n\n/**\n * @api private\n */\nAWS.Signers.V2 = inherit(AWS.Signers.RequestSigner, {\n addAuthorization: function addAuthorization(credentials, date) {\n\n if (!date) date = AWS.util.date.getDate();\n\n var r = this.request;\n\n r.params.Timestamp = AWS.util.date.iso8601(date);\n r.params.SignatureVersion = '2';\n r.params.SignatureMethod = 'HmacSHA256';\n r.params.AWSAccessKeyId = credentials.accessKeyId;\n\n if (credentials.sessionToken) {\n r.params.SecurityToken = credentials.sessionToken;\n }\n\n delete r.params.Signature; // delete old Signature for re-signing\n r.params.Signature = this.signature(credentials);\n\n r.body = AWS.util.queryParamsToString(r.params);\n r.headers['Content-Length'] = r.body.length;\n },\n\n signature: function signature(credentials) {\n return AWS.util.crypto.hmac(credentials.secretAccessKey, this.stringToSign(), 'base64');\n },\n\n stringToSign: function stringToSign() {\n var parts = [];\n parts.push(this.request.method);\n parts.push(this.request.endpoint.host.toLowerCase());\n parts.push(this.request.pathname());\n parts.push(AWS.util.queryParamsToString(this.request.params));\n return parts.join('\\n');\n }\n\n});\n\n/**\n * @api private\n */\nmodule.exports = AWS.Signers.V2;\n","var AWS = require('../core');\nvar inherit = AWS.util.inherit;\n\n/**\n * @api private\n */\nAWS.Signers.V3 = inherit(AWS.Signers.RequestSigner, {\n addAuthorization: function addAuthorization(credentials, date) {\n\n var datetime = AWS.util.date.rfc822(date);\n\n this.request.headers['X-Amz-Date'] = datetime;\n\n if (credentials.sessionToken) {\n this.request.headers['x-amz-security-token'] = credentials.sessionToken;\n }\n\n this.request.headers['X-Amzn-Authorization'] =\n this.authorization(credentials, datetime);\n\n },\n\n authorization: function authorization(credentials) {\n return 'AWS3 ' +\n 'AWSAccessKeyId=' + credentials.accessKeyId + ',' +\n 'Algorithm=HmacSHA256,' +\n 'SignedHeaders=' + this.signedHeaders() + ',' +\n 'Signature=' + this.signature(credentials);\n },\n\n signedHeaders: function signedHeaders() {\n var headers = [];\n AWS.util.arrayEach(this.headersToSign(), function iterator(h) {\n headers.push(h.toLowerCase());\n });\n return headers.sort().join(';');\n },\n\n canonicalHeaders: function canonicalHeaders() {\n var headers = this.request.headers;\n var parts = [];\n AWS.util.arrayEach(this.headersToSign(), function iterator(h) {\n parts.push(h.toLowerCase().trim() + ':' + String(headers[h]).trim());\n });\n return parts.sort().join('\\n') + '\\n';\n },\n\n headersToSign: function headersToSign() {\n var headers = [];\n AWS.util.each(this.request.headers, function iterator(k) {\n if (k === 'Host' || k === 'Content-Encoding' || k.match(/^X-Amz/i)) {\n headers.push(k);\n }\n });\n return headers;\n },\n\n signature: function signature(credentials) {\n return AWS.util.crypto.hmac(credentials.secretAccessKey, this.stringToSign(), 'base64');\n },\n\n stringToSign: function stringToSign() {\n var parts = [];\n parts.push(this.request.method);\n parts.push('/');\n parts.push('');\n parts.push(this.canonicalHeaders());\n parts.push(this.request.body);\n return AWS.util.crypto.sha256(parts.join('\\n'));\n }\n\n});\n\n/**\n * @api private\n */\nmodule.exports = AWS.Signers.V3;\n","var AWS = require('../core');\nvar inherit = AWS.util.inherit;\n\nrequire('./v3');\n\n/**\n * @api private\n */\nAWS.Signers.V3Https = inherit(AWS.Signers.V3, {\n authorization: function authorization(credentials) {\n return 'AWS3-HTTPS ' +\n 'AWSAccessKeyId=' + credentials.accessKeyId + ',' +\n 'Algorithm=HmacSHA256,' +\n 'Signature=' + this.signature(credentials);\n },\n\n stringToSign: function stringToSign() {\n return this.request.headers['X-Amz-Date'];\n }\n});\n\n/**\n * @api private\n */\nmodule.exports = AWS.Signers.V3Https;\n","var AWS = require('../core');\nvar v4Credentials = require('./v4_credentials');\nvar inherit = AWS.util.inherit;\n\n/**\n * @api private\n */\nvar expiresHeader = 'presigned-expires';\n\n/**\n * @api private\n */\nAWS.Signers.V4 = inherit(AWS.Signers.RequestSigner, {\n constructor: function V4(request, serviceName, options) {\n AWS.Signers.RequestSigner.call(this, request);\n this.serviceName = serviceName;\n options = options || {};\n this.signatureCache = typeof options.signatureCache === 'boolean' ? options.signatureCache : true;\n this.operation = options.operation;\n this.signatureVersion = options.signatureVersion;\n },\n\n algorithm: 'AWS4-HMAC-SHA256',\n\n addAuthorization: function addAuthorization(credentials, date) {\n var datetime = AWS.util.date.iso8601(date).replace(/[:\\-]|\\.\\d{3}/g, '');\n\n if (this.isPresigned()) {\n this.updateForPresigned(credentials, datetime);\n } else {\n this.addHeaders(credentials, datetime);\n }\n\n this.request.headers['Authorization'] =\n this.authorization(credentials, datetime);\n },\n\n addHeaders: function addHeaders(credentials, datetime) {\n this.request.headers['X-Amz-Date'] = datetime;\n if (credentials.sessionToken) {\n this.request.headers['x-amz-security-token'] = credentials.sessionToken;\n }\n },\n\n updateForPresigned: function updateForPresigned(credentials, datetime) {\n var credString = this.credentialString(datetime);\n var qs = {\n 'X-Amz-Date': datetime,\n 'X-Amz-Algorithm': this.algorithm,\n 'X-Amz-Credential': credentials.accessKeyId + '/' + credString,\n 'X-Amz-Expires': this.request.headers[expiresHeader],\n 'X-Amz-SignedHeaders': this.signedHeaders()\n };\n\n if (credentials.sessionToken) {\n qs['X-Amz-Security-Token'] = credentials.sessionToken;\n }\n\n if (this.request.headers['Content-Type']) {\n qs['Content-Type'] = this.request.headers['Content-Type'];\n }\n if (this.request.headers['Content-MD5']) {\n qs['Content-MD5'] = this.request.headers['Content-MD5'];\n }\n if (this.request.headers['Cache-Control']) {\n qs['Cache-Control'] = this.request.headers['Cache-Control'];\n }\n\n // need to pull in any other X-Amz-* headers\n AWS.util.each.call(this, this.request.headers, function(key, value) {\n if (key === expiresHeader) return;\n if (this.isSignableHeader(key)) {\n var lowerKey = key.toLowerCase();\n // Metadata should be normalized\n if (lowerKey.indexOf('x-amz-meta-') === 0) {\n qs[lowerKey] = value;\n } else if (lowerKey.indexOf('x-amz-') === 0) {\n qs[key] = value;\n }\n }\n });\n\n var sep = this.request.path.indexOf('?') >= 0 ? '&' : '?';\n this.request.path += sep + AWS.util.queryParamsToString(qs);\n },\n\n authorization: function authorization(credentials, datetime) {\n var parts = [];\n var credString = this.credentialString(datetime);\n parts.push(this.algorithm + ' Credential=' +\n credentials.accessKeyId + '/' + credString);\n parts.push('SignedHeaders=' + this.signedHeaders());\n parts.push('Signature=' + this.signature(credentials, datetime));\n return parts.join(', ');\n },\n\n signature: function signature(credentials, datetime) {\n var signingKey = v4Credentials.getSigningKey(\n credentials,\n datetime.substr(0, 8),\n this.request.region,\n this.serviceName,\n this.signatureCache\n );\n return AWS.util.crypto.hmac(signingKey, this.stringToSign(datetime), 'hex');\n },\n\n stringToSign: function stringToSign(datetime) {\n var parts = [];\n parts.push('AWS4-HMAC-SHA256');\n parts.push(datetime);\n parts.push(this.credentialString(datetime));\n parts.push(this.hexEncodedHash(this.canonicalString()));\n return parts.join('\\n');\n },\n\n canonicalString: function canonicalString() {\n var parts = [], pathname = this.request.pathname();\n if (this.serviceName !== 's3' && this.signatureVersion !== 's3v4') pathname = AWS.util.uriEscapePath(pathname);\n\n parts.push(this.request.method);\n parts.push(pathname);\n parts.push(this.request.search());\n parts.push(this.canonicalHeaders() + '\\n');\n parts.push(this.signedHeaders());\n parts.push(this.hexEncodedBodyHash());\n return parts.join('\\n');\n },\n\n canonicalHeaders: function canonicalHeaders() {\n var headers = [];\n AWS.util.each.call(this, this.request.headers, function (key, item) {\n headers.push([key, item]);\n });\n headers.sort(function (a, b) {\n return a[0].toLowerCase() < b[0].toLowerCase() ? -1 : 1;\n });\n var parts = [];\n AWS.util.arrayEach.call(this, headers, function (item) {\n var key = item[0].toLowerCase();\n if (this.isSignableHeader(key)) {\n var value = item[1];\n if (typeof value === 'undefined' || value === null || typeof value.toString !== 'function') {\n throw AWS.util.error(new Error('Header ' + key + ' contains invalid value'), {\n code: 'InvalidHeader'\n });\n }\n parts.push(key + ':' +\n this.canonicalHeaderValues(value.toString()));\n }\n });\n return parts.join('\\n');\n },\n\n canonicalHeaderValues: function canonicalHeaderValues(values) {\n return values.replace(/\\s+/g, ' ').replace(/^\\s+|\\s+$/g, '');\n },\n\n signedHeaders: function signedHeaders() {\n var keys = [];\n AWS.util.each.call(this, this.request.headers, function (key) {\n key = key.toLowerCase();\n if (this.isSignableHeader(key)) keys.push(key);\n });\n return keys.sort().join(';');\n },\n\n credentialString: function credentialString(datetime) {\n return v4Credentials.createScope(\n datetime.substr(0, 8),\n this.request.region,\n this.serviceName\n );\n },\n\n hexEncodedHash: function hash(string) {\n return AWS.util.crypto.sha256(string, 'hex');\n },\n\n hexEncodedBodyHash: function hexEncodedBodyHash() {\n var request = this.request;\n if (this.isPresigned() && this.serviceName === 's3' && !request.body) {\n return 'UNSIGNED-PAYLOAD';\n } else if (request.headers['X-Amz-Content-Sha256']) {\n return request.headers['X-Amz-Content-Sha256'];\n } else {\n return this.hexEncodedHash(this.request.body || '');\n }\n },\n\n unsignableHeaders: [\n 'authorization',\n 'content-type',\n 'content-length',\n 'user-agent',\n expiresHeader,\n 'expect',\n 'x-amzn-trace-id'\n ],\n\n isSignableHeader: function isSignableHeader(key) {\n if (key.toLowerCase().indexOf('x-amz-') === 0) return true;\n return this.unsignableHeaders.indexOf(key) < 0;\n },\n\n isPresigned: function isPresigned() {\n return this.request.headers[expiresHeader] ? true : false;\n }\n\n});\n\n/**\n * @api private\n */\nmodule.exports = AWS.Signers.V4;\n","var AWS = require('../core');\n\n/**\n * @api private\n */\nvar cachedSecret = {};\n\n/**\n * @api private\n */\nvar cacheQueue = [];\n\n/**\n * @api private\n */\nvar maxCacheEntries = 50;\n\n/**\n * @api private\n */\nvar v4Identifier = 'aws4_request';\n\n/**\n * @api private\n */\nmodule.exports = {\n /**\n * @api private\n *\n * @param date [String]\n * @param region [String]\n * @param serviceName [String]\n * @return [String]\n */\n createScope: function createScope(date, region, serviceName) {\n return [\n date.substr(0, 8),\n region,\n serviceName,\n v4Identifier\n ].join('/');\n },\n\n /**\n * @api private\n *\n * @param credentials [Credentials]\n * @param date [String]\n * @param region [String]\n * @param service [String]\n * @param shouldCache [Boolean]\n * @return [String]\n */\n getSigningKey: function getSigningKey(\n credentials,\n date,\n region,\n service,\n shouldCache\n ) {\n var credsIdentifier = AWS.util.crypto\n .hmac(credentials.secretAccessKey, credentials.accessKeyId, 'base64');\n var cacheKey = [credsIdentifier, date, region, service].join('_');\n shouldCache = shouldCache !== false;\n if (shouldCache && (cacheKey in cachedSecret)) {\n return cachedSecret[cacheKey];\n }\n\n var kDate = AWS.util.crypto.hmac(\n 'AWS4' + credentials.secretAccessKey,\n date,\n 'buffer'\n );\n var kRegion = AWS.util.crypto.hmac(kDate, region, 'buffer');\n var kService = AWS.util.crypto.hmac(kRegion, service, 'buffer');\n\n var signingKey = AWS.util.crypto.hmac(kService, v4Identifier, 'buffer');\n if (shouldCache) {\n cachedSecret[cacheKey] = signingKey;\n cacheQueue.push(cacheKey);\n if (cacheQueue.length > maxCacheEntries) {\n // remove the oldest entry (not the least recently used)\n delete cachedSecret[cacheQueue.shift()];\n }\n }\n\n return signingKey;\n },\n\n /**\n * @api private\n *\n * Empties the derived signing key cache. Made available for testing purposes\n * only.\n */\n emptyCache: function emptyCache() {\n cachedSecret = {};\n cacheQueue = [];\n }\n};\n","function AcceptorStateMachine(states, state) {\n this.currentState = state || null;\n this.states = states || {};\n}\n\nAcceptorStateMachine.prototype.runTo = function runTo(finalState, done, bindObject, inputError) {\n if (typeof finalState === 'function') {\n inputError = bindObject; bindObject = done;\n done = finalState; finalState = null;\n }\n\n var self = this;\n var state = self.states[self.currentState];\n state.fn.call(bindObject || self, inputError, function(err) {\n if (err) {\n if (state.fail) self.currentState = state.fail;\n else return done ? done.call(bindObject, err) : null;\n } else {\n if (state.accept) self.currentState = state.accept;\n else return done ? done.call(bindObject) : null;\n }\n if (self.currentState === finalState) {\n return done ? done.call(bindObject, err) : null;\n }\n\n self.runTo(finalState, done, bindObject, err);\n });\n};\n\nAcceptorStateMachine.prototype.addState = function addState(name, acceptState, failState, fn) {\n if (typeof acceptState === 'function') {\n fn = acceptState; acceptState = null; failState = null;\n } else if (typeof failState === 'function') {\n fn = failState; failState = null;\n }\n\n if (!this.currentState) this.currentState = name;\n this.states[name] = { accept: acceptState, fail: failState, fn: fn };\n return this;\n};\n\n/**\n * @api private\n */\nmodule.exports = AcceptorStateMachine;\n","/* eslint guard-for-in:0 */\nvar AWS;\n\n/**\n * A set of utility methods for use with the AWS SDK.\n *\n * @!attribute abort\n * Return this value from an iterator function {each} or {arrayEach}\n * to break out of the iteration.\n * @example Breaking out of an iterator function\n * AWS.util.each({a: 1, b: 2, c: 3}, function(key, value) {\n * if (key == 'b') return AWS.util.abort;\n * });\n * @see each\n * @see arrayEach\n * @api private\n */\nvar util = {\n environment: 'nodejs',\n engine: function engine() {\n if (util.isBrowser() && typeof navigator !== 'undefined') {\n return navigator.userAgent;\n } else {\n var engine = process.platform + '/' + process.version;\n if (process.env.AWS_EXECUTION_ENV) {\n engine += ' exec-env/' + process.env.AWS_EXECUTION_ENV;\n }\n return engine;\n }\n },\n\n userAgent: function userAgent() {\n var name = util.environment;\n var agent = 'aws-sdk-' + name + '/' + require('./core').VERSION;\n if (name === 'nodejs') agent += ' ' + util.engine();\n return agent;\n },\n\n uriEscape: function uriEscape(string) {\n var output = encodeURIComponent(string);\n output = output.replace(/[^A-Za-z0-9_.~\\-%]+/g, escape);\n\n // AWS percent-encodes some extra non-standard characters in a URI\n output = output.replace(/[*]/g, function(ch) {\n return '%' + ch.charCodeAt(0).toString(16).toUpperCase();\n });\n\n return output;\n },\n\n uriEscapePath: function uriEscapePath(string) {\n var parts = [];\n util.arrayEach(string.split('/'), function (part) {\n parts.push(util.uriEscape(part));\n });\n return parts.join('/');\n },\n\n urlParse: function urlParse(url) {\n return util.url.parse(url);\n },\n\n urlFormat: function urlFormat(url) {\n return util.url.format(url);\n },\n\n queryStringParse: function queryStringParse(qs) {\n return util.querystring.parse(qs);\n },\n\n queryParamsToString: function queryParamsToString(params) {\n var items = [];\n var escape = util.uriEscape;\n var sortedKeys = Object.keys(params).sort();\n\n util.arrayEach(sortedKeys, function(name) {\n var value = params[name];\n var ename = escape(name);\n var result = ename + '=';\n if (Array.isArray(value)) {\n var vals = [];\n util.arrayEach(value, function(item) { vals.push(escape(item)); });\n result = ename + '=' + vals.sort().join('&' + ename + '=');\n } else if (value !== undefined && value !== null) {\n result = ename + '=' + escape(value);\n }\n items.push(result);\n });\n\n return items.join('&');\n },\n\n readFileSync: function readFileSync(path) {\n if (util.isBrowser()) return null;\n return require('fs').readFileSync(path, 'utf-8');\n },\n\n base64: {\n encode: function encode64(string) {\n if (typeof string === 'number') {\n throw util.error(new Error('Cannot base64 encode number ' + string));\n }\n if (string === null || typeof string === 'undefined') {\n return string;\n }\n var buf = util.buffer.toBuffer(string);\n return buf.toString('base64');\n },\n\n decode: function decode64(string) {\n if (typeof string === 'number') {\n throw util.error(new Error('Cannot base64 decode number ' + string));\n }\n if (string === null || typeof string === 'undefined') {\n return string;\n }\n return util.buffer.toBuffer(string, 'base64');\n }\n\n },\n\n buffer: {\n /**\n * Buffer constructor for Node buffer and buffer pollyfill\n */\n toBuffer: function(data, encoding) {\n return (typeof util.Buffer.from === 'function' && util.Buffer.from !== Uint8Array.from) ?\n util.Buffer.from(data, encoding) : new util.Buffer(data, encoding);\n },\n\n alloc: function(size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new Error('size passed to alloc must be a number.');\n }\n if (typeof util.Buffer.alloc === 'function') {\n return util.Buffer.alloc(size, fill, encoding);\n } else {\n var buf = new util.Buffer(size);\n if (fill !== undefined && typeof buf.fill === 'function') {\n buf.fill(fill, undefined, undefined, encoding);\n }\n return buf;\n }\n },\n\n toStream: function toStream(buffer) {\n if (!util.Buffer.isBuffer(buffer)) buffer = util.buffer.toBuffer(buffer);\n\n var readable = new (util.stream.Readable)();\n var pos = 0;\n readable._read = function(size) {\n if (pos >= buffer.length) return readable.push(null);\n\n var end = pos + size;\n if (end > buffer.length) end = buffer.length;\n readable.push(buffer.slice(pos, end));\n pos = end;\n };\n\n return readable;\n },\n\n /**\n * Concatenates a list of Buffer objects.\n */\n concat: function(buffers) {\n var length = 0,\n offset = 0,\n buffer = null, i;\n\n for (i = 0; i < buffers.length; i++) {\n length += buffers[i].length;\n }\n\n buffer = util.buffer.alloc(length);\n\n for (i = 0; i < buffers.length; i++) {\n buffers[i].copy(buffer, offset);\n offset += buffers[i].length;\n }\n\n return buffer;\n }\n },\n\n string: {\n byteLength: function byteLength(string) {\n if (string === null || string === undefined) return 0;\n if (typeof string === 'string') string = util.buffer.toBuffer(string);\n\n if (typeof string.byteLength === 'number') {\n return string.byteLength;\n } else if (typeof string.length === 'number') {\n return string.length;\n } else if (typeof string.size === 'number') {\n return string.size;\n } else if (typeof string.path === 'string') {\n return require('fs').lstatSync(string.path).size;\n } else {\n throw util.error(new Error('Cannot determine length of ' + string),\n { object: string });\n }\n },\n\n upperFirst: function upperFirst(string) {\n return string[0].toUpperCase() + string.substr(1);\n },\n\n lowerFirst: function lowerFirst(string) {\n return string[0].toLowerCase() + string.substr(1);\n }\n },\n\n ini: {\n parse: function string(ini) {\n var currentSection, map = {};\n util.arrayEach(ini.split(/\\r?\\n/), function(line) {\n line = line.split(/(^|\\s)[;#]/)[0]; // remove comments\n var section = line.match(/^\\s*\\[([^\\[\\]]+)\\]\\s*$/);\n if (section) {\n currentSection = section[1];\n if (currentSection === '__proto__' || currentSection.split(/\\s/)[1] === '__proto__') {\n throw util.error(\n new Error('Cannot load profile name \\'' + currentSection + '\\' from shared ini file.')\n );\n }\n } else if (currentSection) {\n var item = line.match(/^\\s*(.+?)\\s*=\\s*(.+?)\\s*$/);\n if (item) {\n map[currentSection] = map[currentSection] || {};\n map[currentSection][item[1]] = item[2];\n }\n }\n });\n\n return map;\n }\n },\n\n fn: {\n noop: function() {},\n callback: function (err) { if (err) throw err; },\n\n /**\n * Turn a synchronous function into as \"async\" function by making it call\n * a callback. The underlying function is called with all but the last argument,\n * which is treated as the callback. The callback is passed passed a first argument\n * of null on success to mimick standard node callbacks.\n */\n makeAsync: function makeAsync(fn, expectedArgs) {\n if (expectedArgs && expectedArgs <= fn.length) {\n return fn;\n }\n\n return function() {\n var args = Array.prototype.slice.call(arguments, 0);\n var callback = args.pop();\n var result = fn.apply(null, args);\n callback(result);\n };\n }\n },\n\n /**\n * Date and time utility functions.\n */\n date: {\n\n /**\n * @return [Date] the current JavaScript date object. Since all\n * AWS services rely on this date object, you can override\n * this function to provide a special time value to AWS service\n * requests.\n */\n getDate: function getDate() {\n if (!AWS) AWS = require('./core');\n if (AWS.config.systemClockOffset) { // use offset when non-zero\n return new Date(new Date().getTime() + AWS.config.systemClockOffset);\n } else {\n return new Date();\n }\n },\n\n /**\n * @return [String] the date in ISO-8601 format\n */\n iso8601: function iso8601(date) {\n if (date === undefined) { date = util.date.getDate(); }\n return date.toISOString().replace(/\\.\\d{3}Z$/, 'Z');\n },\n\n /**\n * @return [String] the date in RFC 822 format\n */\n rfc822: function rfc822(date) {\n if (date === undefined) { date = util.date.getDate(); }\n return date.toUTCString();\n },\n\n /**\n * @return [Integer] the UNIX timestamp value for the current time\n */\n unixTimestamp: function unixTimestamp(date) {\n if (date === undefined) { date = util.date.getDate(); }\n return date.getTime() / 1000;\n },\n\n /**\n * @param [String,number,Date] date\n * @return [Date]\n */\n from: function format(date) {\n if (typeof date === 'number') {\n return new Date(date * 1000); // unix timestamp\n } else {\n return new Date(date);\n }\n },\n\n /**\n * Given a Date or date-like value, this function formats the\n * date into a string of the requested value.\n * @param [String,number,Date] date\n * @param [String] formatter Valid formats are:\n # * 'iso8601'\n # * 'rfc822'\n # * 'unixTimestamp'\n * @return [String]\n */\n format: function format(date, formatter) {\n if (!formatter) formatter = 'iso8601';\n return util.date[formatter](util.date.from(date));\n },\n\n parseTimestamp: function parseTimestamp(value) {\n if (typeof value === 'number') { // unix timestamp (number)\n return new Date(value * 1000);\n } else if (value.match(/^\\d+$/)) { // unix timestamp\n return new Date(value * 1000);\n } else if (value.match(/^\\d{4}/)) { // iso8601\n return new Date(value);\n } else if (value.match(/^\\w{3},/)) { // rfc822\n return new Date(value);\n } else {\n throw util.error(\n new Error('unhandled timestamp format: ' + value),\n {code: 'TimestampParserError'});\n }\n }\n\n },\n\n crypto: {\n crc32Table: [\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419,\n 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4,\n 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07,\n 0x90BF1D91, 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,\n 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856,\n 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,\n 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4,\n 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,\n 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A,\n 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599,\n 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190,\n 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F,\n 0x9FBFE4A5, 0xE8B8D433, 0x7807C9A2, 0x0F00F934, 0x9609A88E,\n 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,\n 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED,\n 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3,\n 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,\n 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A,\n 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5,\n 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010,\n 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17,\n 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6,\n 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,\n 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, 0xF00F9344,\n 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,\n 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A,\n 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,\n 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1,\n 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C,\n 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF,\n 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE,\n 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31,\n 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C,\n 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,\n 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B,\n 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,\n 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1,\n 0x18B74777, 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,\n 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7,\n 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66,\n 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605,\n 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8,\n 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B,\n 0x2D02EF8D],\n\n crc32: function crc32(data) {\n var tbl = util.crypto.crc32Table;\n var crc = 0 ^ -1;\n\n if (typeof data === 'string') {\n data = util.buffer.toBuffer(data);\n }\n\n for (var i = 0; i < data.length; i++) {\n var code = data.readUInt8(i);\n crc = (crc >>> 8) ^ tbl[(crc ^ code) & 0xFF];\n }\n return (crc ^ -1) >>> 0;\n },\n\n hmac: function hmac(key, string, digest, fn) {\n if (!digest) digest = 'binary';\n if (digest === 'buffer') { digest = undefined; }\n if (!fn) fn = 'sha256';\n if (typeof string === 'string') string = util.buffer.toBuffer(string);\n return util.crypto.lib.createHmac(fn, key).update(string).digest(digest);\n },\n\n md5: function md5(data, digest, callback) {\n return util.crypto.hash('md5', data, digest, callback);\n },\n\n sha256: function sha256(data, digest, callback) {\n return util.crypto.hash('sha256', data, digest, callback);\n },\n\n hash: function(algorithm, data, digest, callback) {\n var hash = util.crypto.createHash(algorithm);\n if (!digest) { digest = 'binary'; }\n if (digest === 'buffer') { digest = undefined; }\n if (typeof data === 'string') data = util.buffer.toBuffer(data);\n var sliceFn = util.arraySliceFn(data);\n var isBuffer = util.Buffer.isBuffer(data);\n //Identifying objects with an ArrayBuffer as buffers\n if (util.isBrowser() && typeof ArrayBuffer !== 'undefined' && data && data.buffer instanceof ArrayBuffer) isBuffer = true;\n\n if (callback && typeof data === 'object' &&\n typeof data.on === 'function' && !isBuffer) {\n data.on('data', function(chunk) { hash.update(chunk); });\n data.on('error', function(err) { callback(err); });\n data.on('end', function() { callback(null, hash.digest(digest)); });\n } else if (callback && sliceFn && !isBuffer &&\n typeof FileReader !== 'undefined') {\n // this might be a File/Blob\n var index = 0, size = 1024 * 512;\n var reader = new FileReader();\n reader.onerror = function() {\n callback(new Error('Failed to read data.'));\n };\n reader.onload = function() {\n var buf = new util.Buffer(new Uint8Array(reader.result));\n hash.update(buf);\n index += buf.length;\n reader._continueReading();\n };\n reader._continueReading = function() {\n if (index >= data.size) {\n callback(null, hash.digest(digest));\n return;\n }\n\n var back = index + size;\n if (back > data.size) back = data.size;\n reader.readAsArrayBuffer(sliceFn.call(data, index, back));\n };\n\n reader._continueReading();\n } else {\n if (util.isBrowser() && typeof data === 'object' && !isBuffer) {\n data = new util.Buffer(new Uint8Array(data));\n }\n var out = hash.update(data).digest(digest);\n if (callback) callback(null, out);\n return out;\n }\n },\n\n toHex: function toHex(data) {\n var out = [];\n for (var i = 0; i < data.length; i++) {\n out.push(('0' + data.charCodeAt(i).toString(16)).substr(-2, 2));\n }\n return out.join('');\n },\n\n createHash: function createHash(algorithm) {\n return util.crypto.lib.createHash(algorithm);\n }\n\n },\n\n /** @!ignore */\n\n /* Abort constant */\n abort: {},\n\n each: function each(object, iterFunction) {\n for (var key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n var ret = iterFunction.call(this, key, object[key]);\n if (ret === util.abort) break;\n }\n }\n },\n\n arrayEach: function arrayEach(array, iterFunction) {\n for (var idx in array) {\n if (Object.prototype.hasOwnProperty.call(array, idx)) {\n var ret = iterFunction.call(this, array[idx], parseInt(idx, 10));\n if (ret === util.abort) break;\n }\n }\n },\n\n update: function update(obj1, obj2) {\n util.each(obj2, function iterator(key, item) {\n obj1[key] = item;\n });\n return obj1;\n },\n\n merge: function merge(obj1, obj2) {\n return util.update(util.copy(obj1), obj2);\n },\n\n copy: function copy(object) {\n if (object === null || object === undefined) return object;\n var dupe = {};\n // jshint forin:false\n for (var key in object) {\n dupe[key] = object[key];\n }\n return dupe;\n },\n\n isEmpty: function isEmpty(obj) {\n for (var prop in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n return false;\n }\n }\n return true;\n },\n\n arraySliceFn: function arraySliceFn(obj) {\n var fn = obj.slice || obj.webkitSlice || obj.mozSlice;\n return typeof fn === 'function' ? fn : null;\n },\n\n isType: function isType(obj, type) {\n // handle cross-\"frame\" objects\n if (typeof type === 'function') type = util.typeName(type);\n return Object.prototype.toString.call(obj) === '[object ' + type + ']';\n },\n\n typeName: function typeName(type) {\n if (Object.prototype.hasOwnProperty.call(type, 'name')) return type.name;\n var str = type.toString();\n var match = str.match(/^\\s*function (.+)\\(/);\n return match ? match[1] : str;\n },\n\n error: function error(err, options) {\n var originalError = null;\n if (typeof err.message === 'string' && err.message !== '') {\n if (typeof options === 'string' || (options && options.message)) {\n originalError = util.copy(err);\n originalError.message = err.message;\n }\n }\n err.message = err.message || null;\n\n if (typeof options === 'string') {\n err.message = options;\n } else if (typeof options === 'object' && options !== null) {\n util.update(err, options);\n if (options.message)\n err.message = options.message;\n if (options.code || options.name)\n err.code = options.code || options.name;\n if (options.stack)\n err.stack = options.stack;\n }\n\n if (typeof Object.defineProperty === 'function') {\n Object.defineProperty(err, 'name', {writable: true, enumerable: false});\n Object.defineProperty(err, 'message', {enumerable: true});\n }\n\n err.name = String(options && options.name || err.name || err.code || 'Error');\n err.time = new Date();\n\n if (originalError) err.originalError = originalError;\n\n return err;\n },\n\n /**\n * @api private\n */\n inherit: function inherit(klass, features) {\n var newObject = null;\n if (features === undefined) {\n features = klass;\n klass = Object;\n newObject = {};\n } else {\n var ctor = function ConstructorWrapper() {};\n ctor.prototype = klass.prototype;\n newObject = new ctor();\n }\n\n // constructor not supplied, create pass-through ctor\n if (features.constructor === Object) {\n features.constructor = function() {\n if (klass !== Object) {\n return klass.apply(this, arguments);\n }\n };\n }\n\n features.constructor.prototype = newObject;\n util.update(features.constructor.prototype, features);\n features.constructor.__super__ = klass;\n return features.constructor;\n },\n\n /**\n * @api private\n */\n mixin: function mixin() {\n var klass = arguments[0];\n for (var i = 1; i < arguments.length; i++) {\n // jshint forin:false\n for (var prop in arguments[i].prototype) {\n var fn = arguments[i].prototype[prop];\n if (prop !== 'constructor') {\n klass.prototype[prop] = fn;\n }\n }\n }\n return klass;\n },\n\n /**\n * @api private\n */\n hideProperties: function hideProperties(obj, props) {\n if (typeof Object.defineProperty !== 'function') return;\n\n util.arrayEach(props, function (key) {\n Object.defineProperty(obj, key, {\n enumerable: false, writable: true, configurable: true });\n });\n },\n\n /**\n * @api private\n */\n property: function property(obj, name, value, enumerable, isValue) {\n var opts = {\n configurable: true,\n enumerable: enumerable !== undefined ? enumerable : true\n };\n if (typeof value === 'function' && !isValue) {\n opts.get = value;\n }\n else {\n opts.value = value; opts.writable = true;\n }\n\n Object.defineProperty(obj, name, opts);\n },\n\n /**\n * @api private\n */\n memoizedProperty: function memoizedProperty(obj, name, get, enumerable) {\n var cachedValue = null;\n\n // build enumerable attribute for each value with lazy accessor.\n util.property(obj, name, function() {\n if (cachedValue === null) {\n cachedValue = get();\n }\n return cachedValue;\n }, enumerable);\n },\n\n /**\n * TODO Remove in major version revision\n * This backfill populates response data without the\n * top-level payload name.\n *\n * @api private\n */\n hoistPayloadMember: function hoistPayloadMember(resp) {\n var req = resp.request;\n var operationName = req.operation;\n var operation = req.service.api.operations[operationName];\n var output = operation.output;\n if (output.payload && !operation.hasEventOutput) {\n var payloadMember = output.members[output.payload];\n var responsePayload = resp.data[output.payload];\n if (payloadMember.type === 'structure') {\n util.each(responsePayload, function(key, value) {\n util.property(resp.data, key, value, false);\n });\n }\n }\n },\n\n /**\n * Compute SHA-256 checksums of streams\n *\n * @api private\n */\n computeSha256: function computeSha256(body, done) {\n if (util.isNode()) {\n var Stream = util.stream.Stream;\n var fs = require('fs');\n if (typeof Stream === 'function' && body instanceof Stream) {\n if (typeof body.path === 'string') { // assume file object\n var settings = {};\n if (typeof body.start === 'number') {\n settings.start = body.start;\n }\n if (typeof body.end === 'number') {\n settings.end = body.end;\n }\n body = fs.createReadStream(body.path, settings);\n } else { // TODO support other stream types\n return done(new Error('Non-file stream objects are ' +\n 'not supported with SigV4'));\n }\n }\n }\n\n util.crypto.sha256(body, 'hex', function(err, sha) {\n if (err) done(err);\n else done(null, sha);\n });\n },\n\n /**\n * @api private\n */\n isClockSkewed: function isClockSkewed(serverTime) {\n if (serverTime) {\n util.property(AWS.config, 'isClockSkewed',\n Math.abs(new Date().getTime() - serverTime) >= 300000, false);\n return AWS.config.isClockSkewed;\n }\n },\n\n applyClockOffset: function applyClockOffset(serverTime) {\n if (serverTime)\n AWS.config.systemClockOffset = serverTime - new Date().getTime();\n },\n\n /**\n * @api private\n */\n extractRequestId: function extractRequestId(resp) {\n var requestId = resp.httpResponse.headers['x-amz-request-id'] ||\n resp.httpResponse.headers['x-amzn-requestid'];\n\n if (!requestId && resp.data && resp.data.ResponseMetadata) {\n requestId = resp.data.ResponseMetadata.RequestId;\n }\n\n if (requestId) {\n resp.requestId = requestId;\n }\n\n if (resp.error) {\n resp.error.requestId = requestId;\n }\n },\n\n /**\n * @api private\n */\n addPromises: function addPromises(constructors, PromiseDependency) {\n var deletePromises = false;\n if (PromiseDependency === undefined && AWS && AWS.config) {\n PromiseDependency = AWS.config.getPromisesDependency();\n }\n if (PromiseDependency === undefined && typeof Promise !== 'undefined') {\n PromiseDependency = Promise;\n }\n if (typeof PromiseDependency !== 'function') deletePromises = true;\n if (!Array.isArray(constructors)) constructors = [constructors];\n\n for (var ind = 0; ind < constructors.length; ind++) {\n var constructor = constructors[ind];\n if (deletePromises) {\n if (constructor.deletePromisesFromClass) {\n constructor.deletePromisesFromClass();\n }\n } else if (constructor.addPromisesToClass) {\n constructor.addPromisesToClass(PromiseDependency);\n }\n }\n },\n\n /**\n * @api private\n * Return a function that will return a promise whose fate is decided by the\n * callback behavior of the given method with `methodName`. The method to be\n * promisified should conform to node.js convention of accepting a callback as\n * last argument and calling that callback with error as the first argument\n * and success value on the second argument.\n */\n promisifyMethod: function promisifyMethod(methodName, PromiseDependency) {\n return function promise() {\n var self = this;\n var args = Array.prototype.slice.call(arguments);\n return new PromiseDependency(function(resolve, reject) {\n args.push(function(err, data) {\n if (err) {\n reject(err);\n } else {\n resolve(data);\n }\n });\n self[methodName].apply(self, args);\n });\n };\n },\n\n /**\n * @api private\n */\n isDualstackAvailable: function isDualstackAvailable(service) {\n if (!service) return false;\n var metadata = require('../apis/metadata.json');\n if (typeof service !== 'string') service = service.serviceIdentifier;\n if (typeof service !== 'string' || !metadata.hasOwnProperty(service)) return false;\n return !!metadata[service].dualstackAvailable;\n },\n\n /**\n * @api private\n */\n calculateRetryDelay: function calculateRetryDelay(retryCount, retryDelayOptions, err) {\n if (!retryDelayOptions) retryDelayOptions = {};\n var customBackoff = retryDelayOptions.customBackoff || null;\n if (typeof customBackoff === 'function') {\n return customBackoff(retryCount, err);\n }\n var base = typeof retryDelayOptions.base === 'number' ? retryDelayOptions.base : 100;\n var delay = Math.random() * (Math.pow(2, retryCount) * base);\n return delay;\n },\n\n /**\n * @api private\n */\n handleRequestWithRetries: function handleRequestWithRetries(httpRequest, options, cb) {\n if (!options) options = {};\n var http = AWS.HttpClient.getInstance();\n var httpOptions = options.httpOptions || {};\n var retryCount = 0;\n\n var errCallback = function(err) {\n var maxRetries = options.maxRetries || 0;\n if (err && err.code === 'TimeoutError') err.retryable = true;\n\n // Call `calculateRetryDelay()` only when relevant, see #3401\n if (err && err.retryable && retryCount < maxRetries) {\n var delay = util.calculateRetryDelay(retryCount, options.retryDelayOptions, err);\n if (delay >= 0) {\n retryCount++;\n setTimeout(sendRequest, delay + (err.retryAfter || 0));\n return;\n }\n }\n cb(err);\n };\n\n var sendRequest = function() {\n var data = '';\n http.handleRequest(httpRequest, httpOptions, function(httpResponse) {\n httpResponse.on('data', function(chunk) { data += chunk.toString(); });\n httpResponse.on('end', function() {\n var statusCode = httpResponse.statusCode;\n if (statusCode < 300) {\n cb(null, data);\n } else {\n var retryAfter = parseInt(httpResponse.headers['retry-after'], 10) * 1000 || 0;\n var err = util.error(new Error(),\n {\n statusCode: statusCode,\n retryable: statusCode >= 500 || statusCode === 429\n }\n );\n if (retryAfter && err.retryable) err.retryAfter = retryAfter;\n errCallback(err);\n }\n });\n }, errCallback);\n };\n\n AWS.util.defer(sendRequest);\n },\n\n /**\n * @api private\n */\n uuid: {\n v4: function uuidV4() {\n return require('uuid').v4();\n }\n },\n\n /**\n * @api private\n */\n convertPayloadToString: function convertPayloadToString(resp) {\n var req = resp.request;\n var operation = req.operation;\n var rules = req.service.api.operations[operation].output || {};\n if (rules.payload && resp.data[rules.payload]) {\n resp.data[rules.payload] = resp.data[rules.payload].toString();\n }\n },\n\n /**\n * @api private\n */\n defer: function defer(callback) {\n if (typeof process === 'object' && typeof process.nextTick === 'function') {\n process.nextTick(callback);\n } else if (typeof setImmediate === 'function') {\n setImmediate(callback);\n } else {\n setTimeout(callback, 0);\n }\n },\n\n /**\n * @api private\n */\n getRequestPayloadShape: function getRequestPayloadShape(req) {\n var operations = req.service.api.operations;\n if (!operations) return undefined;\n var operation = (operations || {})[req.operation];\n if (!operation || !operation.input || !operation.input.payload) return undefined;\n return operation.input.members[operation.input.payload];\n },\n\n getProfilesFromSharedConfig: function getProfilesFromSharedConfig(iniLoader, filename) {\n var profiles = {};\n var profilesFromConfig = {};\n if (process.env[util.configOptInEnv]) {\n var profilesFromConfig = iniLoader.loadFrom({\n isConfig: true,\n filename: process.env[util.sharedConfigFileEnv]\n });\n }\n var profilesFromCreds= {};\n try {\n var profilesFromCreds = iniLoader.loadFrom({\n filename: filename ||\n (process.env[util.configOptInEnv] && process.env[util.sharedCredentialsFileEnv])\n });\n } catch (error) {\n // if using config, assume it is fully descriptive without a credentials file:\n if (!process.env[util.configOptInEnv]) throw error;\n }\n for (var i = 0, profileNames = Object.keys(profilesFromConfig); i < profileNames.length; i++) {\n profiles[profileNames[i]] = objectAssign(profiles[profileNames[i]] || {}, profilesFromConfig[profileNames[i]]);\n }\n for (var i = 0, profileNames = Object.keys(profilesFromCreds); i < profileNames.length; i++) {\n profiles[profileNames[i]] = objectAssign(profiles[profileNames[i]] || {}, profilesFromCreds[profileNames[i]]);\n }\n return profiles;\n\n /**\n * Roughly the semantics of `Object.assign(target, source)`\n */\n function objectAssign(target, source) {\n for (var i = 0, keys = Object.keys(source); i < keys.length; i++) {\n target[keys[i]] = source[keys[i]];\n }\n return target;\n }\n },\n\n /**\n * @api private\n */\n ARN: {\n validate: function validateARN(str) {\n return str && str.indexOf('arn:') === 0 && str.split(':').length >= 6;\n },\n parse: function parseARN(arn) {\n var matched = arn.split(':');\n return {\n partition: matched[1],\n service: matched[2],\n region: matched[3],\n accountId: matched[4],\n resource: matched.slice(5).join(':')\n };\n },\n build: function buildARN(arnObject) {\n if (\n arnObject.service === undefined ||\n arnObject.region === undefined ||\n arnObject.accountId === undefined ||\n arnObject.resource === undefined\n ) throw util.error(new Error('Input ARN object is invalid'));\n return 'arn:'+ (arnObject.partition || 'aws') + ':' + arnObject.service +\n ':' + arnObject.region + ':' + arnObject.accountId + ':' + arnObject.resource;\n }\n },\n\n /**\n * @api private\n */\n defaultProfile: 'default',\n\n /**\n * @api private\n */\n configOptInEnv: 'AWS_SDK_LOAD_CONFIG',\n\n /**\n * @api private\n */\n sharedCredentialsFileEnv: 'AWS_SHARED_CREDENTIALS_FILE',\n\n /**\n * @api private\n */\n sharedConfigFileEnv: 'AWS_CONFIG_FILE',\n\n /**\n * @api private\n */\n imdsDisabledEnv: 'AWS_EC2_METADATA_DISABLED'\n};\n\n/**\n * @api private\n */\nmodule.exports = util;\n","var util = require('../util');\nvar XmlNode = require('./xml-node').XmlNode;\nvar XmlText = require('./xml-text').XmlText;\n\nfunction XmlBuilder() { }\n\nXmlBuilder.prototype.toXML = function(params, shape, rootElement, noEmpty) {\n var xml = new XmlNode(rootElement);\n applyNamespaces(xml, shape, true);\n serialize(xml, params, shape);\n return xml.children.length > 0 || noEmpty ? xml.toString() : '';\n};\n\nfunction serialize(xml, value, shape) {\n switch (shape.type) {\n case 'structure': return serializeStructure(xml, value, shape);\n case 'map': return serializeMap(xml, value, shape);\n case 'list': return serializeList(xml, value, shape);\n default: return serializeScalar(xml, value, shape);\n }\n}\n\nfunction serializeStructure(xml, params, shape) {\n util.arrayEach(shape.memberNames, function(memberName) {\n var memberShape = shape.members[memberName];\n if (memberShape.location !== 'body') return;\n\n var value = params[memberName];\n var name = memberShape.name;\n if (value !== undefined && value !== null) {\n if (memberShape.isXmlAttribute) {\n xml.addAttribute(name, value);\n } else if (memberShape.flattened) {\n serialize(xml, value, memberShape);\n } else {\n var element = new XmlNode(name);\n xml.addChildNode(element);\n applyNamespaces(element, memberShape);\n serialize(element, value, memberShape);\n }\n }\n });\n}\n\nfunction serializeMap(xml, map, shape) {\n var xmlKey = shape.key.name || 'key';\n var xmlValue = shape.value.name || 'value';\n\n util.each(map, function(key, value) {\n var entry = new XmlNode(shape.flattened ? shape.name : 'entry');\n xml.addChildNode(entry);\n\n var entryKey = new XmlNode(xmlKey);\n var entryValue = new XmlNode(xmlValue);\n entry.addChildNode(entryKey);\n entry.addChildNode(entryValue);\n\n serialize(entryKey, key, shape.key);\n serialize(entryValue, value, shape.value);\n });\n}\n\nfunction serializeList(xml, list, shape) {\n if (shape.flattened) {\n util.arrayEach(list, function(value) {\n var name = shape.member.name || shape.name;\n var element = new XmlNode(name);\n xml.addChildNode(element);\n serialize(element, value, shape.member);\n });\n } else {\n util.arrayEach(list, function(value) {\n var name = shape.member.name || 'member';\n var element = new XmlNode(name);\n xml.addChildNode(element);\n serialize(element, value, shape.member);\n });\n }\n}\n\nfunction serializeScalar(xml, value, shape) {\n xml.addChildNode(\n new XmlText(shape.toWireFormat(value))\n );\n}\n\nfunction applyNamespaces(xml, shape, isRoot) {\n var uri, prefix = 'xmlns';\n if (shape.xmlNamespaceUri) {\n uri = shape.xmlNamespaceUri;\n if (shape.xmlNamespacePrefix) prefix += ':' + shape.xmlNamespacePrefix;\n } else if (isRoot && shape.api.xmlNamespaceUri) {\n uri = shape.api.xmlNamespaceUri;\n }\n\n if (uri) xml.addAttribute(prefix, uri);\n}\n\n/**\n * @api private\n */\nmodule.exports = XmlBuilder;\n","/**\n * Escapes characters that can not be in an XML attribute.\n */\nfunction escapeAttribute(value) {\n return value.replace(/&/g, '&').replace(/'/g, ''').replace(/</g, '<').replace(/>/g, '>').replace(/\"/g, '"');\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n escapeAttribute: escapeAttribute\n};\n","/**\n * Escapes characters that can not be in an XML element.\n */\nfunction escapeElement(value) {\n return value.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n escapeElement: escapeElement\n};\n","var AWS = require('../core');\nvar util = AWS.util;\nvar Shape = AWS.Model.Shape;\n\nvar xml2js = require('xml2js');\n\n/**\n * @api private\n */\nvar options = { // options passed to xml2js parser\n explicitCharkey: false, // undocumented\n trim: false, // trim the leading/trailing whitespace from text nodes\n normalize: false, // trim interior whitespace inside text nodes\n explicitRoot: false, // return the root node in the resulting object?\n emptyTag: null, // the default value for empty nodes\n explicitArray: true, // always put child nodes in an array\n ignoreAttrs: false, // ignore attributes, only create text nodes\n mergeAttrs: false, // merge attributes and child elements\n validator: null // a callable validator\n};\n\nfunction NodeXmlParser() { }\n\nNodeXmlParser.prototype.parse = function(xml, shape) {\n shape = shape || {};\n\n var result = null;\n var error = null;\n\n var parser = new xml2js.Parser(options);\n parser.parseString(xml, function (e, r) {\n error = e;\n result = r;\n });\n\n if (result) {\n var data = parseXml(result, shape);\n if (result.ResponseMetadata) {\n data.ResponseMetadata = parseXml(result.ResponseMetadata[0], {});\n }\n return data;\n } else if (error) {\n throw util.error(error, {code: 'XMLParserError', retryable: true});\n } else { // empty xml document\n return parseXml({}, shape);\n }\n};\n\nfunction parseXml(xml, shape) {\n switch (shape.type) {\n case 'structure': return parseStructure(xml, shape);\n case 'map': return parseMap(xml, shape);\n case 'list': return parseList(xml, shape);\n case undefined: case null: return parseUnknown(xml);\n default: return parseScalar(xml, shape);\n }\n}\n\nfunction parseStructure(xml, shape) {\n var data = {};\n if (xml === null) return data;\n\n util.each(shape.members, function(memberName, memberShape) {\n var xmlName = memberShape.name;\n if (Object.prototype.hasOwnProperty.call(xml, xmlName) && Array.isArray(xml[xmlName])) {\n var xmlChild = xml[xmlName];\n if (!memberShape.flattened) xmlChild = xmlChild[0];\n\n data[memberName] = parseXml(xmlChild, memberShape);\n } else if (memberShape.isXmlAttribute &&\n xml.$ && Object.prototype.hasOwnProperty.call(xml.$, xmlName)) {\n data[memberName] = parseScalar(xml.$[xmlName], memberShape);\n } else if (memberShape.type === 'list' && !shape.api.xmlNoDefaultLists) {\n data[memberName] = memberShape.defaultValue;\n }\n });\n\n return data;\n}\n\nfunction parseMap(xml, shape) {\n var data = {};\n if (xml === null) return data;\n\n var xmlKey = shape.key.name || 'key';\n var xmlValue = shape.value.name || 'value';\n var iterable = shape.flattened ? xml : xml.entry;\n\n if (Array.isArray(iterable)) {\n util.arrayEach(iterable, function(child) {\n data[child[xmlKey][0]] = parseXml(child[xmlValue][0], shape.value);\n });\n }\n\n return data;\n}\n\nfunction parseList(xml, shape) {\n var data = [];\n var name = shape.member.name || 'member';\n if (shape.flattened) {\n util.arrayEach(xml, function(xmlChild) {\n data.push(parseXml(xmlChild, shape.member));\n });\n } else if (xml && Array.isArray(xml[name])) {\n util.arrayEach(xml[name], function(child) {\n data.push(parseXml(child, shape.member));\n });\n }\n\n return data;\n}\n\nfunction parseScalar(text, shape) {\n if (text && text.$ && text.$.encoding === 'base64') {\n shape = new Shape.create({type: text.$.encoding});\n }\n if (text && text._) text = text._;\n\n if (typeof shape.toType === 'function') {\n return shape.toType(text);\n } else {\n return text;\n }\n}\n\nfunction parseUnknown(xml) {\n if (xml === undefined || xml === null) return '';\n if (typeof xml === 'string') return xml;\n\n // parse a list\n if (Array.isArray(xml)) {\n var arr = [];\n for (i = 0; i < xml.length; i++) {\n arr.push(parseXml(xml[i], {}));\n }\n return arr;\n }\n\n // empty object\n var keys = Object.keys(xml), i;\n if (keys.length === 0 || (keys.length === 1 && keys[0] === '$')) {\n return {};\n }\n\n // object, parse as structure\n var data = {};\n for (i = 0; i < keys.length; i++) {\n var key = keys[i], value = xml[key];\n if (key === '$') continue;\n if (value.length > 1) { // this member is a list\n data[key] = parseList(value, {member: {}});\n } else { // this member is a single item\n data[key] = parseXml(value[0], {});\n }\n }\n return data;\n}\n\n/**\n * @api private\n */\nmodule.exports = NodeXmlParser;\n","var escapeAttribute = require('./escape-attribute').escapeAttribute;\n\n/**\n * Represents an XML node.\n * @api private\n */\nfunction XmlNode(name, children) {\n if (children === void 0) { children = []; }\n this.name = name;\n this.children = children;\n this.attributes = {};\n}\nXmlNode.prototype.addAttribute = function (name, value) {\n this.attributes[name] = value;\n return this;\n};\nXmlNode.prototype.addChildNode = function (child) {\n this.children.push(child);\n return this;\n};\nXmlNode.prototype.removeAttribute = function (name) {\n delete this.attributes[name];\n return this;\n};\nXmlNode.prototype.toString = function () {\n var hasChildren = Boolean(this.children.length);\n var xmlText = '<' + this.name;\n // add attributes\n var attributes = this.attributes;\n for (var i = 0, attributeNames = Object.keys(attributes); i < attributeNames.length; i++) {\n var attributeName = attributeNames[i];\n var attribute = attributes[attributeName];\n if (typeof attribute !== 'undefined' && attribute !== null) {\n xmlText += ' ' + attributeName + '=\\\"' + escapeAttribute('' + attribute) + '\\\"';\n }\n }\n return xmlText += !hasChildren ? '/>' : '>' + this.children.map(function (c) { return c.toString(); }).join('') + '</' + this.name + '>';\n};\n\n/**\n * @api private\n */\nmodule.exports = {\n XmlNode: XmlNode\n};\n","var escapeElement = require('./escape-element').escapeElement;\n\n/**\n * Represents an XML text value.\n * @api private\n */\nfunction XmlText(value) {\n this.value = value;\n}\n\nXmlText.prototype.toString = function () {\n return escapeElement('' + this.value);\n};\n\n/**\n * @api private\n */\nmodule.exports = {\n XmlText: XmlText\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar LRU_1 = require(\"./utils/LRU\");\nvar CACHE_SIZE = 1000;\n/**\n * Inspired node-lru-cache[https://github.com/isaacs/node-lru-cache]\n */\nvar EndpointCache = /** @class */ (function () {\n function EndpointCache(maxSize) {\n if (maxSize === void 0) { maxSize = CACHE_SIZE; }\n this.maxSize = maxSize;\n this.cache = new LRU_1.LRUCache(maxSize);\n }\n ;\n Object.defineProperty(EndpointCache.prototype, \"size\", {\n get: function () {\n return this.cache.length;\n },\n enumerable: true,\n configurable: true\n });\n EndpointCache.prototype.put = function (key, value) {\n var keyString = typeof key !== 'string' ? EndpointCache.getKeyString(key) : key;\n var endpointRecord = this.populateValue(value);\n this.cache.put(keyString, endpointRecord);\n };\n EndpointCache.prototype.get = function (key) {\n var keyString = typeof key !== 'string' ? EndpointCache.getKeyString(key) : key;\n var now = Date.now();\n var records = this.cache.get(keyString);\n if (records) {\n for (var i = 0; i < records.length; i++) {\n var record = records[i];\n if (record.Expire < now) {\n this.cache.remove(keyString);\n return undefined;\n }\n }\n }\n return records;\n };\n EndpointCache.getKeyString = function (key) {\n var identifiers = [];\n var identifierNames = Object.keys(key).sort();\n for (var i = 0; i < identifierNames.length; i++) {\n var identifierName = identifierNames[i];\n if (key[identifierName] === undefined)\n continue;\n identifiers.push(key[identifierName]);\n }\n return identifiers.join(' ');\n };\n EndpointCache.prototype.populateValue = function (endpoints) {\n var now = Date.now();\n return endpoints.map(function (endpoint) { return ({\n Address: endpoint.Address || '',\n Expire: now + (endpoint.CachePeriodInMinutes || 1) * 60 * 1000\n }); });\n };\n EndpointCache.prototype.empty = function () {\n this.cache.empty();\n };\n EndpointCache.prototype.remove = function (key) {\n var keyString = typeof key !== 'string' ? EndpointCache.getKeyString(key) : key;\n this.cache.remove(keyString);\n };\n return EndpointCache;\n}());\nexports.EndpointCache = EndpointCache;","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar LinkedListNode = /** @class */ (function () {\n function LinkedListNode(key, value) {\n this.key = key;\n this.value = value;\n }\n return LinkedListNode;\n}());\nvar LRUCache = /** @class */ (function () {\n function LRUCache(size) {\n this.nodeMap = {};\n this.size = 0;\n if (typeof size !== 'number' || size < 1) {\n throw new Error('Cache size can only be positive number');\n }\n this.sizeLimit = size;\n }\n Object.defineProperty(LRUCache.prototype, \"length\", {\n get: function () {\n return this.size;\n },\n enumerable: true,\n configurable: true\n });\n LRUCache.prototype.prependToList = function (node) {\n if (!this.headerNode) {\n this.tailNode = node;\n }\n else {\n this.headerNode.prev = node;\n node.next = this.headerNode;\n }\n this.headerNode = node;\n this.size++;\n };\n LRUCache.prototype.removeFromTail = function () {\n if (!this.tailNode) {\n return undefined;\n }\n var node = this.tailNode;\n var prevNode = node.prev;\n if (prevNode) {\n prevNode.next = undefined;\n }\n node.prev = undefined;\n this.tailNode = prevNode;\n this.size--;\n return node;\n };\n LRUCache.prototype.detachFromList = function (node) {\n if (this.headerNode === node) {\n this.headerNode = node.next;\n }\n if (this.tailNode === node) {\n this.tailNode = node.prev;\n }\n if (node.prev) {\n node.prev.next = node.next;\n }\n if (node.next) {\n node.next.prev = node.prev;\n }\n node.next = undefined;\n node.prev = undefined;\n this.size--;\n };\n LRUCache.prototype.get = function (key) {\n if (this.nodeMap[key]) {\n var node = this.nodeMap[key];\n this.detachFromList(node);\n this.prependToList(node);\n return node.value;\n }\n };\n LRUCache.prototype.remove = function (key) {\n if (this.nodeMap[key]) {\n var node = this.nodeMap[key];\n this.detachFromList(node);\n delete this.nodeMap[key];\n }\n };\n LRUCache.prototype.put = function (key, value) {\n if (this.nodeMap[key]) {\n this.remove(key);\n }\n else if (this.size === this.sizeLimit) {\n var tailNode = this.removeFromTail();\n var key_1 = tailNode.key;\n delete this.nodeMap[key_1];\n }\n var newNode = new LinkedListNode(key, value);\n this.nodeMap[key] = newNode;\n this.prependToList(newNode);\n };\n LRUCache.prototype.empty = function () {\n var keys = Object.keys(this.nodeMap);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var node = this.nodeMap[key];\n this.detachFromList(node);\n delete this.nodeMap[key];\n }\n };\n return LRUCache;\n}());\nexports.LRUCache = LRUCache;","// Client and Server\nimport * as Util from '../util/all';\nexport { Util };\nimport * as Context from '../context/all';\nexport { Context };\nimport * as FSM from '../fsm/all';\nexport { FSM };\nimport * as Poly from '../poly/all';\nexport { Poly };\nimport * as LogAbstract from '../logabstract/all';\nexport { LogAbstract };\nimport * as LogClient from '../logclient/all';\nexport { LogClient };\nimport * as OT from '../ot-js/all';\nexport { OT };\nimport * as OTE from '../ot-editutil/all';\nexport { OTE };\nimport { FilterExpr } from '../filterexpr/all';\nexport { FilterExpr }\n\n// Server Only\nimport * as DB from '../dbabstract/all';\nexport { DB };\nimport * as Storage from '../storage/all';\nexport { Storage };\nimport * as JS from '../jsonstream/all';\nexport { JS };\nimport * as FsmFile from '../fsmfile/all';\nexport { FsmFile };\n\nimport * as LogServer from '../logserver/all';\nexport { LogServer };\n\nimport * as S3 from '../storages3/all';\nexport { S3 };\nimport * as DBDynamo from '../dbdynamo/all';\nexport { DBDynamo };\nimport * as Lambda from '../lambda/all';\nexport { Lambda };\nimport * as Memsqs from '../memsqs/all';\nexport { Memsqs };\n","export * from './context';\n","import * as Util from '../util/all';\n\nexport type ContextValues = { [key: string]: any };\nexport interface IContext\n{\n setDefaults: (o: ContextValues) => void\n setValues: (o: ContextValues) => void\n xvalue: (prop: string) => any\n xset: (prop: string) => boolean\n xflag: (prop: string) => boolean\n xnumber: (prop: string) => number\n xstring: (prop: string) => string\n}\n\nclass Context implements IContext\n{\n private values: ContextValues;\n private defaults: ContextValues;\n\n constructor()\n {\n this.values = {};\n this.defaults = {};\n }\n\n setValues(o: ContextValues): void\n {\n this.values = Util.shallowAssignImmutable(this.values, o);\n }\n\n setDefaults(o: ContextValues): void\n {\n this.defaults = Util.shallowAssignImmutable(this.defaults, o);\n }\n\n xvalue(prop: string): any\n {\n let v: any = this.values[prop];\n if (v === undefined && process && process.env)\n v = process.env[prop.toUpperCase()];\n if (v === undefined)\n v = this.defaults[prop];\n return v;\n }\n\n xset(prop: string): boolean\n {\n let v: any = this.values[prop];\n if (v === undefined && process && process.env)\n v = process.env[prop.toUpperCase()];\n return v !== undefined;\n }\n\n xflag(prop: string): boolean\n {\n let v: any = this.xvalue(prop);\n if (v === undefined || v === null)\n return false;\n return Number(v) != 0;\n }\n\n xnumber(prop: string): number\n {\n let v: any = this.xvalue(prop);\n if (v === undefined || v === null)\n return 0;\n return Number(v);\n }\n\n xstring(prop: string): string\n {\n let v: any = this.xvalue(prop);\n if (v === undefined || v === null)\n return null;\n return String(v);\n }\n}\n\nexport function create(): IContext\n{\n return new Context();\n}\n","export * from './db';\n","// Shared libraries\nimport * as LogAbstract from '../logabstract/all';\nimport * as Context from '../context/all';\nimport * as Storage from '../storage/all';\nimport * as FSM from '../fsm/all';\n\n// Custom DB state codes\nexport const FSM_CREATING: number = FSM.FSM_CUSTOM1;\nexport const FSM_NEEDRELEASE: number = FSM.FSM_CUSTOM2;\nexport const FSM_RELEASING: number = FSM.FSM_CUSTOM3;\nexport const FSM_READING: number = FSM.FSM_CUSTOM4;\n\ntype CollectionIndex = { [key: string]: DBCollection };\n\nexport interface DBEnvironment\n{\n context: Context.IContext;\n log: LogAbstract.ILog;\n fsmManager: FSM.FsmManager;\n storageManager: Storage.StorageManager;\n}\n\nexport function fromCompactSchema(c: any): any\n{\n let s: any = [];\n\n if (c && !Array.isArray(c))\n {\n for (let p in c) if (c.hasOwnProperty(p))\n s.push({ AttributeName: p, AttributeType: c[p] });\n }\n else\n s = c;\n return s;\n}\n\nexport function fromCompactKey(c: any): any\n{\n let s: any = [];\n\n if (c && !Array.isArray(c))\n {\n for (let p in c) if (c.hasOwnProperty(p))\n s.push({ AttributeName: p, KeyType: c[p] });\n }\n else\n s = c;\n return s;\n}\n\nfunction findHash(c: any): string\n{\n let h: string = null;\n\n Object.keys(c).forEach((k: string) => { if (c[k] === 'HASH') h = k } );\n while (h && h.length < 3)\n h = `_${h}`;\n return h;\n}\n\nexport function fromCompactIndex(c: any): any\n{\n return { KeySchema: fromCompactKey(c), IndexName: findHash(c) };\n}\n\nexport function toCompactSchema(s: any): any\n{\n let c: any = {};\n\n if (s && Array.isArray(s))\n {\n for (let i: number = 0; i < s.length; i++)\n c[s[i].AttributeName] = s[i].AttributeType;\n }\n else\n c = s;\n\n return c;\n}\n\nexport class DBClient extends FSM.Fsm\n{\n constructor(env: DBEnvironment)\n {\n super(env);\n }\n\n get env(): DBEnvironment { return this._env as DBEnvironment; }\n\n createCollection(name: string, options: any): DBCollection { return new DBCollection(this.env, this, name, options); }\n createStream(col: DBCollection): FSM.FsmArray { return null; }\n closeStream(col: DBCollection): void {}\n createUpdate(col: DBCollection, query: any, values: any): DBUpdate { return new DBUpdate(this.env, col, query, values); }\n createUnset(col: DBCollection, query: any, values: any): DBUnset { return new DBUnset(this.env, col, query, values); }\n createDelete(col: DBCollection, query: any): DBDelete { return new DBDelete(this.env, col, query); }\n createFind(col: DBCollection, filter: any): DBFind { return new DBFind(this.env, col, filter); }\n createQuery(col: DBCollection, filter: any): DBQuery { return new DBQuery(this.env, col, filter); }\n createIndex(col: DBCollection, uid: string): DBIndex { return new DBIndex(this.env, col, uid); }\n createClose(): DBClose { return new DBClose(this.env, this); }\n\n close(): void\n {\n if (this.state == FSM.FSM_DONE)\n this.setState(FSM_NEEDRELEASE);\n }\n}\n\nexport class DBCollection extends FSM.Fsm\n{\n name: string;\n options: any;\n col: any;\n client: DBClient;\n\n constructor(env: DBEnvironment, client: DBClient, name: string, options: any)\n {\n super(env);\n this.waitOn(client);\n this.client = client;\n this.name = name;\n this.options = options;\n this.col = null;\n }\n}\n\nexport class DBUpdate extends FSM.Fsm\n{\n col: DBCollection;\n query: any;\n values: any;\n result: any;\n\n constructor(env: DBEnvironment, col: DBCollection, query: any, values: any)\n {\n super(env);\n this.waitOn(col);\n this.col = col;\n this.query = query;\n this.values = values;\n this.result = undefined;\n }\n}\n\nexport class DBUnset extends FSM.Fsm\n{\n col: DBCollection;\n query: any;\n values: any;\n result: any;\n\n constructor(env: DBEnvironment, col: DBCollection, query: any, values: any)\n {\n super(env);\n this.waitOn(col);\n this.col = col;\n this.query = query;\n this.values = values;\n this.result = undefined;\n }\n}\n\nexport class DBDelete extends FSM.Fsm\n{\n col: DBCollection;\n query: any;\n result: any;\n\n constructor(env: DBEnvironment, col: DBCollection, query: any)\n {\n super(env);\n this.waitOn(col);\n this.col = col;\n this.query = query;\n this.result = null;\n }\n}\n\nexport class DBFind extends FSM.Fsm\n{\n col: DBCollection;\n filter: any;\n result: any;\n\n constructor(env: DBEnvironment, col: DBCollection, filter: any)\n {\n super(env);\n this.waitOn(col);\n this.col = col;\n this.filter = filter;\n this.result = null;\n }\n}\n\nexport class DBQuery extends FSM.Fsm\n{\n col: DBCollection;\n filter: any;\n fsmResult: FSM.FsmArray;\n\n constructor(env: DBEnvironment, col: DBCollection, filter: any)\n {\n super(env);\n this.waitOn(col);\n this.col = col;\n this.filter = filter;\n this.fsmResult = new FSM.FsmArray(env);;\n }\n\n get result(): any[] { return this.fsmResult.a }\n}\n\nexport class DBIndex extends FSM.Fsm\n{\n col: DBCollection;\n uid: string;\n\n constructor(env: DBEnvironment, col: DBCollection, uid: string)\n {\n super(env);\n this.waitOn(col);\n this.col = col;\n this.uid = uid;\n }\n}\n\nexport class DBClose extends FSM.Fsm\n{\n client: DBClient;\n\n constructor(env: DBEnvironment, client: DBClient)\n {\n super(env);\n this.client = client;\n }\n\n tick(): void\n {\n if (this.ready && this.isDependentError)\n this.setState(FSM.FSM_ERROR);\n else if (this.ready && this.state == FSM.FSM_STARTING)\n {\n this.client.close();\n this.setState(FSM.FSM_DONE);\n }\n }\n}\n","export * from './dbdynamo';\n","// Node\nimport * as fs from 'fs';\nimport * as stream from 'stream';\nimport * as zlib from 'zlib';\n\n// Public dynamodb API\nimport * as DynamoDB from 'aws-sdk/clients/dynamodb';\nimport * as DynamoDBStreams from 'aws-sdk/clients/dynamodbstreams';\n\n// Shared libraries\nimport * as Util from '../util/all';\nimport * as Context from '../context/all';\nimport * as LogAbstract from '../logabstract/all';\nimport * as FSM from '../fsm/all';\nimport * as DB from '../dbabstract/all';\nimport * as Storage from '../storage/all';\n\nexport interface Environment\n{\n context: Context.IContext;\n log: LogAbstract.ILog;\n fsmManager: FSM.FsmManager;\n storageManager: Storage.StorageManager;\n}\n\nexport interface EnvironmentEx\n{\n context: Context.IContext;\n log: LogAbstract.ILog;\n fsmManager: FSM.FsmManager;\n storageManager: Storage.StorageManager;\n dbx: DynamoClient;\n}\n\nconst DBDynamoContextDefaults: Context.ContextValues =\n{\n dynamo_error_frequency: 0,\n}\n\nclass Deadline\n{\n elapsed: Util.Elapsed;\n msDeadline: number;\n\n constructor(msDeadline: number)\n {\n this.elapsed = new Util.Elapsed();\n this.msDeadline = msDeadline;\n }\n\n start(): void\n {\n this.elapsed.start();\n }\n\n get msRemaining(): number\n {\n this.elapsed.end();\n let msLeft = this.msDeadline - this.elapsed.ms();\n if (msLeft < 0) msLeft = 0;\n return msLeft;\n }\n\n get passed(): boolean\n {\n this.elapsed.end();\n return this.elapsed.ms() >= this.msDeadline;\n }\n}\n\nfunction rawTypedValue(o: any): any\n{\n // null is special\n if (o === undefined || o == null || (typeof o === 'string' && o === ''))\n return { NULL: true };\n\n // raw type\n switch (typeof o)\n {\n case 'boolean': return { BOOL: o };\n case 'number': return { N: String(o) };\n case 'string': return { S: o };\n default: return { S: String(o) };\n case 'object':\n {\n if (Array.isArray(o))\n {\n let a: any[] = [];\n o.forEach((v: any) => a.push(rawTypedValue(v)));\n return { L: a };\n }\n else\n {\n let v: any = {};\n Object.keys(o).forEach((p: string) => { v[p] = rawTypedValue(o[p]) } );\n return { M: v };\n }\n }\n }\n}\n\nfunction rawNakedValue(o: any): any\n{\n if (Util.countKeys(o) !== 1)\n throw new Error(`dynamodb: only expect one key in typed value: ${JSON.stringify(o)}`);\n\n for (let p in o) if (o.hasOwnProperty(p))\n {\n switch (p)\n {\n case 'S': return String(o[p]);\n case 'B': return o[p];\n case 'BOOL': return Boolean(o[p]);\n case 'NULL': return null;\n case 'N': return Number(o[p]);\n case 'SS': return o[p];\n case 'M':\n {\n let r: any = {};\n Object.keys(o[p]).forEach((pp: string) => { r[pp] = rawNakedValue(o[p][pp]) });\n return r;\n }\n case 'L':\n {\n let a: any[] = [];\n o[p].forEach((v: any) => a.push(rawNakedValue(v)));\n return a;\n }\n default:\n throw new Error(`dynamodb: type ${p} not recognized`);\n }\n }\n}\n\nfunction typedValue(key: string, value: any, attributeIndex: any): any\n{\n switch (attributeIndex[key])\n {\n case 'S':\n return (value == null || value === '') ? rawTypedValue(value) : { S: String(value) };\n case 'B':\n return { B: value };\n case 'BOOL':\n return { BOOL: Boolean(!!value) };\n case 'N':\n return { N: String(Number(value)) };\n case 'SS':\n return { SS: value };\n case 'M':\n case 'L':\n case undefined:\n return rawTypedValue(value);\n default:\n throw new Error(`dynamodb: Type ${attributeIndex[key]} unsupported in schema definition`);\n }\n}\n\nfunction keysPresent(o: any, keyschema: any, attributeIndex: any): any\n{\n let typedKey: any = {};\n let bValid: boolean = false;\n\n // First determine if all the projected key schema attributes are present in the object\n for (let i: number = 0; i < keyschema.length; i++)\n {\n let k = keyschema[i];\n let v = o[k.AttributeName];\n if (v === undefined)\n return bValid ? typedKey : null;\n else\n {\n typedKey[k.AttributeName] = typedValue(k.AttributeName, v, attributeIndex);\n if (k.KeyType === 'HASH') bValid = true;\n }\n }\n\n // Now verify that the schema attributes is ALL that are available in the query object\n //for (let p in o) if (o.hasOwnProperty(p))\n //if (typedKey[p] === undefined)\n //return null;\n\n // OK, this query matches this key schema\n return typedKey;\n}\n\n\nclass FsmAPIWatch extends FSM.Fsm\n{\n constructor(env: Environment)\n {\n super(env);\n }\n\n get env(): Environment { return this._env as Environment }\n\n tick(): void\n {\n //this.env.log.value({ event: 'dynamodb: APIs outstanding', value: this.nWaitOn });\n }\n}\n\nconst FSM_LISTING = FSM.FSM_CUSTOM1;\nconst FSM_DESCRIBING = FSM.FSM_CUSTOM2;\nconst FSM_DESCRIBE = FSM.FSM_CUSTOM3;\n\nclass FsmListTables extends FSM.Fsm\n{\n tables: any;\n workStack: string[];\n\n constructor(env: Environment)\n {\n super(env);\n this.tables = {};\n }\n\n get env(): EnvironmentEx { return this._env as EnvironmentEx }\n\n tick(): void\n {\n if (this.ready)\n {\n switch (this.state)\n {\n case FSM.FSM_STARTING:\n this.setState(FSM_LISTING);\n this.env.dbx.dynamodb.listTables({}, (err: any, result: any) => {\n if (err)\n {\n console.log(`dynamodb: listTables error: ${JSON.stringify(err)}`);\n this.env.log.error({ event: 'dynamodb: listTables', detail: JSON.stringify(err) });\n this.setState(FSM.FSM_ERROR);\n }\n else\n {\n if (result.TableNames)\n result.TableNames.forEach((name: string) => this.tables[name] = {});\n this.workStack = Object.keys(this.tables);\n this.setState(FSM_DESCRIBE);\n }\n });\n break;\n\n case FSM_LISTING:\n case FSM_DESCRIBING:\n // Waiting for callback to move out of this state\n break;\n\n case FSM_DESCRIBE:\n if (this.workStack && this.workStack.length > 0)\n {\n this.setState(FSM_DESCRIBING);\n let params: any = { TableName: this.workStack.pop() };\n this.env.dbx.dynamodb.describeTable(params, (err: any, result: any) => {\n if (err)\n {\n console.log(`dynamodb: describeTable error: ${JSON.stringify(err)}`);\n this.env.log.error({ event: 'dynamodb: describeTable', detail: JSON.stringify(err) });\n this.setState(FSM.FSM_ERROR);\n }\n else\n {\n this.tables[params.TableName] = result.Table;\n this.setState(FSM_DESCRIBE);\n }\n });\n }\n else\n this.setState(FSM.FSM_DONE);\n break;\n }\n }\n }\n}\n\nexport function create(env: Environment): DB.DBClient { return new DynamoClient(env) }\n\nconst FSM_CREATE = FSM.FSM_CUSTOM8;\nconst FSM_CREATING = FSM.FSM_CUSTOM9;\n\nexport class DynamoClient extends DB.DBClient\n{\n serializerUpdate: FSM.FsmSerializer;\n fsmAPIWatch: FsmAPIWatch;\n fsmListTables: FsmListTables;\n dynamodb: DynamoDB;\n dynamostream: DynamoDBStreams;\n pendingCols: DynamoCollection[];\n existingCols: { [name: string]: DynamoCollection };\n bList: boolean;\n\n constructor(env: Environment)\n {\n super(env);\n env.context.setDefaults(DBDynamoContextDefaults);\n this.env.dbx = this;\n\n if (env.context.xstring('aws_access_key_id') === undefined || env.context.xstring('aws_secret_access_key') === undefined)\n {\n this.env.log.error('DynamoDB: not configured: exiting');\n this.env.log.dump();\n process.exit(1);\n }\n\n this.dynamodb = new DynamoDB({apiVersion: '2012-08-10', region: 'us-west-2'});\n this.dynamostream = new DynamoDBStreams({apiVersion: '2012-08-10', region: 'us-west-2'});\n\n this.pendingCols = [];\n this.existingCols = {};\n this.serializerUpdate = new FSM.FsmSerializer(env);\n this.fsmAPIWatch = new FsmAPIWatch(env);\n }\n\n get env(): EnvironmentEx { return this._env as EnvironmentEx; }\n\n get Production(): boolean { return this.env.context.xflag('production'); }\n get DBName(): string { return this.Production ? 'prod' : 'dev'; }\n get dynamoErrorFrequency(): number { return this.env.context.xnumber('dynamo_error_frequency'); }\n\n createCollection(name: string, options: any): DB.DBCollection\n { \n if (this.existingCols[name]) return this.existingCols[name];\n const defaultOptions: any = { Schema: { id: 'S' }, KeySchema: { id: 'HASH' } };\n options = Util.deepCopy(Util.shallowAssignImmutable(defaultOptions, options));\n options.AttributeDefinitions = DB.fromCompactSchema(options.Schema);\n options.KeySchema = DB.fromCompactKey(options.KeySchema);\n if (options.GlobalSecondaryIndexes)\n options.GlobalSecondaryIndexes = options.GlobalSecondaryIndexes.map((v: any) => DB.fromCompactIndex(v));\n let col = new DynamoCollection(this.env, this, name, options);\n this.ensureCollection(col);\n this.existingCols[name] = col;\n this.fsmAPIWatch.waitOn(col);\n return col;\n }\n\n createStream(col: DynamoCollection): FSM.FsmArray\n {\n return col.createStream();\n }\n\n closeStream(col: DynamoCollection): void\n {\n col.closeStream();\n }\n\n ensureCollection(col: DynamoCollection): void\n {\n this.pendingCols.push(col);\n if (this.done) this.setState(FSM_CREATE);\n }\n\n createUpdate(col: DynamoCollection, query: any, values: any): DB.DBUpdate\n {\n let update = new DynamoUpdate(this.env, col, query, values);\n if (query && query.id)\n this.serializerUpdate.serialize(query.id, update);\n this.fsmAPIWatch.waitOn(update);\n return update;\n }\n\n createUnset(col: DynamoCollection, query: any, values: any): DB.DBUnset\n {\n let unset = new DynamoUnset(this.env, col, query, values);\n if (query && query.id)\n this.serializerUpdate.serialize(query.id, unset);\n this.fsmAPIWatch.waitOn(unset);\n return unset;\n }\n\n createDelete(col: DynamoCollection, query: any): DB.DBDelete\n {\n let del = new DynamoDelete(this.env, col, query);\n this.fsmAPIWatch.waitOn(del);\n return del;\n }\n\n createFind(col: DynamoCollection, filter: any): DB.DBFind\n {\n let find = new DynamoFind(this.env, col, filter);\n this.fsmAPIWatch.waitOn(find);\n return find;\n }\n\n createQuery(col: DynamoCollection, filter: any): DB.DBQuery\n {\n let query = new DynamoQuery(this.env, col, filter);\n this.fsmAPIWatch.waitOn(query);\n return query;\n }\n\n createIndex(col: DynamoCollection, uid: string): DB.DBIndex\n {\n let index = new DynamoIndex(this.env, col, uid);\n this.fsmAPIWatch.waitOn(index);\n return index;\n }\n\n createClose(): DB.DBClose\n {\n let dbclose = new DynamoClose(this.env, this);\n this.fsmAPIWatch.waitOn(dbclose);\n return dbclose;\n }\n\n forceError(): boolean\n {\n if (!this.Production && (Math.random() < this.dynamoErrorFrequency))\n return true;\n return false;\n }\n\n tick(): void\n {\n if (this.ready && this.isDependentError)\n this.setState(FSM.FSM_ERROR);\n else if (this.ready)\n {\n switch (this.state)\n {\n case FSM.FSM_STARTING:\n if (this.bList || this.fsmListTables == null)\n {\n this.fsmListTables = new FsmListTables(this.env);\n this.waitOn(this.fsmListTables);\n this.setState(FSM_LISTING);\n this.bList = false;\n }\n this.setState(FSM_LISTING);\n break;\n case FSM_LISTING:\n this.setState(this.pendingCols.length > 0 ? FSM_CREATE : FSM.FSM_DONE);\n break;\n case FSM_CREATE:\n // while there are tables to create, create them, otherwise re-list the tables\n while (this.pendingCols.length)\n {\n let col = this.pendingCols.pop();\n if (this.fsmListTables.tables[col.col.TableName] === undefined)\n {\n this.waitOn(new FsmExecuteCreate(this.env, col));\n this.setState(FSM_CREATING);\n return;\n }\n }\n this.setState(FSM.FSM_STARTING);\n break;\n case FSM_CREATING:\n this.bList = true;\n this.setState(FSM_CREATE);\n break;\n }\n }\n }\n}\n\nclass FsmExecuteCreate extends FSM.Fsm\n{\n col: DynamoCollection;\n\n constructor(env: Environment, col: DynamoCollection)\n {\n super(env);\n this.col = col;\n }\n\n get env(): Environment { return this._env as Environment }\n\n create(): void\n {\n let i: number;\n let options: any = {};\n options.TableName = this.col.col.TableName;\n options.AttributeDefinitions = this.col.options.AttributeDefinitions;\n options.BillingMode = this.col.options.BillingMode || 'PAY_PER_REQUEST';\n //if (options.ProvisionedThroughput === undefined)\n //options.ProvisionedThroughput = { ReadCapacityUnits: 1, WriteCapacityUnits: 1 };\n options.StreamSpecification = this.col.options.StreamSpecification || { StreamEnabled: true, StreamViewType: 'KEYS_ONLY' };\n if (this.col.options.GlobalSecondaryIndexes)\n {\n options.GlobalSecondaryIndexes = [];\n this.col.options.GlobalSecondaryIndexes.forEach((ix: any) => {\n if (ix.Projection === undefined)\n ix.Projection = { ProjectionType: 'ALL' };\n //if (ix.ProvisionedThroughput === undefined)\n //ix.ProvisionedThroughput = { ReadCapacityUnits: '1', WriteCapacityUnits: '1' };\n options.GlobalSecondaryIndexes.push(ix);\n });\n }\n\n let keys: any = {};\n if (this.col.options.KeySchema)\n {\n options.KeySchema = this.col.options.KeySchema;\n options.KeySchema.forEach((p: any) => keys[p.AttributeName] = true);\n }\n if (options.GlobalSecondaryIndexes)\n options.GlobalSecondaryIndexes.forEach((ix: any) => ix.KeySchema.forEach((p: any) => keys[p.AttributeName] = true));\n\n // Only include attribute definitions that are used in KeySchema or SecondaryIndices\n for (i = options.AttributeDefinitions.length - 1; i >= 0; i--)\n {\n let id: any = options.AttributeDefinitions[i];\n if (keys[id.AttributeName] === undefined)\n options.AttributeDefinitions.splice(i, 1);\n }\n\n this.setState(FSM.FSM_PENDING);\n this.col.dynamodb.createTable(options, (err: any, data: any) => {\n if (err)\n {\n console.log(`dynamodb: createTable error: ${JSON.stringify(err)}`);\n this.env.log.error({ event: 'dynamodb: createTable', detail: JSON.stringify(err) });\n this.setState(FSM.FSM_ERROR);\n }\n else\n {\n this.env.log.event({ event: 'createTable', detail: options.TableName });\n this.setState(FSM.FSM_DONE);\n }\n });\n }\n\n tick(): void\n {\n if (this.ready)\n {\n switch (this.state)\n {\n case FSM.FSM_STARTING:\n this.create();\n break;\n\n // other state transitions happen in callback\n }\n }\n }\n}\n\nexport class DynamoCollection extends DB.DBCollection\n{\n attributeIndex: any;\n keyIndex: any;\n fsmStream: FsmTableStream;\n\n constructor(env: Environment, client: DynamoClient, name: string, options: any)\n {\n super(env, client, name, options);\n this.waitOn(client);\n this.col = { TableName: `dra-${client.DBName}-${name}` };\n this.constructIndex();\n }\n\n get env(): Environment { return this._env as Environment; }\n\n get dynclient(): DynamoClient { return this.client as DynamoClient }\n get dynamodb(): DynamoDB { return this.dynclient.dynamodb }\n\n createStream(): FSM.FsmArray\n {\n if (this.fsmStream == null)\n this.fsmStream = new FsmTableStream(this.env, this);\n return this.fsmStream.fsmResult;\n }\n\n closeStream(): void\n {\n if (this.fsmStream)\n {\n this.fsmStream.end();\n this.fsmStream = null;\n }\n }\n\n constructIndex(): void\n {\n this.attributeIndex = {};\n if (this.options.AttributeDefinitions)\n this.options.AttributeDefinitions.forEach((p: any) => this.attributeIndex[p.AttributeName] = p.AttributeType);\n this.keyIndex = {};\n if (this.options.KeySchema)\n this.options.KeySchema.forEach((p: any) => this.keyIndex[p.AttributeName] = p.KeyType);\n }\n\n addConditionExpression(query: any, key: any): void\n {\n query.isquery = true;\n let j: number = 0;\n let ev: any = {};\n query.ExpressionAttributeValues = ev;\n let en: any = {};\n query.ExpressionAttributeNames = en;\n for (let p in key) if (key.hasOwnProperty(p))\n {\n en[`#n${j}`] = p;\n ev[`:v${j}`] = key[p];\n j++;\n }\n query.KeyConditionExpression = this.toTestExpression(query);\n }\n\n toInternalQuery(query: any): any\n {\n let q: any = {};\n q.TableName = this.col.TableName;\n let key = keysPresent(query, this.options.KeySchema, this.attributeIndex);\n if (key)\n {\n if (Util.countKeys(this.options.KeySchema) != Util.countKeys(key))\n this.addConditionExpression(q, key);\n else\n q.Key = key;\n return q;\n }\n\n if (this.options.GlobalSecondaryIndexes !== undefined)\n {\n for (let i: number = 0; i < this.options.GlobalSecondaryIndexes.length; i++)\n {\n let ix = this.options.GlobalSecondaryIndexes[i];\n let key = keysPresent(query, ix.KeySchema, this.attributeIndex);\n if (key)\n {\n q.IndexName = ix.IndexName;\n this.addConditionExpression(q, key);\n return q;\n }\n }\n }\n return q;\n }\n\n toInternalExpression(o: any): any\n {\n let ex: any = {};\n let j: number = 0;\n let ev: any = {};\n ex.ExpressionAttributeValues = ev;\n let en: any = {};\n ex.ExpressionAttributeNames = en;\n for (let p in o) if (o.hasOwnProperty(p))\n {\n if (this.keyIndex[p] === undefined)\n {\n let v = typedValue(p, o[p], this.attributeIndex);\n if (v && (v.SS === undefined || v.SS.length > 0))\n {\n en[`#n${j}`] = p;\n ev[`:v${j}`] = v;\n j++;\n }\n }\n }\n\n // Ensure we don't have an empty update expression\n if (Util.countKeys(ex.ExpressionAttributeNames) == 0)\n {\n ex.ExpressionAttributeNames['#n0'] = '__nonempty';\n ex.ExpressionAttributeValues[':v0'] = { NULL: true };\n }\n\n return ex;\n }\n\n toTestExpression(expr: any): string\n {\n let sa: string[] = [];\n let j: number = 0;\n let n: number = Util.countKeys(expr.ExpressionAttributeNames);\n for (let i: number = 0; i < n; i++)\n sa.push(`#n${i} = :v${i}`);\n return sa.join(', ');\n }\n\n toUpdateExpression(expr: any): string\n {\n let saSet: string[] = [];\n let saAdd: string[] = [];\n let j: number = 0;\n let n: number = Util.countKeys(expr.ExpressionAttributeNames);\n for (let i: number = 0; i < n; i++)\n {\n let sv = `:v${i}`;\n let sn = `#n${i}`;\n let v = expr.ExpressionAttributeValues[sv];\n if (v.SS !== undefined)\n saAdd.push(`${sn} ${sv}`);\n else\n saSet.push(`${sn} = ${sv}`);\n }\n\n let fullExpr: string = '';\n if (saSet.length > 0)\n fullExpr += `SET ${saSet.join(', ')}`;\n if (saAdd.length > 0)\n fullExpr += ` ADD ${saAdd.join(', ')}`;\n return fullExpr;\n }\n\n toRemoveExpression(expr: any): string\n {\n let saRemove: string[] = [];\n let saDelete: string[] = [];\n let j: number = 0;\n let n: number = Util.countKeys(expr.ExpressionAttributeNames);\n for (let i: number = 0; i < n; i++)\n {\n let sv = `:v${i}`;\n let sn = `#n${i}`;\n let v = expr.ExpressionAttributeValues[sv];\n if (v.SS !== undefined)\n saDelete.push(`${sn} ${sv}`);\n else\n {\n delete expr.ExpressionAttributeValues[sv];\n saRemove.push(`#n${i}`);\n }\n }\n\n if (Util.isEmpty(expr.ExpressionAttributeValues))\n delete expr.ExpressionAttributeValues;\n\n let fullExpr: string = '';\n if (saRemove.length > 0)\n fullExpr += `REMOVE ${saRemove.join(', ')}`;\n if (saDelete.length > 0)\n fullExpr += ` DELETE ${saDelete.join(', ')}`;\n return fullExpr;\n }\n\n toExternal(result: any): any\n {\n if (result)\n {\n let x: any = {};\n Object.keys(result).forEach((p: string) => { x[p] = rawNakedValue(result[p]) });\n delete x.__nonempty;\n return x;\n }\n return result;\n }\n\n forceError(): boolean\n {\n return (this.client as DynamoClient).forceError();\n }\n\n tick(): void\n {\n if (this.ready && this.state == FSM.FSM_STARTING)\n this.setState(FSM.FSM_DONE);\n }\n}\n\nexport class DynamoUpdate extends DB.DBUpdate\n{\n trace: LogAbstract.AsyncTimer;\n\n constructor(env: Environment, col: DynamoCollection, query: any, values: any)\n {\n super(env, col, col.toInternalQuery(query), col.toInternalExpression(values));\n if (this.query.Key === undefined)\n {\n console.log(`dynamodb: DynamoUpdate internal failure: colquery missing Key: ${JSON.stringify(query)}`);\n this.setState(FSM.FSM_ERROR);\n }\n else\n {\n this.waitOn(col);\n this.trace = new LogAbstract.AsyncTimer(env.log, `dynamodb: update(col=${col.name})`);\n }\n }\n\n get env(): Environment { return this._env as Environment; }\n\n get dyncol(): DynamoCollection { return this.col as DynamoCollection }\n\n forceError(): boolean\n {\n return (this.col.client as DynamoClient).forceError();\n }\n\n tick(): void\n {\n if (this.ready)\n {\n if (this.isDependentError)\n this.setState(FSM.FSM_ERROR);\n else if (this.forceError())\n {\n this.setState(FSM.FSM_ERROR);\n this.env.log.error('dynamodb: updateItem: forcing error');\n }\n else if (this.state == FSM.FSM_STARTING)\n {\n this.setState(FSM.FSM_PENDING);\n let params: any = Util.shallowAssignImmutable(this.query, this.values);\n params.UpdateExpression = this.dyncol.toUpdateExpression(params);\n if (params.UpdateExpression === '')\n {\n this.setState(FSM.FSM_DONE);\n }\n this.dyncol.dynamodb.updateItem(params, (err: any, result: any) => {\n if (this.done)\n return;\n else if (err)\n {\n this.setState(FSM.FSM_ERROR);\n this.trace.log();\n this.env.log.error({ event: 'dynamodb: update error', detail: `error: ${JSON.stringify(err)} query: ${JSON.stringify(params)}` });\n }\n else\n {\n this.setState(FSM.FSM_DONE);\n this.result = result;\n this.trace.log();\n if (this.env.context.xnumber('verbosity'))\n this.env.log.event({ event: 'dynamodb: updateItem', detail: JSON.stringify(result) });\n }\n });\n }\n }\n }\n}\n\nexport class DynamoUnset extends DB.DBUnset\n{\n trace: LogAbstract.AsyncTimer;\n\n constructor(env: Environment, col: DynamoCollection, query: any, values: any)\n {\n super(env, col, col.toInternalQuery(query), col.toInternalExpression(values));\n if (this.query.Key === undefined)\n {\n console.log(`dynamodb: DynamoUnset internal failure: query missing Key: ${JSON.stringify(query)}`);\n this.setState(FSM.FSM_ERROR);\n }\n else\n {\n this.waitOn(col);\n this.trace = new LogAbstract.AsyncTimer(env.log, `dynamodb: unset(col=${col.name})`);\n }\n }\n\n get env(): Environment { return this._env as Environment; }\n\n get dyncol(): DynamoCollection { return this.col as DynamoCollection }\n\n forceError(): boolean\n {\n return (this.col.client as DynamoClient).forceError();\n }\n\n tick(): void\n {\n if (this.ready)\n {\n if (this.isDependentError)\n this.setState(FSM.FSM_ERROR);\n else if (this.forceError())\n {\n this.setState(FSM.FSM_ERROR);\n this.env.log.error('dynamodb: unset: forcing error');\n }\n else if (this.state == FSM.FSM_STARTING)\n {\n this.setState(FSM.FSM_PENDING);\n let params: any = Util.shallowAssignImmutable(this.query, this.values);\n params.UpdateExpression = this.dyncol.toRemoveExpression(params);\n this.dyncol.dynamodb.updateItem(params, (err: any, result: any) => {\n if (this.done)\n return;\n else if (err)\n {\n this.setState(FSM.FSM_ERROR);\n this.trace.log();\n this.env.log.error({ event: 'dynamodb: unset error', detail: `error: ${JSON.stringify(err)} query: ${JSON.stringify(params)}` });\n }\n else\n {\n this.setState(FSM.FSM_DONE);\n this.result = result;\n this.trace.log();\n if (this.env.context.xnumber('verbosity'))\n this.env.log.event({ event: 'dynamodb: unset', detail: JSON.stringify(result) });\n }\n });\n }\n }\n }\n}\n\nexport class DynamoDelete extends DB.DBDelete\n{\n trace: LogAbstract.AsyncTimer;\n\n constructor(env: Environment, col: DynamoCollection, query: any)\n {\n super(env, col, col.toInternalQuery(query));\n if (this.query.Key === undefined)\n {\n console.log(`dynamodb: DynamoDelete internal failure: query missing Key: ${JSON.stringify(query)}`);\n this.setState(FSM.FSM_ERROR);\n }\n else\n {\n this.waitOn(col);\n this.trace = new LogAbstract.AsyncTimer(env.log, `dynamodb: delete(col=${col.name})`);\n }\n }\n\n get env(): Environment { return this._env as Environment; }\n\n get dyncol(): DynamoCollection { return this.col as DynamoCollection }\n\n forceError(): boolean\n {\n return (this.col.client as DynamoClient).forceError();\n }\n\n tick(): void\n {\n if (this.ready)\n {\n if (this.isDependentError)\n this.setState(FSM.FSM_ERROR);\n else if (this.forceError())\n {\n this.setState(FSM.FSM_ERROR);\n this.env.log.error('dynamodb: deleteItem: forcing error');\n }\n else if (this.state == FSM.FSM_STARTING)\n {\n this.setState(FSM.FSM_PENDING);\n this.dyncol.dynamodb.deleteItem(this.query, (err: any, result: any) => {\n if (this.done)\n return;\n else if (err)\n {\n this.setState(FSM.FSM_ERROR);\n this.trace.log();\n this.env.log.error({ event: 'dynamodb: deleteItem: error', detail: JSON.stringify(err) });\n }\n else\n {\n this.setState(FSM.FSM_DONE);\n this.result = result;\n this.trace.log();\n if (this.env.context.xnumber('verbosity'))\n this.env.log.event({ event: 'dynamodb: deleteItem: succeeded', detail: JSON.stringify(result) });\n }\n });\n }\n }\n }\n}\n\nexport class DynamoFind extends DB.DBFind\n{\n trace: LogAbstract.AsyncTimer;\n\n constructor(env: Environment, col: DynamoCollection, filter: any)\n {\n super(env, col, col.toInternalQuery(filter));\n if (this.filter.Key === undefined && this.filter.IndexName === undefined)\n {\n console.log(`dynamodb: DynamoFind internal failure: (col=${col.name}) missing Key: ${JSON.stringify(filter)}`);\n this.setState(FSM.FSM_ERROR);\n }\n else\n {\n this.waitOn(col);\n this.trace = new LogAbstract.AsyncTimer(env.log, `dynamodb: find(col=${col.name})`);\n }\n }\n\n get env(): Environment { return this._env as Environment; }\n\n get dyncol(): DynamoCollection { return this.col as DynamoCollection }\n\n forceError(): boolean\n {\n return (this.col.client as DynamoClient).forceError();\n }\n\n tick(): void\n {\n if (this.ready)\n {\n if (this.isDependentError)\n this.setState(FSM.FSM_ERROR);\n else if (this.forceError())\n {\n this.setState(FSM.FSM_ERROR);\n this.env.log.error('dynamodb: find: forcing error');\n }\n else if (this.state == FSM.FSM_STARTING)\n {\n this.setState(FSM.FSM_PENDING);\n if (this.filter.isquery === undefined)\n {\n this.dyncol.dynamodb.getItem(this.filter, (err: any, result: any) => {\n if (this.done)\n return;\n else if (err)\n {\n this.setState(FSM.FSM_ERROR);\n this.trace.log();\n this.env.log.error({ event: 'dynamodb: getItem error', detail: JSON.stringify(err) });\n }\n else\n {\n this.result = this.dyncol.toExternal(result.Item);\n this.trace.log();\n if (this.env.context.xnumber('verbosity'))\n this.env.log.event( { event: 'dynamodb: getItem', detail: JSON.stringify(result) });\n this.setState(FSM.FSM_DONE);\n }\n });\n }\n else\n {\n delete this.filter.isquery;\n this.dyncol.dynamodb.query(this.filter, (err: any, result: any) => {\n if (this.done)\n return;\n else if (err)\n {\n this.trace.log();\n this.env.log.error({ event: 'dynamodb: query error', detail: JSON.stringify(err) });\n this.setState(FSM.FSM_ERROR);\n }\n else\n {\n if (result.Items && result.Items.length > 0)\n {\n let x = this.dyncol.toExternal(result.Items[0]);\n this.filter = this.dyncol.toInternalQuery(x);\n this.setState(FSM.FSM_STARTING);\n }\n else\n {\n this.trace.log();\n this.setState(FSM.FSM_DONE);\n }\n }\n });\n }\n }\n }\n }\n}\n\n\nconst FSM_SCANNING = FSM.FSM_CUSTOM1;\n\nexport class DynamoQuery extends DB.DBQuery\n{\n trace: LogAbstract.AsyncTimer;\n lastKey: any;\n\n constructor(env: Environment, col: DynamoCollection, filter: any)\n {\n super(env, col, col.toInternalQuery(filter));\n this.waitOn(col);\n this.trace = new LogAbstract.AsyncTimer(env.log, `dynamodb: query(col=${col.name})`);\n if (this.env.context.xnumber('verbosity'))\n this.env.log.event({ event: `dynamodb: query in ${col.name}`, detail: JSON.stringify(filter) });\n }\n\n get env(): Environment { return this._env as Environment; }\n\n get dyncol(): DynamoCollection { return this.col as DynamoCollection }\n\n forceError(): boolean\n {\n return (this.col.client as DynamoClient).forceError();\n }\n\n doScan(): void\n {\n let param: any = Util.deepCopy(this.filter);\n param.Select = 'ALL_ATTRIBUTES';\n if (this.lastKey)\n {\n param.ExclusiveStartKey = this.lastKey;\n this.lastKey = undefined;\n }\n this.setState(FSM_SCANNING);\n this.dyncol.dynamodb.scan(param, (err: any, result: any) => {\n if (this.done)\n return;\n else if (err)\n {\n this.setState(FSM.FSM_ERROR);\n this.trace.log();\n this.env.log.error({ event: 'dynamodb: query error', detail: JSON.stringify(err) });\n }\n else\n {\n if (result.Items)\n for (let i: number = 0; i < result.Items.length; i++)\n this.fsmResult.push(this.dyncol.toExternal(result.Items[i]));\n if (result.LastEvaluatedKey)\n {\n this.lastKey = result.LastEvaluatedKey;\n this.setState(FSM.FSM_STARTING);\n }\n else\n {\n this.fsmResult.setState(FSM.FSM_DONE);\n this.setState(FSM.FSM_DONE);\n }\n }\n });\n }\n\n tick(): void\n {\n if (this.ready && this.isDependentError)\n {\n this.fsmResult.setState(FSM.FSM_ERROR);\n this.setState(FSM.FSM_ERROR);\n }\n else if (this.ready)\n {\n if (this.state == FSM.FSM_STARTING)\n {\n if (Util.countKeys(this.filter) == 1) // Only specified TableName\n this.doScan();\n else\n {\n let param: any = Util.deepCopy(this.filter);\n delete param.isquery;\n if (this.lastKey)\n {\n param.ExclusiveStartKey = this.lastKey;\n this.lastKey = undefined;\n }\n this.setState(FSM.FSM_PENDING);\n this.dyncol.dynamodb.query(param, (err: any, result: any) => {\n if (this.done)\n return;\n else if (err)\n {\n this.setState(FSM.FSM_ERROR);\n this.trace.log();\n this.env.log.error({ event: 'dynamodb: query error', detail: JSON.stringify(err) });\n }\n else\n {\n if (result.Items && result.Items.length > 0)\n result.Items.forEach((i: any) => this.fsmResult.push(this.dyncol.toExternal(i)));\n if (result.LastEvaluatedKey)\n {\n this.lastKey = result.LastEvaluatedKey;\n this.setState(FSM.FSM_STARTING);\n }\n else\n {\n this.trace.log();\n this.fsmResult.setState(FSM.FSM_DONE);\n this.setState(FSM.FSM_DONE);\n }\n if (this.env.context.xnumber('verbosity'))\n this.env.log.event( { event: 'dynamodb: query', detail: JSON.stringify(result) });\n }\n });\n }\n }\n }\n }\n}\n\nexport class DynamoIndex extends DB.DBIndex\n{\n constructor(env: Environment, col: DynamoCollection, uid: string)\n {\n super(env, col, uid);\n this.waitOn(col);\n this.setState(FSM.FSM_DONE);\n }\n}\n\nexport class DynamoClose extends DB.DBClose\n{\n constructor(env: Environment, client: DynamoClient)\n {\n super(env, client);\n this.setState(FSM.FSM_DONE);\n }\n}\n\ninterface RangeDescription\n{\n StartingSequenceNumber: string;\n EndingSequenceNumber?: string;\n}\n\ninterface ShardDescription\n{\n ShardId: string;\n SequenceNumberRange: RangeDescription;\n ShardIterator?: string;\n ParentShardId?: string;\n LastSequenceNumber?: string;\n}\n\nfunction shardSort(s1: ShardDescription, s2: ShardDescription): number\n{\n if (s1.ShardId === s2.ParentShardId)\n return -1;\n if (s2.ShardId === s1.ParentShardId)\n return 1;\n return 0;\n}\n\nexport class FsmTableShards extends FSM.Fsm\n{\n table: any;\n stream: any;\n lastKey: string;\n fsmResult: FSM.FsmArray;\n\n constructor(env: Environment, table: any)\n {\n super(env);\n this.table = table;\n this.fsmResult = new FSM.FsmArray(env);\n }\n\n get env(): EnvironmentEx { return this._env as EnvironmentEx }\n\n tick(): void\n {\n if (this.ready)\n {\n switch (this.state)\n {\n case FSM.FSM_STARTING:\n this.setState(FSM_LISTING);\n this.env.dbx.dynamostream.listStreams({ TableName: this.table.TableName}, (err: any, result: any) => {\n if (err)\n {\n console.log(`dynamodb: listStreams error: ${JSON.stringify(err)}`);\n this.env.log.error({ event: 'dynamodb: listStreams', detail: JSON.stringify(err) });\n this.fsmResult.setState(FSM.FSM_ERROR);\n this.setState(FSM.FSM_ERROR);\n }\n else\n {\n if (result.Streams && result.Streams.length > 0)\n {\n this.stream = result.Streams[0];\n this.setState(FSM_DESCRIBE);\n }\n else\n {\n this.setState(FSM.FSM_DONE);\n this.fsmResult.setState(FSM.FSM_DONE);\n }\n }\n });\n break;\n\n case FSM_LISTING:\n case FSM_DESCRIBING:\n // Come out of this state in the callback\n break;\n\n case FSM_DESCRIBE:\n this.setState(FSM_DESCRIBING);\n let params: any = { StreamArn: this.stream.StreamArn };\n if (this.lastKey)\n {\n params.ExclusiveStartShardId = this.lastKey;\n delete this.lastKey;\n }\n this.env.dbx.dynamostream.describeStream(params, (err: any, result: any) => {\n if (err)\n {\n console.log(`dynamodb: describeStream failure: ${JSON.stringify(err)}`);\n this.env.log.error({ event: 'dynamodb: describeStream', detail: JSON.stringify(err) });\n this.setState(FSM.FSM_ERROR);\n }\n else\n {\n Util.shallowAssign(this.stream, result.StreamDescription);\n if (this.stream.Shards)\n {\n this.stream.Shards.forEach((shard: ShardDescription) => {\n this.fsmResult.push(shard);\n });\n }\n if (this.stream.LastEvaluatedShardId)\n {\n this.lastKey = this.stream.LastEvaluatedShardId;\n delete this.stream.LastEvaluatedShardId;\n this.setState(FSM_DESCRIBE);\n }\n else\n {\n this.fsmResult.setState(FSM.FSM_DONE);\n this.setState(FSM.FSM_DONE);\n }\n }\n });\n break;\n }\n }\n }\n}\n\nclass KeySet implements FSM.ISet\n{\n keyschema: any[];\n set: any;\n \n constructor(col: DynamoCollection)\n {\n this.keyschema = col.options.KeySchema;\n this.set = {};\n }\n\n test(o: any): boolean\n {\n let key: string = '';\n this.keyschema.forEach((p: any) => { if (o[p.AttributeName] !== undefined) key += String(o[p.AttributeName]); });\n let b = this.set[key] !== undefined;\n this.set[key] = true;\n return b;\n }\n\n reset(): void\n {\n this.set = {};\n }\n}\n\nconst FSM_READING = FSM.FSM_CUSTOM4;\nconst FSM_NEXTSHARD = FSM.FSM_CUSTOM5;\nconst FSM_GETITERATOR = FSM.FSM_CUSTOM6;\nconst FSM_CALLITERATOR = FSM.FSM_CUSTOM7;\nconst FSM_GETRECORDS = FSM.FSM_CUSTOM8;\nconst FSM_LOOPING = FSM.FSM_CUSTOM9;\nconst MinLoopInterval = 1000 * 60 * 5;\nconst MaxShardInterval = 1000 * 60 * 2;\nconst MaxGetRecordRetries = 100;\n\nclass FsmReadOneShard extends FSM.Fsm\n{\n col: DynamoCollection;\n stream: any;\n shard: ShardDescription;\n shardClosed: boolean;\n fsmResult: FSM.FsmArray;\n elapsed: Util.Elapsed;\n nTries: number;\n deadline: Deadline;\n\n constructor(env: Environment, col: DynamoCollection, stream: any, shard: ShardDescription, fsmResult: FSM.FsmArray)\n {\n super(env);\n this.col = col;\n this.stream = stream;\n this.shard = shard;\n this.fsmResult = fsmResult;\n this.elapsed = new Util.Elapsed();\n this.nTries = 0;\n this.shardClosed = this.shard.SequenceNumberRange.EndingSequenceNumber !== undefined;\n this.deadline = new Deadline(MaxShardInterval);\n }\n\n get env(): EnvironmentEx { return this._env as EnvironmentEx }\n\n tick(): void\n {\n if (this.ready && this.isDependentError)\n this.setState(FSM.FSM_ERROR);\n else if (this.ready)\n {\n switch (this.state)\n {\n case FSM.FSM_STARTING:\n this.deadline.start();\n this.setState(FSM_GETITERATOR);\n let iterParams: any = {\n ShardId: this.shard.ShardId,\n ShardIteratorType: 'TRIM_HORIZON',\n StreamArn: this.stream.StreamArn\n };\n if (this.shard.LastSequenceNumber !== undefined)\n {\n iterParams.ShardIteratorType = 'AFTER_SEQUENCE_NUMBER';\n iterParams.SequenceNumber = this.shard.LastSequenceNumber;\n }\n this.env.dbx.dynamostream.getShardIterator(iterParams, (err: any, result: any) => {\n // Cancel by externally setting to DONE\n if (this.done)\n return;\n if (err)\n {\n console.log(`dynamodb: getShardIterator: failure: ${JSON.stringify(err)}`);\n this.env.log.error({ event: 'dynamodb: getShardIterator', detail: JSON.stringify(err) });\n this.setState(FSM.FSM_ERROR);\n }\n else\n {\n this.shard.ShardIterator = result.ShardIterator;\n this.setState(FSM_CALLITERATOR);\n }\n });\n break;\n\n case FSM_CALLITERATOR:\n this.elapsed.start();\n this.setState(FSM_GETRECORDS);\n let recordParams: any = { ShardIterator: this.shard.ShardIterator };\n this.env.dbx.dynamostream.getRecords(recordParams, (err: any, result: any) => {\n // Cancel by externally setting to DONE\n if (this.done)\n return;\n if (err)\n {\n console.log(`dynamodb: getRecords: failure: ${JSON.stringify(err)}`);\n this.env.log.error({ event: 'dynamodb: getRecords', detail: JSON.stringify(err) });\n this.setState(FSM.FSM_ERROR);\n }\n else\n {\n this.fsmResult.concat(result.Records.map((o: any) => this.col.toExternal(o.dynamodb.Keys) ));\n if (result.Records.length > 0)\n {\n let r: any = result.Records[result.Records.length-1];\n this.shard.LastSequenceNumber = r.dynamodb.SequenceNumber;\n }\n if (result.NextShardIterator)\n {\n this.nTries++;\n this.shard.ShardIterator = result.NextShardIterator;\n let bContinue = this.shardClosed || (this.nTries <= MaxGetRecordRetries && !this.deadline.passed);\n this.setState(bContinue ? FSM_CALLITERATOR : FSM.FSM_DONE);\n }\n else\n this.setState(FSM.FSM_DONE);\n }\n });\n break;\n }\n }\n }\n}\n\nexport class FsmTableStream extends FSM.Fsm\n{\n col: DynamoCollection;\n table: any;\n fsmShards: FsmTableShards;\n shardsDone: any;\n shardsLast: any;\n shardsQueue: FsmReadOneShard[];\n fsmResult: FSM.FsmArray;\n deadline: Deadline\n\n constructor(env: Environment, col: DB.DBCollection)\n {\n super(env);\n this.col = col as DynamoCollection;\n this.table = col.col;\n this.shardsDone = {};\n this.shardsLast = {};\n this.shardsQueue = [];\n this.fsmResult = new FSM.FsmArray(env, new KeySet(this.col));\n this.deadline = new Deadline(MinLoopInterval);\n }\n\n get env(): Environment { return this._env as Environment }\n\n end(): void\n {\n this.shardsDone = {};\n this.shardsLast = {};\n this.shardsQueue = [];\n this.setState(FSM.FSM_DONE);\n this.fsmResult.setState(FSM.FSM_DONE);\n }\n\n error(): void\n {\n this.clearDependentError();\n this.setState(FSM_LOOPING);\n }\n\n tick(): void\n {\n if (this.ready && this.isDependentError)\n this.error();\n else if (this.ready)\n {\n switch (this.state)\n {\n case FSM_LOOPING:\n let msLeft = this.deadline.msRemaining;\n if (msLeft > 0)\n this.waitOn(new FSM.FsmSleep(this.env, msLeft));\n this.setState(FSM.FSM_STARTING);\n break;\n\n case FSM.FSM_STARTING:\n this.deadline.start();\n this.setState(FSM_LISTING);\n this.shardsQueue = [];\n this.fsmShards = new FsmTableShards(this.env, this.table);\n this.waitOn(this.fsmShards.fsmResult);\n break;\n\n case FSM_LISTING:\n this.fsmShards.fsmResult.a.forEach((shard: ShardDescription) => {\n if (this.shardsDone[shard.ShardId] === undefined)\n {\n if (this.shardsLast[shard.ShardId])\n shard.LastSequenceNumber = this.shardsLast[shard.ShardId];\n let fsmReadOne = new FsmReadOneShard(this.env, this.col, this.fsmShards.stream, shard, this.fsmResult);\n this.waitOn(fsmReadOne);\n this.shardsQueue.push(fsmReadOne);\n }\n });\n\n // Make sure child shard processed before parent shard\n // TODO: not concerned about record ordering here\n //this.shardsQueue.sort(shardSort);\n\n // If still listing shards, re-wait on the result set and stay in this state\n this.fsmShards.fsmResult.reset();\n if (! this.fsmShards.done)\n this.waitOn(this.fsmShards.fsmResult);\n else\n this.setState(FSM_READING);\n break;\n\n case FSM_READING:\n this.shardsQueue.forEach((fsmReadOne: FsmReadOneShard) => {\n if (!fsmReadOne.iserror && fsmReadOne.shardClosed)\n this.shardsDone[fsmReadOne.shard.ShardId] = true;\n this.shardsLast[fsmReadOne.shard.ShardId] = fsmReadOne.shard.LastSequenceNumber;\n });\n this.setState(FSM_LOOPING);\n break;\n }\n }\n }\n}\n","export * from './filterexpr';\n","import * as Util from '../util/all';\n\nconst Space = 32;\nconst Tab = 9;\nconst Newline = 10;\nconst CR = 13;\nconst OpenParen = 40;\nconst CloseParen = 41;\nconst Colon = 58;\nconst SingleQuote = 39;\nconst DoubleQuote = 34;\nconst BackSlash = 92;\nconst Exclamation = 33;\nconst LessThan = 60;\nconst Equal = 61;\nconst GreaterThan = 62;\nconst LowerA = 97;\nconst UpperA = 65;\nconst LowerN = 110;\nconst UpperN = 78;\nconst LowerD = 100;\nconst UpperD = 68;\nconst LowerO = 111;\nconst UpperO = 79;\nconst LowerT = 97;\nconst UpperT = 65;\nconst LowerR = 114;\nconst UpperR = 82;\n\nfunction isWhite(c: number): boolean\n{\n return c === Space || c === Newline || c === Tab || c == CR;\n}\n\nenum TokType\n{\n Text,\n OpenParen,\n CloseParen,\n Not,\n And,\n Or,\n Colon,\n GreaterThan,\n GreaterThanEqual,\n Equal,\n LessThan,\n LessThanEqual,\n NotEqual,\n}\n\nfunction tokToText(tt: TokType): string\n{\n switch (tt)\n {\n case TokType.Text: return 'text';\n case TokType.OpenParen: return '(';\n case TokType.CloseParen: return ')';\n case TokType.Not: return 'not';\n case TokType.And: return 'and';\n case TokType.Or: return 'or';\n case TokType.Colon: return ':';\n case TokType.GreaterThan: return '>';\n case TokType.GreaterThanEqual: return '>=';\n case TokType.Equal: return '=';\n case TokType.LessThan: return '<';\n case TokType.LessThanEqual: return '<=';\n case TokType.NotEqual: return '!=';\n }\n}\n\nfunction tokIsUnary(tt: TokType): boolean\n{\n switch (tt)\n {\n case TokType.Text: return false;\n case TokType.OpenParen: return false;\n case TokType.CloseParen: return false;\n case TokType.Not: return true;\n case TokType.And: return false;\n case TokType.Or: return false;\n case TokType.Colon: return false;\n // Nominally binary, but written as \"prop: < 3\" so appears as unary operator where test is comparative to prop value\n case TokType.GreaterThan: return true;\n case TokType.GreaterThanEqual: return true;\n case TokType.Equal: return true;\n case TokType.LessThan: return true;\n case TokType.LessThanEqual: return true;\n case TokType.NotEqual: return true;\n }\n}\n\nfunction tokIsBinary(tt: TokType): boolean\n{\n switch (tt)\n {\n case TokType.Text: return false;\n case TokType.OpenParen: return false;\n case TokType.CloseParen: return false;\n case TokType.Not: return false;\n case TokType.And: return true;\n case TokType.Or: return true;\n case TokType.Colon: return true;\n // Nominally binary, but written as \"prop: < 3\" so appears as unary operator where test is comparative to prop value\n case TokType.GreaterThan: return false;\n case TokType.GreaterThanEqual: return false;\n case TokType.Equal: return false;\n case TokType.LessThan: return false;\n case TokType.LessThanEqual: return false;\n case TokType.NotEqual: return false;\n }\n}\n\ninterface Token\n{\n tt: TokType;\n text?: string;\n}\n\ninterface Clause\n{\n op: Token;\n operand1?: Clause;\n operand2?: Clause;\n}\n\nenum ParseState\n{\n Start,\n InString,\n Ended\n}\n\nclass Lexer\n{\n coder: Util.Coder;\n tokens: Token[];\n buf: Uint8Array;\n tok: Uint8Array;\n toklen: number;\n n: number;\n\n constructor(coder: Util.Coder, expr?: string)\n {\n this.coder = coder;\n if (expr)\n this.set(expr);\n }\n\n set(expr: string): void\n {\n this.tokens = [];\n this.buf = Util.s2u8(this.coder, expr);\n this.tok = new Uint8Array(new ArrayBuffer(this.buf.length));\n this.toklen = 0;\n this.n = 0;\n this.lex();\n }\n\n pushString(s: string): void\n {\n this.tokens.push({ tt: TokType.Text, text: s });\n }\n\n pushText(bForce: boolean = false): void\n {\n if (this.toklen > 0)\n {\n let text = Util.u82s(this.coder, this.tok, 0, this.toklen).toLowerCase();\n this.toklen = 0;\n if (!bForce && text === 'or')\n this.tokens.push({ tt: TokType.Or });\n else if (!bForce && text === 'and')\n this.tokens.push({ tt: TokType.And });\n else if (!bForce && text === 'not')\n this.tokens.push({ tt: TokType.Not });\n else\n this.pushString(text);\n }\n }\n\n pushSpecial(tt: TokType): void\n {\n this.pushText();\n this.tokens.push({ tt: tt });\n }\n\n lex(): void\n {\n while (this.n < this.buf.length)\n {\n let c: number = this.buf[this.n++];\n if (c == Colon)\n this.pushSpecial(TokType.Colon);\n else if (c == OpenParen)\n this.pushSpecial(TokType.OpenParen);\n else if (c == CloseParen)\n this.pushSpecial(TokType.CloseParen);\n else if (c == SingleQuote || c == DoubleQuote)\n {\n this.pushText();\n while (this.n < this.buf.length)\n {\n let cc = this.buf[this.n++];\n if (cc === c)\n break;\n else\n this.tok[this.toklen++] = cc;\n }\n this.pushText(true);\n }\n else if (isWhite(c))\n this.pushText();\n else if (c === GreaterThan)\n {\n if (this.n < this.buf.length && this.buf[this.n] === Equal)\n {\n this.n++;\n this.pushSpecial(TokType.GreaterThanEqual)\n }\n else\n this.pushSpecial(TokType.GreaterThan)\n }\n else if (c === LessThan)\n {\n if (this.n < this.buf.length && this.buf[this.n] === Equal)\n {\n this.n++;\n this.pushSpecial(TokType.LessThanEqual)\n }\n else\n this.pushSpecial(TokType.LessThan)\n }\n else if (c === Equal)\n this.pushSpecial(TokType.Equal)\n else if (c === Exclamation)\n {\n if (this.n < this.buf.length && this.buf[this.n] === Equal)\n {\n this.n++;\n this.pushSpecial(TokType.NotEqual)\n }\n else\n this.tok[this.toklen++] = c;\n }\n else\n this.tok[this.toklen++] = c;\n }\n this.pushText();\n }\n\n}\n\nclass Parser\n{\n clauses: Clause[];\n\n constructor() { }\n\n get clause(): Clause { return this.clauses && this.clauses.length == 1 ? this.clauses[0] : undefined }\n\n initFromTokens(tokens: Token[])\n {\n this.clausesFromTokens(tokens);\n }\n\n initFromClauses(clauses: Clause[])\n {\n this.clauses = clauses;\n this.combineParenthetical();\n this.convertOpToText();\n this.combineUnary();\n this.convertOpToText();\n this.combineBinary(TokType.Colon);\n this.convertOpToText();\n this.combineBinary(TokType.And);\n this.convertOpToText();\n this.combineBinary(TokType.Or);\n this.convertOpToText();\n this.combineImplicitAnd();\n }\n\n convertOpToText(): void\n {\n // walk through and convert naked ops to simple text matches (so \"state: or\" matches oregon rather than being invalid)\n this.clauses.forEach((c, i) => {\n let bad = false;\n switch (c.op.tt)\n {\n case TokType.And:\n case TokType.Or:\n case TokType.Colon:\n if (c.operand1 == null)\n {\n if (i == 0 || i == this.clauses.length-1)\n bad = true;\n else\n {\n let cBefore = this.clauses[i-1];\n if (cBefore.operand1 == null && tokIsBinary(cBefore.op.tt))\n bad = true;\n }\n }\n break;\n case TokType.Not:\n case TokType.GreaterThan:\n case TokType.LessThan:\n case TokType.GreaterThanEqual:\n case TokType.LessThanEqual:\n case TokType.Equal:\n case TokType.NotEqual:\n if (c.operand1 == null && i == this.clauses.length-1)\n bad = true;\n break;\n }\n if (bad)\n c.op = { tt: TokType.Text, text: tokToText(c.op.tt) };\n });\n }\n\n combineParenthetical(): void\n {\n for (let i: number = 0; i < this.clauses.length; i++)\n {\n let c = this.clauses[i];\n if (c.op.tt === TokType.OpenParen)\n {\n let depth = 1;\n let j = i+1;\n for (; j < this.clauses.length; j++)\n {\n let c1 = this.clauses[j];\n if (c1.op.tt === TokType.OpenParen)\n depth++;\n else if (c1.op.tt === TokType.CloseParen)\n depth--;\n if (depth == 0)\n break;\n }\n // Pull out stuff inside parens\n let clauses = this.clauses.splice(i+1, j-(i+1));\n // Parse it\n let parser = new Parser();\n parser.initFromClauses(clauses);\n // Insert it back, deleting parens along the way\n if (parser.clause)\n this.clauses.splice(i, 2, parser.clause);\n else\n this.clauses.splice(i, 2);\n }\n else if (c.op.tt === TokType.CloseParen) // malformed - extra paren\n {\n this.clauses.splice(i, 1);\n i--;\n }\n }\n }\n\n combineUnary(): void\n {\n // go backwards to handle not not\n for (let i: number = this.clauses.length-1; i >= 0; i--)\n {\n let c = this.clauses[i];\n if (tokIsUnary(c.op.tt))\n {\n let notclause = (i < this.clauses.length-1) ? { op: c.op, operand1: this.clauses[i+1] } : undefined;\n if (notclause)\n this.clauses.splice(i, 2, notclause);\n else\n this.clauses.splice(i, 1);\n }\n }\n }\n\n combineColon(): void\n {\n for (let i: number = 0; i < this.clauses.length; i++)\n {\n let c = this.clauses[i];\n\n if (c.op.tt === TokType.Colon && c.operand1 == null)\n {\n if (i === 0) // malformed, but ignore\n this.clauses.splice(i, 1);\n else\n {\n c = { op: c.op, operand1: this.clauses[i-1], operand2: null };\n this.clauses.splice(i-1, 2, c);\n i--;\n }\n }\n }\n }\n\n combineBinary(tt: TokType): void\n {\n for (let i: number = 0; i < this.clauses.length; i++)\n {\n let c = this.clauses[i];\n\n if (c.op.tt === tt)\n if (c.operand1 == null)\n {\n if (i === 0 || i === this.clauses.length-1) // malformed, but ignore\n this.clauses.splice(i, 1);\n else\n {\n c = { op: c.op, operand1: this.clauses[i-1], operand2: this.clauses[i+1] };\n this.clauses.splice(i-1, 3, c);\n i--;\n }\n }\n else if (c.operand2 == null) // just colon where name binds earlier in combineColon\n {\n if (i === this.clauses.length-1) // malformed, but ignore\n this.clauses.splice(i, 1);\n else\n {\n c.operand2 = this.clauses[i+1];\n this.clauses.splice(i+1, 1);\n }\n }\n }\n }\n\n combineImplicitAnd(): void\n {\n while (this.clauses.length > 1)\n {\n let c: Clause = { op: { tt: TokType.And }, operand1: this.clauses[0], operand2: this.clauses[1] };\n this.clauses.splice(0, 2, c);\n }\n }\n\n clausesFromTokens(tokens: Token[]): void\n {\n let clauses: Clause[] = [];\n // combine sequential text tokens into AND clauses, push rest as distinct clauses\n for (let i: number = 0; i < tokens.length; i++)\n {\n let t = tokens[i];\n if (t.tt === TokType.Text)\n {\n let c: Clause = { op: t };\n let j = i+1;\n for (; j < tokens.length; j++)\n {\n let jt = tokens[j];\n if (jt.tt === TokType.Text)\n c = { op: { tt: TokType.And }, operand1: c, operand2: { op: jt } };\n else\n break;\n }\n clauses.push(c);\n i = j-1;\n }\n else\n clauses.push({ op: t });\n }\n this.initFromClauses(clauses);\n }\n}\n\nfunction wordyDate(s: string): string\n{\n let d = new Date(s);\n let now = new Date();\n let yyyyNow = now.getFullYear();\n let mmmNow = now.getMonth();\n let ddNow = now.getDate();\n\n let mmm = d.getMonth();\n let dd = d.getDate();\n let yyyy = d.getFullYear();\n\n s = Util.prettyDate(d);\n if (yyyyNow === yyyy && mmmNow === mmm && ddNow === dd)\n s = 'today ' + s;\n\n // If I get ambitious, could add \"yesterday\", \"this week\", \"last week\", \"this month\", \"last month\", \"this year\"\n // But this is close enough to match what gets displayed by \"prettyDate\" while also letting selection by month year\n\n return s;\n}\n\nexport class FilterExpr\n{\n lexer: Lexer;\n parser: Parser;\n\n constructor(coder: Util.Coder, expr?: string)\n {\n this.lexer = new Lexer(coder);\n this.parser = new Parser;\n if (expr) this.set(expr);\n }\n\n set(expr: string): void\n {\n this.lexer.set(expr);\n this.parser.initFromTokens(this.lexer.tokens);\n }\n\n test(o: any, types?: any): boolean\n {\n return this.testClause(o, types, this.parser.clause);\n }\n\n asString(): string\n {\n return this.asStringClause(this.parser.clause);\n }\n\n asStringClause(clause: Clause): string\n {\n if (clause == null) return '';\n if (clause.op.tt == TokType.Text) return `'${clause.op.text}'`;\n let a: string[] = [];\n a.push('(');\n switch (clause.op.tt)\n {\n case TokType.And:\n a.push(this.asStringClause(clause.operand1));\n a.push('and');\n a.push(this.asStringClause(clause.operand2));\n break;\n case TokType.Or:\n a.push(this.asStringClause(clause.operand1));\n a.push('or');\n a.push(this.asStringClause(clause.operand2));\n break;\n case TokType.Not:\n a.push('not');\n a.push(this.asStringClause(clause.operand1));\n break;\n case TokType.Colon:\n a.push(this.asStringClause(clause.operand1));\n a.push(':');\n a.push(this.asStringClause(clause.operand2));\n break;\n case TokType.Equal:\n case TokType.LessThan:\n case TokType.GreaterThan:\n case TokType.LessThanEqual:\n case TokType.GreaterThanEqual:\n case TokType.NotEqual:\n a.push(tokToText(clause.op.tt));\n a.push(this.asStringClause(clause.operand1));\n break;\n default:\n throw 'Unexpected token in asString';\n }\n a.push(')');\n return a.join(' ');\n }\n\n testClause(o: any, types: any, clause: Clause, prop?: string, relation?: TokType): boolean\n {\n if (clause == null) return true;\n switch (clause.op.tt)\n {\n case TokType.Text:\n for (let p in o) if (o.hasOwnProperty(p) && (prop == null || p.toLowerCase() === prop))\n {\n let s = String(o[p]);\n if (s)\n {\n let t = types ? types[p] : undefined;\n if (t === 'skip')\n continue;\n if (t && t === 'date')\n s = wordyDate(s);\n s = s.toLowerCase();\n if (relation === undefined)\n {\n if (s.indexOf(clause.op.text) >= 0)\n return true;\n }\n else\n {\n let op2: any = isNaN(Number(clause.op.text)) ? clause.op.text : Number(clause.op.text);\n let op1: any = typeof op2 === 'number' ? Number(s) : s;\n switch (relation)\n {\n case TokType.Equal: return op1 === op2;\n case TokType.LessThan: return op1 < op2;\n case TokType.LessThanEqual: return op1 <= op2;\n case TokType.GreaterThanEqual: return op1 >= op2;\n case TokType.GreaterThan: return op1 > op2;\n case TokType.NotEqual: return op1 !== op2;\n }\n }\n }\n }\n return false;\n\n case TokType.Colon:\n if (clause.operand1 && clause.operand1.op.tt === TokType.Text)\n prop = clause.operand1.op.text;\n return this.testClause(o, types, clause.operand2, prop);\n \n case TokType.Not:\n return ! this.testClause(o, types, clause.operand1, prop);\n\n case TokType.Equal:\n case TokType.LessThan:\n case TokType.GreaterThan:\n case TokType.LessThanEqual:\n case TokType.GreaterThanEqual:\n case TokType.NotEqual:\n return this.testClause(o, types, clause.operand1, prop, clause.op.tt);\n\n case TokType.And:\n return this.testClause(o, types, clause.operand1, prop) && this.testClause(o, types, clause.operand2, prop);\n\n case TokType.Or:\n return this.testClause(o, types, clause.operand1, prop) || this.testClause(o, types, clause.operand2, prop);\n\n default:\n throw 'Unexpected token in clause';\n }\n // NOTREACHED\n }\n}\n","export * from './fsm';\n","// Shared libraries\nimport * as Util from '../util/all';\n\n// States\nexport const FSM_STARTING: number = 0;\nexport const FSM_PENDING: number = 1<<0;\nexport const FSM_DONE: number = 1<<1;\nexport const FSM_ERROR: number = 1<<2;\nexport const FSM_RELEASED: number = 1<<3;\nexport const FSM_CUSTOM1: number = 1<<4;\nexport const FSM_CUSTOM2: number = 1<<5;\nexport const FSM_CUSTOM3: number = 1<<6;\nexport const FSM_CUSTOM4: number = 1<<7;\nexport const FSM_CUSTOM5: number = 1<<8;\nexport const FSM_CUSTOM6: number = 1<<9;\nexport const FSM_CUSTOM7: number = 1<<10;\nexport const FSM_CUSTOM8: number = 1<<11;\nexport const FSM_CUSTOM9: number = 1<<12;\n\n// polyfill\nlet doLater: any = global && global.setImmediate ? setImmediate : (cb: any) => { setTimeout(cb, 0) };\n\nfunction FsmDone(s: number): boolean\n{\n return (s === FSM_DONE || s === FSM_ERROR || s === FSM_RELEASED);\n}\n\nfunction FsmStateToString(state: number): string\n{\n let a: string[] = [];\n\n if (state === FSM_STARTING)\n return 'starting';\n else\n {\n if (state === FSM_PENDING) a.push('pending');\n if (state === FSM_DONE) a.push('done');\n if (state === FSM_ERROR) a.push('error');\n if (state === FSM_RELEASED) a.push('released');\n if (state === FSM_CUSTOM1) a.push('custom1');\n if (state === FSM_CUSTOM2) a.push('custom2');\n if (state === FSM_CUSTOM3) a.push('custom3');\n if (state === FSM_CUSTOM4) a.push('custom4');\n if (state === FSM_CUSTOM5) a.push('custom5');\n if (state === FSM_CUSTOM6) a.push('custom6');\n if (state === FSM_CUSTOM7) a.push('custom7');\n if (state === FSM_CUSTOM8) a.push('custom8');\n if (state === FSM_CUSTOM9) a.push('custom9');\n return a.join('|');\n }\n}\n\nexport type FsmIndex = { [key: number]: Fsm };\n\nexport class FsmManager\n{\n theId: number;\n theEpoch: number;\n bTickSet: boolean;\n theTickList: FsmIndex;\n theBusyLoopCount: number;\n\n constructor()\n {\n this.theId = 0;\n this.theEpoch = 0;\n this.bTickSet = false;\n this.theTickList = {};\n this.theBusyLoopCount = 0;\n this.doTick = this.doTick.bind(this);\n }\n\n forceTick(fsm: Fsm): void\n {\n this.theTickList[fsm.id] = fsm;\n if (! this.bTickSet)\n {\n this.bTickSet = true;\n doLater(this.doTick);\n }\n }\n\n doTick(): void\n {\n this.bTickSet = false;\n let nLoops: number = 0;\n\n while (nLoops < 1 && !Util.isEmpty(this.theTickList))\n {\n nLoops++;\n let thisTickList = this.theTickList;\n this.theTickList = {};\n\n for (let id in thisTickList) if (thisTickList.hasOwnProperty(id))\n {\n let f = thisTickList[id];\n f.preTick();\n f.tick();\n }\n }\n\n if (Util.isEmpty(this.theTickList))\n this.theBusyLoopCount = 0;\n else\n this.theBusyLoopCount++;\n\n this.theEpoch++;\n }\n\n}\n\nexport interface FsmEnvironment\n{\n fsmManager: FsmManager;\n}\n\nexport class Fsm\n{\n id: number;\n state: number;\n dependentError: boolean;\n epochDone: number;\n _env: FsmEnvironment;\n _waitOn: FsmIndex;\n _waitedOn: FsmIndex;\n\n constructor(env: FsmEnvironment)\n {\n this._env = env;\n this.id = this.manager.theId++;\n this.state = FSM_STARTING;\n this.dependentError = false;\n this.epochDone = -1;\n this._waitOn = null;\n this._waitedOn = null;\n this.manager.forceTick(this);\n }\n\n get env(): FsmEnvironment { return this._env; }\n get manager(): FsmManager { return this.env.fsmManager; }\n\n get done(): boolean\n {\n return FsmDone(this.state);\n }\n\n get ready(): boolean\n {\n return !this.done && this._waitOn == null;\n }\n\n get iserror(): boolean\n {\n return (this.state === FSM_ERROR);\n }\n\n get isDependentError(): boolean\n {\n return this.dependentError;\n }\n\n setDependentError(): void\n {\n this.dependentError = true;\n }\n\n clearDependentError(): void\n {\n this.dependentError = false;\n }\n\n get ticked(): boolean\n {\n return this.done && this.manager.theEpoch > this.epochDone;\n }\n\n get nWaitOn(): number\n {\n return Util.countKeys(this._waitOn);\n }\n\n get nWaitedOn(): number\n {\n return Util.countKeys(this._waitedOn);\n }\n\n waitOn(fsm: Fsm | Fsm[]): Fsm\n {\n if (fsm == null)\n return this;\n else if (Array.isArray(fsm))\n {\n for (let i: number = 0; i < fsm.length; i++)\n this.waitOn(fsm[i]);\n }\n else\n {\n if (fsm.done)\n {\n // If dependency is already done, don't add to waitOn list but ensure that\n // this Fsm gets ticked during next epoch. This is because the dependent tick\n // only happens when the dependency state is changed.\n this.manager.forceTick(this);\n if (fsm.iserror)\n this.setDependentError();\n }\n else\n {\n if (this._waitOn == null) this._waitOn = {};\n this._waitOn[fsm.id] = fsm;\n if (fsm._waitedOn == null) fsm._waitedOn = {};\n fsm._waitedOn[this.id] = this;\n }\n }\n return this;\n }\n\n setState(state: number): void\n {\n this.state = state;\n if (this.done)\n {\n while (this._waitedOn)\n {\n let on = this._waitedOn;\n this._waitedOn = null;\n for (let id in on) if (on.hasOwnProperty(id))\n {\n let f = on[id];\n if (this.iserror) f.setDependentError();\n this.manager.forceTick(f);\n }\n }\n\n this.epochDone = this.manager.theEpoch;\n }\n this.manager.forceTick(this);\n }\n\n // Can override if need to do more here\n end(state: number = FSM_DONE): void\n {\n this.setState(state);\n }\n\n // Cleans up _waitOn\n preTick(): void\n {\n if (this._waitOn == null) return;\n let bMore: boolean = false;\n for (let id in this._waitOn) if (this._waitOn.hasOwnProperty(id))\n {\n let fsm = this._waitOn[id];\n if (fsm.done)\n delete this._waitOn[id];\n else\n bMore = true;\n }\n if (!bMore) this._waitOn = null;\n }\n\n tick(): void\n {\n }\n}\n\n// Launches callback provided when the associated Fsm (or Fsm array) completes.\nexport class FsmOnDone extends Fsm\n{\n cb: any;\n fsm: Fsm | Fsm[];\n\n constructor(env: FsmEnvironment, fsm: Fsm | Fsm[], cb: any)\n {\n super(env);\n this.waitOn(fsm);\n this.fsm = fsm;\n this.cb = cb;\n }\n\n tick(): void\n {\n if (this.ready && this.state == FSM_STARTING)\n {\n this.setState(this.isDependentError ? FSM_ERROR : FSM_DONE);\n this.cb(this.fsm);\n }\n }\n}\n\nexport class FsmSleep extends Fsm\n{\n delay: number;\n\n constructor(env: FsmEnvironment, delay: number)\n {\n super(env);\n this.delay = delay;\n }\n\n tick(): void\n {\n if (this.ready && this.state === FSM_STARTING)\n {\n this.setState(FSM_PENDING);\n setTimeout(() => { this.setState(FSM_DONE); }, this.delay);\n }\n }\n}\n\nexport type SerializerIndex = { [key: string]: Fsm };\n\nexport class FsmSerializer extends Fsm\n{\n index: SerializerIndex;\n\n constructor(env: FsmEnvironment)\n {\n super(env);\n this.index = {};\n }\n\n serialize(id: string, fsm?: Fsm): Fsm\n {\n let prev = this.index[id];\n if (prev && !fsm) return prev;\n if (prev !== undefined)\n fsm.waitOn(prev);\n this.index[id] = fsm;\n if (this.done)\n this.setState(FSM_STARTING);\n this.waitOn(fsm);\n return prev;\n }\n\n tick(): void\n {\n // If fully quiescent, take advantage to clear the waiting cache.\n if (this.ready && this.state == FSM_STARTING)\n {\n this.index = {};\n this.setState(FSM_DONE);\n }\n }\n}\n\n// The FsmTracker class provides a mechanism for serializing a set of finite state\n// machines identified by a consistent unique identifier. A finite state machine is\n// \"tracked\" until completion. If any other finite state machine calls \"maybeWait\"\n// while any other are tracked and pending, that FSM will wait for the others to\n// complete.\n//\n\nclass FsmTrackerWrap extends Fsm\n{\n index: FsmTracker;\n uid: string;\n fsm: Fsm;\n\n constructor(env: FsmEnvironment, index: FsmTracker, uid: string, fsm: Fsm)\n {\n super(env);\n this.index = index;\n this.uid = uid;\n this.fsm = fsm;\n index._track(uid, fsm);\n this.waitOn(fsm);\n }\n\n tick(): void\n {\n if (this.ready && this.state == FSM_STARTING)\n {\n this.index._untrack(this.uid, this.fsm);\n this.setState(FSM_DONE);\n }\n }\n}\n\ntype FsmArrayMap = { [key: string]: Fsm[] };\n\nexport class FsmTracker\n{\n env: FsmEnvironment;\n map: FsmArrayMap;\n\n constructor(env: FsmEnvironment)\n {\n this.env = env;\n this.map = {};\n }\n\n _track(uid: string, fsm: Fsm): void\n {\n let a = this.map[uid];\n if (a === undefined)\n {\n a = [];\n this.map[uid] = a;\n }\n a.push(fsm);\n }\n\n _untrack(uid: string, fsm: Fsm): void\n {\n let a = this.map[uid];\n if (a)\n {\n for (let i: number = 0; i < a.length; i++)\n if (a[i] === fsm)\n {\n if (a.length == 1)\n delete this.map[uid];\n else\n a.splice(i, 1);\n break;\n }\n }\n }\n\n track(uid: string, fsm: Fsm): Fsm\n {\n return new FsmTrackerWrap(this.env, this, uid, fsm);\n }\n\n maybeWait(uid: string, fsm: Fsm): void\n {\n fsm.waitOn(this.map[uid]);\n }\n}\n\n\n// FsmLoop: repeat the Fsm passed in (resetting to STARTING state after finished) at some minimum interval.\n// Assumes that the Fsm can be correctly reset and restarted by setting the state.\n//\n\nexport interface LoopOptions\n{\n minRepeatInterval?: number;\n exitOnError?: boolean;\n}\n\nexport const DefaultLoopOptions = { minRepeatInterval: 0, exitOnError: true };\n\nconst FSM_DELAYING = FSM_CUSTOM1;\n\nexport class FsmLoop extends Fsm\n{\n fsm: Fsm;\n options: LoopOptions;\n elapsed: Util.Elapsed;\n\n constructor(env: FsmEnvironment, fsm: Fsm, options?: LoopOptions)\n {\n super(env);\n this.fsm = fsm;\n this.elapsed = new Util.Elapsed();\n this.options = Util.shallowAssignImmutable(DefaultLoopOptions, options);\n this.waitOn(fsm);\n }\n\n tick(): void\n {\n if (this.ready && this.isDependentError)\n {\n if (this.options.exitOnError)\n this.setState(FSM_ERROR);\n else\n this.clearDependentError();\n // Fall through\n }\n\n if (this.ready)\n {\n switch (this.state)\n {\n case FSM_STARTING:\n let msLeft = this.options.minRepeatInterval - this.elapsed.ms();\n if (msLeft > 0)\n this.waitOn(new FsmSleep(this.env, msLeft));\n this.setState(FSM_DELAYING);\n break;\n\n case FSM_DELAYING:\n this.elapsed.start();\n this.fsm.setState(FSM_STARTING);\n this.waitOn(this.fsm);\n this.setState(FSM_STARTING);\n break;\n }\n }\n }\n}\n\nexport interface ISet\n{\n test: (o: any) => boolean;\n reset: () => void;\n}\n\nexport class FsmArray extends Fsm\n{\n a: any[];\n iset: ISet;\n\n constructor(env: FsmEnvironment, iset?: ISet)\n {\n super(env);\n this.iset = iset;\n this.a = [];\n }\n\n push(o: any): void\n {\n if (this.iset == null || !this.iset.test(o))\n {\n if (! this.done) this.setState(FSM_DONE);\n this.a.push(o);\n }\n }\n\n concat(a: any[]): void\n {\n if (a)\n {\n for (let i: number = 0; i < a.length; i++)\n this.push(a[i]);\n }\n }\n\n splice(i?: number, n?: number): void\n {\n if (i === undefined)\n this.reset();\n else\n {\n this.a.splice(i, n);\n if (this.a.length == 0)\n this.reset();\n }\n }\n\n reset(): void\n {\n this.a = [];\n if (this.iset) this.iset.reset();\n this.setState(FSM_STARTING);\n }\n}\n","export * from './fsmfile';\n","// Node libraries\nimport * as fs from 'fs';\n\n// Shared libraries\nimport * as LogAbstract from '../logabstract/all';\nimport * as FSM from '../fsm/all';\n\nexport interface Environment\n{\n log: LogAbstract.ILog;\n fsmManager: FSM.FsmManager;\n}\n\nconst FSM_READING = FSM.FSM_CUSTOM1;\nconst FSM_WRITING = FSM.FSM_CUSTOM1;\n\nexport class FsmUnlink extends FSM.Fsm\n{\n path: string;\n err: any;\n\n constructor(env: Environment, path: string)\n {\n super(env);\n this.path = path;\n this.err = null;\n }\n\n tick(): void\n {\n if (this.ready && this.state === FSM.FSM_STARTING)\n {\n this.setState(FSM.FSM_PENDING);\n fs.unlink(this.path, (err: any) => {\n if (err)\n {\n this.setState(FSM.FSM_ERROR);\n this.err = err;\n }\n else\n this.setState(FSM.FSM_DONE);\n });\n }\n }\n}\n\nexport class FsmMkdir extends FSM.Fsm\n{\n dir: string;\n bAllowExist: boolean;\n err: any;\n\n constructor(env: Environment, dir: string, bAllowExist: boolean = true)\n {\n super(env);\n this.dir = dir;\n this.err = null;\n this.bAllowExist = true;\n }\n\n tick(): void\n {\n if (this.ready && this.state == FSM.FSM_STARTING)\n {\n this.err = null;\n this.setState(FSM.FSM_PENDING);\n fs.mkdir(this.dir, 0o777, (err: any) => {\n // ignore EEXISTS errors\n if (err === null || (this.bAllowExist && err.code === 'EEXIST'))\n this.setState(FSM.FSM_DONE);\n else\n {\n this.err = err;\n this.setState(FSM.FSM_ERROR);\n }\n });\n }\n }\n}\n\nexport class FsmRmdir extends FSM.Fsm\n{\n dir: string;\n err: any;\n\n constructor(env: Environment, dir: string)\n {\n super(env);\n this.dir = dir;\n }\n\n tick(): void\n {\n if (this.ready && this.state == FSM.FSM_STARTING)\n {\n this.err = null;\n this.setState(FSM.FSM_PENDING);\n fs.rmdir(this.dir, (err: any) => {\n // ignore ENOENT errors\n if (err === null || err.code === 'ENOENT')\n this.setState(FSM.FSM_DONE);\n else\n {\n this.err = err;\n this.setState(FSM.FSM_ERROR);\n }\n });\n }\n }\n}\n\nexport class FsmLs extends FSM.Fsm\n{\n dir: string;\n err: any;\n entries: string[];\n\n constructor(env: Environment, dir: string)\n {\n super(env);\n this.dir = dir;\n this.err = null;\n }\n\n tick(): void\n {\n if (this.ready)\n {\n switch (this.state)\n {\n case FSM.FSM_STARTING:\n this.setState(FSM.FSM_PENDING);\n fs.readdir(this.dir, (err: any, entries: string[]) => {\n if (err)\n {\n this.err = err;\n this.setState(FSM.FSM_ERROR);\n }\n else\n {\n this.entries = entries;\n this.setState(FSM.FSM_DONE);\n }\n });\n break;\n }\n }\n }\n}\n\nexport class FsmReadFile extends FSM.Fsm\n{\n path: string;\n result: string;\n err: any;\n\n constructor(env: Environment, path: string)\n {\n super(env);\n\n this.path = path;\n this.result = null;\n this.err = null;\n }\n\n tick(): void\n {\n if (this.ready)\n {\n switch (this.state)\n {\n case FSM.FSM_STARTING:\n this.err = null;\n this.result = null;\n this.setState(FSM_READING);\n fs.readFile(this.path, 'utf8', (err: any, data: string) => {\n if (err)\n {\n this.result = null;\n this.err = err;\n this.setState(FSM.FSM_ERROR);\n }\n else\n {\n this.err = null;\n this.result = data;\n this.setState(FSM.FSM_DONE);\n }\n });\n break;\n }\n }\n }\n}\n\nexport class FsmWriteFile extends FSM.Fsm\n{\n path: string;\n contents: string | Buffer;\n err: any;\n\n constructor(env: Environment, path: string, contents: string | Buffer)\n {\n super(env);\n\n this.path = path;\n this.contents = contents;\n this.err = null;\n }\n\n tick(): void\n {\n if (this.ready)\n {\n switch (this.state)\n {\n case FSM.FSM_STARTING:\n this.err = null;\n this.setState(FSM_WRITING);\n fs.writeFile(this.path, this.contents, (err: any) => {\n if (err)\n {\n this.err = err;\n this.setState(FSM.FSM_ERROR);\n }\n else\n {\n this.err = null;\n this.setState(FSM.FSM_DONE);\n }\n });\n break;\n }\n }\n }\n}\n","export * from './jsonstream';\n","// Node libraries\nimport * as Stream from 'stream';\nimport * as Events from 'events';\n\n// Shared libraries\nimport * as Util from '../util/all';\n\n// Acts like Stream.Readable, emits 'error', 'close', 'data', 'end'\nexport class Readable extends Events.EventEmitter\n{\n constructor()\n {\n super();\n }\n}\n\n// Acts like Stream.Writable, emits 'error', 'close', 'drain', 'finish''\nexport class Writable extends Events.EventEmitter\n{\n constructor()\n {\n super();\n }\n\n // override\n write(b: any, encoding?: BufferEncoding, cb?: () => void): boolean\n {\n return true;\n }\n\n // override\n end(): void\n {\n this.emit('finish');\n }\n}\n\n// Useful class for having JSONStreamWriter generate a Buffer\nexport class BufferWritable extends Writable\n{\n _bufs: Buffer[];\n _buf: Buffer;\n\n constructor()\n {\n super();\n this._bufs = [];\n this._buf = null;\n }\n\n write(b: any, encoding?: BufferEncoding, cb?: () => void): boolean\n {\n if (typeof b === 'string')\n b = Buffer.from(b as string, encoding);\n this._bufs.push(b as Buffer);\n if (this._bufs.length > 100) this._bufs = [ Buffer.concat(this._bufs) ];\n return true;\n }\n\n end(): void\n {\n this._buf = Buffer.concat(this._bufs);\n this.emit('finish', this._buf);\n }\n}\n\n// Useful class for having JSONStreamReader read from an existing Buffer\nexport class BufferReadable extends Stream.Readable\n{\n _b: Buffer;\n\n constructor(b: Buffer)\n {\n super({});\n this._b = b;\n }\n\n _read(): void\n {\n if (this._b)\n {\n this.push(this._b);\n this.push(null);\n this._b = null;\n }\n }\n}\n\nexport class MultiBufferReadable extends Stream.Readable\n{\n constructor()\n {\n super({});\n }\n\n _read(): void\n {\n }\n\n more(buf: Buffer): void\n {\n this.push(buf);\n }\n\n end(): void\n {\n this.push(null);\n }\n}\n\nenum ReadState {\n Start,\n ObjectPropertyStart,\n ObjectPropertyEnd,\n ValueStart,\n ValueEnd,\n InName,\n InNameBackslash,\n NeedColon,\n InNumber,\n InString,\n InStringBackslash,\n InTrue,\n InFalse,\n InNull,\n InUndefined,\n Error,\n Ended\n };\n\nconst CurlyOpen = 123;\nconst CurlyClose = 125;\nconst SquareOpen = 91;\nconst SquareClose = 93;\nconst Comma = 44;\nconst Colon = 58;\nconst Quote = 34;\nconst Backslash = 92;\nconst Forwardslash = 47\nconst Zero = 48;\nconst Nine = 57;\nconst Minus = 45;\nconst Plus = 43;\nconst Period = 46;\nconst UpperA = 65;\nconst LowerA = 97;\nconst UpperB = 66;\nconst LowerB = 98;\nconst UpperE = 69;\nconst LowerE = 101;\nconst UpperF = 70;\nconst LowerF = 102;\nconst UpperN = 78;\nconst LowerN = 110;\nconst UpperR = 82;\nconst LowerR = 114;\nconst UpperT = 84;\nconst LowerT = 116;\nconst UpperU = 85;\nconst LowerU = 117;\nconst UpperZ = 90;\nconst LowerZ = 122;\nconst Space = 32;\nconst Backspace = 8;\nconst Tab = 9;\nconst Newline = 10;\nconst CR = 13;\n\n\nfunction isWhite(c: number): boolean\n{\n return c == Space || c == Newline || c == Tab || c == CR;\n}\n\nfunction isEscapable(c: number): number\n{\n switch (c)\n {\n case Quote: return Quote;\n case Backslash: return Backslash;\n case Forwardslash: return Forwardslash;\n case UpperB:\n case LowerB: return Backspace; \n case UpperT:\n case LowerT: return Tab;\n case UpperN:\n case LowerN: return Newline;\n case UpperR:\n case LowerR: return CR;\n\n // TODO: Really should support unicode \\uHHHH\n default:\n return -1;\n }\n}\n\nfunction isNumeric(c: number): boolean\n{\n return (c >= Zero && c <= Nine) || c == Minus || c == Plus || c == UpperE || c == LowerE || c == Period;\n}\n\nfunction isAlpha(c: number): boolean\n{\n return (c >= UpperA && c <= UpperZ) || (c >= LowerA && c <= LowerZ);\n}\n\nenum TokType { TTNone, TTArray, TTObject, TTName, TTString, TTNumber, TTTrue, TTFalse, TTNull, TTUndefined };\n\ninterface Token\n{\n tt: TokType;\n v: any;\n emit?: string;\n}\n\nexport interface JSONStreamOptions\n{\n maxTokenSize?: number;\n outBufferSize?: number;\n encoding?: BufferEncoding;\n syncChunkSize?: number;\n}\n\nconst DefaultStreamOptions: JSONStreamOptions =\n{\n maxTokenSize: 10000,\n outBufferSize: 10000,\n encoding: 'utf8',\n syncChunkSize: 10000,\n}\n\nexport class JSONStreamReader extends Events.EventEmitter\n{\n _s: Readable;\n _charCount: number;\n _lineCount: number;\n _state: ReadState;\n _tok: Buffer;\n _tokLen: number;\n _stack: Token[];\n _result: any;\n _incr: any;\n _options: JSONStreamOptions;\n _chunks: Buffer[];\n _chunkCur: number;\n _chunkIndex: number;\n _chunkScheduled: boolean;\n _ended: boolean;\n _closed: boolean;\n\n constructor(options?: JSONStreamOptions)\n {\n super();\n this.onData = this.onData.bind(this);\n this.onClose = this.onClose.bind(this);\n this.onEnd = this.onEnd.bind(this);\n this.onError = this.onError.bind(this);\n this.nextChunk = this.nextChunk.bind(this);\n this._state = ReadState.Start;\n this._charCount = 1;\n this._lineCount = 1;\n this._stack = [];\n this._result = undefined;\n this._incr = {};\n this._options = Util.shallowAssignImmutable(DefaultStreamOptions, options);\n this._tok = Buffer.alloc(this._options.maxTokenSize);\n this._tokLen = 0;\n this._s = undefined;\n this._chunks = [];\n this._chunkCur = 0;\n this._chunkIndex = 0;\n this._chunkScheduled = false;\n this._ended = false;\n this._closed = false;\n }\n\n start(s: Readable): void\n {\n this._s = s;\n this._s.on('close', this.onClose);\n this._s.on('end', this.onEnd);\n this._s.on('error', this.onError);\n this._s.on('data', this.onData);\n }\n\n finish(): void\n {\n this._s.off('close', this.onClose);\n this._s.off('end', this.onEnd);\n this._s.off('error', this.onError);\n this._s.off('data', this.onData);\n this._s = undefined;\n }\n\n emitIncremental(name: string): void\n {\n this._incr[name] = true;\n }\n\n pushToken(tok: Token): void\n {\n this._stack.push(tok);\n if (tok.tt == TokType.TTArray || tok.tt == TokType.TTObject)\n {\n let prevTok: Token = this._stack.length > 1 ? this._stack[this._stack.length - 2] : null;\n if (prevTok && prevTok.tt == TokType.TTName && this._incr[prevTok.v] == true)\n tok.emit = prevTok.v;\n else if (prevTok == null && this._incr[''] == true) // special-case top-level object\n tok.emit = '';\n }\n }\n\n private badJSON(detail?: string): void\n {\n this._state = ReadState.Error;\n if (detail !== undefined)\n this.emit('error', `Invalid JSON (${detail}) at line ${this._lineCount}, character ${this._charCount}`);\n else\n this.emit('error', `Invalid JSON at line ${this._lineCount}, character ${this._charCount}`);\n this.finish();\n }\n\n private startTok(s: ReadState, c?: number): void\n {\n this._state = s;\n if (c !== undefined)\n this.addToTok(c);\n }\n\n private addToTok(c: number): void\n {\n if (this._tokLen == this._options.maxTokenSize)\n this.badJSON('token too long');\n else\n {\n this._tok.writeUInt8(c, this._tokLen);\n this._tokLen++;\n }\n }\n\n private consumeTok(): string\n {\n let s: string = this._tok.toString(this._options.encoding, 0, this._tokLen);\n this._tokLen = 0;\n return s;\n }\n\n private produceValue(tok: Token): void\n {\n if (this._stack.length == 0)\n {\n this._state = ReadState.Ended;\n this._result = tok.v;\n }\n else\n {\n this._state = ReadState.ValueEnd;\n let topTok: Token = this._stack[this._stack.length - 1];\n if (topTok.tt == TokType.TTArray)\n {\n if (topTok.emit !== undefined)\n this.emit('array', topTok.emit, tok.v);\n else\n topTok.v.push(tok.v);\n }\n else if (topTok.tt == TokType.TTName)\n {\n let p: string = topTok.v;\n this._stack.pop();\n topTok = this._stack[this._stack.length - 1];\n if (topTok.tt != TokType.TTObject)\n this.badJSON();\n else\n {\n if (topTok.emit !== undefined)\n this.emit('object', topTok.emit, p, tok.v);\n else\n topTok.v[p] = tok.v;\n }\n }\n }\n }\n\n private produceValidatedValue(tok: Token): void\n {\n let s: string = tok.v;\n switch (tok.tt)\n {\n case TokType.TTNumber:\n // TODO: Constrained parsing: [-]{0 | [1-9][0-9]*}[.[0-9]+][{e|E}[+-][0-9]+]\n // Optional leading minus, either zero or set of digits not starting with zero.\n // Optional decimal point with required digit sequence\n // Optional exponent, e or E, optional sign, required digit sequence\n tok.v = parseFloat(s);\n break;\n\n case TokType.TTNull:\n if (s != 'null')\n this.badJSON('bad value');\n else\n tok.v = null;\n break;\n\n case TokType.TTUndefined:\n if (s != 'undefined')\n this.badJSON('bad value');\n else\n tok.v = undefined;\n break;\n\n case TokType.TTTrue:\n if (s != 'true')\n this.badJSON('bad value');\n else\n tok.v = true;\n break;\n\n case TokType.TTFalse:\n if (s != 'false')\n this.badJSON('bad value');\n else\n tok.v = false;\n break;\n }\n\n if (this._state != ReadState.Error)\n this.produceValue(tok);\n }\n\n private onData(chunk: Buffer): void\n {\n this._chunks.push(chunk);\n this.nextChunk();\n }\n\n private scheduleNext(): void\n {\n if (this._state != ReadState.Error && this._chunkCur < this._chunks.length)\n {\n if (! this._chunkScheduled)\n {\n this._chunkScheduled = true;\n setImmediate(this.nextChunk);\n }\n }\n else if (this._closed)\n this.doClose();\n else if (this._ended)\n this.doEnd();\n }\n\n private nextChunk(): void\n {\n this._chunkScheduled = false;\n if (this._chunkCur >= this._chunks.length)\n {\n this.scheduleNext();\n return;\n }\n\n let chunk = this._chunks[this._chunkCur];\n let i = this._chunkIndex;\n let e = i + this._options.syncChunkSize;\n if (e > chunk.length) e = chunk.length;\n\n for (; this._state != ReadState.Error && i < e; i++)\n {\n let c: number = chunk[i];\n this._charCount++;\n if (c == 10) { this._lineCount++; this._charCount = 1; }\n\n switch (this._state)\n {\n case ReadState.Start:\n if (! isWhite(c))\n if (c === CurlyOpen)\n {\n this.pushToken({ tt: TokType.TTObject, v: {} });\n this._state = ReadState.ObjectPropertyStart;\n }\n else\n this.badJSON(`Unexpected character: ${String.fromCharCode(c)} in chunk ${chunk.toString('utf8')}`);\n break;\n\n case ReadState.ObjectPropertyStart:\n if (! isWhite(c))\n switch (c)\n {\n case Quote:\n this.startTok(ReadState.InName);\n break;\n case CurlyClose:\n this.produceValue(this._stack.pop());\n break;\n default:\n this.badJSON();\n }\n break;\n\n case ReadState.ValueEnd:\n if (! isWhite(c))\n {\n let topTok: Token = this._stack[this._stack.length - 1];\n if (c == Comma)\n this._state = topTok.tt == TokType.TTArray ? ReadState.ValueStart : ReadState.ObjectPropertyStart;\n else if ((c == SquareClose && topTok.tt == TokType.TTArray) || (c == CurlyClose && topTok.tt == TokType.TTObject))\n this.produceValue(this._stack.pop());\n else\n this.badJSON(`missing comma or ending ${topTok.tt == TokType.TTArray ? 'square' : 'curly'} bracket`);\n }\n break;\n\n case ReadState.ValueStart:\n if (! isWhite(c))\n {\n if (c == CurlyOpen)\n {\n this.pushToken({ tt: TokType.TTObject, v: {} });\n this._state = ReadState.ObjectPropertyStart;\n }\n else if (c == SquareOpen)\n {\n this.pushToken({ tt: TokType.TTArray, v: [] });\n this._state = ReadState.ValueStart;\n }\n else if (c == SquareClose)\n {\n // Could be in array (good) or expecting value of object property (bad)\n let topTok: Token = this._stack[this._stack.length - 1];\n if (topTok.tt == TokType.TTArray)\n this.produceValue(this._stack.pop());\n else\n this.badJSON(`Unexpected character: ${String.fromCharCode(c)} in chunk ${chunk.toString('utf8')}`);\n }\n else if (c == Quote)\n this.startTok(ReadState.InString);\n else if (c == UpperT || c == LowerT)\n this.startTok(ReadState.InTrue, c);\n else if (c == UpperF || c == LowerF)\n this.startTok(ReadState.InFalse, c);\n else if (c == UpperN || c == LowerN)\n this.startTok(ReadState.InNull, c);\n else if (c == UpperU || c == LowerU)\n this.startTok(ReadState.InUndefined, c);\n else if (isNumeric(c))\n this.startTok(ReadState.InNumber, c);\n else\n this.badJSON();\n }\n break;\n\n case ReadState.InName:\n if (c == Backslash)\n this._state = ReadState.InNameBackslash;\n else if (c != Quote)\n this.addToTok(c);\n else\n {\n this.pushToken({ tt: TokType.TTName, v: this.consumeTok() });\n this._state = ReadState.NeedColon;\n }\n break;\n\n case ReadState.InNameBackslash:\n {\n // TODO: add hex encoding support\n let escC = isEscapable(c);\n if (escC < 0)\n this.badJSON(`Illegal escaped character: ${String.fromCharCode(c)}`);\n this.addToTok(escC);\n this._state = ReadState.InName;\n }\n break;\n\n case ReadState.NeedColon:\n if (! isWhite(c))\n if (c !== Colon)\n this.badJSON('expected colon');\n else\n this._state = ReadState.ValueStart;\n break;\n\n case ReadState.InNumber:\n if (isNumeric(c))\n this.addToTok(c);\n else\n {\n this.produceValidatedValue({ tt: TokType.TTNumber, v: this.consumeTok() });\n i--;\n }\n break;\n\n case ReadState.InString:\n if (c == Backslash)\n this._state = ReadState.InStringBackslash;\n else if (c != Quote)\n this.addToTok(c);\n else\n this.produceValue({ tt: TokType.TTString, v: this.consumeTok() });\n break;\n\n case ReadState.InStringBackslash:\n {\n // TODO: add hex encoding support\n let escC = isEscapable(c);\n if (escC < 0)\n this.badJSON(`Illegal escaped character: ${String.fromCharCode(c)}`);\n this.addToTok(escC);\n this._state = ReadState.InString;\n }\n break;\n\n case ReadState.InTrue:\n if (isAlpha(c))\n this.addToTok(c);\n else\n {\n this.produceValidatedValue({ tt: TokType.TTTrue, v: this.consumeTok() });\n i--;\n }\n break;\n\n case ReadState.InFalse:\n if (isAlpha(c))\n this.addToTok(c);\n else\n {\n this.produceValidatedValue({ tt: TokType.TTFalse, v: this.consumeTok() });\n i--;\n }\n break;\n\n case ReadState.InNull:\n if (isAlpha(c))\n this.addToTok(c);\n else\n {\n this.produceValidatedValue({ tt: TokType.TTNull, v: this.consumeTok() });\n i--;\n }\n break;\n\n case ReadState.InUndefined:\n if (isAlpha(c))\n this.addToTok(c);\n else\n {\n this.produceValidatedValue({ tt: TokType.TTUndefined, v: this.consumeTok() });\n i--;\n }\n break;\n\n case ReadState.Ended:\n if (! isWhite(c))\n this.badJSON('unexpected character after end of object');\n break;\n }\n }\n\n // Potentially advance to next chunk and schedule next processing slice\n if (this._state === ReadState.Error)\n {\n this._chunks = [];\n this._chunkCur = 0;\n this._chunkIndex = 0;\n }\n else\n {\n if (e === chunk.length)\n {\n this._chunkIndex = 0;\n if (this._chunkCur === this._chunks.length - 1)\n {\n this._chunks = [];\n this._chunkCur = 0;\n }\n else\n {\n this._chunkCur++;\n if (this._chunkCur >= 100)\n {\n this._chunks.splice(0, this._chunkCur);\n this._chunkCur = 0;\n }\n }\n }\n else\n this._chunkIndex = e;\n }\n this.scheduleNext();\n }\n\n private onClose(): void\n {\n this._closed = true;\n this.scheduleNext();\n }\n\n private doClose(): void\n {\n this._closed = undefined;\n this.doEnd();\n this.emit('close');\n }\n\n private onError(e: Error): void\n {\n this._state = ReadState.Error;\n let s: string = 'stream error';\n if (e && typeof e.message === 'string')\n s = e.message;\n console.log(`jsonreader: emitting error: ${s}`);\n this.emit('error', s);\n this.finish();\n }\n\n private onEnd(): void\n {\n this._ended = true;\n this.scheduleNext();\n }\n\n private doEnd(): void\n {\n this._ended = undefined;\n if (this._state == ReadState.Ended)\n {\n // Only emit once\n if (this._result !== undefined)\n {\n this.emit('end', this._result);\n this._result = undefined;\n this.finish();\n }\n }\n else if (this._state !== ReadState.Error)\n this.badJSON('Unexpected end of input');\n }\n}\n\ninterface ObjectWriteState\n{\n o: any;\n keys: string[];\n index: number;\n}\n\nexport class JSONStreamWriter extends Events.EventEmitter\n{\n _s: Writable;\n _stack: ObjectWriteState[];\n _chunk: Buffer;\n _chunkLen: number;\n _options: JSONStreamOptions;\n _bDone: boolean;\n\n constructor(options?: JSONStreamOptions)\n {\n super();\n this._bDone = false;\n this._s = null;\n this._stack = [];\n this.onDrain = this.onDrain.bind(this);\n this.onError = this.onError.bind(this);\n this.onFinish = this.onFinish.bind(this);\n this.onClose = this.onClose.bind(this);\n this._options = Util.shallowAssignImmutable(DefaultStreamOptions, options);\n this._chunk = Buffer.alloc(this._options.outBufferSize);\n this._chunkLen = 0;\n }\n\n start(o: any, s: Writable): void\n {\n this._s = s;\n this._s.on('drain', this.onDrain);\n this._stack.push({ o: o, keys: Array.isArray(o) ? null : Object.keys(o), index: 0 });\n this.onDrain();\n }\n\n addToChunk(s: string): boolean\n {\n let b = Buffer.from(s as string, this._options.encoding);\n let bContinue: boolean = true;\n\n if (b.length + this._chunkLen > this._options.outBufferSize)\n bContinue = this.drainChunk();\n\n if (b.length > this._options.outBufferSize)\n throw 'Internal error: atom larger than buffer size';\n\n b.copy(this._chunk, this._chunkLen);\n this._chunkLen += b.length;\n return bContinue;\n }\n\n drainChunk(): boolean\n {\n if (this._chunkLen > 0)\n {\n let b: Buffer = this._chunk.slice(0, this._chunkLen);\n\n // false just indicates backpressure - write still succeeded.\n let bDraining: boolean = this._s.write(b);\n\n // Allocate new write buffer to prevent overwriting output buffer before output stream\n // gets chance to copy out the data.\n this._chunk = Buffer.alloc(this._options.outBufferSize);\n this._chunkLen = 0;\n\n return bDraining;\n }\n return true;\n }\n\n onDrain(): void\n {\n let bContinue: boolean;\n\n while (! this._bDone && this._stack.length > 0)\n {\n let top: ObjectWriteState = this._stack[this._stack.length - 1];\n\n // Object\n if (top.keys)\n {\n if (top.keys.length == 0)\n bContinue = this.addToChunk('{');\n let bRecurse = false;\n // Even index means propname not written\n while (! this._bDone && top.index < top.keys.length * 2)\n {\n let ii: number = Math.floor(top.index / 2);\n if ((top.index % 2) == 0)\n {\n let s: string = `${top.index == 0 ? '{' : ','}\"${top.keys[ii]}\":`;\n bContinue = this.addToChunk(s);\n top.index++;\n if (! bContinue)\n return;\n }\n let oo: any = top.o[top.keys[ii]];\n if (oo && typeof oo === 'object')\n {\n bRecurse = true;\n top.index++;\n this._stack.push({ o: oo, keys: Array.isArray(oo) ? null : Object.keys(oo), index: 0 });\n break;\n }\n else\n {\n let s: string = JSON.stringify(oo === undefined ? null : oo);\n bContinue = this.addToChunk(s);\n top.index++;\n if (! bContinue)\n return;\n }\n }\n\n if (! bRecurse)\n {\n bContinue = this.addToChunk('}');\n this._stack.pop();\n if (! bContinue)\n return;\n }\n }\n\n // Array\n else\n {\n if (top.o.length == 0)\n bContinue = this.addToChunk('[');\n let bRecurse = false;\n\n // Even index means separator not written\n while (! this._bDone && top.index < top.o.length * 2)\n {\n let ii: number = Math.floor(top.index / 2);\n if ((top.index % 2) == 0)\n {\n let s: string = top.index == 0 ? '[' : ',';\n bContinue = this.addToChunk(s);\n top.index++;\n if (! bContinue)\n return;\n }\n let oo: any = top.o[ii];\n if (oo && typeof oo === 'object')\n {\n bRecurse = true;\n top.index++;\n this._stack.push({ o: oo, keys: Array.isArray(oo) ? null : Object.keys(oo), index: 0 });\n break;\n }\n else\n {\n let s: string = JSON.stringify(oo === undefined ? null : oo);\n bContinue = this.addToChunk(s);\n top.index++;\n if (! bContinue)\n return;\n }\n }\n\n if (! bRecurse)\n {\n bContinue = this.addToChunk(']');\n this._stack.pop();\n if (! bContinue)\n return;\n }\n }\n }\n\n this.drainChunk();\n this._s.end();\n }\n\n onError(e: Error): void\n {\n this._bDone = true;\n let s: string = 'stream error';\n if (e && typeof e.message === 'string')\n s = e.message;\n console.log(`jsonwriter: emitting error: ${s}`);\n this.emit('error', s);\n }\n\n onClose(): void\n {\n this._bDone = true;\n this.emit('close');\n }\n\n onFinish(): void\n {\n this._bDone = true;\n this.emit('finish');\n }\n}\n","export * from './lambda';\n","// Shared libraries\nimport * as Util from '../util/all';\nimport * as Context from '../context/all';\nimport * as LogAbstract from '../logabstract/all';\nimport * as FSM from '../fsm/all';\n\nimport { Environment } from './env';\n\nimport * as Lambda from 'aws-sdk/clients/lambda';\n\nclass FsmList extends FSM.Fsm\n{\n constructor(env: Environment)\n {\n super(env);\n }\n\n get env(): Environment { return this._env as Environment }\n\n tick(): void\n {\n if (this.ready && this.state === FSM.FSM_STARTING)\n {\n this.setState(FSM.FSM_PENDING);\n this.env.lambdaManager.awslambda.listFunctions({}, (err: any, data: any) => {\n if (err)\n {\n this.env.log.chatter(`listFunctions: failed: ${JSON.stringify(err)}`);\n }\n else\n {\n this.env.log.chatter(`listFunctions: success: ${JSON.stringify(data)}`);\n }\n this.setState(err ? FSM.FSM_ERROR : FSM.FSM_DONE);\n });\n }\n }\n}\n\nexport class FsmInvoke extends FSM.Fsm\n{\n name: string;\n params: any;\n result: any;\n\n constructor(env: Environment, name: string, params: any)\n {\n super(env);\n this.name = name;\n this.params = Util.shallowAssignImmutable({ context: { production: env.context.xnumber('production') } }, params);\n }\n\n get env(): Environment { return this._env as Environment }\n\n tick(): void\n {\n if (this.ready && this.state === FSM.FSM_STARTING)\n {\n this.setState(FSM.FSM_PENDING);\n let awsparam: any = {\n FunctionName: `${this.name}:${this.env.context.xflag('production') ? 'production' : 'development'}`,\n InvocationType: 'RequestResponse',\n LogType: 'None',\n Payload: JSON.stringify(this.params)\n };\n this.env.lambdaManager.awslambda.invoke(awsparam, (err: any, data: any) => {\n let payload: any = data && data.Payload ? data.Payload : null;\n try\n {\n this.result = (typeof payload === 'string') ? JSON.parse(payload) : payload;\n }\n catch (exception)\n {\n this.result = payload;\n }\n if (err)\n {\n this.env.log.chatter(`lambdamanager: invoke ${this.name} error: ${JSON.stringify(err)}`);\n this.env.log.error({ event: 'lambdamanager: invoke error', detail: JSON.stringify(this.result) });\n this.setState(FSM.FSM_ERROR);\n }\n else if (this.result && this.result.errorMessage)\n {\n this.result = { result: 1, message: this.result.errorMessage };\n this.env.log.chatter(`lambdamanager: invoke failure: ${this.name}`);\n this.env.log.event(`lambdamanager: invoke failure: ${this.name}`);\n this.setState(FSM.FSM_ERROR);\n }\n else\n {\n this.env.log.event(`lambdamanager: invoke success: ${this.name}`);\n this.setState(FSM.FSM_DONE);\n }\n });\n }\n }\n}\n\nexport class Manager extends FSM.Fsm\n{\n awslambda: Lambda;\n\n constructor(env: Environment)\n {\n super(env);\n this.awslambda = new Lambda({ apiVersion: '2015-03-31', region: 'us-west-2' });\n }\n\n get env(): Environment { return this._env as Environment }\n\n invoke(name: string, params?: any): FsmInvoke\n {\n return new FsmInvoke(this.env, name, params);\n }\n}\n\nexport function create(env: Environment): Manager\n{\n return new Manager(env);\n}\n","export * from './log';\n","import * as Util from '../util/all';\nimport * as FSM from '../fsm/all';\n\nexport interface ILog\n{\n dump: () => FSM.Fsm;\n stamp: (o: any) => void;\n log: (o: any, verbosity?: number) => void;\n event: (o: any, verbosity?: number) => void;\n error: (o: any) => void;\n value: (o: any, verbosity?: number) => void;\n chatter: (s: string) => void;\n chatters: () => string[];\n}\n\nexport class Timer\n{\n ilog: ILog;\n o: any;\n verbosity: number;\n elapsed: Util.Elapsed;\n\n constructor(ilog: ILog, kind: string, o: any, verbosity: number = 0)\n {\n this.ilog = ilog;\n if (typeof o === 'string') o = { event: o };\n this.o = o;\n this.o.kind = kind;\n this.verbosity = verbosity;\n this.elapsed = new Util.Elapsed();\n }\n\n log(): void\n {\n this.elapsed.end();\n this.o.ms = this.elapsed.ms();\n this.ilog.log(this.o, this.verbosity);\n }\n}\n\nexport class AsyncTimer extends Timer\n{\n constructor(ilog: ILog, o: any, verbosity: number = 0)\n {\n super(ilog, 'async', o, verbosity);\n }\n}\n\nexport class SyncTimer extends Timer\n{\n constructor(ilog: ILog, o: any, verbosity: number = 0)\n {\n super(ilog, 'sync', o, verbosity);\n }\n}\n","export * from './log';\n","import * as Context from '../context/all';\nimport * as LogAbstract from '../logabstract/all';\nimport * as Util from '../util/all';\nimport * as FSM from '../fsm/all';\n\nexport interface LogEnvironment\n{\n context: Context.IContext;\n}\n\nclass LogManager implements LogAbstract.ILog\n{\n env: LogEnvironment;\n count: number;\n\n constructor(env: LogEnvironment)\n {\n this.env = env;\n this.count = 0;\n }\n\n dump(): FSM.Fsm { return null; }\n\n print(o: any): void\n {\n let sa: string[] = [];\n\n if (o._count !== undefined)\n sa.push(String(o._count));\n if (o.kind === 'error')\n {\n sa.push('error');\n sa.push(o.event);\n }\n else if (o.kind !== 'value')\n {\n sa.push('info');\n sa.push(o.event);\n }\n else\n {\n sa.push('value');\n sa.push(o.event);\n sa.push(String(o.value));\n }\n if (o.detail !== undefined)\n sa.push(o.detail);\n console.log(sa.join(': '));\n }\n\n stamp(o: any): void\n {\n this.log(o);\n }\n\n log(o: any, verbosity: number = 0): void\n {\n // Show some restraint\n if (verbosity > this.env.context.xnumber('verbosity'))\n return;\n\n // Inject some standard properties\n o._time = Util.Now();\n o._count = this.count++;\n if (o.kind === undefined)\n o.kind = 'misc';\n this.print(o);\n }\n\n\n event(o: any, verbosity: number = 0): void\n {\n if (typeof o === 'string') o = { event: o };\n o.kind = 'event';\n this.log(o, verbosity);\n }\n\n error(o: any): void\n {\n if (typeof o === 'string') o = { event: o };\n o.kind = 'error';\n this.log(o);\n }\n\n value(o: any, verbosity: number = 0): void\n {\n o.kind = 'value';\n this.log(o, verbosity);\n }\n\n chatter(s: string): void\n {\n console.log(s);\n }\n\n chatters(): string[]\n {\n return null;\n }\n}\n\nexport function create(env: LogEnvironment): LogAbstract.ILog\n{\n return new LogManager(env);\n}\n","export * from './log';\nexport * from './logkey';\nexport * from './logblob';\nexport * from './logaccum';\nexport * from './logconcat';\n","// Node libraries\nimport * as fs from 'fs';\nimport * as Stream from 'stream';\n\n// Shared libraries\nimport * as LogAbstract from '../logabstract/all';\nimport * as Util from '../util/all';\nimport * as Context from '../context/all';\nimport * as Storage from '../storage/all';\nimport * as FSM from '../fsm/all';\nimport * as FF from '../fsmfile/all';\nimport * as JS from '../jsonstream/all';\n\nexport interface LogEnvironment\n{\n context: Context.IContext;\n fsmManager: FSM.FsmManager;\n storageManager: Storage.StorageManager;\n log: LogAbstract.ILog;\n}\n\n// Max size of log file (approximated)\nconst LogContextDefaults: Context.ContextValues = {\n maxlogfilesize: 1000000,\n maxloglatency: 1000 * 60 * 60 * 4, // every four hours\n logtimeresolution: 1000 * 30, // output log timestamp every 30 seconds\n };\n\nconst FSM_SAVING: number = FSM.FSM_CUSTOM1;\nconst FSM_UPLOADING: number = FSM.FSM_CUSTOM2;\n\n// Current 'kind's of log entries in use:\n// 'event': some event occurred (event property)\n// 'error': some error happened\n// 'value': some internal state variable has some value (name, value properties)\n// 'sync': synchronous (blocking) time interval (ms property in milliseconds)\n// 'async': elapsed time interval (ms property in milliseconds)\n\n// LogManager receives logging requests (in object form) and buffers them to some internal size\n// limit and then saves them out as a storage blob.\n// Blobs are written out in a form that lets a separate offline process aggregate them as necessary.\n// Entries are written as CSV entries with the first lines giving schema definitions for the\n// entries in the file, subsequent entries defining templates with default values for log entries\n// matching a specific schema and subsequent entries providing the data, matching a template.\n// This allows both a flexible logging format as well as a compact representation.\n//\n// Schema are of the form:\n// 'S',SchemaId,P1,P2,P3\n//\n// Templates are of the form:\n// 'T',SchemaId,V1,V2,V3\n//\n// Entries are:\n// 'L',TemplateId,V1,,V3\n//\n// Where \"SchemaId\" is a small integer and a line that starts with S defines the\n// schema and a line that starts with T references it. A line that starts with L\n// references a template and only specifies the values that differ from the template.\n//\n\n// A Schema maps property value to the index in the CSV line, starting with index 2\ntype Schema = { [prop: string]: number };\n\n// A SchemaMapping indexes by a sequence ID for the Schema\ntype SchemaIndex = { [key: number]: Schema };\n\n// A schema mapping maps a hash value for the schema to a small integer ID\ntype SchemaMapping = { [key: number]: number };\n\ninterface SchemaResult\n{\n schemaid: number;\n schema: Schema;\n csv: string | null;\n}\n\nclass SchemaManager\n{\n index: SchemaIndex;\n map: SchemaMapping;\n nextid: number;\n\n constructor()\n {\n this.clear();\n }\n\n clear(): void\n {\n this.index = {};\n this.map = {};\n this.nextid = 0;\n }\n\n private extractSchema(o: any): Schema\n {\n let s: Schema = {};\n let i: number = 2; // index in CSV line for this value (starts with 'L,schemaid')\n for (let p in o) if (o.hasOwnProperty(p))\n s[p] = i++;\n return s;\n }\n\n add(o: any): SchemaResult\n {\n let s = this.extractSchema(o);\n let h = Util.hashObject(s);\n let id = this.map[h];\n if (id === undefined)\n {\n id = this.nextid++;\n this.map[h] = id;\n this.index[h] = s;\n\n // Build schema string\n let sa: string[] = [];\n sa.push('S');\n sa.push(String(this.nextid-1));\n for (let p in s) if (s.hasOwnProperty(p))\n sa[s[p]] = p;\n return { schemaid: id, schema: s, csv: sa.join(',') };\n }\n return { schemaid: id, schema: s, csv: null };\n }\n}\n\n// A template is just an object with associated schema\ninterface Template\n{\n sr: SchemaResult;\n o: any;\n}\n\ninterface TemplateResult\n{\n templateid: number;\n template: Template;\n csv: string | null;\n}\n\nfunction equalCount(o1: any, o2: any): number\n{\n let n: number = 0;\n\n for (let p in o1) if (o1.hasOwnProperty(p))\n if (typeof o1[p] !== 'number' && o1[p] === o2[p]) n++;\n\n return n;\n}\n\nclass TemplateManager\n{\n templates: Template[];\n\n constructor()\n {\n this.clear();\n }\n\n clear(): void\n {\n this.templates = [];\n }\n\n add(sr: SchemaResult, o: any): TemplateResult\n {\n let tr: TemplateResult = { templateid: -1, template: null, csv: null };\n let bestCount: number = 0;\n let totalCount: number = 0;\n for (let p in o) if (o.hasOwnProperty(p) && typeof o[p] !== 'number')\n totalCount++;\n\n for (let i: number = 0; i < this.templates.length; i++)\n {\n let t = this.templates[i];\n if (t.sr.schemaid === sr.schemaid)\n {\n let n = equalCount(t.o, o);\n if (tr.template == null || n > bestCount)\n {\n tr.template = t;\n tr.templateid = i;\n bestCount = n;\n }\n }\n }\n\n // Either found no template or found a poor one\n if (tr.template == null || bestCount < totalCount)\n {\n o = Util.shallowCopy(o);\n this.templates.push({ sr: sr, o: o });\n tr.templateid = this.templates.length-1;\n tr.template = this.templates[tr.templateid];\n let sa: string[] = [];\n sa.push('T');\n sa.push(String(sr.schemaid));\n for (let p in o) if (o.hasOwnProperty(p))\n sa[sr.schema[p]] = csvField(o[p]);\n tr.csv = sa.join(',');\n }\n\n return tr;\n }\n}\n\nclass LogInstance\n{\n env: LogEnvironment;\n schemas: string[];\n templates: string[];\n log: string[];\n size: number;\n\n constructor(env: LogEnvironment)\n {\n this.env = env;\n this.schemas = [];\n this.log = [];\n this.templates = [];\n this.size = 0;\n }\n\n addSchema(s: string): void\n {\n this.schemas.push(s);\n this.size += s.length + 2;\n }\n\n addTemplate(s: string): void\n {\n this.templates.push(s);\n this.size += s.length + 2;\n }\n\n addLog(s: string): void\n {\n this.log.push(s);\n this.size += s.length + 2;\n }\n\n full(): boolean\n {\n return this.size > this.env.context.xnumber('maxlogfilesize');\n }\n\n empty(): boolean\n {\n return this.size == 0;\n }\n}\n\nclass FsmSaveTmp extends FSM.Fsm\n{\n stream: JS.BufferWritable;\n buffer: Buffer;\n lines: string[][];\n curArray: number;\n curIndex: number;\n\n constructor(env: LogEnvironment, log: LogInstance)\n {\n super(env);\n this.stream = new JS.BufferWritable();\n this.lines = [ log.schemas, log.templates, log.log ];\n this.curArray = 0;\n this.curIndex = 0;\n this.onError = this.onError.bind(this);\n this.onFinish = this.onFinish.bind(this);\n this.onDrain = this.onDrain.bind(this);\n }\n\n start(): void\n {\n this.stream.on('error', this.onError);\n this.stream.on('finish', this.onFinish);\n this.write();\n }\n\n write(): void\n {\n if (this.stream)\n {\n let bOK: boolean = true;\n\n for (; bOK && this.curArray < this.lines.length; this.curArray++, this.curIndex = 0)\n {\n let a = this.lines[this.curArray];\n for (; bOK && this.curIndex < a.length; this.curIndex++)\n {\n bOK = this.stream.write(a[this.curIndex], 'utf8');\n bOK = this.stream.write('\\n', 'utf8') && bOK;\n }\n\n if (! bOK)\n break;\n }\n\n if (this.curArray == this.lines.length)\n this.stream.end();\n else \n this.stream.once('drain', this.onDrain);\n }\n }\n\n onFinish(buffer?: Buffer): void\n {\n this.buffer = buffer;\n if (this.stream)\n this.stream = null;\n if (! this.done)\n this.setState(FSM.FSM_DONE);\n }\n\n onDrain(): void\n {\n this.write();\n }\n\n onError(): void\n {\n this.setState(FSM.FSM_ERROR);\n this.onFinish();\n }\n\n tick(): void\n {\n if (this.ready)\n {\n switch (this.state)\n {\n case FSM.FSM_STARTING:\n this.setState(FSM.FSM_PENDING);\n this.start();\n break;\n }\n }\n }\n}\n\nclass FsmUpload extends FSM.Fsm\n{\n log: LogInstance;\n name: string;\n fsmTmp: FsmSaveTmp;\n fsmSave: FSM.Fsm;\n\n constructor(env: LogEnvironment, name: string, log: LogInstance)\n {\n super(env);\n this.name = name;\n this.log = log;\n }\n\n get env(): LogEnvironment { return this._env as LogEnvironment; }\n\n upload(buffer: Buffer): FSM.Fsm\n {\n let params: Storage.BlobParams = {\n bucket: 'logs',\n id: this.name,\n saveFromType: 'buffer',\n saveFrom: buffer,\n ContentEncoding: 'gzip'\n };\n let blob = new Storage.StorageBlob(this.env, params);\n blob.setDirty();\n blob.checkSave(this.env.storageManager);\n return blob.fsmSave;\n }\n\n tick(): void\n {\n if (this.ready)\n {\n switch (this.state)\n {\n case FSM.FSM_STARTING:\n this.setState(FSM_SAVING);\n this.fsmTmp = new FsmSaveTmp(this.env, this.log);\n this.waitOn(this.fsmTmp);\n break;\n\n case FSM_SAVING:\n this.setState(FSM_UPLOADING);\n this.fsmSave = this.upload(this.fsmTmp.buffer);\n this.waitOn(this.fsmSave);\n break;\n\n case FSM_UPLOADING:\n this.setState(FSM.FSM_DONE);\n break;\n }\n }\n }\n}\n\nfunction csvField(a: any): string\n{\n let s = String(a);\n let i = s.indexOf('\"');\n let j = s.indexOf(',');\n if (i == -1 && j == -1)\n return s;\n return `'${s}'`;\n}\n\nclass LogManager implements LogAbstract.ILog\n{\n env: LogEnvironment;\n id: string;\n count: number;\n nextid: number;\n schemaManager: SchemaManager;\n templateManager: TemplateManager;\n curLog: LogInstance;\n msLatencyDump: number;\n msLatencyStamp: number;\n stamps: any[];\n toconsole: boolean;\n msExpireDump: number;\n msExpireStamp: number;\n _chatters: string[];\n\n constructor(env: LogEnvironment)\n {\n this.env = env;\n env.context.setDefaults(LogContextDefaults);\n this.id = Util.createGuid(); // guid for this server instance\n this.count = 0;\n this.nextid = 0; // to make next log file name unique\n this.stamps = [];\n this.schemaManager = new SchemaManager();\n this.templateManager = new TemplateManager();\n this.curLog = new LogInstance(this.env);\n this.toconsole = env.context.xflag('log_to_console');\n this.msLatencyDump = env.context.xnumber('maxloglatency');\n this.msLatencyStamp = env.context.xnumber('logtimeresolution');\n let msNow = (new Date()).getTime();\n this.msExpireDump = msNow + this.msLatencyDump;\n this.msExpireStamp = msNow + this.msLatencyStamp;\n this._chatters = null;\n }\n\n logit(o: any): void\n {\n if (this.toconsole) console.log(JSON.stringify(o));\n // Add to current aggregate\n let sr: SchemaResult = this.schemaManager.add(o);\n if (sr.csv)\n this.curLog.addSchema(sr.csv);\n let tr: TemplateResult = this.templateManager.add(sr, o);\n if (tr.csv)\n this.curLog.addTemplate(tr.csv);\n let sa: string[] = [];\n sa.push('L');\n sa.push(String(tr.templateid));\n for (let p in o) if (o.hasOwnProperty(p))\n {\n if (o[p] !== tr.template.o[p])\n sa[sr.schema[p]] = csvField(o[p]);\n else\n sa[sr.schema[p]] = '';\n }\n this.curLog.addLog(sa.join(','));\n }\n\n stampit(): void\n {\n for (let i: number = 0; i < this.stamps.length; i++)\n this.logit(this.stamps[i]);\n }\n\n stamp(o: any): void\n {\n this.stamps.push(o);\n }\n\n log(o: any, verbosity: number = 0): void\n {\n // Show some restraint\n if (verbosity > this.env.context.xnumber('verbosity'))\n return;\n\n let msNow = (new Date()).getTime();\n\n if (o.kind === undefined)\n o.kind = 'misc';\n\n // Keep count at top of log\n this.count++;\n if (this.curLog.log.length === 0)\n {\n this.logit({ kind: 'misc', _count: this.count });\n this.stampit(); // Ensure every log file has these entries stamped on them\n }\n\n // Keep timestamp every 5 seconds when it changes from the setInterval call above\n if (this.msExpireStamp < msNow)\n {\n this.logit({ kind: 'misc', _time: Util.Now() });\n this.msExpireStamp = msNow + this.msLatencyStamp;\n }\n\n this.logit(o);\n\n if (this.curLog.full() || this.msExpireDump < msNow)\n this.rotateLog();\n }\n\n rotateLog(): FSM.Fsm\n {\n let prod = this.env.context.xflag('production') ? 'Prod' : 'Dev';\n let fsm = new FsmUpload(this.env, `Log_${prod}_${Util.Now()}_${this.nextid++}_${this.id}.csv`, this.curLog);\n this.curLog = new LogInstance(this.env);\n this.schemaManager.clear();\n this.templateManager.clear();\n this.msExpireDump = (new Date()).getTime() + this.msLatencyDump;\n return fsm;\n }\n\n dump(): FSM.Fsm\n {\n return this.rotateLog();\n }\n\n event(o: any, verbosity: number = 0): void\n {\n if (typeof o === 'string') o = { event: o };\n o.kind = 'event';\n this.log(o, verbosity);\n }\n\n error(o: any): void\n {\n if (typeof o === 'string') o = { event: o };\n o.kind = 'error';\n this.log(o);\n }\n\n value(o: any, verbosity: number = 0): void\n {\n o.kind = 'value';\n this.log(o, verbosity);\n }\n\n chatter(s: string): void\n {\n console.log(s);\n if (this._chatters)\n this._chatters.push(s);\n }\n\n chatters(): string[]\n {\n if (this._chatters == null)\n this._chatters = [];\n return this._chatters;\n }\n}\n\nexport function create(env: LogEnvironment): LogAbstract.ILog\n{\n return new LogManager(env);\n}\n","import * as stream from 'stream';\nimport * as zlib from 'zlib';\n\n// Shared libraries\nimport * as Util from '../util/all';\nimport * as Context from '../context/all';\nimport * as LogAbstract from '../logabstract/all';\nimport * as FSM from '../fsm/all';\nimport * as Storage from '../storage/all';\n\nimport { LogBlob } from './logblob';\nimport { LogKey, dateToKey, dateToMonthKey, dateToYearKey } from './logkey';\n\nexport interface Environment\n{\n context: Context.IContext;\n log: LogAbstract.ILog;\n fsmManager: FSM.FsmManager;\n storageManager: Storage.StorageManager;\n}\n\nexport interface AccumOptions\n{\n onlyAggregateClosed?: boolean;\n}\nconst DefaultOptions = { onlyAggregateClosed: false };\n\nconst FSM_BLOB = FSM.FSM_CUSTOM1;\nconst FSM_QUERYING = FSM.FSM_CUSTOM2;\nconst FSM_LISTING = FSM.FSM_CUSTOM3;\nconst FSM_AGGREGATING = FSM.FSM_CUSTOM4;\nconst FSM_SAVING = FSM.FSM_CUSTOM5;\n\n\nconst FSM_ACCUM = FSM.FSM_CUSTOM1;\n\nconst MaxPendingDownloads = 50;\nconst MaxPendingUploads = 50;\n\nclass FsmAggregate extends FSM.Fsm\n{\n options: AccumOptions;\n item: LogItem;\n\n constructor(env: Environment, item: LogItem, options?: AccumOptions)\n {\n super(env);\n this.options = Util.shallowAssignImmutable(DefaultOptions, options);\n this.item = item;\n }\n\n get env(): Environment { return this._env as Environment }\n\n fetchNext(): void\n {\n if (this.item.children)\n {\n let nPending: number = 0;\n for (let id in this.item.children) if (this.item.children.hasOwnProperty(id))\n {\n let item = this.item.children[id];\n if (item.present && item.blob == null && item.accum == null)\n {\n delete item.children; // not needed since I have this aggregate\n item.blob = LogBlob.createForDownload(this.env, item.id);\n this.waitOn(item.blob.fsmLoad);\n nPending++;\n if (nPending >= MaxPendingDownloads)\n break;\n }\n }\n }\n }\n\n aggregate(): void\n {\n // Already computed and aggregated completely?\n if (this.item.key.closed && this.item.accum)\n return;\n\n // Only aggregate closed?\n if (! this.item.key.closed && this.options.onlyAggregateClosed)\n return;\n\n // Otherwise aggregate\n console.log(`logaccum: aggregating ${this.item.id}`);\n let la: ILogAccumulator = LogAccumulator.create();\n this.item.accum = la;\n let bClosed = this.item.key.closed;\n for (let id in this.item.children) if (this.item.children.hasOwnProperty(id))\n {\n let item = this.item.children[id];\n\n if (item.key.isLog)\n {\n LogAccumulator.gather(la, item.id, item.key.instance, item.key.dateKey, item.blob.result);\n if (bClosed) delete item.blob;\n }\n else\n {\n if (item.accum == null)\n {\n if (item.blob)\n {\n item.accum = JSON.parse(item.blob.result);\n delete item.blob;\n }\n else\n {\n console.log(`logaccum: expected downloaded blob for non-aggregated child ${item.id}`);\n item.accum = LogAccumulator.create();\n }\n }\n LogAccumulator.aggregate(la, item.accum);\n }\n }\n\n // Save memory - don't need children if I won't re-aggregate with new data (from above - test for closed)\n if (bClosed)\n {\n if (! this.item.present)\n {\n this.env.log.chatter(`logaccum: saving ${this.item.id}`);\n let blob = LogBlob.createForUpload(this.env, this.item.id, JSON.stringify(this.item.accum));\n this.waitOn(blob.fsmSave);\n this.item.present = true;\n }\n delete this.item.children;\n }\n }\n\n tick(): void\n {\n if (this.ready && this.isDependentError)\n this.setState(FSM.FSM_ERROR);\n else if (this.ready)\n {\n switch (this.state)\n {\n case FSM.FSM_STARTING:\n this.fetchNext();\n if (this.nWaitOn == 0)\n this.setState(FSM_ACCUM);\n break;\n\n case FSM_ACCUM:\n this.aggregate();\n this.setState(FSM_SAVING);\n break;\n\n case FSM_SAVING:\n this.setState(FSM.FSM_DONE);\n break;\n }\n }\n }\n}\n\nclass FsmDeepAggregate extends FSM.Fsm\n{\n options: AccumOptions;\n root: LogItem;\n items: LogItem[];\n cur: number;\n\n constructor(env: Environment, root: LogItem, options?: AccumOptions)\n {\n super(env);\n this.options = Util.shallowAssignImmutable(DefaultOptions, options);\n this.root = root;\n this.items = root.query((item: LogItem) => { return item.accum === undefined && !item.present });\n this.cur = 0;\n }\n\n get env(): Environment { return this._env as Environment }\n\n tick(): void\n {\n if (this.ready && this.isDependentError)\n this.setState(FSM.FSM_ERROR);\n else if (this.ready)\n {\n switch (this.state)\n {\n case FSM.FSM_STARTING:\n // Save memory\n if (this.cur > 100)\n {\n this.items.splice(0, this.cur);\n this.cur = 0;\n }\n if (this.cur < this.items.length)\n this.waitOn(new FsmAggregate(this.env, this.items[this.cur++], this.options));\n else\n this.setState(FSM.FSM_DONE);\n break;\n }\n }\n }\n}\n\nclass FsmSaveAggregates extends FSM.Fsm\n{\n options: AccumOptions;\n root: LogItem;\n items: LogItem[];\n cur: number;\n\n constructor(env: Environment, root: LogItem, options?: AccumOptions)\n {\n super(env);\n this.options = Util.shallowAssignImmutable(DefaultOptions, options);\n this.root = root;\n this.items = root.query((item: LogItem) => { return item.accum !== undefined && !item.present && item.key.closed });\n this.cur = 0;\n }\n\n get env(): Environment { return this._env as Environment }\n\n tick(): void\n {\n if (this.ready && this.isDependentError)\n this.setState(FSM.FSM_ERROR);\n else if (this.ready)\n {\n switch (this.state)\n {\n case FSM.FSM_STARTING:\n let nPending: number = 0;\n // Save memory\n if (this.cur > 100)\n {\n this.items.splice(0, this.cur);\n this.cur = 0;\n }\n while (this.cur < this.items.length && nPending < MaxPendingUploads)\n {\n let item = this.items[this.cur++];\n item.blob = LogBlob.createForUpload(this.env, item.id, JSON.stringify(item.accum));\n this.waitOn(item.blob.fsmSave);\n nPending++;\n }\n\n if (nPending == 0) this.setState(FSM.FSM_DONE);\n break;\n }\n }\n }\n}\n\n\nexport class LogItem\n{\n id: string;\n key?: LogKey;\n present?: boolean;\n parent?: LogItem;\n children?: { [id: string]: LogItem };\n accum?: ILogAccumulator;\n blob?: LogBlob;\n\n constructor(id: string)\n {\n this.id = id;\n if (id === 'root') // root\n {\n this.key = LogKey.root();\n this.children = {};\n }\n else\n {\n this.key = LogKey.create(id);\n if (this.key.kind !== 'Log')\n this.children = {};\n }\n }\n\n query(filter: (item: LogItem) => boolean): LogItem[]\n {\n let items: LogItem[] = [];\n\n for (let yearID in this.children) if (this.children.hasOwnProperty(yearID))\n {\n let year = this.children[yearID];\n for (let monthID in year.children) if (year.children.hasOwnProperty(monthID))\n {\n let month = year.children[monthID];\n for (let dateID in month.children) if (month.children.hasOwnProperty(dateID))\n {\n let date = month.children[dateID];\n for (let id in date.children) if (date.children.hasOwnProperty(id))\n {\n let log = date.children[id];\n if (filter(log)) items.push(log);\n }\n if (filter(date)) items.push(date);\n }\n if (filter(month)) items.push(month);\n }\n if (filter(year)) items.push(year);\n }\n if (filter(this)) items.push(this);\n\n return items;\n }\n\n addListing(ls: string[]): void\n {\n ls.forEach((id: string) => this.add(new LogItem(id)));\n }\n\n addChild(id: string, child: LogItem): void\n {\n this.children[id] = child;\n child.parent = this;\n for (let p = child.parent; p; p = p.parent)\n delete p.accum;\n }\n\n add(item: LogItem): void\n {\n let yearID = item.key.yearID;\n let year = this.children[yearID];\n if (item.key.isYear)\n {\n if (year === undefined)\n {\n year = item;\n this.addChild(yearID, item);\n }\n year.present = true;\n }\n else\n {\n if (year === undefined)\n {\n year = new LogItem(yearID);\n this.addChild(yearID, year);\n }\n else if (year.present)\n return;\n let monthID = item.key.monthID;\n let month = year.children[monthID];\n if (item.key.isMonth)\n {\n if (month === undefined)\n {\n month = item;\n year.addChild(monthID, item);\n }\n month.present = true;\n }\n else\n {\n if (month === undefined)\n {\n month = new LogItem(monthID);\n year.addChild(monthID, month);\n }\n else if (month.present)\n return;\n let dateID = item.key.dateID;\n let date = month.children[dateID];\n if (item.key.isDate)\n {\n if (date === undefined)\n {\n date = item;\n month.addChild(dateID, item);\n }\n date.present = true;\n }\n else\n {\n if (date === undefined)\n {\n date = new LogItem(dateID);\n month.addChild(dateID, date);\n }\n else if (date.present)\n return;\n let log = date.children[item.id];\n if (log === undefined)\n {\n date.addChild(item.id, item);\n log = item;\n }\n log.present = true;\n }\n }\n }\n }\n}\n\n// Everything we want to accumulate has a key that we use to identify and index it.\n// We also want to track which instance generated the key (so bucket by instance)\n// We also want to track which day some event occurred on (so bucket by day).\n// Finally, we either want to just count occurrences or we want to track a value (to report min, max, avg).\n// We assume NEvents >> NDays >> NInstances.\n// So bucket by { [instance: string]: { [day: string]: { [event: string]: Accumulator } } }\n// And then provide ways to walk that resulting data structure and aggregate and report it.\n// Note that for some things (like API calls) we are interested in the total number of independent events.\n// For other things (like unique users or sessions/maps) we are only interested in the total number of uniques.\n// These are the type of answers:\n// NInstances: number (number of instances seen)\n// NDays: number (number of days seen)\n// NUniques: number (number of unique things tracked, e.g. total number of unique users seen)\n// NUniquesByDay: { [day: string]: number } total number of uniques each day\n// Values: { [id: string]: ValueAccumulator } total number of occurrences of each thing tracked (across all days)\n// ValuesByDay: { [id: string]: { [days: string]: ValueAccumulator } }\n//\n\nexport interface IValueAccumulator\n{\n count: number;\n total: number;\n min?: number;\n max?: number;\n}\n\nexport class ValueAccumulator\n{\n constructor()\n {\n }\n\n static create(): IValueAccumulator\n {\n return { count: 0, total: 0 };\n }\n\n static avg(va: IValueAccumulator): number\n {\n return va.count > 0 ? Math.round(va.total / va.count) : 0;\n }\n\n static incr(va: IValueAccumulator): void\n {\n va.count++;\n }\n\n static accum(va: IValueAccumulator, v: number): void\n {\n va.count++;\n va.total += v;\n if (va.min === undefined || v < va.min)\n va.min = v;\n if (va.max === undefined || v > va.max)\n va.max = v;\n }\n\n static reduce(va: IValueAccumulator, reduction: IValueAccumulator): void\n {\n reduction.count += va.count;\n reduction.total += va.total;\n if (reduction.min === undefined || va.min < reduction.min)\n reduction.min = va.min;\n if (reduction.max === undefined || va.max > reduction.max)\n reduction.max = va.max;\n }\n\n static log(va: IValueAccumulator): string\n {\n if (va.min === undefined)\n return `${va.count}`;\n else\n return `count: ${va.count} avg: ${Math.round(ValueAccumulator.avg(va))} min: ${va.min} max: ${va.max}`;\n }\n}\n\nexport type IValueAccumulatorIndex = { [key: string]: IValueAccumulator };\nexport type IValueAccumulatorIndexIndex = { [key: string]: { [key: string]: IValueAccumulator } }; export type IEventAccumulator = IValueAccumulatorIndex; \nexport class EventAccumulator\n{\n constructor() { }\n\n static create(): IEventAccumulator\n {\n return ({});\n }\n\n static getAccumulator(ea: IEventAccumulator, o: any, prop: string | string[]): IValueAccumulator\n {\n let event: string;\n if (Array.isArray(prop))\n {\n let sa: string[] = [];\n for (let i: number = 0; i < prop.length; i++)\n {\n if (o[prop[i]] === undefined)\n return null;\n sa.push(o[prop[i]]);\n }\n event = sa.join('+');\n }\n else\n event = o[prop];\n if (event !== undefined)\n {\n let a = ea[event];\n if (a === undefined)\n {\n a = ValueAccumulator.create();\n ea[event] = a;\n }\n return a;\n }\n return null;\n }\n\n static NUnique(ea: IEventAccumulator): number\n {\n return Util.countKeys(ea);\n }\n\n static incr(ea: IEventAccumulator, o: any, prop: string | string[]): void\n {\n let a = EventAccumulator.getAccumulator(ea, o, prop);\n if (a) ValueAccumulator.incr(a);\n }\n\n static accum(ea: IEventAccumulator, o: any, name: string, value: string): void\n {\n let a = EventAccumulator.getAccumulator(ea, o, name);\n if (a && o[value] !== undefined)\n ValueAccumulator.accum(a, Number(o[value]));\n }\n\n static reduce(ea: IEventAccumulator, event: string, reduction: IValueAccumulator)\n {\n if (ea[event] !== undefined)\n ValueAccumulator.reduce(ea[event], reduction);\n }\n}\n\nexport type IEventAccumulatorIndex = { [key: string]: IEventAccumulator };\nexport type IDayAccumulator = IEventAccumulatorIndex;\n\nexport class DayAccumulator\n{\n constructor() { }\n\n static create(): IDayAccumulator { return ({}) }\n\n static count(da: IDayAccumulator): number\n {\n return Util.countKeys(da);\n }\n\n static getAccumulator(da: IDayAccumulator, date: string): IEventAccumulator\n {\n let a = da[date];\n if (a === undefined)\n {\n a = EventAccumulator.create();\n da[date] = a;\n }\n return a;\n }\n\n static incr(da: IDayAccumulator, date: string, o: any, prop: string | string[]): void\n {\n let a = DayAccumulator.getAccumulator(da, date);\n EventAccumulator.incr(a, o, prop);\n }\n\n static accum(da: IDayAccumulator, date: string, o: any, name: string, value: string): void\n {\n let a = DayAccumulator.getAccumulator(da, date);\n EventAccumulator.accum(a, o, name, value);\n }\n\n static reduce(da: IDayAccumulator, event: string, reduction: IValueAccumulator): void\n {\n for (let date in da) if (da.hasOwnProperty(date))\n EventAccumulator.reduce(da[date], event, reduction);\n }\n\n static reduceByDateKeys(da: IDayAccumulator, dateKeys: IKeyIndex, event: string, reduction: IValueAccumulator): void\n {\n if (dateKeys === undefined)\n {\n for (let date in da) if (da.hasOwnProperty(date))\n EventAccumulator.reduce(da[date], event, reduction);\n }\n else\n {\n for (let date in dateKeys) if (dateKeys.hasOwnProperty(date) && da.hasOwnProperty(date))\n EventAccumulator.reduce(da[date], event, reduction);\n }\n }\n\n static reduceByDate(da: IDayAccumulator, date: string, event: string, dayReduction: IValueAccumulator): void\n {\n if (da[date] !== undefined)\n EventAccumulator.reduce(da[date], event, dayReduction);\n }\n\n static reduceUniqueByDate(da: IDayAccumulator, date: string, days: IValueAccumulatorIndexIndex): void\n {\n if (da[date] !== undefined)\n {\n let events = da[date];\n let day = days[date];\n for (let e in events) if (events.hasOwnProperty(e))\n if (day[e] === undefined)\n day[e] = ValueAccumulator.create();\n }\n }\n}\n\nexport type IDayAccumulatorIndex = { [key: string]: IDayAccumulator };\nexport type IKeyIndex = { [key: string]: boolean };\nexport interface IInstanceAccumulator\n{\n dateKeys: IKeyIndex;\n uniqueKeys: IKeyIndex;\n instances: IDayAccumulatorIndex;\n}\n\nexport class InstanceAccumulator\n{\n constructor() { }\n\n static create(): IInstanceAccumulator { return { dateKeys: {}, uniqueKeys: {}, instances: {} }; }\n\n static getToday(ia: IInstanceAccumulator): string\n {\n let today: string = undefined;\n\n for (let p in ia.dateKeys) if (ia.dateKeys.hasOwnProperty(p))\n if (today === undefined || p > today)\n today = p;\n\n return today;\n }\n\n static getAccumulator(ia: IInstanceAccumulator, instance: string): IDayAccumulator\n {\n let a = ia.instances[instance];\n if (a === undefined)\n {\n a = DayAccumulator.create();\n ia.instances[instance] = a;\n }\n return a;\n }\n\n static incr(ia: IInstanceAccumulator, instance: string, date: string, o: any, prop: string | string[]): void\n {\n let key: string;\n if (Array.isArray(prop))\n {\n let sa: string[] = [];\n for (let i: number = 0; i < prop.length; i++)\n {\n if (o[prop[i]] === undefined)\n return;\n sa.push(o[prop[i]]);\n }\n key = sa.join('+');\n }\n else\n {\n key = o[prop];\n if (key === undefined) return;\n }\n\n ia.dateKeys[date] = true;\n ia.uniqueKeys[key] = true;\n let a = InstanceAccumulator.getAccumulator(ia, instance);\n DayAccumulator.incr(a, date, o, prop);\n }\n\n static accum(ia: IInstanceAccumulator, instance: string, date: string, o: any, name: string, value: string): void\n {\n if (o[name] !== undefined)\n {\n ia.dateKeys[date] = true;\n ia.uniqueKeys[o[name]] = true;\n let a = InstanceAccumulator.getAccumulator(ia, instance);\n DayAccumulator.accum(a, date, o, name, value);\n }\n }\n\n static NInstances(ia: IInstanceAccumulator): number\n {\n return Util.countKeys(ia.instances);\n }\n\n static NDays(ia: IInstanceAccumulator): number\n {\n return Util.countKeys(ia.dateKeys);\n }\n\n static NUniques(ia: IInstanceAccumulator): number\n {\n return Util.countKeys(ia.uniqueKeys);\n }\n\n static NUniquesByDay(ia: IInstanceAccumulator, dateKeys?: IKeyIndex): IValueAccumulatorIndex\n {\n let result: IValueAccumulatorIndex = {};\n let gather: IValueAccumulatorIndexIndex = {};\n let date: string;\n\n // Initialize for all the requested dates\n if (dateKeys === undefined) dateKeys = ia.dateKeys;\n for (date in dateKeys) if (dateKeys.hasOwnProperty(date))\n {\n result[date] = ValueAccumulator.create();\n gather[date] = {};\n }\n\n // Now gather up from each instance\n for (let instance in ia.instances) if (ia.instances.hasOwnProperty(instance))\n for (date in dateKeys) if (dateKeys.hasOwnProperty(date))\n DayAccumulator.reduceUniqueByDate(ia.instances[instance], date, gather);\n\n // Now record totals\n for (date in dateKeys) if (dateKeys.hasOwnProperty(date))\n result[date].count = Util.countKeys(gather[date]);\n\n return result;\n }\n\n static AllCountsByDay(ia: IInstanceAccumulator, dateKeys?: IKeyIndex, eventKeys?: IKeyIndex): IValueAccumulatorIndexIndex\n {\n let result: IValueAccumulatorIndexIndex = {};\n let date: string;\n let event: string;\n\n // If we don't ask for special date, just get all\n if (dateKeys === undefined) dateKeys = ia.dateKeys;\n\n // If we don't ask for special list, just get all\n if (eventKeys === undefined) eventKeys = ia.uniqueKeys;\n\n // Initialize for all the dates\n for (date in dateKeys) if (dateKeys.hasOwnProperty(date))\n {\n let day: IValueAccumulatorIndex = {};\n result[date] = day;\n for (event in eventKeys) if (eventKeys.hasOwnProperty(event))\n day[event] = ValueAccumulator.create();\n }\n\n // Now walk through all instances, gathering dates\n for (date in dateKeys) if (dateKeys.hasOwnProperty(date))\n for (let instance in ia.instances) if (ia.instances.hasOwnProperty(instance))\n for (event in eventKeys) if (eventKeys.hasOwnProperty(event))\n DayAccumulator.reduceByDate(ia.instances[instance], date, event, result[date][event]);\n\n return result;\n }\n\n static TotalCountsByDay(ia: IInstanceAccumulator, dateKeys?: IKeyIndex, eventKeys?: IKeyIndex): IValueAccumulatorIndex\n {\n let result: IValueAccumulatorIndex = {};\n let date: string;\n let event: string;\n\n // If we don't ask for special date, just get all\n if (dateKeys === undefined) dateKeys = ia.dateKeys;\n\n // If we don't ask for special list, just get all\n if (eventKeys === undefined) eventKeys = ia.uniqueKeys;\n\n // Initialize for all the dates\n for (date in dateKeys) if (dateKeys.hasOwnProperty(date))\n result[date] = ValueAccumulator.create();\n\n // Now walk through all instances, gathering dates\n for (date in dateKeys) if (dateKeys.hasOwnProperty(date))\n for (let instance in ia.instances) if (ia.instances.hasOwnProperty(instance))\n for (event in eventKeys) if (eventKeys.hasOwnProperty(event))\n DayAccumulator.reduceByDate(ia.instances[instance], date, event, result[date]);\n\n return result;\n }\n\n static ValuesByEvent(ia: IInstanceAccumulator, dateKeys?: IKeyIndex, eventKeys?: IKeyIndex): IValueAccumulatorIndex\n {\n let result: IValueAccumulatorIndex = {};\n let event: string;\n\n // If we don't ask for special list, just get all\n if (eventKeys === undefined) eventKeys = ia.uniqueKeys;\n\n for (event in eventKeys) if (eventKeys.hasOwnProperty(event))\n result[event] = ValueAccumulator.create();\n\n for (let instance in ia.instances) if (ia.instances.hasOwnProperty(instance))\n for (event in eventKeys) if (eventKeys.hasOwnProperty(event))\n DayAccumulator.reduceByDateKeys(ia.instances[instance], dateKeys, event, result[event]);\n\n return result;\n }\n\n static ValuesByDay(ia: IInstanceAccumulator, dateKeys?: IKeyIndex, eventKeys?: IKeyIndex): IValueAccumulatorIndexIndex\n {\n let result: IValueAccumulatorIndexIndex = {}\n let event: string;\n let date: string;\n\n // If we don't ask for special date, just get all\n if (dateKeys === undefined) dateKeys = ia.dateKeys;\n\n // If we don't ask for special list, just get all\n if (eventKeys === undefined) eventKeys = ia.uniqueKeys;\n\n // Initialize the double level index with events by day by value\n for (event in eventKeys) if (eventKeys.hasOwnProperty(event))\n {\n let days: IValueAccumulatorIndex = {};\n\n for (date in dateKeys) if (dateKeys.hasOwnProperty(date))\n days[date] = ValueAccumulator.create();\n\n result[event] = days;\n }\n\n // Now reduce them\n for (let instance in ia.instances) if (ia.instances.hasOwnProperty(instance))\n for (event in eventKeys) if (eventKeys.hasOwnProperty(event))\n for (date in dateKeys) if (dateKeys.hasOwnProperty(date))\n DayAccumulator.reduceByDate(ia.instances[instance], date, event, result[event][date]);\n\n return result;\n }\n\n static filterNoisyProperty(p: string): boolean\n {\n let noises: string[] = [ 'session(', 'Started server at' ];\n\n for (let i = 0; i < noises.length; i++)\n if (p.indexOf(noises[i]) == 0)\n return true;\n return false;\n }\n\n static getCountRows(ia: IInstanceAccumulator, dateKeys?: IKeyIndex, eventKeys?: IKeyIndex): any[]\n {\n let values = InstanceAccumulator.ValuesByEvent(ia, dateKeys, eventKeys);\n let rows: any[] = [];\n\n for (let p in values) if (values.hasOwnProperty(p))\n {\n if (this.filterNoisyProperty(p))\n continue;\n\n rows.push({\n id: String(rows.length),\n event: p,\n count: String(values[p].count),\n });\n }\n\n return rows;\n }\n\n static getValueRows(ia: IInstanceAccumulator, dateKeys?: IKeyIndex, eventKeys?: IKeyIndex): any[]\n {\n let values = InstanceAccumulator.ValuesByEvent(ia, dateKeys, eventKeys);\n let rows: any[] = [];\n\n for (let p in values) if (values.hasOwnProperty(p))\n {\n rows.push({\n id: String(rows.length),\n event: p,\n count: String(values[p].count),\n min: String(values[p].min),\n max: String(values[p].max),\n avg: String(ValueAccumulator.avg(values[p])),\n });\n }\n\n return rows;\n }\n}\n\n\ntype Schema = { [pos: number]: string };\ntype SchemaIndex = { [index: number]: Schema };\ntype Template = { schemaid: number, o: { [prop: string]: any } };\ntype TemplateIndex = Template[];\n\nfunction objectToRows(o: any): any[]\n{\n let rows: any[] = [];\n for (let p in o) if (o.hasOwnProperty(p))\n rows.push({ event: p, count: o[p] });\n return rows;\n}\n\nfunction deltaRows(before: any[], after: any[]): any[]\n{\n let index: { [event: string]: number } = {};\n let p: string;\n let i: number;\n\n if (before)\n for (i = 0; i < before.length; i++)\n index[before[i].event] = Number(before[i].count);\n if (after)\n for (i = 0; i < after.length; i++)\n {\n p = after[i].event;\n let n: number = Number(after[i].count) - (index[p] === undefined ? 0 : index[p]);\n if (n == 0)\n delete index[p];\n else\n index[p] = n;\n }\n\n let rows: any[] = [];\n for (p in index) if (index.hasOwnProperty(p))\n rows.push({ event: `${p} (delta)`, count: String(index[p]) });\n return rows;\n}\n\nexport interface ILogAccumulator\n{\n users: IInstanceAccumulator;\n sessions: IInstanceAccumulator;\n events: IInstanceAccumulator;\n errors: IInstanceAccumulator;\n values: IInstanceAccumulator;\n syncTimers: IInstanceAccumulator;\n asyncTimers: IInstanceAccumulator;\n logsSeen: { [id: string]: boolean };\n}\n\nconst specialEventKey: IKeyIndex = {\n 'Listening on port 8081': true,\n 'API create ended': true,\n 'createuser': true,\n 'create visitor': true,\n 'anonymous visit': true,\n 'socialmanager: like': true,\n 'socialmanager: comment': true\n };\n\nconst specialEventNames: any = {\n 'Listening on port 8081': 'restarts',\n 'API create ended': 'newmaps',\n 'createuser': 'newuser',\n 'create visitor': 'newvisitor',\n 'anonymous visit': 'anonview',\n 'socialmanager: like': 'likes',\n 'socialmanager: comment': 'comments'\n };\n\nexport class LogAccumulator\n{\n static create(): ILogAccumulator\n {\n let la: ILogAccumulator =\n {\n users: InstanceAccumulator.create(),\n sessions: InstanceAccumulator.create(),\n events: InstanceAccumulator.create(),\n errors: InstanceAccumulator.create(),\n values: InstanceAccumulator.create(),\n syncTimers: InstanceAccumulator.create(),\n asyncTimers: InstanceAccumulator.create(),\n logsSeen: {},\n };\n return la;\n }\n\n static accumulate(la: ILogAccumulator, instance: string, dateKey: string, o: any): void\n {\n switch (o.kind)\n {\n case 'error':\n InstanceAccumulator.incr(la.errors, instance, dateKey, o, 'event');\n break;\n\n case 'event':\n InstanceAccumulator.incr(la.sessions, instance, dateKey, o, 'sessionid');\n InstanceAccumulator.incr(la.users, instance, dateKey, o, 'userid');\n InstanceAccumulator.incr(la.events, instance, dateKey, o, 'event');\n break;\n\n case 'value':\n InstanceAccumulator.accum(la.values, instance, dateKey, o, 'event', 'value');\n break;\n\n case 'sync':\n InstanceAccumulator.accum(la.syncTimers, instance, dateKey, o, 'event', 'ms');\n break;\n\n case 'async':\n InstanceAccumulator.accum(la.asyncTimers, instance, dateKey, o, 'event', 'ms');\n break;\n\n case 'misc':\n // count misc\n break;\n }\n }\n\n static unquoteFields(fields: string[]): string[]\n {\n // if field begins with ' strip that character and merge with subsequent\n // fields until encountering field that ends with ' (which might be same field).\n for (let i: number = 0; i < fields.length; )\n {\n let field = fields[i];\n if (field.indexOf(\"'\") == 0)\n {\n let accum = field.substring(1);\n let iStart = i;\n do\n {\n if (accum.lastIndexOf(\"'\") == accum.length-1)\n {\n accum = accum.substring(0, accum.length-1);\n fields.splice(iStart, i-iStart);\n fields[iStart] = accum;\n i++;\n accum = null;\n break;\n }\n else\n {\n i++;\n if (i < fields.length)\n accum += fields[i];\n }\n }\n while (i < fields.length);\n\n // if never encountered closing quote...\n if (accum != null)\n {\n fields.splice(iStart, i-iStart);\n fields[iStart] = accum;\n }\n }\n else\n i++;\n }\n return fields;\n }\n\n static gather(la: ILogAccumulator, logid: string, instance: string, dateKey: string, csvblob: string): void\n {\n la.logsSeen[logid] = true;\n let schemas: SchemaIndex = {};\n let templates: TemplateIndex = [];\n let lines = csvblob.split('\\n');\n\n // Process schema lines\n let i: number = 0;\n for (; i < lines.length; i++)\n {\n let l = lines[i];\n if (l.indexOf('S') != 0)\n break;\n // Line is of form S,N,field1,field2,field3,...\n let s: Schema = {};\n let fields = l.split(',');\n for (let j: number = 2; j < fields.length; j++)\n s[j] = fields[j];\n schemas[Number(fields[1])] = s;\n }\n\n // Process template lines\n let nMismatch: number = 0;\n for (; i < lines.length; i++)\n {\n let l = lines[i];\n if (l.indexOf('T') != 0)\n break;\n\n // Line is of form T,SN,v1,v2,v3\n let fields = LogAccumulator.unquoteFields(l.split(','));\n let t: Template = { schemaid: Number(fields[1]), o: { } };\n templates.push(t);\n let schema = schemas[t.schemaid];\n for (let j: number = 2; j < fields.length; j++)\n {\n let prop = schema[j];\n if (prop === undefined)\n {\n if (nMismatch == 0)\n console.error('logaccumulator: template does not match schema definition');\n nMismatch++;\n }\n else\n t.o[prop] = fields[j];\n }\n }\n\n // Gather log entries\n for (; i < lines.length; i++)\n {\n let l = lines[i];\n if (l == '') continue; // Really just EOF\n let fields = LogAccumulator.unquoteFields(l.split(','));\n let templateid = Number(fields[1]);\n if (templateid < 0 || templateid >= templates.length)\n {\n console.error('logaccumulator: missing template definition in log file');\n nMismatch++;\n continue;\n }\n let t = templates[templateid];\n let schema = schemas[t.schemaid];\n if (schema === undefined)\n console.error('logaccumulator: missing schema definition in log file');\n else\n {\n let o: any = {};\n o.instance = instance;\n for (let j: number = 2; j < fields.length; j++)\n {\n let prop = schema[j];\n if (prop === undefined)\n {\n nMismatch++;\n }\n else\n {\n o[prop] = fields[j];\n if (o[prop] === '')\n o[prop] = t.o[prop];\n }\n }\n LogAccumulator.accumulate(la, instance, dateKey, o);\n }\n }\n }\n\n static aggregate(agg: ILogAccumulator, la: ILogAccumulator): void\n {\n Util.deepAccum(agg, la);\n }\n\n static datePatternToKeys(la: ILogAccumulator, pat: string): IKeyIndex\n {\n if (pat == null || pat === '' || pat === '...')\n return la.events.dateKeys;\n let apat = pat.split('.');\n if (apat.length > 3) return la.events.dateKeys;\n while (apat.length < 3) apat.push('');\n let keys: IKeyIndex = {};\n Object.keys(la.events.dateKeys).forEach((date: string) => {\n let adate = date.split('.');\n if ((apat[0] === '' || apat[0] === adate[0]) &&\n (apat[1] === '' || apat[1] === adate[1]) &&\n (apat[2] === '' || apat[2] === adate[2]))\n keys[date] = true;\n });\n return keys;\n }\n\n static getToday(la: ILogAccumulator): IKeyIndex\n {\n let today = InstanceAccumulator.getToday(la.events);\n return today === undefined ? {} : { [today]: true };\n }\n\n static getTodayRows(la: ILogAccumulator): any[]\n {\n let todayKeys = LogAccumulator.getToday(la);\n if (Util.countKeys(todayKeys) == 0)\n return [];\n let today = Util.nthKey(todayKeys, 0);\n let daysUsers = InstanceAccumulator.NUniquesByDay(la.users, todayKeys);\n let daysSessions = InstanceAccumulator.NUniquesByDay(la.sessions, todayKeys);\n let dayEvents = InstanceAccumulator.ValuesByEvent(la.events, todayKeys);\n let dayErrors = InstanceAccumulator.ValuesByEvent(la.errors, todayKeys);\n let daysErrorTotals = InstanceAccumulator.TotalCountsByDay(la.errors, todayKeys);\n let totalErrors: number = 0;\n let rows: any[] = [];\n let row: any;\n let p: string;\n let dayUsersCount: string = daysUsers[today] !== undefined ? String(daysUsers[today].count) : '0';\n let daySessionsCount: string = daysSessions[today] !== undefined ? String(daysSessions[today].count) : '0';\n let dayErrorsCount: string = daysErrorTotals[today] !== undefined ? String(daysErrorTotals[today].count) : '0';\n rows.push( { type: 'summary', event: 'users', count: dayUsersCount } );\n rows.push( { type: 'summary', event: 'sessions', count: daySessionsCount } );\n rows.push( { type: 'summary', event: 'errors', count: dayErrorsCount } );\n for (p in dayErrors) if (dayErrors.hasOwnProperty(p))\n if (dayErrors[p].count !== 0)\n rows.push( { type: 'errors', event: p, count: String(dayErrors[p].count) } );\n for (p in dayEvents) if (dayEvents.hasOwnProperty(p))\n if (dayEvents[p].count !== 0)\n rows.push( { type: 'events', event: p, count: String(dayEvents[p].count) } );\n return rows;\n }\n\n static getDailyRows(la: ILogAccumulator, datePattern?: string, eventKeys?: IKeyIndex): any[]\n {\n let dateKeys = LogAccumulator.datePatternToKeys(la, datePattern);\n eventKeys = eventKeys || specialEventKey;\n let daysUsers = InstanceAccumulator.NUniquesByDay(la.users, dateKeys);\n let daysSessions = InstanceAccumulator.NUniquesByDay(la.sessions, dateKeys);\n let daysEvents = InstanceAccumulator.AllCountsByDay(la.events, dateKeys, eventKeys);\n let daysErrorTotals = InstanceAccumulator.TotalCountsByDay(la.errors, dateKeys, eventKeys);\n let totalErrors: number = 0;\n let rows: any[] = [];\n let d: string;\n let row: any;\n for (d in daysUsers) if (daysUsers.hasOwnProperty(d))\n {\n row = { id: String(rows.length)+1, day: d, users: String(daysUsers[d].count) };\n let s = daysSessions[d];\n row.sessions = s === undefined ? '0' : String(s.count);\n let nErrors: number = daysErrorTotals[d] ? daysErrorTotals[d].count : 0;\n totalErrors += nErrors;\n row.errors = String(nErrors);\n let e = daysEvents[d];\n Object.keys(eventKeys).forEach((id: string) => {\n let name = (eventKeys === specialEventKey) ? specialEventNames[id] : id;\n row[name] = (e[id] === undefined) ? '0' : String(e[id].count);\n });\n rows.push(row);\n }\n\n // Add totals row to front of array\n row = {\n id: '0',\n day: '!total',\n users: String(InstanceAccumulator.NUniques(la.users)),\n sessions: String(InstanceAccumulator.NUniques(la.sessions)),\n errors: String(totalErrors)\n };\n Object.keys(specialEventNames).forEach((id: string) => {\n let count: number = 0;\n let name: string = (eventKeys === specialEventKey) ? specialEventNames[id] : id;\n rows.forEach((o: any) => { count += Number(o[name]); });\n row[name] = String(count);\n });\n rows.unshift(row);\n\n // And sort by day\n rows.sort((r1: any, r2: any) => {\n return String(r1.day) < String(r2.day) ? -1 : (String(r1.day) > String(r2.day) ? 1 : 0);\n });\n return rows;\n }\n\n static getLastDay(la: ILogAccumulator): any[]\n {\n let today = InstanceAccumulator.getToday(la.events);\n let rows = LogAccumulator.getDailyRows(la, today);\n if (rows.length == 0)\n return [];\n let row = rows[rows.length-1];\n delete row.day;\n return objectToRows(row);\n }\n\n static getTimerRows(la: ILogAccumulator, datePattern?: string, eventKeys?: IKeyIndex): any[]\n {\n let dateKeys = LogAccumulator.datePatternToKeys(la, datePattern);\n let rows1 = InstanceAccumulator.getValueRows(la.asyncTimers, dateKeys, eventKeys);\n let rows2 = InstanceAccumulator.getValueRows(la.syncTimers, dateKeys, eventKeys);\n return [...rows1, ...rows2];\n }\n\n static getErrorRows(la: ILogAccumulator, datePattern?: string, eventKeys?: IKeyIndex): any[]\n {\n let dateKeys = LogAccumulator.datePatternToKeys(la, datePattern);\n return InstanceAccumulator.getCountRows(la.errors, dateKeys, eventKeys);\n }\n\n static getEventRows(la: ILogAccumulator, datePattern?: string, eventKeys?: IKeyIndex): any[]\n {\n let dateKeys = LogAccumulator.datePatternToKeys(la, datePattern);\n return InstanceAccumulator.getCountRows(la.events, dateKeys, eventKeys);\n }\n\n static getValueRows(la: ILogAccumulator, datePattern?: string, eventKeys?: IKeyIndex): any[]\n {\n let dateKeys = LogAccumulator.datePatternToKeys(la, datePattern);\n return InstanceAccumulator.getValueRows(la.values, dateKeys, eventKeys);\n }\n}\n\nexport class FsmLogAccum extends FSM.Fsm\n{\n options: AccumOptions;\n root: LogItem;\n blobLs: LogBlob;\n lastErrorsRows: any[];\n firstScanDone: boolean;\n\n constructor(env: Environment, accum?: ILogAccumulator, options?: AccumOptions)\n {\n super(env);\n this.options = Util.shallowAssignImmutable(DefaultOptions, options);\n this.firstScanDone = false;\n this.lastErrorsRows = [];\n this.root = new LogItem('root');\n if (accum !== undefined) // just using to query\n {\n this.root.accum = accum;\n this.setState(FSM.FSM_DONE);\n }\n }\n\n get env(): Environment { return this._env as Environment }\n\n resetLastErrors(): void\n {\n this.lastErrorsRows = this.getRows('errors');\n }\n\n getIncrementalErrors(): any[]\n {\n if (this.lastErrorsRows == null) this.lastErrorsRows = this.getRows('errors');\n return deltaRows(this.lastErrorsRows, this.getRows('errors'));\n }\n\n refresh(): void\n {\n if (this.done)\n {\n this.clearDependentError();\n this.setState(FSM.FSM_STARTING);\n }\n }\n\n getCategories(): string[]\n {\n if (this.root.accum == null)\n return [ 'Loading' ];\n\n return [\n 'summary',\n 'loading',\n 'errors',\n 'values',\n 'events',\n 'timers',\n 'daily',\n 'today',\n ];\n }\n\n getSummaryRows(): any[]\n {\n return LogAccumulator.getLastDay(this.root.accum).concat(this.getIncrementalErrors());\n }\n\n getRows(category: string, datePattern?: string, eventKeys?: IKeyIndex): any[]\n {\n if (this.root.accum === undefined) return [];\n\n switch (category)\n {\n default:\n return null;\n case 'Loading':\n case 'unknown':\n return [];\n\n case 'loading':\n return [\n {\n id: '0',\n logs: String(Util.countKeys(this.root.accum.logsSeen))\n }\n ];\n\n case 'errors':\n return LogAccumulator.getErrorRows(this.root.accum, datePattern, eventKeys);\n break;\n\n case 'values':\n return LogAccumulator.getValueRows(this.root.accum, datePattern, eventKeys);\n break;\n\n case 'events':\n return LogAccumulator.getEventRows(this.root.accum, datePattern, eventKeys);\n break;\n\n case 'timers':\n return LogAccumulator.getTimerRows(this.root.accum, datePattern, eventKeys);\n break;\n\n case 'daily':\n return LogAccumulator.getDailyRows(this.root.accum, datePattern, eventKeys);\n break;\n\n case 'today':\n return LogAccumulator.getTodayRows(this.root.accum);\n break;\n\n case 'summary':\n return this.getSummaryRows();\n break;\n }\n }\n\n tick(): void\n {\n if (this.ready && this.isDependentError)\n this.setState(FSM.FSM_ERROR);\n else if (this.ready)\n {\n switch (this.state)\n {\n case FSM.FSM_STARTING:\n this.blobLs = LogBlob.createForLs(this.env);\n this.waitOn(this.blobLs.fsmArray);\n this.setState(FSM_LISTING);\n break;\n\n case FSM_LISTING:\n this.root.addListing(this.blobLs.keys.filter(this.blobLs.filter));\n this.blobLs.resetList();\n if (this.blobLs.fsmList.done)\n {\n delete this.blobLs;\n this.waitOn(new FsmDeepAggregate(this.env, this.root, this.options));\n this.setState(FSM_AGGREGATING);\n }\n else\n this.waitOn(this.blobLs.fsmArray);\n break;\n\n case FSM_AGGREGATING:\n if (! this.firstScanDone)\n {\n this.firstScanDone = true;\n this.resetLastErrors();\n }\n this.waitOn(new FsmSaveAggregates(this.env, this.root, this.options));\n this.setState(FSM_SAVING);\n break;\n\n case FSM_SAVING:\n this.setState(FSM.FSM_DONE);\n break;\n }\n }\n }\n}\n","import * as zlib from 'zlib';\n\n// Shared libraries\nimport * as Util from '../util/all';\nimport * as Context from '../context/all';\nimport * as LogAbstract from '../logabstract/all';\nimport * as FSM from '../fsm/all';\nimport * as Storage from '../storage/all';\n\nimport { LogKey } from './logkey';\n\ninterface Environment\n{\n context: Context.IContext;\n log: LogAbstract.ILog;\n fsmManager: FSM.FsmManager;\n storageManager: Storage.StorageManager;\n}\n\nexport class LogBlob extends Storage.StorageBlob\n{\n key: LogKey;\n\n constructor(env: Environment, params: Storage.BlobParams)\n {\n if (params.bucket === undefined) params.bucket = 'logs';\n super(env, params);\n this.key = LogKey.create(this.params.id);\n this.filter = this.filter.bind(this);\n }\n\n get env(): Environment { return this._env as Environment; }\n\n get result(): string { return this.params.loadTo as string }\n\n static createForDownload(env: Environment, id: string): LogBlob\n {\n let blob = new LogBlob(env, { id: id, loadToType: 'string' });\n blob.startLoad(env.storageManager);\n return blob;\n }\n\n static createForUpload(env: Environment, id: string, data: string): LogBlob\n {\n let params: Storage.BlobParams = {\n id: id,\n ContentEncoding: 'gzip',\n ContentType: 'application/json',\n saveFromType: 'string',\n saveFrom: data\n };\n let blob = new LogBlob(env, params);\n blob.setDirty();\n blob.checkSave(env.storageManager);\n return blob;\n }\n\n static createForDelete(env: Environment, id: string): LogBlob\n {\n let blob = new LogBlob(env, { id: id });\n blob.startDelete(env.storageManager);\n return blob;\n }\n\n static createForLs(env: Environment): LogBlob\n {\n let blob = new LogBlob(env, { id: '' });\n blob.startList(env.storageManager);\n return blob;\n }\n\n filter(s: string): boolean\n {\n let key = LogKey.create(s);\n if (key == null) return false;\n let mode = this.env.context.xflag('production') ? 'Prod' : 'Dev';\n return key.mode === mode;\n }\n\n asString(): string\n {\n return this.params.loadTo as string;\n }\n}\n","import * as fs from 'fs';\nimport * as stream from 'stream';\nimport * as zlib from 'zlib';\n\n// Shared libraries\nimport * as Util from '../util/all';\nimport * as Context from '../context/all';\nimport * as LogAbstract from '../logabstract/all';\nimport * as FSM from '../fsm/all';\nimport * as Storage from '../storage/all';\n\nimport { LogBlob } from './logblob';\n\ninterface Environment\n{\n context: Context.IContext;\n log: LogAbstract.ILog;\n fsmManager: FSM.FsmManager;\n storageManager: Storage.StorageManager;\n}\n\nlet UniqueState = FSM.FSM_CUSTOM1;\nconst FSM_BLOB = UniqueState++;\nconst FSM_QUERYING = UniqueState++;\nconst FSM_LISTING = UniqueState++;\nconst FSM_AGGREGATING = UniqueState++;\nconst FSM_SAVING = UniqueState++;\nconst FSM_LOADING = UniqueState++;\nconst FSM_DELETING = UniqueState++;\nconst FSM_FILTERING = UniqueState++;\n\nconst reLog = /^Log_([^_]*)_(\\d{4}-\\d{2}-\\d{2}T\\d{2}:)\\d{2}:\\d{2}.\\d{3}Z_(\\d+)_[^\\.]+.csv$/;\nconst reLine = /^(.),(\\d+),(.*)$/;\n\n// The compaction process involves:\n// 1. Listing the log files.\n// 2. Grouping into sets to compact/concat.\n// 3. Downloading the files and concatenating them.\n// 4. Uploading the concatenated file.\n// 5. Deleting the files used to construct the aggregate.\n//\n// The motivation for this is that further processing on the logs and log bucket will be\n// much more efficient with a smaller number of larger files. In particular, the lambda\n// instances result in lots of small log files.\n//\n\nfunction logToKey(env: Environment, log: string): string\n{\n // Log is of form:\n // {Log,Agg}_{Prod,Dev}_YYYY-MM-DDTHH:MM:SS.UUUZ_{count}_{guid}.{csv,json}\n // We are only concerned with Log_{Prod|Dev}_{datetime}_0_*.csv\n // That is, we just want the small single instance log files.\n // The key includes Log_Prod_YYYY-MM-DDTHH:\n \n let prod = env.context.xflag('production') ? 'Prod' : 'Dev';\n let a = reLog.exec(log);\n if (a && a.length == 4 && a[3] == '0' && a[1] === prod)\n return `Log_${a[1]}_${a[2]}`;\n return null;\n}\n\nexport class FsmCompact extends FSM.Fsm\n{\n blobLs: LogBlob;\n clusters: { [key: string]: string[] };\n\n constructor(env: Environment)\n {\n super(env);\n this.clusters = {};\n }\n\n get env(): Environment { return this._env as Environment }\n\n gatherLogList(logs: string[]): void\n {\n logs.forEach((log: string) => {\n let key = logToKey(this.env, log);\n if (key)\n {\n let cluster = this.clusters[key];\n if (cluster === undefined)\n {\n cluster = [];\n this.clusters[key] = cluster;\n }\n cluster.push(log);\n }\n });\n }\n\n tick(): void\n {\n if (this.ready && this.isDependentError)\n this.setState(FSM.FSM_ERROR);\n else if (this.ready)\n {\n switch (this.state)\n {\n case FSM.FSM_STARTING:\n this.blobLs = LogBlob.createForLs(this.env);\n this.waitOn(this.blobLs.fsmArray);\n this.setState(FSM_LISTING);\n break;\n\n case FSM_LISTING:\n this.gatherLogList(this.blobLs.keys);\n this.blobLs.resetList();\n if (this.blobLs.fsmList.done)\n this.setState(FSM_FILTERING);\n else\n this.waitOn(this.blobLs.fsmList);\n break;\n\n case FSM_FILTERING:\n Object.keys(this.clusters).forEach((key: string) => {\n let cluster = this.clusters[key];\n if (cluster.length < 10)\n delete this.clusters[key];\n });\n this.env.log.chatter(`logconcat: compacting ${Util.countKeys(this.clusters)} log clusters`);\n this.setState(FSM_AGGREGATING);\n break;\n\n case FSM_AGGREGATING:\n for (let key in this.clusters) if (this.clusters.hasOwnProperty(key))\n {\n let cluster = this.clusters[key];\n this.waitOn(new FsmCompactOne(this.env, key, cluster));\n delete this.clusters[key];\n break; // one at a time\n }\n if (this.ready)\n this.setState(FSM.FSM_DONE);\n break;\n }\n }\n }\n}\n\n// This is a little tricky because file format is wacky. Numeric value after 'S' in schema line is just\n// the schema number (redundant to implicit ordering). The numeric value after 'T' in template line is\n// a reference to the schema used on that line. The template number is implicit in the ordering. And then\n// the number after 'L' in a log line is a reference to this implicit template numbering order.\n\nclass Permuter\n{\n tag: string; // 'T' or 'S'\n entries: { [key: string]: { key: string, to: string, from: string } };\n mapper: { [from: string]: string };\n length: number;\n\n constructor(tag: string)\n {\n this.tag = tag;\n this.entries = {};\n this.mapper = {};\n this.length = 0;\n }\n\n reset(): void\n {\n Object.keys(this.entries).forEach((key: string) => {\n let entry = this.entries[key];\n entry.from = null;\n });\n this.mapper = {};\n }\n\n add(fields: string[]): void\n {\n if (fields.length != 4)\n throw 'Permuter:add: unexpected line format';\n let key = this.tag === 'S' ? fields[3] : `${fields[2]},${fields[3]}`;\n let entry = this.entries[key];\n if (entry === undefined)\n {\n entry = { key: key, to: String(this.length++), from: this.tag === 'S' ? fields[2] : String(Util.countKeys(this.mapper)) };\n this.entries[key] = entry;\n }\n else\n {\n if (entry.from != null)\n throw 'Permuter:add: unexpected duplicate field entry';\n else\n entry.from = this.tag === 'S' ? fields[2] : String(Util.countKeys(this.mapper));\n }\n this.mapper[entry.from] = entry.to;\n }\n\n map(from: string): string\n {\n return this.mapper[from];\n }\n\n asCSV(): string[]\n {\n let entryarray = Object.keys(this.entries).map((key: string) => { return this.entries[key] });\n entryarray.sort((e1: any, e2: any) => { return Number(e1.to) < Number(e2.to) ? -1 : 1 });\n return entryarray.map((e: any) => {\n if (this.tag === 'S')\n return new Array(this.tag, e.to, e.key).join(',');\n else\n return new Array(this.tag, e.key).join(',');\n });\n }\n}\n\nexport class FsmCompactOne extends FSM.Fsm\n{\n key: string;\n cluster: string[];\n blobs: LogBlob[];\n csv: string[];\n schemas: Permuter;\n templates: Permuter;\n\n constructor(env: Environment, key: string, cluster: string[])\n {\n super(env);\n this.key = key;\n this.cluster = cluster;\n this.csv = [];\n this.schemas = new Permuter('S');\n this.templates = new Permuter('T');\n this.env.log.chatter(`logconcat: compacting ${this.key} with ${this.cluster.length} log files`);\n }\n\n get env(): Environment { return this._env as Environment }\n\n loadBlobs(): void\n {\n this.blobs.forEach((blob: LogBlob) => {\n let lines = blob.result.split('\\n');\n lines.forEach((line: string) => {\n let a = reLine.exec(line);\n if (a && a.length == 4)\n {\n switch (a[1])\n {\n case 'S': this.schemas.add(a); break;\n case 'T': a[2] = this.schemas.map(a[2]); this.templates.add(a); break;\n case 'L': a[2] = this.templates.map(a[2]); this.csv.push(a.slice(1).join(',')); break;\n default:\n throw 'FsmCompactOne: unexpected line in csv file';\n }\n }\n });\n this.schemas.reset();\n this.templates.reset();\n });\n this.blobs = [];\n }\n\n saveBlobs(): void\n {\n let csv = [...this.schemas.asCSV(), ...this.templates.asCSV(), ...this.csv];\n let key = `${this.key}00:00.000Z_0_${Util.createGuid()}.csv`;\n this.env.log.chatter(`logconcat: uploading ${key}`);\n let blob = LogBlob.createForUpload(this.env, key, csv.join('\\n'));\n this.waitOn(blob.fsmLoad);\n }\n\n deleteBlobs(): void\n {\n this.cluster.forEach((log: string) => {\n let blob = LogBlob.createForDelete(this.env, log);\n this.waitOn(blob.fsmDel);\n });\n }\n\n tick(): void\n {\n if (this.ready && this.isDependentError)\n {\n this.env.log.error('logconcat: failure building log cluster');\n this.env.log.chatter('logconcat: failure building log cluster');\n this.setState(FSM.FSM_ERROR);\n }\n else if (this.ready)\n {\n switch (this.state)\n {\n case FSM.FSM_STARTING:\n this.blobs = [];\n this.cluster.forEach((log: string) => {\n let blob = LogBlob.createForDownload(this.env, log);\n this.blobs.push(blob);\n this.waitOn(blob.fsmLoad);\n });\n this.setState(FSM_LOADING);\n break;\n\n case FSM_LOADING:\n this.loadBlobs();\n this.saveBlobs();\n this.setState(FSM_SAVING);\n break;\n\n case FSM_SAVING:\n this.deleteBlobs();\n this.setState(FSM_DELETING);\n break;\n\n case FSM_DELETING:\n this.env.log.chatter(`logconcat: compacted ${this.key}`);\n this.setState(FSM.FSM_DONE);\n break;\n }\n }\n }\n}\n\n","export function dateToKey(d: Date): string\n{\n let m = d.getUTCMonth() + 1;\n let day = d.getUTCDate();\n let yyyy = d.getFullYear();\n let sm = m < 10 ? `0${m}` : String(m);\n let sd = day < 10 ? `0${day}` : String(day);\n\n return `${yyyy}.${sm}.${sd}`;\n}\n\nexport function dateToMonthKey(d: Date): string\n{\n let m = d.getUTCMonth() + 1;\n let yyyy = d.getFullYear();\n let sm = m < 10 ? `0${m}` : String(m);\n\n return `${yyyy}.${sm}`;\n}\n\nexport function dateToYearKey(d: Date): string\n{\n return String(d.getFullYear());\n}\n\nexport class LogKey\n{\n kind: string;\n mode: string;\n date: string;\n dateKey: string;\n monthKey: string;\n yearKey: string;\n count: string;\n instance: string;\n ext: string;\n\n constructor()\n {\n }\n\n static root(): LogKey\n {\n let key = new LogKey();\n key.kind = 'Agg';\n return key;\n }\n\n static create(s: string): LogKey\n {\n let key = new LogKey();\n if (s == null || s == '') return null;\n let iExt = s.lastIndexOf('.');\n let ext = s.substring(iExt+1);\n s = s.substring(0, iExt);\n let a = s.split('_');\n if (a.length == 5)\n {\n key.kind = a[0]; key.mode = a[1]; key.date = a[2]; key.count = a[3]; key.instance = a[4]; key.ext = ext;\n }\n else if (a.length == 3)\n {\n key.kind = a[0]; key.mode = a[1]; key.date = a[2]; key.ext = ext;\n }\n else\n {\n key.kind = 'unknown'; key.dateKey = 'unknown'; key.instance = s;\n }\n\n if (key.kind === 'Log')\n {\n let d = new Date(key.date);\n key.dateKey = dateToKey(d);\n key.monthKey = dateToMonthKey(d);\n key.yearKey = dateToYearKey(d);\n }\n else if (key.date)\n {\n let keys = key.date.split('.');\n if (keys.length > 0)\n key.yearKey = keys[0];\n if (keys.length > 1)\n key.monthKey = `${keys[0]}.${keys[1]}`;\n if (keys.length > 2)\n key.dateKey = key.date;\n }\n return key;\n }\n\n yearClosed(): boolean { return (Number(this.yearKey) < Number(nowKey.yearKey)) }\n monthClosed(): boolean { return (Number(this.monthKey) < Number(nowKey.monthKey)) } \n dateClosed(): boolean { return this.dateKey !== nowKey.dateKey }\n get closed(): boolean\n {\n if (this.kind === 'Log')\n return true;\n else if (this.kind === 'Agg')\n {\n if (this.dateKey)\n return this.dateClosed();\n else if (this.monthKey)\n return this.monthClosed();\n else\n return this.yearClosed();\n }\n else\n return true;\n }\n\n get yearID(): string { return `Agg_${this.mode}_${this.yearKey}.json` }\n get monthID(): string { return `Agg_${this.mode}_${this.monthKey}.json` }\n get dateID(): string { return `Agg_${this.mode}_${this.dateKey}.json` }\n\n get isYear(): boolean { return this.monthKey === undefined }\n get isMonth(): boolean { return this.monthKey !== undefined && this.dateKey === undefined }\n get isDate(): boolean { return this.kind === 'Agg' && this.dateKey !== undefined }\n get isLog(): boolean { return this.kind === 'Log' }\n}\n\nlet nowKey: LogKey = new LogKey();\nlet nowDate = new Date();\nnowKey.dateKey = dateToKey(nowDate);\nnowKey.monthKey = dateToMonthKey(nowDate);\nnowKey.yearKey = dateToYearKey(nowDate);\n\n","export * from './queue';\nexport * from './client';\nexport * from './server';\nexport * from './loopback';\n","// Node libraries\nimport * as http from 'http';\nimport * as url from 'url';\n\n// Project libraries\nimport * as Util from '../util/all';\nimport * as JS from '../jsonstream/all';\n\n// Local libraries\nimport * as Q from './queue';\n\nexport type SQSCallback = (err: any, result: Q.QMessages) => void;\n\nconst MaxRetries = 10;\n\nclass SQSRequest\n{\n httpoptions: any;\n data: any;\n cb: SQSCallback;\n jsonread: JS.JSONStreamReader;\n jsonwrite: JS.JSONStreamWriter;\n json: any;\n request: any;\n response: any;\n statusCode: number;\n nRetries: number;\n\n constructor(httpoptions: any, data: any, cb: SQSCallback)\n {\n this.httpoptions = httpoptions;\n this.data = data;\n this.cb = cb;\n this.nRetries = 0;\n this.doRequest();\n }\n\n doRequest(): void\n {\n this.json = null;\n this.jsonread = null;\n this.response = null;\n this.statusCode = 0;\n this.request = http.request(this.httpoptions, (res: any) => {\n this.response = res;\n this.statusCode = res.statusCode;\n this.jsonread = new JS.JSONStreamReader();\n this.jsonread.on('end', (json: any) => {\n this.json = json;\n if (this.statusCode == 200)\n {\n if (this.json.error)\n console.log(`memsqs:client: reporting server error ${this.json.error}`);\n this.cb(this.json.error, this.json.result);\n }\n else\n {\n console.log(`memsqs:client: reporting statusCode error ${this.statusCode}`);\n this.onError(`error status: ${this.statusCode}`);\n }\n });\n this.jsonread.on('error', (err: any) => {\n // gateway errors return HTML, not JSON\n if (this.statusCode != 502 && this.statusCode != 504)\n {\n console.log(`memsqs:client: reporting jsonread error ${JSON.stringify(err)}`);\n this.onError(err);\n }\n else\n {\n console.log(`memsqs:client: reporting statusCode error ${this.statusCode}`);\n this.onRequestError(`error status: ${this.statusCode}`);\n }\n });\n\n this.jsonread.start(res);\n\n res.on('error', (err: any) => {\n console.log(`memsqs:client: reporting response error ${JSON.stringify(err)}`);\n this.onError((err && err.message) ? err.message : err);\n });\n });\n\n this.request.on('error', (err: any) => {\n // Immediately fail ECONNREFUSED rather than retrying (server not available, probably restarting)\n if (err && err.code && err.code === 'ECONNREFUSED')\n {\n console.log('memsqs:client: immediately fail on ECONNREFUSED');\n this.onError((err && err.message) ? err.message : err);\n }\n else\n this.onRequestError((err && err.message) ? err.message : err);\n });\n\n this.request.setHeader('Content-Type', 'application/json; charset=UTF-8');\n this.jsonwrite = new JS.JSONStreamWriter();\n this.jsonwrite.on('error', (err: any) => {\n console.log(`memsqs:client: encountered request error writing response ${JSON.stringify(err)}`);\n this.onRequestError(err);\n });\n this.jsonwrite.start(this.data, this.request);\n }\n\n onRequestError(err: any): void\n {\n if (this.nRetries >= MaxRetries)\n {\n console.log(`memsqs:client: giving up after ${this.nRetries} with error ${JSON.stringify(err)}`);\n this.onError(err);\n }\n else\n {\n this.nRetries++;\n this.doRequest();\n }\n }\n\n onError(err: any): void\n {\n if (this.cb)\n {\n console.log(`memsqs:client: reporting error to callback: ${JSON.stringify(err)}`);\n this.cb(err, null);\n this.cb = null;\n }\n }\n}\n\ninterface AgentEntry\n{\n agent: any;\n inUse: boolean;\n}\n\nclass AgentPool\n{\n agents: AgentEntry[];\n\n constructor()\n {\n this.agents = [];\n }\n\n alloc(): any\n {\n for (let i: number = 0; i < this.agents.length; i++)\n if (! this.agents[i].inUse)\n {\n this.agents[i].inUse = true;\n return this.agents[i].agent;\n }\n\n let ae: AgentEntry = { agent: new http.Agent( { keepAlive: true, maxSockets: 1 } ), inUse: true };\n this.agents.push(ae);\n return ae.agent;\n }\n\n free(agent: any): void\n {\n for (let i: number = 0; i < this.agents.length; i++)\n if (this.agents[i].agent === agent)\n {\n if (! this.agents[i].inUse)\n throw 'Duplicate free of agent';\n this.agents[i].inUse = false;\n return;\n }\n\n throw 'Freeing unallocated agent';\n }\n}\n\nexport class SQSClient\n{\n private targeturl?: any;\n private httpoptions?: any;\n private agentPool?: AgentPool;\n\n constructor(urlstring: string = Q.DefaultServerUrl)\n {\n this.targeturl = new url.URL(urlstring);\n this.httpoptions = {\n protocol: this.targeturl.protocol,\n host: this.targeturl.hostname,\n port: this.targeturl.port ? this.targeturl.port : Q.DefaultPort,\n agent: null,\n method: 'POST',\n path: '/',\n };\n this.agentPool = new AgentPool();\n }\n\n setOptions(queueid: string, options: Q.QQueueOptions, cb: SQSCallback): void\n {\n // Use separate agent for each outstanding call\n let httpoptions: any = Util.shallowAssignImmutable(this.httpoptions, { agent: this.agentPool.alloc() });\n\n new SQSRequest(httpoptions,\n {\n queueid: queueid,\n api: 'setoptions',\n data: options\n },\n (err: any, result: Q.QMessages) => { this.agentPool.free(httpoptions.agent); cb(err, result); });\n\n }\n\n claim(queueid: string, owner: string, groupid: string, cb: SQSCallback): void\n {\n // Use separate agent for each outstanding call\n let httpoptions: any = Util.shallowAssignImmutable(this.httpoptions, { agent: this.agentPool.alloc() });\n\n new SQSRequest(httpoptions,\n {\n queueid: queueid,\n api: 'claim',\n data: { owner: owner, groupid: groupid }\n },\n (err: any, result: Q.QMessages) => { this.agentPool.free(httpoptions.agent); cb(err, result); });\n }\n\n send(queueid: string, m: Q.QMessage, cb: SQSCallback): void\n {\n // Use separate agent for each outstanding call\n let httpoptions: any = Util.shallowAssignImmutable(this.httpoptions, { agent: this.agentPool.alloc() });\n\n new SQSRequest(httpoptions,\n {\n queueid: queueid,\n api: 'send',\n data: m\n },\n (err: any, result: Q.QMessages) => {\n this.agentPool.free(httpoptions.agent);\n if (err)\n result = [ m ];\n cb(err, result);\n });\n }\n\n remove(queueid: string, m: Q.QMessage, cb: SQSCallback): void\n {\n // Use separate agent for each outstanding call\n let httpoptions: any = Util.shallowAssignImmutable(this.httpoptions, { agent: this.agentPool.alloc() });\n\n new SQSRequest(httpoptions,\n {\n queueid: queueid,\n api: 'remove',\n data: m\n },\n (err: any, result: Q.QMessages) => { this.agentPool.free(httpoptions.agent); cb(err, result); });\n }\n\n receive(queueid: string, owner: string, cb: SQSCallback): void\n {\n // Use separate agent for each outstanding call\n let httpoptions: any = Util.shallowAssignImmutable(this.httpoptions, { agent: this.agentPool.alloc() });\n\n new SQSRequest(httpoptions,\n {\n queueid: queueid,\n api: 'receive',\n owner: owner,\n },\n (err: any, result: Q.QMessages) => { this.agentPool.free(httpoptions.agent); cb(err, result); });\n }\n}\n","// Local libraries\nimport * as Q from './queue';\nimport * as C from './client';\n\ntype MessageList = { [queueid: string]: Q.QMessage[] };\ntype ReceiveList = { [queueid: string]: C.SQSCallback };\n\nlet messageList: MessageList = {};\nlet receiveList: ReceiveList = {};\n\nexport class SQSClientLoopback\n{\n constructor(urlstring: string = Q.DefaultServerUrl)\n {\n console.log('memsqs: running in loopback mode');\n }\n\n setOptions(queueid: string, options: Q.QQueueOptions, cb: C.SQSCallback): void\n {\n cb(null, null);\n }\n\n claim(queueid: string, owner: string, groupid: string, cb: C.SQSCallback): void\n {\n cb(null, null);\n }\n\n send(queueid: string, m: Q.QMessage, cb: C.SQSCallback): void\n {\n let q = messageList[queueid];\n if (q === undefined)\n q = [], messageList[queueid] = q;\n q.push(m);\n cb(null, null);\n this.doReceive();\n }\n\n remove(queueid: string, m: Q.QMessage, cb: C.SQSCallback): void\n {\n // We just remove during receive so this is no-op\n cb(null, null);\n }\n\n receive(queueid: string, owner: string, cb: C.SQSCallback): void\n {\n receiveList[queueid] = cb;\n this.doReceive();\n }\n\n doReceive(): void\n {\n for (let queueid in receiveList) if (messageList.hasOwnProperty(queueid))\n {\n let q = messageList[queueid];\n let cb = receiveList[queueid];\n if (cb !== undefined)\n {\n delete messageList[queueid];\n delete receiveList[queueid];\n cb(null, q);\n }\n }\n }\n}\n","export interface OrderedListEntry<T>\n{\n prev: OrderedListEntry<T>;\n next: OrderedListEntry<T>;\n value: T;\n}\n\nexport type OrderedListIndex<T> = { [key: string]: OrderedListEntry<T> };\n\nexport class OrderedList<T>\n{\n head: OrderedListEntry<T>;\n tail: OrderedListEntry<T>;\n index: OrderedListIndex<T>;\n\n constructor()\n {\n this.clear();\n }\n\n isempty(): boolean\n {\n return this.head == null;\n }\n\n clear(): void\n {\n this.head = null;\n this.tail = null;\n this.index = {};\n }\n\n insert(key: string, value: T): string\n {\n if (this.index[key] !== undefined)\n return `memsqs: send: message uid ${key} already exists`;\n\n let e: OrderedListEntry<T> = { prev: this.tail, next: null, value: value };\n if (this.tail)\n this.tail.next = e;\n this.tail = e;\n if (this.head === null)\n this.head = e;\n this.index[key] = e;\n return null;\n }\n\n remove(key: string): string\n {\n let e = this.index[key];\n if (e === undefined)\n return `memsqs: remove: message uid ${key} does not exist`;\n\n if (e === this.tail)\n this.tail = e.prev;\n else\n e.next.prev = e.prev;\n\n if (e === this.head)\n this.head = e.next;\n else\n e.prev.next = e.next;\n\n delete this.index[key];\n\n return null;\n }\n\n forEach(cb: (value: T) => boolean): void\n {\n for (let p = this.head; p && cb(p.value); p = p.next)\n continue;\n }\n}\n","// Project libraries\nimport * as Util from '../util/all';\n\n// Local libraries\nimport * as OL from './orderedlist';\n\nexport const DefaultPort: number = (process.env['MEMSQS_PORT'] ? Number(process.env['MEMSQS_PORT']) : 0) || 80;\nexport const DefaultServerUrl: string = `http://localhost:${DefaultPort}`;\n\nexport interface QMessage\n{\n messageid: string;\n groupid: string;\n seqno?: number;\n contents?: any;\n blobid?: string;\n}\nexport type QMessages = QMessage[];\n\ninterface QMessageHolder\n{\n m: QMessage;\n pending: boolean;\n deadline: Util.Deadline;\n}\n\ntype QMessageList = OL.OrderedList<QMessageHolder>;\ntype QMessageIndex = { [key: string]: boolean };\n\ninterface QVisibility\n{\n owner: string;\n deadline: Util.Deadline;\n index: QMessageIndex;\n}\n\nconst DefaultVisibility: QVisibility = { owner: '', deadline: null, index: null };\n\ninterface QGroup\n{\n id: string;\n messages: QMessageList;\n visibility: QVisibility;\n}\n\ntype QGroupIndex = { [id: string]: QGroup };\n\nexport interface QQueueOptions\n{\n timeoutVisibility: number,\n timeoutDead: number,\n timeoutQueueDead: number,\n receiveLimit: number,\n longpoll: boolean,\n}\n\nconst DefaultQueueOptions = {\n timeoutVisibility: 1000 * 30, // 30 seconds - if server goes down, another server will grab req in 30 sec\n timeoutDead: 1000 * 60 * 30, // 30 minutes - just cleaning up dead server queue\n timeoutQueueDead: 1000 * 60 * 30, // 30 minutes - just cleaning up dead server queue\n receiveLimit: 10, // don't get too greedy, but some batching for efficiency\n longpoll: true,\n};\n\nclass QQueue\n{\n id: string;\n groups: QGroupIndex;\n seqno: number;\n options: QQueueOptions;\n nHeld: number;\n lastActive: Util.Elapsed;\n\n constructor(id: string, options?: QQueueOptions)\n {\n this.id = id;\n this.options = options ? options : Util.shallowCopy(DefaultQueueOptions);\n this.groups = {};\n this.nHeld = 0;\n this.seqno = 0;\n this.lastActive = new Util.Elapsed();\n }\n\n dumpLog(): void\n {\n console.log(`memsqs: queue: ${this.id}: ${this.nHeld} messages held`);\n this.forEachGroup((g: QGroup) => {\n if (! g.messages.isempty())\n console.log(`memsqs: queue ${this.id}: group: ${g.id}: non-empty`);\n if (g.visibility.owner != '')\n console.log(`memsqs: queue ${this.id}: group: ${g.id}: owned by ${g.visibility.owner}`);\n return true;\n });\n }\n\n setOptions(options: QQueueOptions)\n {\n this.options = Util.shallowCopy(options);\n }\n\n _group(id: string): QGroup\n {\n let g = this.groups[id];\n if (g === undefined)\n {\n g = { id: id, messages: new OL.OrderedList<QMessageHolder>(), visibility: Util.shallowCopy(DefaultVisibility) };\n this.groups[g.id] = g;\n }\n return g;\n }\n\n forEachGroup(cb: (g: QGroup) => boolean): void\n {\n for (let id in this.groups) if (this.groups.hasOwnProperty(id))\n if (! cb(this.groups[id]))\n break;\n }\n\n forEachMessageHolder(g: QGroup, cb: (h: QMessageHolder) => boolean): void\n {\n g.messages.forEach(cb);\n }\n\n get isActive(): boolean\n {\n if (this.nHeld > 0) return true;\n\n this.lastActive.end();\n return this.lastActive.ms() < this.options.timeoutQueueDead;\n }\n\n checkTimeout(): void\n {\n // Clear visibility and cull empty groups\n this.forEachGroup((g: QGroup) => {\n // Clear deadline if passed\n if (g.visibility.deadline && g.visibility.deadline.done())\n {\n g.messages.forEach((h: QMessageHolder) => {\n h.pending = false;\n return true; // continue\n });\n g.visibility = Util.shallowCopy(DefaultVisibility);\n }\n\n // Cull group if no messages and no deadline.\n // Note that not culling group means that we can build up list of groups (during deadline)\n // if many groups are used (like one-per-message which is standard if no grouping is needed).\n if (g.visibility.owner === '' && g.messages.isempty())\n delete this.groups[g.id];\n return true; // continue\n });\n\n // Cull messages past deadline\n this.forEachGroup((g: QGroup) => {\n g.messages.forEach((h: QMessageHolder) => {\n if (h.deadline.done())\n this.removeFromGroup(g, h.m);\n return true; // continue\n });\n\n // Cull group if no messages and no deadline\n if (g.visibility.owner === '' && g.messages.isempty())\n delete this.groups[g.id];\n return true; // continue\n });\n\n }\n\n send(m: QMessage): string\n {\n this.lastActive.start();\n if (m.groupid === '*')\n {\n let e: string = null;\n this.forEachGroup((g: QGroup) => {\n if (g.visibility.owner !== '')\n {\n this.nHeld++;\n let o = g.visibility.owner;\n let gm: QMessage = { messageid: m.messageid + o, groupid: o, contents: m.contents, seqno: this.seqno++ };\n e = g.messages.insert(gm.messageid, { m: gm, pending: false, deadline: new Util.Deadline(this.options.timeoutDead) } );\n return e == null;\n }\n else\n return true;\n });\n return e;\n }\n else\n {\n m.seqno = this.seqno++; // inject sequence number\n this.nHeld++;\n let g = this._group(m.groupid);\n return g.messages.insert(m.messageid, { m: m, pending: false, deadline: new Util.Deadline(this.options.timeoutDead) } );\n }\n }\n\n claim(owner: string, groupid: string): string\n {\n this.lastActive.start();\n let g = this._group(groupid);\n let deadline = new Util.Deadline(this.options.timeoutVisibility);\n if (g.visibility.owner === '')\n {\n g.visibility = { owner: owner, deadline: deadline, index: {} };\n return null;\n }\n else if (g.visibility.owner === owner)\n {\n g.visibility.deadline = deadline;\n return null;\n }\n return `memsqs: claim: group ${groupid} already owned by ${g.visibility.owner}, ${owner} cannot claim.`;\n }\n\n receive(owner: string, result: QMessages): void\n {\n this.lastActive.start();\n let deadline = new Util.Deadline(this.options.timeoutVisibility);\n\n // First prioritize returning non-pending messages for same owner\n this.forEachGroup((g: QGroup) => {\n if (g.visibility.owner === owner)\n {\n g.messages.forEach((h: QMessageHolder) => {\n if (! h.pending)\n {\n h.pending = true;\n g.visibility.index[h.m.messageid] = true;\n g.visibility.deadline = deadline;\n result.push(h.m);\n if (result.length >= this.options.receiveLimit)\n return false;\n }\n return true;\n });\n }\n return true;\n });\n\n // Now go through and add messages for any unclaimed message groups\n if (result.length >= this.options.receiveLimit) return;\n\n this.forEachGroup((g: QGroup) => {\n if (g.visibility.owner === '')\n {\n g.messages.forEach((h: QMessageHolder) => {\n if (! h.pending)\n {\n if (g.visibility.owner === '')\n g.visibility = { owner: owner, deadline: deadline, index: {} };\n h.pending = true;\n g.visibility.index[h.m.messageid] = true;\n result.push(h.m);\n if (result.length >= this.options.receiveLimit)\n return false;\n }\n return true;\n });\n }\n return true;\n });\n }\n\n removeFromGroup(g: QGroup, m: QMessage): string\n {\n this.lastActive.start();\n let result = g.messages.remove(m.messageid);\n if (g.visibility.index)\n delete g.visibility.index[m.messageid];\n if (result === null) this.nHeld--;\n return result;\n }\n\n remove(m: QMessage): string\n {\n let g = this._group(m.groupid);\n if (g)\n {\n let result = this.removeFromGroup(g, m);\n\n // Comment these lines out to leave visiblity constrained through deadline.\n // (Not completely sure what AWS semantics for SQS is on this point.)\n // The alternative is to force client to send/receive/remove keep-alive messages.\n // if (Util.isEmpty(g.visibility.index))\n // g.visibility = Util.shallowCopy(DefaultVisibility);\n\n return result;\n }\n else\n return `memsqs: remove: queue ${this.id} has no existing group ${m.groupid}`;;\n }\n}\n\ntype QQueueIndex = { [id: string]: QQueue };\n\nexport class QQueueManager\n{\n queues: QQueueIndex;\n\n nSent: number;\n nReceived: number;\n nRemoved: number;\n nCulled: number;\n\n constructor()\n {\n this.queues = {};\n this.nSent = 0;\n this.nReceived = 0;\n this.nRemoved = 0;\n this.nCulled = 0;\n this.checkTimeout = this.checkTimeout.bind(this);\n setTimeout(this.checkTimeout, 5000);\n }\n\n _queue(queueid: string): QQueue\n {\n let q = this.queues[queueid];\n if (q === undefined)\n {\n q = new QQueue(queueid);\n this.queues[queueid] = q;\n }\n return q;\n }\n\n checkTimeout(): void\n {\n this.forEach((q: QQueue) => {\n let nHeld = q.nHeld;\n q.checkTimeout();\n this.nCulled += nHeld - q.nHeld;\n if (! q.isActive)\n {\n console.log(`memsqs:checkTimeout: deleting inactive queue ${q.id}`);\n delete this.queues[q.id];\n }\n });\n\n setTimeout(this.checkTimeout, 5000);\n }\n\n forEach(cb: (q: QQueue) => void): void\n {\n for (let qid in this.queues) if (this.queues.hasOwnProperty(qid))\n cb(this.queues[qid]);\n }\n\n dumpLog(): void\n {\n this.forEach((q: QQueue) => {\n q.dumpLog();\n return true;\n });\n }\n\n setOptions(queueid: string, options: QQueueOptions): void\n {\n this._queue(queueid).setOptions(options);\n }\n\n isLongpoll(queueid: string): boolean\n {\n return this._queue(queueid).options.longpoll;\n }\n\n claim(queueid: string, owner: string, groupid: string): string\n {\n return this._queue(queueid).claim(owner, groupid);\n }\n\n send(queueid: string, m: QMessage): string\n {\n let result = this._queue(queueid).send(m);\n if (! result)\n this.nSent++;\n return result;\n }\n\n receive(queueid: string, owner: string, result: QMessages): void\n {\n this._queue(queueid).receive(owner, result);\n this.nReceived += result.length;\n }\n\n remove(queueid: string, m: QMessage): string\n {\n let result = this._queue(queueid).remove(m);\n if (! result)\n this.nRemoved++;\n return result;\n }\n}\n","// Node libraries\nimport * as http from 'http';\nimport * as url from 'url';\n\n// Shared libraries\nimport * as JS from '../jsonstream/all';\n\n// Local libraries\nimport * as Q from './queue';\n\nconst LongPollTimeout: number = 5000;\n\nexport class SQSServer\n{\n private port: number;\n private server: any;\n queuemanager: Q.QQueueManager;\n longpoll: LongPoll;\n\n constructor(port: number = Q.DefaultPort)\n {\n this.queuemanager = new Q.QQueueManager();\n this.longpoll = new LongPoll();\n this.port = port;\n\n this.server = http.createServer();\n this.server.keepAliveTimeout = 61 * 1000; // Don't interfere with longpoll timeout\n this.server.headersTimeout = 65 * 1000; // Longer than keepAliveTimeout\n\n this.server.on('request', (req: any, res: any) => {\n new OneRequest(this, req, res);\n });\n\n this.server.on('close', () => {\n this.server = null;\n });\n\n this.server.on('error', (err: any) => {\n if (err && err.message) err = err.message;\n console.log(`memsqs: server: unexpected error ${err}`);\n this.server = null;\n });\n\n try\n {\n this.server.listen(this.port);\n }\n catch (err)\n {\n console.log(`memsqs: server: unexpected exception on listen: ${JSON.stringify(err)}`);\n this.server = null;\n }\n }\n\n get running(): boolean\n {\n return this.server != null;\n }\n\n close(): void\n {\n if (this.server)\n this.server.close();\n }\n}\n\ninterface LongPollRequest\n{\n deadline: number;\n request: OneRequest;\n}\n\nclass LongPoll\n{\n requests: LongPollRequest[];\n\n constructor()\n {\n this.requests = [];\n this.tick = this.tick.bind(this);\n setTimeout(this.tick, 1000);\n }\n\n check(): void\n {\n let deadline: number = (new Date()).getTime();\n for (let i: number = 0; i < this.requests.length; )\n {\n let r = this.requests[i];\n if (! r.request.onRetry())\n if (r.deadline < deadline)\n r.request.onFinish();\n if (r.request.isDone())\n this.requests.splice(i, 1);\n else\n i++;\n }\n }\n\n tick(): void\n {\n this.check();\n setTimeout(this.tick, 1000);\n }\n\n add(one: OneRequest): void\n {\n //console.log('memsqs: queuing longpoll');\n this.requests.push({ deadline: (new Date()).getTime() + LongPollTimeout, request: one });\n }\n}\n\nclass OneRequest\n{\n server: SQSServer;\n req: any;\n res: any;\n jsonstream: JS.JSONStreamReader;\n json: any;\n body: any;\n\n constructor(server: SQSServer, req: any, res: any)\n {\n this.server = server;\n this.req = req;\n this.res = res;\n this.jsonstream = new JS.JSONStreamReader();\n this.json = null;\n this.body = { statuscode: 0 };\n this.jsonstream.on('end', (json: any) => { this.json = json; this.onDone(); });\n this.jsonstream.on('error', (err: any) => {\n this.onError(`memsqs: error parsing request body: ${err}`);\n });\n this.req.on('error', (err: any) => {\n this.onError(`memsqs: error reading request: ${err}`);\n });\n this.res.on('error', (err: any) => {\n this.onError(`memsqs: error writing response: ${err}`);\n });\n this.jsonstream.start(req);\n }\n\n isDone(): boolean\n {\n return this.res == null;\n }\n\n onRetry(): boolean\n {\n let result: Q.QMessages = [];\n let qm = this.server.queuemanager;\n qm.receive(this.json.queueid, this.json.owner, result);\n this.body.result = result;\n if (result.length != 0)\n {\n this.onFinish();\n return true;\n }\n else\n return false;\n }\n\n onDone(): void\n {\n try\n {\n if (this.json.queueid === undefined || this.json.queueid == '' || this.json.api === undefined)\n {\n this.onError(`memsqs: badly formed request: ${JSON.stringify(this.json)}`);\n return;\n }\n\n let qm = this.server.queuemanager;\n\n switch (this.json.api)\n {\n case 'setoptions':\n if (this.json.data === undefined)\n this.onError('memsqs: setoptions: payload is empty');\n else\n qm.setOptions(this.json.queueid, this.json.data as Q.QQueueOptions);\n break;\n\n case 'claim':\n if (this.json.data === undefined || this.json.data.owner === undefined || this.json.data.groupid === undefined)\n this.onError('memsqs: claim: badly formed request');\n else\n {\n let err = qm.claim(this.json.queueid, this.json.data.owner, this.json.data.groupid);\n if (err)\n this.onError(err);\n }\n break;\n\n case 'send':\n if (this.json.data === undefined)\n this.onError('memsqs: send: payload is empty');\n else\n {\n let err = qm.send(this.json.queueid, this.json.data as Q.QMessage);\n if (err)\n this.onError(err);\n else\n this.server.longpoll.check();\n }\n break;\n\n case 'receive':\n if (this.json.owner === undefined)\n this.onError('memsqs: receive: no owner specified');\n else\n {\n let result: Q.QMessages = [];\n qm.receive(this.json.queueid, this.json.owner, result);\n this.body.result = result;\n if (result.length == 0 && qm.isLongpoll(this.json.queueid))\n {\n this.server.longpoll.add(this);\n return;\n }\n }\n break;\n\n case 'remove':\n if (this.json.data === undefined)\n this.onError('memsqs: remove: payload is empty');\n else\n {\n let err = qm.remove(this.json.queueid, this.json.data as Q.QMessage);\n if (err)\n this.onError(err);\n }\n break;\n }\n\n this.onFinish();\n }\n catch (err)\n {\n console.log(`memsqs: server: unexpected exception in onDone: ${JSON.stringify(err)}`);\n this.onError((err && err.message) ? err.message : err);\n }\n }\n\n onError(s: string): void\n {\n console.log(`${s}: reporting failure`);\n this.body.statuscode = 1;\n this.body.error = 'failure';\n this.onFinish();\n }\n\n onFinish(): void\n {\n if (this.res)\n {\n this.res.writeHead(200, { 'Content-Type': 'application/json; charset=UTF-8' });\n this.res.end(JSON.stringify(this.body));\n this.res = null;\n }\n }\n}\n","export * from \"./oteditutil\";\nexport * from \"./otmaputil\";\n","import * as LogAbstract from '../logabstract/all';\nimport * as OT from '../ot-js/all';\n\nimport * as DMP from \"diff-match-patch\";\nlet DiffMatchPatch = new DMP.diff_match_patch();\nlet DIFF_DELETE = DMP.DIFF_DELETE;\nlet DIFF_INSERT = DMP.DIFF_INSERT;\nlet DIFF_EQUAL = DMP.DIFF_EQUAL;\n\nexport class OTEditUtil\n{\n\t// Data members\n\tilog: LogAbstract.ILog;\n\tresourceID: string;\n\tresourceName: string;\n\tclientID: string;\n\n\t// Constructor\n\tconstructor(ilog: LogAbstract.ILog, rid: string, cid: string, name: string)\n\t\t{\n\t\t\tthis.ilog = ilog;\n\t\t\tthis.resourceID = rid;\n\t\t\tthis.clientID = cid;\n\t\t\tthis.resourceName = name;\n\t\t}\n\n\t//\n\t// Function: insertAtStart\n\t//\n\t// Description:\n\t//\tGenerate an OTCompositeResource to insert a string at the start of a buffer of the given size.\n\t//\n\n\tinsertAtStart(s: any, nCurrentLen: number): OT.OTCompositeResource\n\t\t{\n\t\t\tlet edit = new OT.OTCompositeResource(this.resourceID, this.clientID);\n\t\t\tlet sEdit = new OT.OTStringResource(this.resourceName);\n\t\t\tsEdit.edits.push([ OT.OpInsert, s.length, s ]);\n\t\t\tsEdit.edits.push([ OT.OpCursor, 0, '' ]);\n\t\t\tsEdit.edits.push([ OT.OpRetain, nCurrentLen, '' ]);\n\t\t\tedit.edits.push(sEdit);\n\t\t\treturn edit;\n\t\t}\n\n\t//\n\t// Function: insertAtEnd\n\t//\n\t// Description:\n\t//\tGenerate an OTCompositeResource to insert a string at the end of a buffer of the given size.\n\t//\n\n\tinsertAtEnd(s: any, nCurrentLen: number): OT.OTCompositeResource\n\t\t{\n\t\t\tlet edit = new OT.OTCompositeResource(this.resourceID, this.clientID);\n\t\t\tlet sEdit = new OT.OTStringResource(this.resourceName);\n\t\t\tsEdit.edits.push([ OT.OpRetain, nCurrentLen, '' ]);\n\t\t\tsEdit.edits.push([ OT.OpInsert, s.length, s ]);\n\t\t\tsEdit.edits.push([ OT.OpCursor, 0, '' ]);\n\t\t\tedit.edits.push(sEdit);\n\t\t\treturn edit;\n\t\t}\n\n\t//\n\t// Function: injectCursor\n\t//\n\t// Inject start/end cursor positions into an existing string resource.\n\t//\n\n\tinjectCursor(edit: OT.OTCompositeResource, start: number, end?: number): void\n\t\t{\n\t\t\tif (start === undefined) return;\n\t\t\tif (end === undefined) end = start;\n\n\t\t\tlet sEdit: OT.OTStringResource = edit.findResource(this.resourceName) as OT.OTStringResource;\n\t\t\tif (sEdit == null)\n\t\t\t\treturn;\n\t\t\tlet cEdit: OT.OTStringResource = new OT.OTStringResource(this.resourceName);\n\t\t\tif (start != 0)\n\t\t\t\tcEdit.edits.push( [ OT.OpRetain, start, '' ] );\n\t\t\tcEdit.edits.push( [ OT.OpCursor, 0, this.clientID ] );\n\t\t\tif (end != start)\n\t\t\t{\n\t\t\t\tcEdit.edits.push( [ OT.OpRetain, end-start, '' ] );\n\t\t\t\tcEdit.edits.push( [ OT.OpCursor, 1, this.clientID ] );\n\t\t\t}\n\t\t\tlet nFinal: number = sEdit.finalLength();\n\t\t\tif (end != nFinal)\n\t\t\t\tcEdit.edits.push( [ OT.OpRetain, nFinal-end, '' ] );\n\t\t\tsEdit.compose(cEdit);\n\t\t}\n\n\t//\n\t// Function: extractCursor\n\t//\n\t// Extract cursor information by client. Returns an object indexed by clientID with an object with\n\t// properties startSelection, endSelection.\n\t//\n\n\textractCursor(edit: OT.OTCompositeResource): any\n\t\t{\n\t\t\tlet cursors: any = { };\n\t\t\tlet sEdit: OT.OTStringResource = edit.findResource(this.resourceName) as OT.OTStringResource;\n\t\t\tif (sEdit == null)\n\t\t\t\treturn cursors;\n\t\t\tlet pos: number = 0;\n\t\t\tfor (let i: number = 0; i < sEdit.length; i++)\n\t\t\t{\n\t\t\t\tlet a: OT.OTSingleArrayEdit = sEdit.edits[i];\n\t\t\t\tswitch (a[0])\n\t\t\t\t{\n\t\t\t\t\tcase OT.OpInsert:\n\t\t\t\t\t\tpos += a[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OT.OpDelete:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OT.OpRetain:\n\t\t\t\t\t\tpos += a[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OT.OpCursor:\n\t\t\t\t\t\tif (a[2] != '')\t// should have clientID...\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlet sel: any = cursors[a[2]];\t// a[2] is clientID\n\t\t\t\t\t\t\tif (sel === undefined) { sel = { }; cursors[a[2]] = sel; }\n\t\t\t\t\t\t\tif (a[1] == 0)\n\t\t\t\t\t\t\t\tsel['selectionStart'] = pos;\t// 0 is selectionStart\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tsel['selectionEnd'] = pos;\t\t// 1 is selectionEnd\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OT.OpSet:\n\t\t\t\t\t\tpos += a[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cursors;\n\t\t}\n\n\t//\n\t// Function: computeEdit\n\t//\n\t// Description:\n\t//\tGiven an old and new string, generate the (minimal) edits list necessary to convert the old\n\t//\tstring into the new string.\n\t//\n\t// \tThis is useful if you're not actually tracking the specfic edit operations happening to the\n\t//\tunderlying string but rather just examining old and new values and trying to transmit\n\t//\tminimal diffs.\n\t//\n\t//\tThere are various good algorithms for computing the \"edit distance\" between two strings.\n\t//\tHere I've used the google DiffMatchPatch algorithm.\n\t//\n\n\tcomputeEdit(sOld: string, sNew: string): OT.OTCompositeResource\n\t\t{\n\t\t\tlet edit = new OT.OTCompositeResource(this.resourceID, this.clientID);\n\t\t\tlet sEdit = new OT.OTStringResource(this.resourceName);\n\t\t\tlet diffs: DMP.Diff[] = DiffMatchPatch.diff_main(sOld, sNew);\n\t\t\tif (diffs)\n\t\t\t\tfor (let i: number = 0; i < diffs.length; i++)\n\t\t\t\t{\n\t\t\t\t\tlet diff: DMP.Diff = diffs[i];\n\t\t\t\t\tlet s = diff[1];\n\t\t\t\t\tswitch (diff[0])\n\t\t\t\t\t{\n\t\t\t\t\t\tcase DIFF_DELETE:\n\t\t\t\t\t\t\tsEdit.edits.push([ OT.OpDelete, s.length, '' ]);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase DIFF_INSERT:\n\t\t\t\t\t\t\tsEdit.edits.push([ OT.OpInsert, s.length, s ]);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase DIFF_EQUAL:\n\t\t\t\t\t\t\tsEdit.edits.push([ OT.OpRetain, s.length, '' ]);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\tedit.edits.push(sEdit);\n\t\t\treturn edit;\n\t\t}\n}\n","import * as OT from '../ot-js/all';\nimport * as Util from '../util/all';\n\nexport const MERGE: number = 0;\nexport const REPLACE: number = 1;\n\nexport class Editor\n{\n private engine: OT.OTEngine;\n private root: OT.OTCompositeResource;\n private stamps: OT.OTCounterResource;\n\n constructor(engine: OT.OTEngine)\n {\n this.engine = engine;\n this.root = null;\n this.stamps = null;\n }\n\n startLocalEdit(): void\n {\n if (this.root == null)\n this.root = this.engine.startLocalEdit();\n }\n\n stamp(rid: string, prop: string): void\n {\n if (this.stamps == null)\n {\n this.startLocalEdit();\n this.stamps = new OT.OTCounterResource(rid);\n this.root.edits.push(this.stamps);\n }\n this.stamps.edits.push([ OT.OpCounterAdd, prop, 1 ]);\n }\n\n set(rid: string, p: string, v: any): Editor\n {\n this.rawObject(rid).set(p, v);\n return this;\n }\n\n del(rid: string, p: string): Editor\n {\n this.rawObject(rid).del(p);\n return this;\n }\n\n rawObject(rid: string): OT.OTMapResource\n {\n this.startLocalEdit();\n return this.root.map(rid);\n }\n\n rawArray(rid: string): OT.OTArrayResource\n {\n this.startLocalEdit();\n return this.root.array(rid);\n }\n\n editCounter(rid: string, oNew: any, mode: number = MERGE): void\n {\n let oOld = this.engine.toPartialValue(rid);\n let aDiff: string[] = keyDiff(oOld, oNew);\n \n let mEdit = new OT.OTCounterResource(rid);\n\n // Propagate sets\n for (let i: number = 0; i < aDiff.length; i++)\n mEdit.edits.push([ OT.OpCounterAdd, aDiff[i], oNew[aDiff[i]] ]);\n\n // Also propagate deletes if REPLACE mode\n if (mode == REPLACE)\n {\n for (var p in oOld) if (oOld.hasOwnProperty(p))\n if (oNew[p] === undefined)\n mEdit.edits.push([ OT.OpCounterDel, p, 0 ]);\n }\n\n if (mEdit.edits.length)\n {\n this.startLocalEdit();\n this.root.edits.push(mEdit);\n }\n }\n\n editObject(rid: string, oNew: any, mode: number = MERGE): void\n {\n if (rid === 'stamps')\n {\n this.editCounter(rid, oNew, mode);\n return;\n }\n\n let oOld = this.engine.toPartialValue(rid);\n let aDiff: string[] = keyDiff(oOld, oNew);\n \n let mEdit = new OT.OTMapResource(rid);\n\n // Propagate sets\n for (let i: number = 0; i < aDiff.length; i++)\n mEdit.edits.push([ OT.OpMapSet, aDiff[i], oNew[aDiff[i]] ]);\n\n // Also propagate deletes if REPLACE mode\n if (mode == REPLACE)\n {\n for (var p in oOld) if (oOld.hasOwnProperty(p))\n if (oNew[p] === undefined)\n mEdit.edits.push([ OT.OpMapDel, p, 0 ]);\n }\n\n if (mEdit.edits.length)\n {\n this.startLocalEdit();\n this.root.edits.push(mEdit);\n }\n }\n\n editArray(rid: string, aNew: any[]): void\n {\n let aOld = this.engine.toPartialValue(rid);\n if (aOld == null) aOld = [];\n if (Util.deepEqual(aNew, aOld))\n return;\n\n let aEdit = new OT.OTArrayResource(rid);\n\n let i: number = 0;\n let iRetain: number = 0;\n for (; i < aNew.length && i < aOld.length; i++)\n if (Util.deepEqual(aNew[i], aOld[i]))\n iRetain++;\n else\n {\n if (iRetain > 0)\n {\n aEdit.edits.push([ OT.OpRetain, iRetain, [] ] );\n iRetain = 0;\n }\n aEdit.edits.push([ OT.OpSet, 1, [ aNew[i] ] ]);\n }\n // Preserve equal ones at end\n if (iRetain > 0)\n aEdit.edits.push([ OT.OpRetain, iRetain, [] ] );\n // Add new ones\n if (aNew.length > i)\n aEdit.edits.push([ OT.OpInsert, aNew.length - i, aNew.slice(i) ]);\n // Or delete old ones\n else if (aOld.length > i)\n aEdit.edits.push([ OT.OpDelete, aOld.length - i, [] ]);\n\n if (aEdit.edits.length)\n {\n this.startLocalEdit();\n this.root.edits.push(aEdit);\n }\n }\n\n edit(oNew: any): boolean\n {\n for (var p in oNew) if (oNew.hasOwnProperty(p))\n if (Array.isArray(oNew[p]))\n this.editArray(p, oNew[p]);\n else\n this.editObject(p, oNew[p]);\n return this.commit();\n }\n\n get length(): number\n {\n return this.root && this.root.edits ? this.root.edits.length : 0;\n }\n\n commit(): boolean\n {\n if (this.root)\n {\n try\n {\n if (this.root.edits.length)\n this.engine.addLocalEdit(this.root);\n this.root = null;\n this.stamps = null;\n return true;\n }\n catch (err)\n {\n // Really would like to log this, but effectively this is a programming error of mismatched bases.\n return false;\n }\n }\n }\n}\n\nfunction keyDiff(oOld: any, oNew: any): string[]\n\t{\n\t\tif (oNew == null)\n\t\t\treturn [];\n\n\t\tlet aDiff: string[] = [];\n\t\tfor (var p in oNew) if (oNew.hasOwnProperty(p))\n\t\t\t{\n\t\t\t\tif (oOld == null || oOld[p] === undefined)\n\t\t\t\t\taDiff.push(p)\n\t\t\t\telse if (! Util.deepEqual(oNew[p], oOld[p]))\n\t\t\t\t\taDiff.push(p);\n\t\t\t}\n\t\treturn aDiff;\n\t}\n","export * from \"./otarray\";\nexport * from \"./otengine\";\nexport * from \"./otclientengine\";\nexport * from \"./otcomposite\";\nexport * from \"./otmap\";\nexport * from \"./otcounter\";\nexport * from \"./otserverengine\";\nexport * from \"./ottypes\";\nexport * from \"./otsession\";\n","import * as OT from \"./ottypes\";\n\nconst TestUnitSize: number = 4;\nlet TestCounter: number = 0;\n\n// Array Ops\nexport const OpInsert: number = 1;\nexport const OpDelete: number = 2;\nexport const OpRetain: number = 3;\nexport const OpCursor: number = 4;\t// 2nd arg is 0/1 for start/end of region, 3rd arg is clientID\nexport const OpSet: number = 5;\nexport const OpTmpRetain: number = 6;\n\n// Op, Len, Data\nexport type OTSingleArrayEdit = [number, number, any];\nexport type OTEdits = OTSingleArrayEdit[];\n\nenum OTalignEdgesType { AlignForCompose, AlignForTransform };\n\n// Set of interfaces that operates on the underlying array-like value type.\n// If more efficient, can modify the initial argument and simply return it.\n// Alternatively, can create new instance and return it (string works this way since\n// underlying type is immutable).\n// This is used for the array-like specialization of IOTInterface\nexport interface IOTArrayLikeOperations\n{\n\tunderlyingTypeName(): string;\n\n\t// Return empty instance\n\tempty(): any;\n\n\t// Insert new instance at position specified\n\tinsert(t: any, pos: number, tInsert: any): any;\t\t\t\t// Can modify input\n\n\t// Delete part of instance\n\tdelete(t: any, pos: number, len: number): any;\t\t\t\t// Can modify input\n\n\t// Set value of part of instance\n\tset(t: any, pos: number, tSet: any): any;\t\t\t\t\t// Can modify input\n\n\t// append to instance (insert at end)\n\tappend(t: any, tAppend: any): any;\t\t\t\t\t\t\t// Can modify input\n\n\t// Take substring of instance\n\tsubstr(t: any, pos: number, len: number): any;\t\t\t\t// Can modify input\n\n\t// Take substring of provided base value type and set\n\tsubstrOf(t: any, pos: number, len: number, tsub: any): any;\t// Cannot modify input\n\n\t// Construct an instance N long\n\tconstructN(n: number): any;\n\n\t// Test for equality\n\tequal(t1: any, t2: any): boolean;\n\n\t// copy an instance\n\tcopy(t: any): any;\t\t\t\t\t\t\t\t\t\t\t// Need to do deep copy if T is mutable.\n\n\t// Return length of instance\n\tlength(t: any): number;\n};\n\n// Operates on a single \"OTSingleArrayEdit\", parameterized by an object that manipulates the underlying\n// array-like value stored as the third property of the 3-element edit object.\nexport class OTSingleArrayEditor\n{\n\traw: IOTArrayLikeOperations;\n\n\tconstructor(raw: IOTArrayLikeOperations)\n\t\t{\n\t\t\tthis.raw = raw;\n\t\t}\n\n\tcopy(a: OTSingleArrayEdit): OTSingleArrayEdit \t\t// If a[2] is mutable, need to override and do deep copy\n\t\t{ return [ a[0], a[1], this.raw.copy(a[2]) ]; }\n\n\t// Static Predicates for MoveAction\n\tisDelete(a: OTSingleArrayEdit): boolean { return a[0] == OpDelete; }\n\tisNotDelete(a: OTSingleArrayEdit): boolean { return a[0] != OpDelete; }\n\tisCursor(a: OTSingleArrayEdit): boolean { return a[0] == OpCursor; }\n\tisNotCursor(a: OTSingleArrayEdit): boolean { return a[0] != OpCursor; }\n\tisTmpRetain(a: OTSingleArrayEdit): boolean { return a[0] == OpTmpRetain; }\n\tisNotTmpRetainOrDelete(a: OTSingleArrayEdit): boolean { return (a[0] != OpTmpRetain && a[0] != OpDelete); }\n\tisTmpRetainOrDelete(a: OTSingleArrayEdit): boolean { return (a[0] == OpTmpRetain || a[0] == OpDelete); }\n\n\t// Other static predicates\n\tisIgnore(a: OTSingleArrayEdit): boolean { return a[0] < 0; }\n\tisNoOp(a: OTSingleArrayEdit): boolean { return a[1] === 0 && a[0] != OpCursor; }\n\tisEqual(a1: OTSingleArrayEdit, a2: OTSingleArrayEdit) { return a1[0] == a2[0] && a1[1] == a2[1] && this.raw.equal(a1[2], a2[2]); }\n\n\t// Helpers\n\tappendValue(a: OTSingleArrayEdit, s: any): void\n\t\t{ a[2] = this.raw.append(a[2], s); a[1] = a[1] + this.raw.length(s); }\n\tempty(a: OTSingleArrayEdit): void { a[0] = OpCursor; a[1] = 0; a[2] = this.raw.empty(); }\n\tsetIgnore(a: OTSingleArrayEdit): void { if (a[0] > 0) a[0] = - a[0]; }\n\tsubstr(aIn: OTSingleArrayEdit, pos: number, len: number): void\n\t\t{\n\t\t\tlet sSource: any = aIn[2];\n\t\t\tif (len > 0 && pos+len <= this.raw.length(sSource))\n\t\t\t\taIn[2] = this.raw.substr(sSource, pos, len);\n\t\t\taIn[1] = len;\n\t\t}\n\tsubstrFromRaw(aIn: OTSingleArrayEdit, pos: number, len: number, s: any): void\n\t\t{\n\t\t\tlet sSource: any = s;\n\t\t\tif (len > 0 && pos+len <= this.raw.length(sSource))\n\t\t\t\taIn[2] = this.raw.substr(sSource, pos, len);\n\t\t\taIn[1] = len;\n\t\t}\n\tcopyWithSubstr(aIn: OTSingleArrayEdit, pos: number, len: number): OTSingleArrayEdit\n\t\t{\n\t\t\tlet aOut: OTSingleArrayEdit = this.copy(aIn);\n\t\t\tthis.substr(aOut, pos, len);\n\t\t\treturn aOut;\n\t\t}\n};\n\nexport class OTStringOperations implements IOTArrayLikeOperations\n{\n\tunderlyingTypeName(): string { return 'string'; }\n\tempty(): any { return ''; }\n\tinsert(a: any, pos: number, aInsert: any): any\n\t\t{\n\t\t\tlet s: string = a as string;\n\t\t\tlet sInsert: string = aInsert as string;\n\t\t\treturn s.substr(0, pos) + sInsert + s.substr(pos);\n\t\t}\n\tdelete(a: any, pos: number, len: number): any\n\t\t{\n\t\t\tlet s: string = a as string;\n\t\t\treturn s.substr(0, pos) + s.substr(pos+len);\n\t\t}\n\tset(a: any, pos: number, aSet: any): any\n\t\t{\n\t\t\tlet s: string = a as string;\n\t\t\tlet sSet: string = aSet as string;\n\t\t\treturn s.substr(0, pos) + sSet + s.substr(pos+sSet.length);\n\t\t}\n\tappend(a: any, aAppend: any): any\n\t\t{\n\t\t\tlet s: string = a as string;\n\t\t\tlet sAppend: string = aAppend as string;\n\t\t\treturn s + sAppend;\n\t\t}\n\tsubstr(a: any, pos: number, len: number): any\t\t\t\t\t// Can modify source\n\t\t{\n\t\t\tlet s: string = a as string;\n\t\t\treturn s.substr(pos, len);\n\t\t}\n\tsubstrOf(a: any, pos: number, len: number, aSub: any): any\t\t\t// Copies from tsub argument\n\t\t{\n\t\t\t// a unused if not updated with return value contents\n\t\t\tlet sSub: string = aSub as string;\n\t\t\treturn sSub.substr(pos, len);\n\t\t}\n\tconstructN(n: number): any\n\t\t{\n\t\t\tlet x = ' ';\n\t\t\tlet s = '';\n\t\t\tfor (;;)\n\t\t\t{\n\t\t\t\tif (n & 1)\n\t\t\t\t\ts += x;\n\t\t\t\tn >>= 1;\n\t\t\t\tif (n)\n\t\t\t\t\tx += x;\n\t\t\t\telse\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn s;\n\t\t}\n\tequal(a1: any, a2: any): boolean\n\t\t{\n\t\t\tlet s1: string = a1 as string;\n\t\t\tlet s2: string = a2 as string;\n\t\t\treturn s1 === s2;\n\t\t}\n\tcopy(a: any): any { return a; }\n\tlength(a: any): number { return a.length; }\n};\n\nexport class OTArrayOperations implements IOTArrayLikeOperations\n{\n\tunderlyingTypeName(): string { return 'array'; }\n\tempty(): any { return []; }\n\tinsert(a: any, pos: number, aInsert: any): any\n\t\t{\n\t\t\tlet arr: Array<any> = a as Array<any>;\n\t\t\tlet arrInsert: Array<any> = aInsert as Array<any>;\n\t\t\tlet arrReturn = Array(arr.length + arrInsert.length);\n\t\t\tlet i: number, j: number;\n\t\t\tfor (i = 0; i < pos; i++)\n\t\t\t\tarrReturn[i] = arr[i];\n\t\t\tfor (j = 0; j < arrInsert.length; j++)\n\t\t\t\tarrReturn[i+j] = arrInsert[j];\n\t\t\tfor (i = pos; i < arr.length; i++)\n\t\t\t\tarrReturn[i+j] = arr[i];\n\t\t\treturn arrReturn;\n\t\t}\n\tdelete(a: any, pos: number, len: number): any\n\t\t{\n\t\t\tlet arr: Array<any> = a as Array<any>;\n\t\t\tarr.splice(pos, len);\n\t\t\treturn arr;\n\t\t}\n\tset(a: any, pos: number, aSet: any): any\n\t\t{\n\t\t\tlet arr: Array<any> = a as Array<any>;\n\t\t\tlet arrSet: Array<any> = aSet as Array<any>;\n\t\t\tfor (let i: number = 0; i < arrSet.length; i++)\n\t\t\t\tarr[i+pos] = arrSet[i];\n\t\t\treturn arr;\n\t\t}\n\tappend(a: any, aAppend: any): any\n\t\t{\n\t\t\tlet arr: Array<any> = a as Array<any>;\n\t\t\tlet arrAppend: Array<any> = aAppend as Array<any>;\n\t\t\treturn arr.concat(arrAppend);\n\t\t}\n\tsubstr(a: any, pos: number, len: number): any\t\t\t\t\t// Can modify source\n\t\t{\n\t\t\tlet arr: Array<any> = a as Array<any>;\n\t\t\treturn arr.slice(pos, pos+len);\n\t\t}\n\tsubstrOf(a: any, pos: number, len: number, aSub: any): any\t\t\t// Copies from tsub argument\n\t\t{\n\t\t\t// a unused if not updated with return value contents\n\t\t\tlet arrSub: Array<any> = aSub as Array<any>;\n\t\t\treturn arrSub.slice(pos, pos+len);\n\t\t}\n\tconstructN(n: number): any\n\t\t{\n\t\t\treturn new Array(n);\n\t\t}\n\tequal(a1: any, a2: any): boolean\n\t\t{\n\t\t\tlet arr1: Array<any> = a1 as Array<any>;\n\t\t\tlet arr2: Array<any> = a2 as Array<any>;\n\t\t\tif (arr1.length != arr2.length)\n\t\t\t\treturn false;\n\t\t\tfor (let i: number = 0; i < arr1.length; i++)\n\t\t\t\tif (arr1[i] !== arr2[i])\n\t\t\t\t\treturn false;\n\t\t\treturn true;\n\t\t}\n\tcopy(a: any): any\n\t\t{\n\t\t\tlet arr: Array<any> = a as Array<any>;\n\t\t\tlet arrRet = new Array(arr.length);\n\t\t\tfor (let i: number = 0; i < arr.length; i++)\n\t\t\t\tarrRet[i] = arr[i];\n\t\t\treturn arrRet;\n\t\t}\n\tlength(a: any): number\n\t\t{\n\t\t\treturn a.length;\n\t\t}\n};\n\nexport class OTArrayLikeResource extends OT.OTResourceBase\n{\n\teditor: OTSingleArrayEditor;\n\n\tconstructor(ed: OTSingleArrayEditor, rname: string)\n\t\t{\n\t\t\tsuper(rname, ed.raw.underlyingTypeName());\n\t\t\tthis.editor = ed;\n\t\t}\n\n\tcopy(): OTArrayLikeResource\n\t\t{\n\t\t\treturn null;\t// Needs to be overridden\n\t\t}\n\n\tmoveEdits(newA: OTEdits, iStart: number, iEnd?: number, pred?: (a: OTSingleArrayEdit) => boolean)\n\t\t{\n\t\t\tif (iEnd == undefined)\n\t\t\t\tiEnd = this.edits.length - 1;\n\n\t\t\tfor (; iStart <= iEnd; iStart++)\n\t\t\t{\n\t\t\t\tlet a: OTSingleArrayEdit = this.edits[iStart];\n\t\t\t\tif (!this.editor.isIgnore(a) && (pred == undefined || pred(a)))\n\t\t\t\t\tnewA.push(a);\n\t\t\t}\n\t\t}\n\n\tequal(rhs: OTArrayLikeResource): boolean\n\t\t{\n\t\t\tif (this.length != rhs.length)\n\t\t\t\treturn false;\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t\tif (! this.editor.isEqual(this.edits[i], rhs.edits[i]))\n\t\t\t\t\treturn false;\n\t\t\treturn true;\n\t\t}\n\n\t// Function: OTArrayLikeResource::effectivelyEqual\n\t//\n\t// Description:\n\t//\tA looser definition than operator==. Returns true if two actions would result in the\n\t//\tsame final string. This ignores no-ops like OpCursor and allows different orderings of\n\t//\tinserts and deletes at the same location.\n\t//\n\t// Played around with different algorithms, but the simplest is probably just to apply\n\t//\tthe two actions and see if I get the same final string. Came up with an interesting\n\t//\talgorithm of walking through comparing hashes, but that was not robust to operations\n\t//\tbeing split into fragments and interposed with alternate ops (OpCursor or interleaving of Ins/Del)\n\t//\tthat still leave the string the same. If unhappy with this approach (which scales with size\n\t//\tof string to edit rather than complexity of the edit), the other approach would be to canonicalize\n\t//\tthe edit operations (including removing cursor operations and normalizing order of deletes).\n\t//\t(Added that version of the algorithm under #ifdef). Could also dynamically choose approach based\n\t//\ton relative size of arrays.\n\t//\n\teffectivelyEqual(rhs: OTArrayLikeResource): boolean\n\t\t{\n\t\t\t// Exactly equal is always effectively equal\n\t\t\tif (this.equal(rhs))\n\t\t\t\treturn true;\n\n\t\t\tif (this.originalLength() != rhs.originalLength())\n\t\t\t\treturn false;\n\n\t\t\t// Preferred algorithm\n\t\t\tlet s: any = this.editor.raw.constructN(this.originalLength());\n\n\t\t\tlet sL: any = this.apply(s);\n\t\t\tlet sR: any = rhs.apply(s);\n\t\t\treturn sL === sR;\n\n\t\t\t// Alternate algorithm (see above)\n\t\t\t//let aL: OTArrayLikeResource = this.copy();\n\t\t\t//let aR: OTArrayLikeResource = rhs.copy();\n\n\t\t\t//aL.fullyCoalesce();\n\t\t\t//aR.fullyCoalesce();\n\t\t\t//return aL.equal(aR);\n\t\t}\n\n\tbasesConsistent(rhs: OTArrayLikeResource): void\n\t\t{\n\t\t\tif (this.originalLength() != rhs.originalLength())\n\t\t\t{\n\t\t\t\tconsole.log(\"Logic Failure: transform: Bases Inconsistent.\");\n\t\t\t\tthrow(\"Logic Failure: transform: Bases Inconsistent.\");\n\t\t\t}\n\t\t}\n\n\toriginalLength(): number\n\t\t{\n\t\t\tlet len: number = 0;\n\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet a: OTSingleArrayEdit = this.edits[i];\n\t\t\t\tif (a[0] == OpRetain || a[0] == OpDelete || a[0] == OpSet)\n\t\t\t\t\tlen += a[1];\n\t\t\t}\n\t\t\treturn len;\n\t\t}\n\n\tfinalLength(): number\n\t\t{\n\t\t\tlet len: number = 0;\n\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet a: OTSingleArrayEdit = this.edits[i];\n\t\t\t\tif (a[0] == OpRetain || a[0] == OpInsert || a[0] == OpSet)\n\t\t\t\t\tlen += a[1];\n\t\t\t}\n\t\t\treturn len;\n\t\t}\n\n\tapply(aValue: any): any\n\t\t{\n\t\t\tif (aValue == null)\n\t\t\t\taValue = this.editor.raw.empty();\n\t\t\tlet pos: number = 0;\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet a: OTSingleArrayEdit = this.edits[i];\n\n\t\t\t\tswitch (a[0])\n\t\t\t\t{\n\t\t\t\t\tcase OpRetain:\n\t\t\t\t\t\tpos += a[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpCursor:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpDelete:\n\t\t\t\t\t\taValue = this.editor.raw.delete(aValue, pos, a[1]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpInsert:\n\t\t\t\t\t\taValue = this.editor.raw.insert(aValue, pos, a[2]);\n\t\t\t\t\t\tpos += a[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpSet:\n\t\t\t\t\t\taValue = this.editor.raw.set(aValue, pos, a[2]);\n\t\t\t\t\t\tpos += a[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn aValue;\n\t\t}\n\n\tcoalesce(bDeleteCursor: boolean = false): void\n\t\t{\n\t\t\tif (this.length == 0)\n\t\t\t\treturn;\n\n\t\t\t// coalesce adjoining actions and delete no-ops\n\t\t\tlet newA: OTEdits = [];\n\t\t\tlet aLast: OTSingleArrayEdit;\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet aNext: OTSingleArrayEdit = this.edits[i];\n\t\t\t\tif (this.editor.isNoOp(aNext) || (bDeleteCursor && aNext[0] == OpCursor))\n\t\t\t\t\tcontinue;\n\n\t\t\t\tif (newA.length > 0 && aNext[0] == aLast[0])\n\t\t\t\t{\n\t\t\t\t\tif (aNext[0] == OpInsert || aNext[0] == OpSet)\n\t\t\t\t\t\tthis.editor.appendValue(aLast, aNext[2]);\n\t\t\t\t\telse\n\t\t\t\t\t\taLast[1] += aNext[1];\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tnewA.push(aNext);\n\t\t\t\t\taLast = aNext;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.edits = newA;\n\t\t}\n\n\t// Function: fullyCoalesce\n\t//\n\t// Description:\n\t//\tHeavier duty version of coalesce that fully normalizes so that two actions that result in same\n\t//\tfinal edit are exactly the same. This normalizes order of insert/deletes and deletes OpCursor,\n\t//\tand then does coalesce.\n\t//\n\tfullyCoalesce(): void\n\t\t{\n\t\t\t// TODO\n\t\t\tthis.coalesce(true);\n\t\t}\n\n\t// Function: Invert\n\t//\n\t// Description:\n\t//\tGiven an action, convert it to its inverse (action + inverse) = identity (retain(n)).\n\t//\n\t//\tNote that in order to compute the inverse, you need the input state (e.g. because in order to invert\n\t//\tOpDelete, you need to know the deleted characters.\n\t//\n\tinvert(sInput: any): void\n\t\t{\n\t\t\tlet pos: number = 0;\t// Tracks position in input string.\n\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet a: OTSingleArrayEdit = this.edits[i];\n\n\t\t\t\tswitch (a[0])\n\t\t\t\t{\n\t\t\t\t\tcase OpCursor:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpRetain:\n\t\t\t\t\t\tpos += a[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpInsert:\n\t\t\t\t\t\ta[2] = '';\n\t\t\t\t\t\ta[0] = OpDelete;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpDelete:\n\t\t\t\t\t\ta[2] = this.editor.copyWithSubstr(sInput, pos, a[1]);\n\t\t\t\t\t\ta[0] = OpInsert;\n\t\t\t\t\t\tpos += a[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpSet:\n\t\t\t\t\t\ta[2] = this.editor.copyWithSubstr(sInput, pos, a[1]);\n\t\t\t\t\t\tpos += a[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t// Function: alignEdges\n\t//\n\t// Description:\n\t//\tSlice up this action sequence so its edges align with the action sequence I am going to\n\t//\tprocess it with. The processing (compose or transform) determines which actions Slice\n\t//\ttakes into account when moving the parallel counters forward. When processing for\n\t//\tcompose, deletes in rhs can be ignored. When processing for transform, inserts in both\n\t//\tlhs and rhs can be ignored.\n\t//\t\n\n\talignEdges(rhs: OTArrayLikeResource, st: OTalignEdgesType): void\n\t\t{\n\t\t\tlet posR: number = 0;\n\t\t\tlet posL: number = 0;\n\t\t\tlet iL: number = 0;\n\t\t\tlet newA: OTEdits = [];\n\t\t\tlet aAfter: OTSingleArrayEdit = undefined;\n\t\t\tlet aL: OTSingleArrayEdit = undefined;\n\n\t\t\tfor (let iR: number = 0; iR < rhs.length; iR++)\n\t\t\t{\n\t\t\t\tlet aR: OTSingleArrayEdit = rhs.edits[iR];\n\n\t\t\t\tswitch (aR[0])\n\t\t\t\t{\n\t\t\t\t\tcase OpCursor:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpInsert:\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpDelete:\n\t\t\t\t\t\tposR += aR[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpSet:\n\t\t\t\t\t\tposR += aR[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpRetain:\n\t\t\t\t\t\tposR += aR[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// Advance iL/posL to equal to posR\n\t\t\t\twhile (posL < posR && (aAfter != undefined || iL < this.length))\n\t\t\t\t{\n\t\t\t\t\tif (aAfter == undefined)\n\t\t\t\t\t{\n\t\t\t\t\t\taL = this.edits[iL];\n\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\tiL++;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\taL = aAfter;\n\t\t\t\t\t}\n\n\t\t\t\t\tswitch (aL[0])\n\t\t\t\t\t{\n\t\t\t\t\t\tcase OpCursor:\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase OpInsert:\n\t\t\t\t\t\t\tif (st == OTalignEdgesType.AlignForCompose) posL += aL[1];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase OpDelete:\n\t\t\t\t\t\t\tif (st == OTalignEdgesType.AlignForTransform) posL += aL[1];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase OpSet:\n\t\t\t\t\t\t\tposL += aL[1];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase OpRetain:\n\t\t\t\t\t\t\tposL += aL[1];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Split this one if it spans boundary\n\t\t\t\t\tif (posL > posR)\n\t\t\t\t\t{\n\t\t\t\t\t\tlet nRight: number = posL - posR;\n\t\t\t\t\t\tlet nLeft: number = aL[1] - nRight;\n\n\t\t\t\t\t\taAfter = this.editor.copyWithSubstr(aL, nLeft, nRight);\n\t\t\t\t\t\tthis.editor.substr(aL, 0, nLeft);\n\t\t\t\t\t\tnewA.push(aAfter);\n\t\t\t\t\t\tposL = posR;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\taAfter = undefined;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Append any we missed\n\t\t\tthis.moveEdits(newA, iL);\n\n\t\t\tthis.edits = newA;\n\t\t}\n\t\n\tgetCursorCache(): any\n\t\t{\n\t\t\tlet cursorCache: any = { };\n\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet a: OTSingleArrayEdit = this.edits[i];\n\n\t\t\t\tif (a[0] == OpCursor && a[2] != null)\n\t\t\t\t\tcursorCache[a[2]] = '';\n\t\t\t}\n\t\t\treturn cursorCache;\n\t\t}\n\n\t// Function: compose\n\t//\n\t// Description:\n\t//\tcompose the current action with the action passed in. This alters the current action.\n\t//\n\t//\tBasic structure is to walk through the RHS list of actions, processing each one in turn.\n\t//\tThat then drives the walk through the left hand side and the necessary edits. I use\n\t//\t\"posR\" and \"posL\" to work through equivalent positions in the two strings being edited.\n\t//\tDeletions in the LHS don't effect posL because they don't show up in the input string to RHS.\n\t//\tSimilarly, insertions in the RHS don't effect posR since they have no equivalent string location\n\t//\tin the LHS.\t(Note transform follows similar structure but different logic for how posR and posL\n\t//\ttrack each other since in that case they are effectively referencing the same input string.)\n\t//\n\tcompose(rhs: OTArrayLikeResource): void\n\t\t{\n\t\t\tlet cursorCache: any = rhs.getCursorCache();\n\n\t\t\tif (this.length == 0)\n\t\t\t{\n\t\t\t\tthis.edits = rhs.edits.map(this.editor.copy, this.editor);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse if (rhs.edits.length == 0)\n\t\t\t\treturn;\n\n\t\t\tif (this.finalLength() != rhs.originalLength())\n\t\t\t{\n\t\t\t\tconsole.log(\"Logic Failure: compose: Bases Inconsistent.\");\n\t\t\t\tthrow(\"Logic Failure: compose: Bases Inconsistent.\");\n\t\t\t}\n\n\t\t\t// Break overlapping segments before start to simplify logic below.\n\t\t\tthis.alignEdges(rhs, OTalignEdgesType.AlignForCompose);\n\n\t\t\t// Iterate with parallel position markers in two arrays\n\t\t\tlet posR: number = 0;\n\t\t\tlet posL: number = 0;\n\t\t\tlet iL: number = 0;\n\t\t\tlet bDone: boolean;\n\t\t\tlet newA: OTSingleArrayEdit[] = [];\n\n\t\t\tfor (let iR: number = 0; iR < rhs.length; iR++)\n\t\t\t{\n\t\t\t\tlet aR: OTSingleArrayEdit = rhs.edits[iR];\n\n\t\t\t\tswitch (aR[0])\n\t\t\t\t{\n\t\t\t\t\tcase OpRetain:\n\t\t\t\t\t\tposR += aR[1];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase OpSet:\n\t\t\t\t\tcase OpDelete:\n\t\t\t\t\tcase OpInsert:\n\t\t\t\t\tcase OpCursor:\n\t\t\t\t\t\t// Advance to cursor location\n\t\t\t\t\t\tbDone = false;\n\t\t\t\t\t\twhile (!bDone && iL < this.length)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlet aL: OTSingleArrayEdit = this.edits[iL];\n\n\t\t\t\t\t\t\tswitch (aL[0])\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tcase OpCursor:\n\t\t\t\t\t\t\t\t\t// Only copy old cursor locations if they aren't empty and aren't duplicated in this rhs.\n\t\t\t\t\t\t\t\t\tif (aL[2] != '' && cursorCache[aL[2]] === undefined)\n\t\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t\tiL++;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase OpSet:\n\t\t\t\t\t\t\t\tcase OpRetain:\n\t\t\t\t\t\t\t\tcase OpInsert:\n\t\t\t\t\t\t\t\t\tif (posL == posR)\n\t\t\t\t\t\t\t\t\t\tbDone = true;\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tposL += aL[1];\n\t\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t\t\tiL++;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase OpDelete:\n\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t\tiL++;\t// Move past since deletes are not referenced by RHS\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (aR[0] == OpDelete)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// Remove sequence of cursor, insert, retains, sets, replaced by delete.\n\t\t\t\t\t\t\t// Note that insert/delete cancel each other out, so there is a bit of complexity there.\n\t\t\t\t\t\t\tlet nChange: number = aR[1];\n\t\t\t\t\t\t\tlet nRemain: number = aR[1];\n\t\t\t\t\t\t\tfor (; nChange > 0 && iL < this.length; iL++)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tlet aL: OTSingleArrayEdit = this.edits[iL];\n\n\t\t\t\t\t\t\t\tswitch (aL[0])\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tcase OpCursor:\n\t\t\t\t\t\t\t\t\t\t// Only copy old cursor locations if they aren't empty and aren't duplicated in this rhs.\n\t\t\t\t\t\t\t\t\t\tif (aL[2] != '' && cursorCache[aL[2]] === undefined)\n\t\t\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase OpDelete:\n\t\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase OpSet:\n\t\t\t\t\t\t\t\t\tcase OpRetain:\n\t\t\t\t\t\t\t\t\tcase OpInsert:\n\t\t\t\t\t\t\t\t\t\tnRemain -= aL[0] == OpInsert ? aL[1] : 0;\n\t\t\t\t\t\t\t\t\t\tnChange -= aL[1];\n\t\t\t\t\t\t\t\t\t\t// Don't copy into new array\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Now add in the delete\n\t\t\t\t\t\t\tif (nRemain > 0)\n\t\t\t\t\t\t\t\tnewA.push([ OpDelete, nRemain, '' ]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (aR[0] == OpSet)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// Process sequence of cursor, insert, retains, sets\n\t\t\t\t\t\t\tlet nChange: number = aR[1];\n\t\t\t\t\t\t\tfor (; nChange > 0 && iL < this.length; iL++)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tlet aL: OTSingleArrayEdit = this.edits[iL];\n\t\t\t\t\t\t\t\tlet opL: number = OpInsert;\n\n\t\t\t\t\t\t\t\tswitch (aL[0])\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tcase OpCursor:\n\t\t\t\t\t\t\t\t\t\t// Only copy old cursor locations if they aren't empty and aren't duplicated in this rhs.\n\t\t\t\t\t\t\t\t\t\tif (aL[2] != '' && cursorCache[aL[2]] === undefined)\n\t\t\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase OpDelete:\n\t\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase OpSet:\n\t\t\t\t\t\t\t\t\tcase OpRetain:\n\t\t\t\t\t\t\t\t\t\topL = OpSet;\n\t\t\t\t\t\t\t\t\t\t// fallthrough\n\t\t\t\t\t\t\t\t\tcase OpInsert:\n\t\t\t\t\t\t\t\t\t\t// A Set composed with Insert becomes Insert of Set content\n\t\t\t\t\t\t\t\t\t\tthis.editor.substrFromRaw(aL, aR[1]-nChange, aL[1], aR[2]);\n\t\t\t\t\t\t\t\t\t\taL[0] = opL;\n\t\t\t\t\t\t\t\t\t\tnChange -= aL[1];\n\t\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse // cursor, insert\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// Add in the RHS operation at proper location\n\t\t\t\t\t\t\tnewA.push(this.editor.copy(aR));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// copy any remaining actions, excluding cursors duplicated in rhs\n\t\t\tthis.moveEdits(newA, iL, this.length-1,\n\t\t\t\tfunction (e: OTSingleArrayEdit)\n\t\t\t\t\t{ return (e[0] != OpCursor) || (e[2] != '' && cursorCache[e[2]] === undefined) } );\n\n\t\t\tthis.edits = newA;\n\n\t\t\tthis.coalesce();\n\t\t}\n\n\tperformTransformReorder(bForceRetainBeforeInsert: boolean, newA: OTEdits, iBegin: number, iEnd: number): void\n\t\t{\n\t\t\tif (iBegin < 0 || iBegin > iEnd) return;\n\t\t\tif (bForceRetainBeforeInsert)\n\t\t\t{\n\t\t\t\tthis.moveEdits(newA, iBegin, iEnd, this.editor.isTmpRetainOrDelete);\n\t\t\t\tthis.moveEdits(newA, iBegin, iEnd, this.editor.isNotTmpRetainOrDelete);\t// Is Insert or Cursor\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.moveEdits(newA, iBegin, iEnd, this.editor.isNotTmpRetainOrDelete);\t// Is Insert or Cursor\n\t\t\t\tthis.moveEdits(newA, iBegin, iEnd, this.editor.isTmpRetainOrDelete);\n\t\t\t}\n\t\t}\n\n\t// Function: normalizeNewRetainsAfterTransform\n\t//\n\t// Description:\n\t//\tHelper function for transform() that does a post-processing pass to ensure that all\n\t//\tRetains are properly ordered with respect to Inserts that occur at the same location\n\t//\t(either before or after, depending on whether we are transforming based on server or client side).\n\t//\tThis ensures that the transform process is not sensitive to precise ordering of Inserts and\n\t//\tRetains (since that ordering doesn't actually change the semantics of the edit performed and\n\t//\ttherefore should not result in a difference in processing here). And yes, it's a subtle issue\n\t//\tthat may not actually occur in real edits produced by some particular editor but does arise when\n\t//\ttesting against randomly generated edit streams.\n\t//\n\t//\tA side consequence is also normalizing the ordering of inserts and deletes which also doesn't\n\t//\tchange the semantics of the edit but ensures we properly detect conflicting insertions.\n\t//\n\t//\tThe way to think of this algorithm is that Set's and Retains (pre-existing, not new TmpRetains) form\n\t//\thard boundaries in the ordering. The series of Cursor/TmpRetain/Insert/Deletes between Sets and Retains\n\t//\tare re-ordered by this algorithm. TmpRetain's get pushed to the front or the back depending on the bForce\n\t//\tflag passed in (which reflects which operation had precedence).\n\t//\n\tnormalizeNewRetainsAfterTransform(bForceRetainBeforeInsert: boolean): void\n\t\t{\n\t\t\tif (this.length == 0)\n\t\t\t\treturn;\n\n\t\t\tlet i: number = 0;\n\t\t\tlet newA: OTSingleArrayEdit[] = [];\n\t\t\tlet iLastEdge: number = 0;\n\n\t\t\t// Normalize ordering for newly insert retains so they are properly ordered\n\t\t\t// with respect to inserts occurring at the same location.\n\t\t\tfor (i = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet a: OTSingleArrayEdit = this.edits[i];\n\t\t\t\tif (a[0] == OpSet || a[0] == OpRetain)\n\t\t\t\t{\n\t\t\t\t\tthis.performTransformReorder(bForceRetainBeforeInsert, newA, iLastEdge, i-1);\n\t\t\t\t\tnewA.push(a);\n\t\t\t\t\tiLastEdge = i+1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.performTransformReorder(bForceRetainBeforeInsert, newA, iLastEdge, this.length-1);\n\n\t\t\t// One last time to switch TmpRetain to Retain\n\t\t\tfor (i = 0; i < newA.length; i++)\n\t\t\t\tif ((newA[i])[0] == OpTmpRetain)\n\t\t\t\t\t(newA[i])[0] = OpRetain;\n\t\t\tthis.edits = newA;\n\t\t}\n\n\ttransform(prior: OTArrayLikeResource, bPriorIsService: boolean): void\n\t\t{\n\t\t\tif (this.length == 0 || prior.length == 0)\n\t\t\t\treturn;\n\n\t\t\t// Validate\n\t\t\tthis.basesConsistent(prior);\n\n\t\t\t// Break overlapping segments before start to simplify logic below.\n\t\t\tthis.alignEdges(prior, OTalignEdgesType.AlignForTransform);\n\n\t\t\tlet posR: number = 0; // These walk in parallel across the consistent base strings (only retains, sets and deletes count)\n\t\t\tlet posL: number = 0;\n\t\t\tlet iL: number = 0;\n\t\t\tlet bDone: boolean;\n\t\t\tlet newA: OTEdits = [];\n\n\t\t\tfor (let iR: number = 0; iR < prior.length; iR++)\n\t\t\t{\n\t\t\t\tlet aR: OTSingleArrayEdit = prior.edits[iR];\n\n\t\t\t\tswitch (aR[0])\n\t\t\t\t{\n\t\t\t\t\tcase OpCursor:\n\t\t\t\t\t\t// No-op\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpInsert:\n\t\t\t\t\t\t{\n\t\t\t\t\t\t// Converts to a retain.\n\t\t\t\t\t\t// Need to find spot to insert retain. After loop, iL will contain location\n\t\t\t\t\t\tfor (; iL < this.length; iL++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (posR == posL)\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tlet aL: OTSingleArrayEdit = this.edits[iL];\n\t\t\t\t\t\t\tif (this.editor.isIgnore(aL))\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\tif (aL[0] != OpCursor && aL[0] != OpInsert)\n\t\t\t\t\t\t\t\tposL += aL[1];\n\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet nRetain: number = aR[1];\n\t\t\t\t\t\tnewA.push([ OpTmpRetain, nRetain, '' ]);\n\t\t\t\t\t\tposR += nRetain;\n\t\t\t\t\t\tposL += nRetain;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpSet:\n\t\t\t\t\t\t// Somewhat unintuitively, if prior is *not* service, then it will actually get applied *after*\n\t\t\t\t\t\t// the service instance of OpSet and so should take precedence. Therefore if prior is not service,\n\t\t\t\t\t\t// we need to go through and convert \"OpSets\" that overlap to be this content. If prior is service,\n\t\t\t\t\t\t// we can just treat them as \"retains\" since they have no effect on our operations.\n\t\t\t\t\t\tif (bPriorIsService)\n\t\t\t\t\t\t\tposR += aR[1];\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlet nRemaining: number = aR[1];\n\t\t\t\t\t\t\twhile (nRemaining > 0 && iL < this.length)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tlet aL: OTSingleArrayEdit = this.edits[iL];\n\t\t\t\t\t\t\t\tif (this.editor.isIgnore(aL))\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tiL++;\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tlet valL: number = aL[1];\n\n\t\t\t\t\t\t\t\tif (aL[0] == OpCursor || aL[0] == OpInsert)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tiL++;\n\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tif (posR >= posL+valL)\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t// Not there yet\n\t\t\t\t\t\t\t\t\t\tposL += valL;\n\t\t\t\t\t\t\t\t\t\tiL++;\n\t\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tif (aL[0] == OpDelete || aL[0] == OpRetain)\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tif (valL <= nRemaining)\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tposR += valL;\n\t\t\t\t\t\t\t\t\t\t\t\tposL += valL;\n\t\t\t\t\t\t\t\t\t\t\t\tnRemaining -= valL;\n\t\t\t\t\t\t\t\t\t\t\t\tiL++;\n\t\t\t\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t// Not subsumed, but means that I didn't encounter an OpSet\n\t\t\t\t\t\t\t\t\t\t\t\tposR += nRemaining;\n\t\t\t\t\t\t\t\t\t\t\t\tnRemaining = 0;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse // OpSet\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tif (aL[1] <= nRemaining)\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tposR += valL;\n\t\t\t\t\t\t\t\t\t\t\t\tposL += valL;\n\t\t\t\t\t\t\t\t\t\t\t\tthis.editor.substrFromRaw(aL, aR[1] - nRemaining, valL, aR[2]);\n\t\t\t\t\t\t\t\t\t\t\t\tnRemaining -= valL;\n\t\t\t\t\t\t\t\t\t\t\t\tiL++;\n\t\t\t\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t// don't advance posL or iL because we will re-process the left over\n\t\t\t\t\t\t\t\t\t\t\t\t// part for the next action. Simply edit the data in place.\n\t\t\t\t\t\t\t\t\t\t\t\t// Set [0, nRemaining] of aL.Data to [aR[1]-nRemaining, nRemaining]\n\t\t\t\t\t\t\t\t\t\t\t\t//aL.Data.delete(0, nRemaining);\n\t\t\t\t\t\t\t\t\t\t\t\t//aL.Data.InsertValue(0, aR.Data, aR[1]-nRemaining, nRemaining);\n\t\t\t\t\t\t\t\t\t\t\t\taL[2] = aR[2].substr(aR[1] - nRemaining) + aL[2].substr(nRemaining);\n\t\t\t\t\t\t\t\t\t\t\t\tposR += nRemaining;\n\t\t\t\t\t\t\t\t\t\t\t\tnRemaining = 0;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpDelete:\n\t\t\t\t\t\t{\n\t\t\t\t\t\tlet nRemaining: number = aR[1];\n\t\t\t\t\t\tlet nDelay: number = 0;\n\t\t\t\t\t\tlet iDelay: number;\n\n\t\t\t\t\t\t// Retains, sets and deletes are subsumed by prior deletes\n\t\t\t\t\t\tfor (; nRemaining > 0 && iL < this.length; iL++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlet aL: OTSingleArrayEdit = this.edits[iL];\n\t\t\t\t\t\t\tif (this.editor.isIgnore(aL))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (nDelay > 0)\n\t\t\t\t\t\t\t\t\tnDelay++;\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (aL[0] == OpCursor || aL[0] == OpInsert)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (nDelay == 0)\n\t\t\t\t\t\t\t\t\tiDelay = iL;\n\t\t\t\t\t\t\t\tnDelay++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (posR >= posL+aL[1])\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t// Go ahead and push any delayed actions\n\t\t\t\t\t\t\t\t\tfor (let j: number = iDelay; nDelay > 0; nDelay--, j++)\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tlet aD: OTSingleArrayEdit = this.edits[j];\n\t\t\t\t\t\t\t\t\t\tif (! this.editor.isIgnore(aD))\n\t\t\t\t\t\t\t\t\t\t\tnewA.push(aD);\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Prior to the deleted content\n\t\t\t\t\t\t\t\t\tposL += aL[1];\n\t\t\t\t\t\t\t\t\tnewA.push(aL);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t// Retain/set/delete is fully subsumed.\n\t\t\t\t\t\t\t\t\tposR += aL[1];\n\t\t\t\t\t\t\t\t\tposL += aL[1];\n\t\t\t\t\t\t\t\t\tnRemaining -= aL[1];\n\t\t\t\t\t\t\t\t\tthis.editor.setIgnore(aL);\n\t\t\t\t\t\t\t\t\tif (nDelay > 0)\n\t\t\t\t\t\t\t\t\t\tnDelay++;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// We want to reprocess any trailing insert/cursors so we recognize conflicting inserts even when\n\t\t\t\t\t\t// deletes intervene.\n\t\t\t\t\t\tif (nDelay > 0)\n\t\t\t\t\t\t\tiL = iDelay;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpRetain:\n\t\t\t\t\t\t// Just advance cursor\n\t\t\t\t\t\tposR += aR[1];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.moveEdits(newA, iL);\n\t\t\tthis.edits = newA;\n\t\t\tthis.normalizeNewRetainsAfterTransform(bPriorIsService);\n\t\t\tthis.coalesce();\n\t\t}\n\n\t//\n\t// Function: generateRandom\n\t//\n\t// Description:\n\t//\tGenerate action containing a sequence of retain, insert, delete, cursor with the initial\n\t//\tstate of the string being nInitial. Make sure I always generate at least one insert or delete.\n\t//\tAlways operate in units of 4 (.123).\n\t//\n\tgenerateRandom(nInitial: number, clientID: string): void\n\t\t{\n\t\t\t// Ensure clean start\n\t\t\tthis.empty();\n\n\t\t\t// Setup randomizer\n\t\t\tlet nOps: number = 0;\n\t\t\tlet nLen: number;\n\t\t\tlet nBound: number;\n\t\t\tlet s: any;\n\n\t\t\twhile (nInitial > 0 || nOps == 0)\n\t\t\t{\n\t\t\t\tlet op: number = randomWithinRange(0, 4);\n\n\t\t\t\tnBound = nInitial / TestUnitSize;\n\t\t\t\tif (nInitial == 0 && (op == OpDelete || op == OpRetain || op == OpSet))\n\t\t\t\t\tcontinue;\n\t\t\t\tswitch (op)\n\t\t\t\t{\n\t\t\t\t\tcase OpInsert:\n\t\t\t\t\t\tnOps++;\n\t\t\t\t\t\tnLen = randomWithinRange(1, 5);\n\t\t\t\t\t\ts = this.editor.raw.empty();\n\t\t\t\t\t\tfor (let i: number = 0; i < nLen; i++)\n\t\t\t\t\t\t\ts = this.editor.raw.append(s, counterValue(this.editor.raw, TestCounter++));\n\t\t\t\t\t\tnLen *= TestUnitSize;\n\t\t\t\t\t\tthis.edits.push([ OpInsert, nLen, s ]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpDelete:\n\t\t\t\t\t\tnOps++;\n\t\t\t\t\t\tnLen = randomWithinRange(1, nBound > 3 ? nBound / 3 : nBound);\n\t\t\t\t\t\tnLen *= TestUnitSize;\n\t\t\t\t\t\tnInitial -= nLen;\n\t\t\t\t\t\tthis.edits.push([ OpDelete, nLen, this.editor.raw.empty() ]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpCursor:\n\t\t\t\t\t\tthis.edits.push([ OpCursor, 0, clientID ]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpRetain:\n\t\t\t\t\t\tnLen = randomWithinRange(1, nBound);\n\t\t\t\t\t\tnLen *= TestUnitSize;\n\t\t\t\t\t\tnInitial -= nLen;\n\t\t\t\t\t\tthis.edits.push([ OpRetain, nLen, this.editor.raw.empty() ]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpSet:\n\t\t\t\t\t\tnLen = 1;\n\t\t\t\t\t\ts = this.editor.raw.empty();\n\t\t\t\t\t\tfor (let i: number = 0; i < nLen; i++)\n\t\t\t\t\t\t\tthis.editor.raw.append(s, counterValue(this.editor.raw, TestCounter++));\n\t\t\t\t\t\tnLen *= TestUnitSize;\n\t\t\t\t\t\tnInitial -= nLen;\n\t\t\t\t\t\tthis.edits.push([ OpSet, nLen, s ]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Most importantly ensures canonical ordering of inserts and deletes.\n\t\t\tthis.coalesce();\n\t\t}\n}\n\nexport class OTStringResource extends OTArrayLikeResource\n{\n\tstatic _editor: OTSingleArrayEditor = new OTSingleArrayEditor(new OTStringOperations());\n\tconstructor(rname: string)\n\t\t{\n\t\t\tsuper(OTStringResource._editor, rname);\n\t\t}\n\tstatic factory(rname: string): OTStringResource { return new OTStringResource(rname); }\n\tcopy(): OTStringResource\n\t\t{\n\t\t\tlet copy: OTStringResource = new OTStringResource(this.resourceName);\n\t\t\tcopy.edits = this.edits.map(copy.editor.copy, copy.editor);\n\t\t\treturn copy;\n\t\t}\n}\n\nexport class OTArrayResource extends OTArrayLikeResource\n{\n\tstatic _editor: OTSingleArrayEditor = new OTSingleArrayEditor(new OTArrayOperations());\n\tconstructor(rname: string)\n\t\t{\n\t\t\tsuper(OTArrayResource._editor, rname);\n\t\t}\n\tstatic factory(rname: string): OTArrayResource { return new OTArrayResource(rname); }\n\n\tcopy(): OTArrayResource\n\t\t{\n\t\t\tlet copy: OTArrayResource = new OTArrayResource(this.resourceName);\n\t\t\tcopy.edits = this.edits.map(copy.editor.copy, copy.editor);\n\t\t\treturn copy;\n\t\t}\n}\n\nfunction randomWithinRange(nMin: number, nMax: number): number\n{\n\treturn nMin + Math.floor(Math.random() * (nMax - nMin + 1));\n}\n\nfunction counterValue(ops: IOTArrayLikeOperations, c: number): any\n{\n\tswitch (ops.underlyingTypeName())\n\t{\n\t\tcase 'string':\n\t\t\t{\n\t\t\t\tlet a: string[] = new Array(TestUnitSize);\n\t\t\t\ta[0] = '.';\n\t\t\t\tfor (let j: number = 1; j < TestUnitSize; j++, c = Math.floor(c / 10))\n\t\t\t\t\ta[TestUnitSize - j] = \"\" + (c % 10);\n\t\t\t\treturn a.join('');\n\t\t\t}\n\t\tcase 'array':\n\t\t\t{\n\t\t\t\tlet a: number[] = new Array(TestUnitSize);\n\t\t\t\tfor (let i: number = 0; i < TestUnitSize; i++, c += 0.1)\n\t\t\t\t\ta[i] = c;\n\t\t\t\treturn a;\n\t\t\t}\n\t\tdefault:\n\t\t\tthrow \"counterValue: Unexpected underlying array-like type.\"\n\t}\n}\n","// Shared libraries\nimport * as LogAbstract from \"../logabstract/all\";\n\nimport * as OT from \"./ottypes\";\nimport * as OTC from \"./otcomposite\";\nimport * as OTE from \"./otengine\";\n\nexport class OTClientEngine extends OTE.OTEngine\n{\n\t// Data members\n\tclientID: string;\n\tresourceID: string;\n\tisNeedAck: boolean;\n\tisNeedResend: boolean;\n bReadOnly: boolean;\n\tclientSequenceNo: number;\n\tstateServer: OTC.OTCompositeResource;\n\tstateLocal: OTC.OTCompositeResource;\n valCache: any;\n prefailCache: any;\n\n\tactionAllClient: OTC.OTCompositeResource;\n\tactionAllPendingClient: OTC.OTCompositeResource;\n\tactionSentClient: OTC.OTCompositeResource;\n\tactionSentClientOriginal: OTC.OTCompositeResource;\n\tactionServerInterposedSentClient: OTC.OTCompositeResource;\n\n\t// Constructor\n\tconstructor(ilog: LogAbstract.ILog, rid: string, cid: string)\n\t\t{\n super(ilog);\n\n\t\t\tthis.resourceID = rid;\n\t\t\tthis.clientID = cid;\n\t\t\tthis.initialize();\n this.bReadOnly = false;\n this.valCache = {};\n\t\t}\n\n\tinitialize(): void\n\t\t{\n if (this.prefailCache === undefined && this.clientSequenceNo > 0)\n this.prefailCache = this.valCache;\n\t\t\tthis.clientSequenceNo = 0;\n\t\t\tthis.isNeedAck = false;\n\t\t\tthis.isNeedResend = false;\n\t\t\tthis.actionAllClient = new OTC.OTCompositeResource(this.resourceID, this.clientID);\n\t\t\tthis.actionAllPendingClient = new OTC.OTCompositeResource(this.resourceID, this.clientID);\n\t\t\tthis.actionSentClient = new OTC.OTCompositeResource(this.resourceID, this.clientID);\n\t\t\tthis.actionSentClientOriginal = new OTC.OTCompositeResource(this.resourceID, this.clientID);\n\t\t\tthis.actionServerInterposedSentClient = new OTC.OTCompositeResource(this.resourceID, this.clientID);\n\t\t\tthis.stateServer = new OTC.OTCompositeResource(this.resourceID, this.clientID);\n\t\t\tthis.stateLocal = new OTC.OTCompositeResource(this.resourceID, this.clientID);\n\t\t}\n\n\t// Members\n\tserverClock(): number\n\t\t{\n\t\t\treturn this.stateServer.clock;\n\t\t}\n\n rid(): string\n {\n return this.resourceID;\n }\n\n cid(): string\n {\n return this.resourceID;\n }\n\n toPartialValue(resourceName: string): any\n {\n return this.valCache[resourceName];\n }\n\n\ttoValue(): any\n\t\t{\n\t\t\treturn this.valCache;\n\t\t}\n\n toPrefailValue(): any\n {\n return this.prefailCache;\n }\n\n clearPrefail(): void\n {\n delete this.prefailCache;\n }\n\n setReadOnly(b: boolean): void\n {\n if (b != this.bReadOnly)\n {\n this.bReadOnly = b;\n if (this.bReadOnly)\n this.failbackToServerState();\n }\n }\n\n startLocalEdit(): OTC.OTCompositeResource\n {\n return new OTC.OTCompositeResource(this.resourceID, this.clientID);\n }\n\n\tisPending(): boolean\n\t\t{\n\t\t\treturn this.isNeedResend || !this.actionAllPendingClient.isEmpty();\n\t\t}\n\n\tgetPending(): OTC.OTCompositeResource\n\t\t{\n\t\t\tif (!this.isNeedResend && this.actionAllPendingClient.isEmpty())\n\t\t\t\treturn null;\n\t\t\telse\n\t\t\t{\n\t\t\t\t// If \"isNeedResend\" I need to send the exact same event (instead of aggregating all pending)\n\t\t\t\t// because the server might have actually received and processed the event and I just didn't\n\t\t\t\t// receive acknowledgement. If I merge that event into others I'll lose ability to distinguish\n\t\t\t\t// that. Eventually when I re-establish communication with server I will get that event response\n\t\t\t\t// and can then move on.\n\t\t\t\tif (! this.isNeedResend)\n\t\t\t\t{\n\t\t\t\t\tthis.actionSentClient = this.actionAllPendingClient.copy();\n //console.log(`ClientEngine:getPending: bump sequence count from ${this.clientSequenceNo}`);\n\t\t\t\t\tthis.actionSentClient.clientSequenceNo = this.clientSequenceNo++;\n\t\t\t\t\tthis.actionAllPendingClient.empty();\n\t\t\t\t}\n\t\t\t\tthis.actionSentClient.clock = this.stateServer.clock;\n\t\t\t\tthis.actionSentClientOriginal = this.actionSentClient.copy();\n\t\t\t\tthis.actionServerInterposedSentClient.empty();\n\t\t\t\tthis.isNeedAck = true;\n\t\t\t\tthis.isNeedResend = false;\n\t\t\t\treturn this.actionSentClient.copy();\n\t\t\t}\n\t\t}\n\n\t// When I fail to send, I need to reset to resend the event again\n\tresetPending(): void\n\t\t{\n\t\t\tif (this.isNeedAck)\n\t\t\t{\n\t\t\t\tthis.isNeedAck = false;\n\t\t\t\tthis.isNeedResend = true;\n //console.log('otclientengine: resetPending');\n\t\t\t}\n //else\n // console.log('otclientengine: resetPending ignored because isNeedAck false');\n\t\t}\n\n\t// When I don't accurately have server state - will then refresh from server\n\tfailbackToInitialState(): void\n\t\t{\n console.log('otclientengine: failbackToInitialState');\n if (this.prefailCache === undefined)\n this.prefailCache = this.valCache;\n\t\t\tthis.initialize();\n\t\t}\n\n\t// When I have server state but my state got mixed up\n\tfailbackToServerState(): void\n\t\t{\n console.log('otclientengine: failbackToServerState');\n if (this.prefailCache === undefined)\n this.prefailCache = this.valCache;\n\t\t\tthis.stateLocal = this.stateServer.copy();\n\t\t\tthis.isNeedAck = false;\n\t\t\tthis.actionSentClient.empty();\n\t\t\tthis.actionSentClientOriginal.empty();\n\t\t\tthis.actionServerInterposedSentClient.empty();\n\t\t\tthis.actionAllPendingClient.empty();\n\t\t\tthis.actionAllClient.empty();\n this.valCache = this.stateLocal.toValue();\n this.emit('state');\n\t\t}\n\n\t//\n\t// Function: OTClientEngine.addRemote\n\t//\n\t// Description:\n\t//\tThis function is really where the action is in managing the dynamic logic of applying OT. This is run\n\t//\ton each end point and handles the events received from the server. This includes server acknowledgements\n\t//\t(both success and failure) of locally generated events as well as all the events generated from other\n\t//\tclients.\n\t//\n\t//\tThe key things that happen here are:\n\t//\t\t1. Track server state.\n\t//\t\t2. Respond to server acknowledgement of locally generated events. This also includes validation\n\t//\t\t\t(with failback code) in case where server transformed my event in a way that was inconsistent\n\t//\t\t\twith what I expected (due to insert collision that arose due to multiple independent events).\n\t//\t\t3. Transform the incoming event (by local events) so it can be applied to local state.\n\t//\t\t4. Transform pending local events so they can be dispatched to the service once the service\n\t//\t\t\tis ready for another event.\n\t//\n\n\taddRemote(orig: OTC.OTCompositeResource): void\n\t\t{\n\t\t\t// Reset if server forces restart\n\t\t\tif (orig.clock == OTC.clockInitialValue)\n\t\t\t{\n\t\t\t\tthis.failbackToInitialState();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Reset if server restarted and we don't sync up\n\t\t\tif (orig.clock < 0)\n\t\t\t{\n\t\t\t\t// If server didn't lose anything I can just keep going...\n\t\t\t\tif (this.stateServer.clock+1 == -orig.clock)\n\t\t\t\t\torig.clock = - orig.clock\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis.failbackToInitialState();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Ignore if I've seen this event already\n\t\t\tif (orig.clock <= this.serverClock())\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet bMine: boolean = orig.clientID == this.clientID;\n\t\t\tlet bResend: boolean = bMine && orig.clock == OTC.clockFailureValue;\n\t\t\tlet a: OTC.OTCompositeResource = orig.copy();\n\n\t\t\tif (bResend)\n\t\t\t{\n\t\t\t\t// Service failed my request. Retry with currently outstanding content.\n\t\t\t\tthis.resetPending();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttry\n\t\t\t{\n\t\t\t\t// Track server state and clock\n\t\t\t\tthis.stateServer.compose(a);\n\n\t\t\t\tif (bMine)\n\t\t\t\t{\n\t\t\t\t\t// Validate that I didn't run into unresolvable conflict\n\t\t\t\t\tif (! this.actionServerInterposedSentClient.isEmpty())\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.actionSentClientOriginal.transform(this.actionServerInterposedSentClient, true);\n\t\t\t\t\t\tif (! this.actionSentClient.effectivelyEqual(this.actionSentClientOriginal))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthis.failbackToServerState();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// I don't need to apply to local state since it has already been applied - this is just an ack.\n\t\t\t\t\tthis.isNeedAck = false;\n\t\t\t\t\tthis.actionSentClient.empty();\n\t\t\t\t\tthis.actionSentClientOriginal.empty();\n\t\t\t\t\tthis.actionServerInterposedSentClient.empty();\n\t\t\t\t\tthis.actionAllClient = this.actionAllPendingClient.copy();\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// Transform server action to apply locally by transforming by all pending client actions\n\t\t\t\t\ta.transform(this.actionAllClient, false);\n\n\t\t\t\t\t// And then compose with local state\n\t\t\t\t\tthis.stateLocal.compose(a);\n\n\t\t\t\t\t// Transform pending client by server action so it is rooted off the server state.\n\t\t\t\t\t// This ensures that I can convert the next server action I receive.\n\t\t\t\t\tthis.actionAllClient.transform(orig, true);\n\n\t\t\t\t\t// Transform server action to be after previously sent client action and then\n\t\t\t\t\t// transform the unsent actions so they are ready to be sent.\n\t\t\t\t\tlet aServerTransformed: OTC.OTCompositeResource = orig.copy();\n\t\t\t\t\taServerTransformed.transform(this.actionSentClient, false);\n\t\t\t\t\tthis.actionAllPendingClient.transform(aServerTransformed, true);\n\n\t\t\t\t\t// And then transform the sent client action so ready to be used for transforming next server event\n\t\t\t\t\tthis.actionSentClient.transform(orig, true);\n\n\t\t\t\t\t// Track server operations interposed between a sent action\n\t\t\t\t\tif (this.isNeedAck)\n\t\t\t\t\t\tthis.actionServerInterposedSentClient.compose(orig);\n\n // Let clients know\n this.valCache = this.stateLocal.toValue();\n this.emit('state');\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (err)\n\t\t\t{\n this.ilog.error(\"OTClientEngine.addRemote: unexpected exception: \" + err);\n\t\t\t\tthis.failbackToInitialState();\n\t\t\t}\n\t\t}\n\n\t//\n\t// Function: addLocalEdit\n\t//\n\t// Description:\n\t//\tThis is the logic for adding an action to the local state. The logic is straight-forward\n\t//\tas we need to track:\n\t//\t\t1. The composed set of unacknowledged locally generated events.\n\t//\t\t2. The composed set of unsent locally generated events (queued until sent event is acknowledged).\n\t//\t\t3. The local state.\n\t//\t\t4. An undo operation.\n\t//\n\taddLocalEdit(orig: OTC.OTCompositeResource): void\n\t\t{\n if (! this.bReadOnly)\n {\n try\n {\n this.actionAllClient.compose(orig);\n this.actionAllPendingClient.compose(orig);\n this.stateLocal.compose(orig);\n this.valCache = this.stateLocal.toValue();\n this.emit('state');\n }\n catch (err)\n {\n this.ilog.error(\"OTClientEngine.addLocalEdit: unexpected exception: \" + err);\n this.failbackToInitialState();\n }\n }\n\t\t}\n};\n","import * as OT from \"./ottypes\";\nimport * as OTA from \"./otarray\";\nimport * as OTM from \"./otmap\";\nimport * as OTC from \"./otcounter\";\n\nexport const clockInitialValue: number = -1;\t\t// Initial value\nexport const clockTerminateValue: number = -2;\t\t// Terminal action from client.\nexport const clockRandomizeValue: number = -3;\t\t// Fill in with random data.\nexport const clockFailureValue: number = -4;\t\t// Server failed to apply\nexport const clockInitializeValue: number = -5;\t\t// Used to initialize client to a specific string value.\nexport const clockUndoValue: number = -6;\t\t\t// Used to indicate we should generate an undo event.\nexport const clockSeenValue: number = -7;\t\t\t// Server has already seen this event\n\nexport class OTCompositeResource extends OT.OTResourceBase\n{\n\tresourceID: string;\n\tclientID: string;\n\tclock: number;\n\tclientSequenceNo: number;\n\tstatic typeRegistry: any;\n\n\tconstructor(rid: string, cid: string)\n\t\t{\n\t\t\tsuper('root', 'composite');\n\t\t\tthis.resourceID = rid;\n\t\t\tthis.clientID = cid;\n\t\t\tthis.clock = clockInitialValue;\n\t\t\tthis.clientSequenceNo = 0;\n\t\t}\n\n\tstatic registerType(underlyingType: string, factory: (resourceName: string) => OT.OTResourceBase): void\n\t\t{\n\t\t\tif (OTCompositeResource.typeRegistry == null)\n\t\t\t\tOTCompositeResource.typeRegistry = { };\n\t\t\tOTCompositeResource.typeRegistry[underlyingType] = factory;\n\t\t}\n\n\tfindResource(rname: string, utype: string = '', bConstruct: boolean = false): OT.IOTResource\n\t\t{\n\t\t\tfor (let i: number = this.length-1; i >= 0; i--)\n\t\t\t\tif (this.edits[i].resourceName === rname)\n\t\t\t\t\treturn this.edits[i];\n\t\t\tif (bConstruct)\n\t\t\t{\n\t\t\t\tlet edit: OT.IOTResource = OTCompositeResource.constructResource(rname, utype);\n\t\t\t\tthis.edits.push(edit);\n\t\t\t\treturn edit;\n\t\t\t}\n\t\t\telse\n\t\t\t\treturn null;\n\t\t}\n\n map(rid: string): OTM.OTMapResource\n {\n return this.findResource(rid, 'map', true) as OTM.OTMapResource;\n }\n\n array(rid: string): OTA.OTArrayResource\n {\n return this.findResource(rid, 'array', true) as OTA.OTArrayResource;\n }\n\n counter(rid: string): OTC.OTCounterResource\n {\n return this.findResource(rid, 'counter', true) as OTC.OTCounterResource;\n }\n\n\tgarbageCollect(map: any): boolean\n\t\t{\n\t\t\tif (map)\n\t\t\t{\n\t\t\t\tlet bDirty: boolean = false;\n\t\t\t\tfor (let i: number = this.length-1; i >= 0; i--)\n\t\t\t\t{\n\t\t\t\t\tif (map[this.edits[i].resourceName] === undefined)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.edits.splice(i, 1);\n\t\t\t\t\t\tbDirty = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn bDirty;\n\t\t\t}\n\t\t\telse\n\t\t\t\treturn false;\t// If no resource map, we don't garbage collect\n\t\t}\n\n\tisEmpty(): boolean\n\t\t{\n\t\t\t// Canonical empty is an empty edits array, but an array of empty edits is always considered empty\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t\tif (! this.edits[i].isEmpty())\n\t\t\t\t\treturn false;\n\t\t\treturn true;\n\t\t}\n\n\t// Copy an instance\n\tcopy(): OTCompositeResource\n\t\t{\n\t\t\tlet c: OTCompositeResource = new OTCompositeResource(this.resourceID, this.clientID);\n\t\t\tc.clock = this.clock;\n\t\t\tc.clientSequenceNo = this.clientSequenceNo;\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t\tc.edits.push(this.edits[i].copy());\n\t\t\treturn c;\n\t\t}\n\n\t// Test whether two operations are effectively equivalent\n\teffectivelyEqual(rhs: OTCompositeResource): boolean\n\t\t{\n\t\t\t// This should really be a structural error\n\t\t\tif (this.length != rhs.length)\n\t\t\t\treturn false;\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet lhsEdit: OT.IOTResource = this.edits[i];\n\t\t\t\tlet rhsEdit: OT.IOTResource = rhs.findResource(lhsEdit.resourceName);\n\n\t\t\t\tif ((rhsEdit == null && !lhsEdit.isEmpty()) || ! lhsEdit.effectivelyEqual(rhsEdit))\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t// Core OT algorithm for this type\n\ttransform(rhs: OTCompositeResource, bPriorIsService: boolean): void\n\t\t{\n\t\t\tfor (let i: number = 0; i < rhs.length; i++)\n\t\t\t{\n\t\t\t\tlet rhsEdit: OT.IOTResource = rhs.edits[i];\n\t\t\t\tlet lhsEdit: OT.IOTResource = this.findResource(rhsEdit.resourceName, rhsEdit.underlyingType, false);\n\t\t\t\tif (lhsEdit)\n\t\t\t\t\tlhsEdit.transform(rhsEdit, bPriorIsService);\n\t\t\t}\n\t\t}\n\n\t// compose two edit actions\n\tcompose(rhs: OTCompositeResource): void \t\t\t// throws on error\n\t\t{\n\t\t\tfor (let i: number = 0; i < rhs.length; i++)\n\t\t\t{\n\t\t\t\tlet rhsEdit: OT.IOTResource = rhs.edits[i];\n\n\t\t\t\tlet lhsEdit: OT.IOTResource = this.findResource(rhsEdit.resourceName, rhsEdit.underlyingType, !rhsEdit.isEmpty());\n\t\t\t\tif (lhsEdit)\n\t\t\t\t\tlhsEdit.compose(rhsEdit);\n\t\t\t}\n\n\t\t\tthis.clock = rhs.clock;\n\t\t\tthis.clientSequenceNo = rhs.clientSequenceNo;\n\t\t}\n\n\t// apply this edit to an existing value, returning new value (if underlying type is mutable, may modify input)\n\t// For composite, takes array of values, returns array of results, one for each underlying resource.\n\tapply(runningValue: any): any\n\t\t{\n\t\t\tif (runningValue == null)\n\t\t\t\trunningValue = { };\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet e: OT.IOTResource = this.edits[i];\n\t\t\t\trunningValue[e.resourceName] = e.apply(runningValue[e.resourceName]);\n\t\t\t}\n\t\t\treturn runningValue;\n\t\t}\n\n toPartialValue(resourceName: string): any\n {\n let e = this.edits.find(e => e.resourceName === resourceName);\n return e ? e.apply(null) : null;\n }\n\n\ttoValue(): any\n\t\t{\n\t\t\treturn this.apply(null);\n\t\t}\n\n\tminimize(): void\n\t\t{\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t\tthis.edits[i].minimize();\n\t\t}\n\n\tstatic constructResource(rname: string, utype: string): OT.IOTResource\n\t\t{\n\t\t\tif (OTCompositeResource.typeRegistry == null)\n\t\t\t{\n\t\t\t\t//throw \"OTCompositeResource.constructResource: no registered factories\";\n\t\t\t\t// This is only place where Composite type knows of other types - could hoist to outer level\n\t\t\t\tOTCompositeResource.registerType('string', OTA.OTStringResource.factory);\n\t\t\t\tOTCompositeResource.registerType('array', OTA.OTArrayResource.factory);\n\t\t\t\tOTCompositeResource.registerType('map', OTM.OTMapResource.factory);\n\t\t\t\tOTCompositeResource.registerType('counter', OTC.OTCounterResource.factory);\n\t\t\t}\n\n\t\t\tlet factory: (resourceName: string) => OT.OTResourceBase = OTCompositeResource.typeRegistry[utype];\n\t\t\tif (factory == null)\n\t\t\t\tthrow \"OTCompositeResource.constructResource: no registered factory for \" + utype;\n\t\t\treturn factory(rname);\n\t\t}\n\n\t// Deserialization\n\tstatic constructFromObject(o: any): OTCompositeResource\n\t\t{\n\t\t\tlet cedit: OTCompositeResource = new OTCompositeResource(\"\", \"\");\n\t\t\tif (o['resourceID'] !== undefined)\n\t\t\t\tcedit.resourceID = o['resourceID'];\n\t\t\tif (o['clientID'] !== undefined)\n\t\t\t\tcedit.clientID = o['clientID'];\n\t\t\tif (o['clock'] !== undefined)\n\t\t\t\tcedit.clock = Number(o['clock']);\n\t\t\tif (o['clientSequenceNo'] !== undefined)\n\t\t\t\tcedit.clientSequenceNo = Number(o['clientSequenceNo']);\n\t\t\tif (o['edits'] !== undefined)\n\t\t\t{\n\t\t\t\tlet arrEdits: any = o['edits'];\n\t\t\t\tfor (let i: number = 0; i < arrEdits.length; i++)\n\t\t\t\t{\n\t\t\t\t\tlet a: any = arrEdits[i];\n\t\t\t\t\tlet rname: string = a['resourceName'];\n\t\t\t\t\tlet utype: string = a['underlyingType'];\n\t\t\t\t\tlet edit: OT.IOTResource = this.constructResource(rname, utype);\n\t\t\t\t\tedit.edits = a['edits'];\n\t\t\t\t\tcedit.edits.push(edit);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cedit;\n\t\t}\n\n\t// Serialization\n\ttoJSON(): any\n\t\t{\n\t\t\tlet o: any = {\n\t\t\t\t\"resourceID\": this.resourceID,\n\t\t\t\t\"clientID\": this.clientID,\n\t\t\t\t\"clock\": this.clock,\n\t\t\t\t\"clientSequenceNo\": this.clientSequenceNo,\n\t\t\t\t\"edits\": [] };\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet edit: OT.IOTResource = this.edits[i];\n\t\t\t\tlet oEdit: any = { \"resourceName\": edit.resourceName, \"underlyingType\": edit.underlyingType, \"edits\": edit.edits };\n\t\t\t\to[\"edits\"].push(oEdit);\n\t\t\t}\n\t\t\treturn o;\n\t\t}\n\n}\n","import * as OT from \"./ottypes\";\n\n// This implements OT for a simple map of counters. Instead of a new value replacing the \n// keyed value, values are added together. This allows a simple accumulating counter.\n// Possible future additions:\n//\tAdd additional semantics for how the values accumulate. Examples from DropBox's datastore API\n//\tincluded \"min\" and \"max\" as alternate rules to \"sum\".\n//\n\nexport const OpCounterAdd = 1;\nexport const OpCounterDel = 2;\nexport type CounterEdit = [ number, string, any ];\t// Op, Key, Value\n\nexport class OTCounterResource extends OT.OTResourceBase\n{\n\tconstructor(rid: string)\n\t\t{\n\t\t\tsuper(rid, 'counter');\n\t\t}\n\tstatic factory(rid: string): OTCounterResource { return new OTCounterResource(rid); }\n\n\t// copy an instance\n\tcopy(): OTCounterResource\n\t\t{\n\t\t\tlet c: OTCounterResource = new OTCounterResource(this.resourceName);\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet e: CounterEdit = this.edits[i];\n\t\t\t\tc.edits.push([ e[0], e[1], e[2] ]);\n\t\t\t}\n\t\t\treturn c;\n\t\t}\n\n\t// Test whether two operations are effectively equivalent\n\teffectivelyEqual(rhs: OTCounterResource): boolean\n\t\t{\n\t\t\t// This should really be a structural error\n\t\t\tif (this.length != rhs.length)\n\t\t\t\treturn false;\n\n\t\t\t// This checks for exact structural equivalency. Really the ordering shouldn't matter for Counter so\n\t\t\t// an improvement to this algorithm would be to be more robust to ordering differences.\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet e1: CounterEdit = this.edits[i];\n\t\t\t\tlet e2: CounterEdit = rhs.edits[i];\n\t\t\t\tif (e1[0] != e2[0] || e1[1] != e2[1] || e1[2] != e2[2])\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t// Core OT algorithm for this type\n\ttransform(prior: OTCounterResource, bPriorIsService: boolean): void\n\t\t{\n\t\t\t// Last wins - if I'm last, my adds and deletes are all preserved\n\t\t\tif (bPriorIsService)\n\t\t\t\treturn;\n\n\t\t\t// Deletes in prior will delete mine. Implement by loading up properties rather than\n\t\t\t// using N^2 lookup through Edits array.\n\t\t\tlet myEdits: any = this.toObject();\n\t\t\tlet bEdited: boolean = false;\n\n\t\t\t// Now delete any that are deleted by prior.\n\t\t\tfor (let i: number = 0; i < prior.length; i++)\n\t\t\t{\n\t\t\t\tlet eP: CounterEdit = prior.edits[i];\n\t\t\t\tif (eP[0] == OpCounterDel)\n\t\t\t\t{\n\t\t\t\t\tdelete myEdits[eP[1]];\n\t\t\t\t\tbEdited = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Now restore edit array from edited object\n\t\t\tif (bEdited)\n\t\t\t\tthis.fromObject(myEdits);\n\t\t}\n\n\t// compose two edit actions\n\tcompose(rhs: OTCounterResource): void \t\t\t// throws on error\n\t\t{\n\t\t\tlet lhsKeys: any = this.toObject();\n\t\t\tlet rhsKeys: any = rhs.toObject();\n\t\t\tfor (let i: number = 0; i < rhs.length; i++)\n\t\t\t{\n\t\t\t\tlet eR: CounterEdit = rhs.edits[i];\n\t\t\t\tlet eL: CounterEdit = lhsKeys[eR[1]];\n\t\t\t\tif (eL === undefined)\n\t\t\t\t\tlhsKeys[eR[1]] = [ eR[0], eR[1], eR[2] ];\n\t\t\t\telse\n\t\t\t\t\teL[2] += eR[2];\n\t\t\t}\n\t\t\tthis.fromObject(lhsKeys);\n\t\t}\n\n\tapply(startValue: any): any\n\t\t{\n\t\t\tif (startValue == null)\n\t\t\t\tstartValue = { };\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet e: CounterEdit = this.edits[i];\n\t\t\t\tswitch (e[0])\n\t\t\t\t{\n\t\t\t\t\tcase OpCounterAdd:\n\t\t\t\t\t\tif (startValue[e[1]] === undefined)\n\t\t\t\t\t\t\tstartValue[e[1]] = e[2];\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tstartValue[e[1]] += e[2];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpCounterDel:\n\t\t\t\t\t\tdelete startValue[e[1]];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn startValue;\n\t\t}\n\n\tminimize(): any\n\t\t{\n\t\t\t// No-op\n\t\t}\n\n\tloadObject(o: any): any\n\t\t{\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t\to[(this.edits[i])[1]] = this.edits[i];\n\t\t\treturn o;\n\t\t}\n\n\ttoObject(): any\n\t\t{\n\t\t\treturn this.loadObject({ });\n\t\t}\n\n\tfromObject(o: any): void\n\t\t{\n\t\t\tthis.edits = [];\n\t\t\tfor (var p in o)\n\t\t\t\tif (o.hasOwnProperty(p))\n\t\t\t\t\tthis.edits.push(o[p]);\n\t\t}\n}\n","import * as LogAbstract from \"../logabstract/all\";\n\nimport * as OT from \"./ottypes\";\nimport * as OTC from \"./otcomposite\";\n\nexport interface IOTEngine\n{\n cid(): string;\n rid(): string;\n\n toPartialValue(resourceName: string): any;\n\n startLocalEdit(): OTC.OTCompositeResource;\n addLocalEdit(e: OTC.OTCompositeResource): void;\n}\n\nexport class OTEngine implements IOTEngine\n{\n ilog: LogAbstract.ILog;\n onList: any;\n\n\t// Constructor\n\tconstructor(ilog: LogAbstract.ILog)\n\t\t{\n this.ilog = ilog;\n this.onList = {};\n\t\t}\n\n on(eventName: string, cb: any): void\n {\n let aCB: any = this.onList[eventName];\n if (aCB === undefined)\n {\n aCB = [];\n this.onList[eventName] = aCB;\n }\n aCB.push(cb);\n }\n\n off(eventName: string, cb: any): void\n {\n let aCB: any = this.onList[eventName];\n if (aCB !== undefined)\n {\n for (let i: number = 0; i < aCB.length; i++)\n {\n if (aCB[i] === cb)\n {\n aCB.splice(i, 1);\n break;\n }\n }\n }\n }\n\n emit(eventName: string): void\n {\n let aCB: any[] = this.onList[eventName];\n if (aCB !== undefined)\n for (let i: number = 0; i < aCB.length; i++)\n (aCB[i])();\n }\n\n cid(): string { return ''; }\n rid(): string { return ''; }\n\n toPartialValue(resourceName: string): any { return null; }\n\n startLocalEdit(): OTC.OTCompositeResource { return null; }\n addLocalEdit(e: OTC.OTCompositeResource): void { }\n}\n","import * as Util from '../util/all';\n\nimport * as OT from './ottypes';\n\n// This implements OT for a dictionary of objects. OT is pretty trivial for maps - last wins.\n\nexport const OpMapSet = 1;\nexport const OpMapDel = 2;\nexport type MapEdit = [ number, string, any ];\t// Op, Key, Value\n\nexport class OTMapResource extends OT.OTResourceBase\n{\n\tconstructor(rid: string)\n\t\t{\n\t\t\tsuper(rid, 'map');\n\t\t}\n\tstatic factory(rid: string): OTMapResource { return new OTMapResource(rid); }\n\n // Set a property\n set(p: string, a: any): OTMapResource\n {\n this.edits.push([ OpMapSet, p, a ]);\n return this;\n }\n\n // Delete a property\n del(p: string): OTMapResource\n {\n this.edits.push([ OpMapDel, p, 0 ]);\n return this;\n }\n\n\t// copy an instance\n\tcopy(): OTMapResource\n\t\t{\n\t\t\tlet c: OTMapResource = new OTMapResource(this.resourceName);\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet e: MapEdit = this.edits[i];\n\t\t\t\tc.edits.push([ e[0], e[1], e[2] ]);\n\t\t\t}\n\t\t\treturn c;\n\t\t}\n\n\t// Test whether two operations are effectively equivalent\n\teffectivelyEqual(rhs: OTMapResource): boolean\n\t\t{\n\t\t\t// This should really be a structural error\n\t\t\tif (this.length != rhs.length)\n\t\t\t\treturn false;\n\n\t\t\t// This checks for exact structural equivalency. Really the ordering shouldn't matter for Map so\n\t\t\t// an improvement to this algorithm would be to be more robust to ordering differences.\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet e1: MapEdit = this.edits[i];\n\t\t\t\tlet e2: MapEdit = rhs.edits[i];\n\t\t\t\tif (e1[0] != e2[0] || e1[1] != e2[1] || !Util.deepEqual(e1[2], e2[2]))\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t// Core OT algorithm for this type\n\ttransform(prior: OTMapResource, bPriorIsService: boolean): void\n\t\t{\n\t\t\t// Last wins - if I'm last, my sets and deletes are all preserved\n\t\t\tif (bPriorIsService)\n\t\t\t\treturn;\n\n\t\t\t// OK, remove any operations (either sets or deletes), that conflict with me\n\t\t\t// First load in my properties\n\t\t\tlet myEdits: any = this.toObject();\n\n\t\t\t// Now delete any that are overridden\n\t\t\tfor (let i: number = 0; i < prior.length; i++)\n\t\t\t\tdelete myEdits[(prior.edits[i])[1]];\n\n\t\t\t// Now restore edit array from edited object\n\t\t\tthis.fromObject(myEdits);\n\t\t}\n\n\t// compose two edit actions\n\tcompose(rhs: OTMapResource): void \t\t\t// throws on error\n\t\t{\n\t\t\tlet o: any = this.toObject();\n\t\t\tfor (let i: number = 0; i < rhs.length; i++)\n\t\t\t{\n\t\t\t\tlet eR: MapEdit = rhs.edits[i];\n\t\t\t\to[eR[1]] = [ eR[0], eR[1], eR[2] ];\t\t// Note this overwrites any existing operation on this key, set or del\n\t\t\t}\n\t\t\tthis.fromObject(o);\n\t\t}\n\n\tapply(startValue: any): any\n\t\t{\n\t\t\tif (startValue == null)\n\t\t\t\tstartValue = { };\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t{\n\t\t\t\tlet e: MapEdit = this.edits[i];\n\t\t\t\tswitch (e[0])\n\t\t\t\t{\n\t\t\t\t\tcase OpMapSet:\n\t\t\t\t\t\tstartValue[e[1]] = e[2];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase OpMapDel:\n\t\t\t\t\t\tdelete startValue[e[1]];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn startValue;\n\t\t}\n\n\tminimize(): any\n\t\t{\n\t\t\t// Effectively removes OpMapDel\n\t\t\tlet o: any = this.apply({});\n\t\t\tthis.edits = [];\n\t\t\tfor (var p in o)\n\t\t\t\tif (o.hasOwnProperty(p))\n\t\t\t\t\tthis.edits.push([ OpMapSet, p, o[p] ]);\n\t\t}\n\n\tloadObject(o: any): any\n\t\t{\n\t\t\tfor (let i: number = 0; i < this.length; i++)\n\t\t\t\to[(this.edits[i])[1]] = this.edits[i];\n\t\t\treturn o;\n\t\t}\n\n\ttoObject(): any\n\t\t{\n\t\t\treturn this.loadObject({ });\n\t\t}\n\n\tfromObject(o: any): void\n\t\t{\n\t\t\tthis.edits = [];\n\t\t\tfor (var p in o)\n\t\t\t\tif (o.hasOwnProperty(p))\n\t\t\t\t\tthis.edits.push(o[p]);\n\t\t}\n}\n","// Shared libraries\nimport * as LogAbstract from '../logabstract/all';\n\n// Local libraries\nimport * as OT from \"./ottypes\";\nimport * as OTC from \"./otcomposite\";\nimport * as OTS from \"./otsession\";\nimport * as OTE from \"./otengine\";\n\nexport const ClientIDForServer: string = '-Server-';\n\nexport class OTServerEngine extends OTE.OTEngine\n{\n // Data members\n stateServer: OTC.OTCompositeResource;\n logServer: OTC.OTCompositeResource[];\n valCache: any;\n fullCache: any;\n highSequence: any;\n clientSequenceNo: number;\n\n // Constructor\n constructor(ilog: LogAbstract.ILog, rid: string)\n {\n super(ilog);\n\n this.stateServer = new OTC.OTCompositeResource(rid, \"\");\n this.logServer = [];\n this.highSequence = {};\n this.clientSequenceNo = 0;\n this.valCache = {};\n this.fullCache = null;\n }\n\n serverClock(): number\n {\n return this.stateServer.clock;\n }\n\n rid(): string\n {\n return this.stateServer.resourceName;\n }\n\n cid(): string\n {\n return ClientIDForServer;\n }\n\n startLocalEdit(): OTC.OTCompositeResource\n {\n return new OTC.OTCompositeResource(this.rid(), this.cid());\n }\n\n resetCaches(): void\n {\n this.valCache = {};\n this.fullCache = null;\n }\n\n toPartialValue(resourceName: string): any\n {\n if (this.valCache[resourceName] === undefined)\n this.valCache[resourceName] = this.stateServer.toPartialValue(resourceName);\n return this.valCache[resourceName];\n }\n\n toValue(): any\n {\n // In general, server does not require this but maybe for testing purposes\n if (this.fullCache == null)\n this.fullCache = this.stateServer.toValue();\n return this.fullCache;\n }\n\n getProp(s: string): any\n {\n let o = this.toPartialValue('WellKnownName_meta');\n return o == null ? '' : o[s];\n }\n\n getName(): string\n {\n return this.getProp('name');\n }\n\n getType(): string\n {\n return this.getProp('type');\n }\n\n getDescription(): string\n {\n return this.getProp('description');\n }\n\n getCreatedBy(): string\n {\n return this.getProp('createdby');\n }\n\n getCreateTime(): string\n {\n return this.getProp('createtime');\n }\n\n getCreatedByName(): string\n {\n let s: string = this.getCreatedBy();\n if (s != '')\n {\n let users: any = this.toPartialValue('WellKnownName_users');\n if (users && users[s] && users[s]['name'])\n return users[s]['name'];\n }\n\n return '';\n }\n\n hasSeenEvent(orig: OTC.OTCompositeResource): boolean\n {\n let clientSequenceNo: any = this.highSequence[orig.clientID];\n let bSeen = (clientSequenceNo !== undefined && Number(clientSequenceNo) >= orig.clientSequenceNo);\n return bSeen;\n }\n\n isNextEvent(orig: OTC.OTCompositeResource): boolean\n {\n let nSeen: any = this.highSequence[orig.clientID];\n let bNext = (nSeen === undefined && orig.clientSequenceNo == 0)\n || (Number(nSeen)+1 == orig.clientSequenceNo);\n if (! bNext)\n {\n if (nSeen === undefined)\n this.ilog.event( { event: 'OT anomaly: non-zero client seqNo for new client', sessionid: this.stateServer.resourceID } );\n else\n this.ilog.event( { event: 'OT anomaly: unexpected client seqNo', sessionid: this.stateServer.resourceID } );\n }\n return bNext;\n }\n\n rememberSeenEvent(orig: OTC.OTCompositeResource): void\n {\n this.highSequence[orig.clientID] = orig.clientSequenceNo;\n }\n\n forgetEvents(orig: OTC.OTCompositeResource): void\n {\n delete this.highSequence[orig.clientID];\n }\n \n clientHighSequence(cid: string): number\n {\n let clientSequenceNo: any = this.highSequence[cid];\n\n return clientSequenceNo === undefined ? 0 : Number(clientSequenceNo);\n }\n\n garbageCollect(): void\n {\n let resources = this.toPartialValue('WellKnownName_resource');\n if (this.stateServer.garbageCollect(resources))\n {\n this.resetCaches();\n this.emit('state');\n }\n\n // TODO: Also remove entries from log to minimize memory use.\n }\n\n // Function: addServer\n //\n // Description:\n // This is the server state update processing upon receiving an event from an endpoint.\n // The received event is transformed (if possible) and added to the server state.\n // The logic here is straight-forward - transform the incoming event so it is relative to\n // the current state and then apply.\n\n addServer(orig: OTC.OTCompositeResource): number\n {\n try\n {\n // First transform, then add to log\n let i: number;\n let a: OTC.OTCompositeResource = orig.copy();\n\n for (i = this.logServer.length; i > 0; i--)\n {\n let aService: OTC.OTCompositeResource = this.logServer[i-1];\n\n if (aService.clock == a.clock)\n break;\n }\n\n // Handle if we've seen it already (client did not receive ack, probably communication error on response)\n if (this.hasSeenEvent(orig))\n {\n // Treat this as success if we still have event in log - the client did not receive an\n // ack but is now re-connected and will get resynced correctly.\n if (i > 0)\n {\n this.ilog.event({ sessionid: this.stateServer.resourceID, event: `addServer: duplicate event: no problem` });\n //console.log('addServer: seen event - handling cleanly');\n return OTS.ESuccess;\n }\n else\n {\n //console.log('addServer: seen event - resetting client');\n this.ilog.event({ sessionid: this.stateServer.resourceID, event: `addServer: duplicate event: resetting client` });\n this.forgetEvents(orig); // we are now resetting client in this case, so forget this client\n return OTS.EClockSeen;\n }\n }\n\n // If this isn't next in sequence, I lost one (probably because I went \"back in time\"\n // due to server restart). In that case client is forced to re-initialize (losing local\n // edits). I also need to re-initialize sequence numbering.\n if (! this.isNextEvent(orig))\n {\n //console.log('addServer: received out-of-order (future) event');\n this.ilog.event({ sessionid: this.stateServer.resourceID, event: `addServer: received out-of-order event` });\n this.forgetEvents(orig);\n return OTS.EClockAnomaly;\n }\n\n // Fail if we have discarded that old state\n if (a.clock >= 0 && i == 0)\n {\n this.ilog.event({ sessionid: this.stateServer.resourceID, event: `addServer: received old event` });\n\n // This should really be ClockFailure which would force the client to resend with a newer\n // clock value. But there appears to be a bug when session is reloaded that results in\n // client never getting synced up. So for now force a reset (which might result in some\n // client edits being discarded).\n this.forgetEvents(orig);\n return OTS.EClockReset;\n //return OTS.EClockFailure;\n }\n\n // OK, all good, transform and apply\n if (i < this.logServer.length)\n {\n let aPrior: OTC.OTCompositeResource = this.logServer[i].copy();\n\n for (i++; i < this.logServer.length; i++)\n aPrior.compose(this.logServer[i]);\n\n a.transform(aPrior, true);\n }\n\n a.clock = this.stateServer.clock + 1;\n this.stateServer.compose(a);\n this.resetCaches();\n this.emit('state');\n this.logServer.push(a.copy());\n\n this.rememberSeenEvent(orig);\n return OTS.ESuccess;\n }\n catch (err)\n {\n this.ilog.error('addServer: unexpected exception');\n this.forgetEvents(orig);\n return OTS.EClockReset;\n //return OTS.EClockFailure;\n }\n }\n\n addLocalEdit(orig: OTC.OTCompositeResource): void\n {\n orig.clock = this.serverClock();\n orig.clientSequenceNo = this.clientSequenceNo++;\n let errno: number = this.addServer(orig);\n }\n\n toJSON(): any\n {\n let log: any[] = [];\n for (let i: number = 0; i < this.logServer.length; i++)\n log.push(this.logServer[i].toJSON());\n return { state: this.stateServer.toJSON(), highSequence: this.highSequence, log: log };\n }\n\n validateLog(): void\n {\n // Yikes, invalid log created by bad revision reverting - validate on load and truncate if necessary\n try\n {\n if (this.logServer.length > 0)\n {\n let aPrior: OTC.OTCompositeResource = this.logServer[0].copy();\n\n for (let i: number = 1; i < this.logServer.length; i++)\n aPrior.compose(this.logServer[i]);\n }\n }\n catch (err)\n {\n this.ilog.event({ sessionid: this.stateServer.resourceID, event: `OTServer: corrupted log truncated` });\n this.logServer = [];\n this.logServer.push(this.stateServer.copy());\n }\n }\n\n loadFromObject(o: any): void\n {\n if (o.state !== undefined)\n {\n this.stateServer = OTC.OTCompositeResource.constructFromObject(o.state);\n this.logServer = [];\n this.resetCaches();\n this.emit('state');\n }\n if (o.log !== undefined)\n {\n for (let i: number = 0; i < o.log.length; i++)\n this.logServer.push(OTC.OTCompositeResource.constructFromObject(o.log[i]));\n this.validateLog();\n }\n else\n {\n this.logServer = [];\n this.logServer.push(this.stateServer.copy());\n }\n if (o.highSequence !== undefined)\n this.highSequence = o.highSequence;\n this.clientSequenceNo = this.clientHighSequence(ClientIDForServer) + 1;\n }\n}\n","// Errors\nexport const ESuccess: number = 0; // Generic success\nexport const EFail: number = 1; // Generic failure\nexport const EFull: number = 2; // Too many clients attached to this session; try later\nexport const ERetry: number = 3; // Try request again\nexport const ENoSession: number = 4;\t\t// No record of such session\nexport const EClockSeen: number = 5;\nexport const EClockFailure: number = 6;\nexport const EClockReset: number = 7;\nexport const ENoUser: number = 8; // No user specified (internal error since all authorized reqs have user)\nexport const EBadRequest: number = 9; // Badly formed request\nexport const ELoadFailed: number = 10; // Session exists in index, but load of state failed ((temp?) internal error)\nexport const ENoPerm: number = 11; // No permissions (readonly)\nexport const ENoAccess: number = 12; // No access (no read)\nexport const EMaintenance: number = 13; // Server under maintenance\nexport const EClockAnomaly: number = 14; // Typically server restart and client is ahead\n\n// Filters\nexport const FilterMyMaps: number = 0;\nexport const FilterSharedWithMe: number = 1;\nexport const FilterMyPublic: number = 2;\nexport const FilterRecent: number = 3;\nexport const FilterTrash: number = 4;\nexport const FilterPublic: number = 5;\nexport const FilterOfficial: number = 6;\nexport const FilterCount: number = 7;\nexport type Filter = number;\n\n// Permissions\nexport const PermNone: number = 0; // No permissions\nexport const PermRead: number = 1; // Can view\nexport const PermWrite: number = 2; // Can modify\nexport const PermOwner: number = 4; // Can change deleted, published, access permissions\nexport const PermAdmin: number = 8; // Can administer site\nexport const PermEdit: number = (PermWrite|PermOwner);\nexport const PermAll: number = (PermRead|PermWrite|PermOwner|PermAdmin);\nexport type Permission = number;\n\n// Server State\nexport const ServerStateRunning: number = 0;\nexport const ServerStateMaintenance: number = 1;\nexport type ServerState = number;\n\n// Maps Access Tokens (IDs) to SessionID\nexport interface AccessSessionMap\n{\n [key: string]: string;\n}\n\n// Maps Access ID to { list of users, permission } (stored with session)\nexport interface AccessMap\n{\n [key: string]: Access;\n}\n\nexport interface Access\n{\n userIDs: string[]; // empty implies \"anyone\"\n perm: Permission;\n}\n\nexport interface Revision\n{\n id: string;\n modifyTime: any; // JSON date\n label?: string; // optional label\n}\n\nexport type RevisionList = Revision[];\n\nexport interface SessionUser\n{\n\tid: string;\n\tname: string;\n}\n\nexport interface ActiveUser\n{\n\tid: string;\n\tname: string;\n\tactive: number;\n}\n\nexport interface SessionUserIndex\n{\n\t[key: string]: SessionUser;\n}\n\nexport interface SessionUserList\n{\n\t[key: string]: number;\n}\n\nexport interface SessionProps\n{\n id: string;\n name: string;\n type: string;\n description: string;\n labels: string[];\n createdBy: string;\n lastActive: any;\t\t// JSON date (should be string)\n createTime: any; // JSON date (should be string)\n modifyTime: any; // JSON date (should be string)\n clientCount: number;\n maxClients: number;\n requestCount: number;\n deleted: boolean;\n published?: string;\n official: boolean;\n\tloadFailed: boolean;\n accessMap: AccessMap;\n revisions: RevisionList;\n xprops?: { [prop: string]: string };\n}\n\n// True to add, False to remove\nexport type LabelUpdate = { [name: string]: boolean|null }\n\nexport interface SessionUpdateProps\n{\n\tid: string;\n\tdeleted?: boolean;\n\tpublished?: boolean;\n\tofficial?: boolean;\n name?: string;\n description?: string;\n labelupdate?: LabelUpdate;\n access?: Access;\n accessUpdate?: AccessMap;\n restore?: string; // Revision ID\n revision?: Revision; // If ID is empty, snap a new revision, otherwise label it.\n}\n\nexport interface SessionsIndex\n{\n\t[key: string]: SessionProps;\n}\n\n// The semantics here are:\n// if aid is provided, only look through that access token.\n// if aid is missing, look for that user in any access token (but ignore anonymous tokens).\n// in either case, return the full set of permissions a user has.\n//\nexport function accessFindUser(a: Access, uid: string): Permission\n{\n if (a === undefined) return PermNone;\n if (a.userIDs.length == 0)\n return a.perm;\n for (let i: number = 0; i < a.userIDs.length; i++)\n if (a.userIDs[i] === uid) return a.perm;\n return PermNone;\n}\n\nexport function accessMapFindUser(accessMap: AccessMap, uid: string, aid?: string): Permission\n{\n if (aid !== undefined)\n return accessFindUser(accessMap[aid], uid);\n else\n {\n let perm: Permission = PermNone;\n for (var aid1 in accessMap) if (accessMap.hasOwnProperty(aid1))\n {\n let a = accessMap[aid1];\n for (let i: number = 0; i < a.userIDs.length; i++)\n if (a.userIDs[i] === uid)\n {\n perm |= a.perm;\n break;\n }\n }\n return perm;\n }\n}\n\nexport function SessionFilterFunction(p: SessionProps, uid: string, f: number): boolean\n{\n\tif (f === FilterPublic) return p.published !== undefined;\n\n\tif (f === FilterSharedWithMe)\n\t{\n\t\tif (p.createdBy === uid) return false;\n return true;\n\t}\n\n\t// All other filters require ownership of this session\n\tif (p.createdBy !== uid) return false;\n\n\tif (f === FilterTrash) return p.deleted;\n\n if (f === FilterRecent && !p.deleted && p.modifyTime)\n {\n let d = new Date();\n let interval = d.getTime() - new Date(p.modifyTime).getTime();\n return interval < (1000 * 60 * 60 * 24 * 7); // one week\n }\n\n\treturn !p.deleted;\n}\n","\n// Resource data type that supports basic OT inteface.\nexport interface IOTResource\n{\n\tresourceName: string;\n\tunderlyingType: string;\n\tedits: any[];\n\n\t// Normally defined by base class\n\tlength: number;\n\tempty(): void;\n\tisEmpty(): boolean;\n\n\t// Copy an instance\n\tcopy(): IOTResource;\n\n\t// Test whether two operations are effectively equivalent\n\teffectivelyEqual(rhs: IOTResource): boolean;\n\n\t// Core OT algorithm for this type\n\ttransform(rhs: IOTResource, bPriorIsService: boolean): void;\t\t\t// throws on error\n\n\t// compose two edit actions\n\tcompose(rhs: IOTResource): void; \t\t\t// throws on error\n\n\t// apply this edit to an existing value, returning new value (if underlying type is mutable, may modify input)\n\tapply(startValue: any): any;\n\n\t// return a collapsed, minimal version of the operation, suitable for constructing from scratch from empty initial value\n\tminimize(): void;\n}\n\n// Useful base class\nexport class OTResourceBase implements IOTResource\n{\n\tresourceName: string;\n\tunderlyingType: string;\n\tedits: any[];\n\n\tconstructor(rname: string, utype: string)\n\t\t{\n\t\t\tthis.resourceName = rname;\n\t\t\tthis.underlyingType = utype;\n\t\t\tthis.edits = [];\n\t\t}\n\n\tget length(): number\n\t\t{\n\t\t\treturn this.edits.length;\n\t\t}\n\n\t// Set an existing instance of the operation to be empty\n\tempty(): void\n\t\t{\n\t\t\tthis.edits = [];\n\t\t}\n\n\t// Test\n\tisEmpty(): boolean\n\t\t{\n\t\t\treturn this.edits.length == 0;\n\t\t}\n\n\t// Copy an instance\n\tcopy(): OTResourceBase\n\t\t{\n\t\t\tthrow \"OTResourceBase.copy must be overridden in subclass\";\n\t\t}\n\n\t// Test whether two operations are effectively equivalent\n\teffectivelyEqual(rhs: OTResourceBase): boolean\n\t\t{\n\t\t\tthrow \"OTResourceBase.effectivelyEqual must be overridden in subclass\";\n\t\t}\n\n\t// Core OT algorithm for this type\n\ttransform(rhs: OTResourceBase, bPriorIsService: boolean): void\n\t\t{\n\t\t\tthrow \"OTResourceBase.transform must be overridden in subclass\";\n\t\t}\n\n\t// compose two edit actions\n\tcompose(rhs: OTResourceBase): void\n\t\t{\n\t\t\tthrow \"OTResourceBase.compose must be overridden in subclass\";\n\t\t}\n\n\t// apply this edit to an existing value, returning new value (if underlying type is mutable, may modify input)\n\tapply(startValue: any): any\n\t\t{\n\t\t\tthrow \"OTResourceBase.apply must be overridden in subclass\";\n\t\t}\n\n\tminimize(): void\n\t\t{\n\t\t\t// Default implementation does nothing.\n\t\t}\n}\n","export * from './poly';\nexport * from './union';\nexport * from './quad';\nexport * from './polylabel';\nexport * from './polysimplify';\nexport * from './polypack';\nexport * from './polybin';\nexport * from './boundbox';\nexport * from './blend';\nexport * from './cartesian';\nexport * from './minbound';\nexport * from './polyround';\nexport * from './topo';\nexport * from './selfintersect';\nexport * from './shamos';\n","import * as Util from '../util/all';\nimport * as PP from './polypack';\n\n// Takes array of polygon or multi-polygon coordinate structures and returns a single multi-polygon\n// structure. The coordinates may be passed in using packed format.\n\nexport function blend(polys: any[]): any\n{\n if (polys == null || polys.length == 0) return null;\n\n let result: any[] = [];\n\n for (let i: number = 0; i < polys.length; i++)\n {\n let p = PP.polyUnpack(polys[i]);\n let d = Util.depthof(p);\n if (d === 4)\n result.push(p);\n else if (d === 5)\n for (let j: number = 0; j < p.length; j++)\n result.push(p[j]);\n else if (p.length === undefined || p.length > 0)\n throw new Error('blend expects polygon or multi-polygon coordinates');\n }\n\n return result;\n}\n","import * as Util from '../util/all';\n\nimport * as P from './poly';\nimport * as PP from './polypack';\n\n// Note, in Geo format so top > bottom\nexport interface BoundBox\n{\n left?: number;\n top?: number;\n right?: number;\n bottom?: number;\n}\n\nexport function boundboxWidth(bb: BoundBox): number { return Math.abs(bb.right - bb.left); }\nexport function boundboxHeight(bb: BoundBox): number { return Math.abs(bb.bottom - bb.top); }\n\nexport function boundboxCX(bb: BoundBox): number { return bb.left + (bb.right - bb.left) / 2; }\nexport function boundboxCY(bb: BoundBox): number { return bb.top + (bb.bottom - bb.top) / 2; }\n\nexport function clipLon(lon: number): number { return lon <= 0 ? lon : -179; }\n\nexport function boundboxExtend(bbox: BoundBox, x: number, y: number): void\n{\n x = clipLon(x);\n if (bbox.left === undefined || x < bbox.left)\n bbox.left = x;\n if (bbox.right === undefined || x > bbox.right)\n bbox.right = x;\n if (bbox.top === undefined || y > bbox.top)\n bbox.top = y;\n if (bbox.bottom === undefined || y < bbox.bottom)\n bbox.bottom = y;\n}\n\nfunction boundboxExtendPacked(pp: PP.PolyPack, bbox: BoundBox): void\n{\n let buffer = pp.buffer as Float64Array;\n let offset = pp.buffer[pp.offset+1] + pp.offset;\n let end = pp.offset + pp.length;\n for (; offset < end; offset += 2)\n boundboxExtend(bbox, buffer[offset], buffer[offset+1]);\n}\n\nexport function boundbox(poly: any, bbox?: BoundBox): BoundBox\n{\n let i: number;\n\n if (bbox === undefined)\n bbox = { };\n\n if (poly)\n {\n // Collection\n if (poly.features)\n {\n for (i = 0; i < poly.features.length; i++)\n boundbox(poly.features[i], bbox);\n }\n\n // feature\n else if (poly.geometry)\n {\n if (poly.geometry.packed)\n boundboxExtendPacked(poly.geometry.packed as PP.PolyPack, bbox);\n else if (poly.geometry.coordinates)\n boundbox(poly.geometry.coordinates, bbox);\n }\n\n // raw packed buffer\n else if (poly.offset !== undefined)\n boundboxExtendPacked(poly as PP.PolyPack, bbox);\n\n // array of other things (like raw coordinates, or other aggregates)\n else if (Array.isArray(poly) && typeof poly[0] !== 'number')\n {\n for (i = 0; i < poly.length; i++)\n boundbox(poly[i], bbox);\n }\n\n // single point\n else\n boundboxExtend(bbox, poly[0], poly[1]);\n }\n\n return bbox;\n}\n\nexport function boundboxPoly(bb: BoundBox): any\n{\n return [ [ [bb.left, bb.top], [bb.left, bb.bottom], [bb.right, bb.bottom], [bb.right, bb.top], [bb.left, bb.top] ] ];\n}\n\nexport function boundboxArea(poly: any): number\n{\n return P.polyArea(boundboxPoly(boundbox(poly)));\n}\n\nexport function boundboxIntersects(bb1: BoundBox, bb2: BoundBox): boolean\n{\n return !(bb1.left > bb2.right || bb1.right < bb2.left || bb1.top < bb2.bottom || bb1.bottom > bb2.top);\n}\n","//\n// GEO-FEATURES UTILITIES\n//\n\nimport * as GeoJSON from 'geojson';\nimport * as P from './poly';\nimport * as PP from './polypack';\n\n\n// HELPER\n\nfunction bufferToRing(b: Float64Array, s: number, nPoints: number): any\n{\n let r: any = [];\n let e = s + nPoints * 2;\n for (; s < e; s += 2)\n r.push([ b[s], b[s+1] ]);\n return r;\n}\n\nexport function polyParts(poly: any): GeoJSON.FeatureCollection\n{\n let pp = P.polyNormalize(poly);\n\n let parts: GeoJSON.FeatureCollection = { type: 'FeatureCollection', features: [] };\n let af: any = parts.features;\n let f: any;\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n let r = bufferToRing(b, iOffset, nPoints);\n if (iRing == 0)\n {\n f = { type: 'Feature',\n properties: { id: String(iPoly+1) },\n geometry: { type: 'Polygon', coordinates: [ r ] } };\n af.push(f);\n }\n else\n f.geometry.coordinates.push(r);\n });\n return parts;\n}\n\n// CARTESIAN (\"FLAT\") AREA, PERIMETER, AND DIAMETER\n\nexport function polyAreaFlat(poly: any): number\n{\n let pp = P.polyNormalize(poly);\n\n let a: number = 0;\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n a += polySimpleAreaFlat(b, iOffset, nPoints) * (iRing == 0 ? 1 : -1);\n });\n return a;\n}\n\n// Algorithm for the area of a simple/single planar polygon:\n// https://algorithmtutor.com/Computational-Geometry/Area-of-a-polygon-given-a-set-of-points/\n// https://mathopenref.com/coordpolygonarea2.html\n//\n// function polygonArea(X, Y, numPoints) \n// { \n// area = 0; // Accumulates area in the loop\n// j = numPoints-1; // The last vertex is the 'previous' one to the first\n\n// for (i=0; i<numPoints; i++)\n// { area = area + (X[j]+X[i]) * (Y[j]-Y[i]); \n// j = i; //j is previous vertex to i\n// }\n// return area/2;\n// }\n\n// Reimplemented to use polygons vs. X & Y vectors\nfunction polySimpleAreaFlat(b: Float64Array, i: number, nPoints: number): number\n{\n let a = 0;\n let e = i + nPoints * 2;\n let j = e - 2; // The last vertex is the 'previous' one to the first\n\n for (; i < e; i += 2)\n {\n a += (b[j] + b[i]) * (b[j+1] - b[i+1]);\n j = i;\n }\n return Math.abs(a / 2);\n}\n\n// You would need to divide by Poly.EARTH_RADIUS to go from the returned units of meters to Lat/Lon “units.”\n// NOTE - No conversion of degrees to radians!\n\nexport function polyPerimeterFlat(poly: any): number\n{\n let pp = P.polyNormalize(poly);\n\n let perimeter: number = 0;\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n // Ignore holes so only look at first ring\n if (iRing == 0)\n {\n let s = iOffset;\n let e = s + (nPoints-1) * 2; // index *at* last point since we look at next point in each iteration\n for (; s < e; s += 2)\n perimeter += _distance(b[s], b[s+1], b[s+2], b[s+3]);\n s = iOffset;\n if (nPoints > 2 && (b[s] != b[e] || b[s+1] != b[e+1]))\n perimeter += _distance(b[s], b[s+1], b[e], b[e+1]);\n }\n });\n\n return perimeter;\n}\n\nfunction _distance(x1: number, y1: number, x2: number, y2: number): number\n{\n const dLat = y2 - y1;\n const dLon = x2 - x1;\n let d: number;\n\n d = Math.sqrt((dLat * dLat) + (dLon * dLon));\n\n return d;\n}\n\n// The polyCircle code is already just treating the coordinate system as Cartesian.\n// So just compute circle and return diameter.\n\nexport function polyDiameterFlat(poly: any): number\n{\n let circle = P.polyToCircle(poly);\n return circle ? circle.r * 2 : 0;\n}\n","//\n// CONVEX HULL USING GRAHAM SCAN ALGORITHM\n//\n/* Resources:\n * https://en.wikipedia.org/wiki/Graham_scan\n * https://www.tutorialspoint.com/Graham-Scan-Algorithm <<< pseudo code\n * http://brian3kb.github.io/graham_scan_js/ <<< basis for this implementation\n */\n\nimport {polyNormalize, PolyOptions} from './poly';\nimport * as PP from './polypack';\n\ntype SimplePoint = [number, number];\n\n\nexport function makeConvexHullGrahamScan(poly: any, options?: PolyOptions): any\n{\n let points = getExteriorPoints(poly);\n if (points == null) return null;\n\n let scanner = new GrahamScanner();\n\n for (let pt of points) {\n scanner.addPoint(pt);\n }\n\n const ch: SimplePoint[] = scanner.getHull();\n\n return [ ch ];\n}\n\n// NOTE - This finds the exterior points of a polygon in standard form and returns\n// it as an array if [x, y] points, in contrast to polyToExteriorPoints() which\n// uses the packed format and the poly.ts-private point form.\nfunction getExteriorPoints(poly: any): SimplePoint[]\n{\n let pp = polyNormalize(poly);\n if (pp == null) return null;\n\n let points: SimplePoint[] = [];\n\n PP.polyPackEachPoint(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number) => {\n if (iRing > 0) return; // skip holes\n points.push([b[iOffset], b[iOffset+1]]);\n });\n\n return points.length > 0 ? points : null;\n}\n\nconst X = 0, Y = 1;\n\nclass GrahamScanner\n{\n anchorPoint: SimplePoint | undefined;\n reverse: boolean;\n points: SimplePoint[];\n\n constructor()\n {\n this.anchorPoint = undefined;\n this.reverse = false;\n this.points = [];\n }\n _findPolarAngle(a: SimplePoint, b: SimplePoint): number\n {\n const ONE_RADIAN = 57.295779513082;\n let deltaX, deltaY;\n\n // If the points are undefined, return a zero difference angle.\n if (!a || !b) return 0;\n\n deltaX = (b[X] - a[X]);\n deltaY = (b[Y] - a[Y]);\n\n if (deltaX == 0 && deltaY == 0) {\n return 0;\n }\n\n let angle = Math.atan2(deltaY, deltaX) * ONE_RADIAN;\n\n if (this.reverse) {\n if (angle <= 0) {\n angle += 360;\n }\n }\n else\n {\n if (angle >= 0) {\n angle += 360;\n }\n }\n\n return angle;\n }\n addPoint(pt: SimplePoint): void\n {\n // Check for a new anchor\n const newAnchor =\n ( this.anchorPoint === undefined ) ||\n ( this.anchorPoint[Y] > pt[Y] ) ||\n ( this.anchorPoint[Y] === pt[Y] && this.anchorPoint[X] > pt[X] );\n\n if ( newAnchor ) {\n if ( this.anchorPoint !== undefined ) {\n this.points.push(pt);\n }\n this.anchorPoint = pt;\n }\n else\n {\n this.points.push(pt);\n }\n }\n _sortPoints(): SimplePoint[] \n {\n var self = this;\n\n return this.points.sort(function(a: SimplePoint, b: SimplePoint) \n {\n const polarA = self._findPolarAngle(self.anchorPoint as SimplePoint, a);\n const polarB = self._findPolarAngle(self.anchorPoint as SimplePoint, b);\n \n if (polarA < polarB) {\n return -1;\n }\n if (polarA > polarB) {\n return 1;\n }\n \n return 0;\n });\n }\n _checkPoints(p0: SimplePoint, p1: SimplePoint, p2: SimplePoint): boolean \n {\n let difAngle;\n const cwAngle = this._findPolarAngle(p0, p1);\n const ccwAngle = this._findPolarAngle(p0, p2);\n\n if (cwAngle > ccwAngle) {\n difAngle = cwAngle - ccwAngle;\n\n return !(difAngle > 180);\n }\n else if (cwAngle < ccwAngle)\n {\n difAngle = ccwAngle - cwAngle;\n\n return (difAngle > 180);\n }\n\n return true;\n }\n getHull(): SimplePoint[] \n {\n let hullPoints: SimplePoint[] = [];\n let points: SimplePoint[];\n let pointsLength: number;\n\n this.reverse = this.points.every(\n function (point)\n {\n return (point[X] < 0 && point[Y] < 0);\n }\n );\n\n points = this._sortPoints();\n pointsLength = points.length;\n\n // If there are less than 3 points, joining these points creates a correct hull.\n if (pointsLength < 3) {\n points.unshift(this.anchorPoint as SimplePoint);\n return points;\n }\n\n // Move first two points to output array\n const first: SimplePoint = points.shift() as SimplePoint;\n const second: SimplePoint = points.shift() as SimplePoint;\n hullPoints.push(first, second);\n\n // Scan is repeated until no concave points are present.\n while (true) {\n let p0: SimplePoint;\n let p1: SimplePoint;\n let p2: SimplePoint;\n\n hullPoints.push(points.shift() as SimplePoint);\n\n p0 = hullPoints[hullPoints.length - 3];\n p1 = hullPoints[hullPoints.length - 2];\n p2 = hullPoints[hullPoints.length - 1];\n\n if (this._checkPoints(p0, p1, p2)) {\n hullPoints.splice(hullPoints.length - 2, 1);\n }\n\n if (points.length == 0) \n {\n if (pointsLength == hullPoints.length) \n {\n // Check for duplicate anchorPoint edge-case, if not found, add the anchorpoint as the first item.\n const ap: SimplePoint = this.anchorPoint as SimplePoint;\n // Remove any udefined elements in the hullPoints array.\n hullPoints = hullPoints.filter(function(p) { return !!p; });\n if (!hullPoints.some(function(p){\n return(p[X] == ap[X] && p[Y] == ap[Y]);\n })) {\n hullPoints.unshift(this.anchorPoint as SimplePoint);\n }\n return hullPoints;\n }\n points = hullPoints;\n pointsLength = points.length;\n hullPoints = [];\n const first: SimplePoint = points.shift() as SimplePoint;\n const second: SimplePoint = points.shift() as SimplePoint;\n hullPoints.push(first, second);\n }\n }\n }\n}\n\n/**\n * Graham's Scan Convex Hull Algorithm\n * @desc An implementation of the Graham's Scan Convex Hull algorithm in JavaScript.\n * @author Brian Barnett, brian@3kb.co.uk, http://brianbar.net/ || http://3kb.co.uk/\n * @version 1.0.5\n */\n\n/*\nfunction ConvexHullGrahamScan() {\n this.anchorPoint = undefined;\n this.reverse = false;\n this.points = [];\n}\n\nConvexHullGrahamScan.prototype = {\n\n constructor: ConvexHullGrahamScan,\n\n Point: function (x, y) {\n this.x = x;\n this.y = y;\n },\n\n _findPolarAngle: function (a, b) {\n var ONE_RADIAN = 57.295779513082;\n var deltaX, deltaY;\n\n //if the points are undefined, return a zero difference angle.\n if (!a || !b) return 0;\n\n deltaX = (b.x - a.x);\n deltaY = (b.y - a.y);\n\n if (deltaX == 0 && deltaY == 0) {\n return 0;\n }\n\n var angle = Math.atan2(deltaY, deltaX) * ONE_RADIAN;\n\n if (this.reverse){\n if (angle <= 0) {\n angle += 360;\n }\n }else{\n if (angle >= 0) {\n angle += 360;\n }\n }\n\n return angle;\n },\n\n addPoint: function (x, y) {\n //Check for a new anchor\n var newAnchor =\n (this.anchorPoint === undefined) ||\n ( this.anchorPoint.y > y ) ||\n ( this.anchorPoint.y === y && this.anchorPoint.x > x );\n\n if ( newAnchor ) {\n if ( this.anchorPoint !== undefined ) {\n this.points.push(new this.Point(this.anchorPoint.x, this.anchorPoint.y));\n }\n this.anchorPoint = new this.Point(x, y);\n } else {\n this.points.push(new this.Point(x, y));\n }\n },\n\n _sortPoints: function () {\n var self = this;\n\n return this.points.sort(function (a, b) {\n var polarA = self._findPolarAngle(self.anchorPoint, a);\n var polarB = self._findPolarAngle(self.anchorPoint, b);\n\n if (polarA < polarB) {\n return -1;\n }\n if (polarA > polarB) {\n return 1;\n }\n\n return 0;\n });\n },\n\n _checkPoints: function (p0, p1, p2) {\n var difAngle;\n var cwAngle = this._findPolarAngle(p0, p1);\n var ccwAngle = this._findPolarAngle(p0, p2);\n\n if (cwAngle > ccwAngle) {\n\n difAngle = cwAngle - ccwAngle;\n\n return !(difAngle > 180);\n\n } else if (cwAngle < ccwAngle) {\n\n difAngle = ccwAngle - cwAngle;\n\n return (difAngle > 180);\n\n }\n\n return true;\n },\n\n getHull: function () {\n var hullPoints = [],\n points,\n pointsLength;\n\n this.reverse = this.points.every(function(point){\n return (point.x < 0 && point.y < 0);\n });\n\n points = this._sortPoints();\n pointsLength = points.length;\n\n //If there are less than 3 points, joining these points creates a correct hull.\n if (pointsLength < 3) {\n points.unshift(this.anchorPoint);\n return points;\n }\n\n //move first two points to output array\n hullPoints.push(points.shift(), points.shift());\n\n //scan is repeated until no concave points are present.\n while (true) {\n var p0,\n p1,\n p2;\n\n hullPoints.push(points.shift());\n\n p0 = hullPoints[hullPoints.length - 3];\n p1 = hullPoints[hullPoints.length - 2];\n p2 = hullPoints[hullPoints.length - 1];\n\n if (this._checkPoints(p0, p1, p2)) {\n hullPoints.splice(hullPoints.length - 2, 1);\n }\n\n if (points.length == 0) {\n if (pointsLength == hullPoints.length) {\n //check for duplicate anchorPoint edge-case, if not found, add the anchorpoint as the first item.\n var ap = this.anchorPoint;\n //remove any udefined elements in the hullPoints array.\n hullPoints = hullPoints.filter(function(p) { return !!p; });\n if (!hullPoints.some(function(p){\n return(p.x == ap.x && p.y == ap.y);\n })) {\n hullPoints.unshift(this.anchorPoint);\n }\n return hullPoints;\n }\n points = hullPoints;\n pointsLength = points.length;\n hullPoints = [];\n hullPoints.push(points.shift(), points.shift());\n }\n }\n }\n};\n\n// EXPORTS\n\nif (typeof define === 'function' && define.amd) {\n define(function() {\n return ConvexHullGrahamScan;\n });\n}\nif (typeof module !== 'undefined') {\n module.exports = ConvexHullGrahamScan;\n}\n\n*/\n","//\n// SOME BASIC MATRIX OPERATIONS FOR MBR\n//\n\n/* \n\nThese custom functions are used by minimumBoundingRectangle(), instead of the\nsame-named mathjs versions. They are tailored specifically for that routine and\nare NOT intended for general use.\n\nexport declare function matrix(x: Matrix): Matrix;\n\nexport declare function multiply(a: Matrix, b: Matrix): Matrix;\n\nexport declare function transpose(a: Matrix, b: Matrix): Matrix;\n\nexport declare function apply((a: Matrix, over: Dim, cb: applyCB): Vector;\n\nexport declare function min(a: Vector): number;\n\nexport declare function max(a: Vector): number;\n\nexport declare function concat(a: Matrix, b: Matrix, by: Dim): Matrix;\n\nexport declare function row(a: Matrix, i: number): Vector;\n\nexport declare function subtract(a: Vector, b: Vector): Vector;\n\nexport declare function dotMultiply(a: Vector, b: Vector): Vector;\n\nexport declare function index(a: Range, b: Range): Index;\n\nexport declare function range(start: number, end: number, includeEnd: boolean = false): Vector;\n\nexport declare function subset(a: Matrix, select: Index): Matrix;\n\n*/\n\n\nexport type Matrix = number[][];\nexport type Vector = number[]; // A general vector or a row or a column\nexport type Range = number[];\nexport type Index = number[][];\nexport type applyCB = (v: Vector) => number;\n\nexport const enum Dim\n{\n Rows,\n Columns\n}\n\nexport function matrix(a: Matrix): Matrix\n{\n return a;\n}\n\nexport function multiply(a: Matrix, b: Matrix): Matrix\n{\n protect((nRows(a) > 0), \"In multiply, input matrix 'a' has no rows. \");\n protect((nCols(a) > 0), \"In multiply, input matrix 'a' has no columns. \");\n protect((nRows(b) > 0), \"In multiply, input matrix 'b' has no rows. \");\n protect((nCols(b) > 0), \"In multiply, input matrix 'b' has no columns. \");\n\n const m = nRows(a);\n const n = nCols(a);\n const p = nRows(b);\n const q = nCols(b);\n\n protect((p == n), \"In multiply, the # rows in matrix 'b' doesn't match the number of columns in matrix 'a'.\");\n\n let c: Matrix = initialize(m, n);\n\n for (let i = 0; i < m; i++)\n {\n for (let j = 0; j < q; j++)\n {\n const aRow = row(a, i);\n const bCol = column(b, j);\n\n c[i][j] = dotProduct(aRow, bCol);\n }\n }\n\n return c;\n}\n\nexport function transpose(a: Matrix): Matrix\n{\n protect((nRows(a) > 0), \"In transpose, input matrix has no rows. \");\n protect((nCols(a) > 0), \"In transpose, input matrix has no columns. \");\n\n const j = nRows(a);\n const i = nCols(a);\n\n let b: Matrix = initialize(i, j);\n\n for (let m = 0; m < j; m++)\n {\n for (let n = 0; n < i; n++)\n {\n b[n][m] = a[m][n];\n }\n }\n\n return b;\n}\n\nexport function apply(a: Matrix, over: Dim, cb: applyCB): Vector\n{\n protect((nRows(a) > 0), \"In apply, input matrix has no rows. \");\n protect((nCols(a) > 0), \"In apply, input matrix has no columns. \");\n\n let m = nRows(a);\n let n = nCols(a);\n\n let result: Vector = [];\n\n const iEnd = (over == Dim.Rows) ? m : n;\n const extractFn = (over == Dim.Rows) ? row : column;\n\n for (let i = 0; i < iEnd; i++)\n {\n const v: Vector = extractFn(a, i);\n result.push(cb(v));\n }\n\n return result;\n}\n\nexport function min(v: Vector): number\n{\n return Math.min(...v);\n}\n\nexport function max(v: Vector): number\n{\n return Math.max(...v);\n}\n\nexport function concat(a: Matrix, b: Matrix, by: Dim): Matrix\n{\n protect((nRows(a) > 0), \"In concat, input matrix 'a' has no rows. \");\n protect((nCols(a) > 0), \"In concat, input matrix 'a' has no columns. \");\n protect((nRows(b) > 0), \"In concat, input matrix 'b' has no rows. \");\n protect((nCols(b) > 0), \"In concat, input matrix 'b' has no columns. \");\n\n let m = nRows(a);\n let n = nCols(a);\n const p = nRows(b);\n const q = nCols(b);\n\n const {i, j} = (by == Dim.Columns) ? {i: m, j: n + q} : {i: m + p, j: n};\n let c: Matrix = initialize(i, j);\n\n if (by == Dim.Rows)\n protect((n == q), \"In concat, concatenating rows but the # of columns don't match. \");\n else // (by == Dim.Columns)\n protect((m == p), \"In concat, concatenating columns but the # of rows don't match. \");\n\n // Copy the first array\n for (let i = 0; i < m; i++)\n {\n for (let j = 0; j < n; j++)\n {\n c[i][j] = a[i][j];\n }\n }\n\n m = (by == Dim.Rows) ? m : 0;\n n = (by == Dim.Columns) ? n : 0;\n\n // Copy the second array to the right (by columns) or below (by rows)\n for (let i = 0; i < p; i++)\n {\n for (let j = 0; j < q; j++)\n {\n c[i+m][j+n] = b[i][j];\n }\n }\n\n return c;\n}\n\nexport function row(a: Matrix, i: number): Vector\n{\n protect((nRows(a) > 0), \"In row, input matrix has no rows. \");\n protect((nCols(a) > 0), \"In row, input matrix has no columns. \");\n protect((i >= 0), \"In row, invalid row index.\");\n\n return a[i];\n}\n\nexport function column(a: Matrix, j: number): Vector\n{\n protect((nRows(a) > 0), \"In column, input matrix has no rows. \");\n protect((nCols(a) > 0), \"In column, input matrix has no columns. \");\n protect((j >= 0), \"In row, invalid column index.\");\n\n let v: any = [];\n\n for (let i = 0; i < nRows(a); i++)\n {\n v.push(a[i][j]);\n }\n\n return v;\n}\n\nexport function subtract(a: Vector, b: Vector): Vector\n{\n protect((a.length == b.length), \"In subtract, the input vectors have different lengths.\");\n\n let c: Vector = [];\n\n for (let i = 0; i < a.length; i++)\n {\n c.push(a[i] - b[i]);\n }\n\n return c;\n}\n\nexport function dotMultiply(a: Vector, b: Vector): Vector\n{\n protect((a.length > 0) && (a.length == b.length), \"In dotMultiply, the vectors aren't the same length. \");\n\n let c: Vector = [];\n\n for (let i = 0; i < a.length; i++)\n {\n c.push(a[i] * b[i]);\n }\n\n return c;\n}\n\nexport function index(a: Range, b: Range): Index\n{\n return [a, b];\n}\n\nexport function range(start: number, end: number, includeEnd: boolean = false): Vector\n{\n let r: Vector = [];\n\n end += includeEnd ? 1 : 0;\n for (let i = start; i < end; i++)\n {\n r.push(i);\n }\n \n return r;\n}\n\nexport function subset(a: Matrix, select: Index): Matrix\n{\n protect((nRows(a) > 0), \"In subset, input matrix has no rows. \");\n protect((nCols(a) > 0), \"In subset, input matrix has no columns. \");\n\n protect((nRows(select) > 0), \"In subset, input matrix has no rows. \");\n protect((nCols(select) > 0), \"In subset, input matrix has no columns. \");\n\n const m = nRows(a);\n const n = nCols(a);\n\n const rowRange = row(select, 0) as Range;\n const colRange = row(select, 1) as Range;\n const p = rowRange.length;\n const q = colRange.length;\n\n let b: Matrix = initialize(p, q);\n\n for (let i = 0; i < p; i++)\n {\n for (let j = 0; j < q; j++)\n {\n b[i][j] = a[rowRange[i]][colRange[j]];\n }\n }\n\n return b;\n}\n\n\n// HELPERS\n\nfunction initialize(rows: number, cols: number): Matrix\n{\n protect(((rows > 0) || (cols > 0)), \"In initialize, the # of rows or columns is not positive. \");\n\n return [...Array(rows)].fill(0).map(() => [...Array(cols)].fill(0));\n};\n\nconst nRows = (a: Matrix | Index) => a.length;\nconst nCols = (a: Matrix | Index) => (a.length > 0) ? a[0].length : 0;\n\nexport function dotProduct(a: Vector, b: Vector): number\n{\n protect((a.length > 0) && (a.length == b.length), \"In dotProduct, the vectors aren't the same length. \");\n\n return a.map((value, i) => value * b[i]).reduce((acc, val) => acc + val, 0);\n};\n\n\nfunction protect(condition: boolean, message: string): void\n{\n if (!condition)\n throw new Error(message);\n}\n","//\n// MINIMUM BOUNDING RECTANGLE - aka minimum area rectangle -or- smallest enclosing rectangle\n//\n\n//\n// WHUBER'S ELEGANT, TRIG-FREE SOLUTION IN R\n//\n// https://gis.stackexchange.com/questions/22895/finding-minimum-area-rectangle-for-given-points\n//\n\n/*\n\nMBR <- function(p) {\n # Analyze the convex hull edges \n a <- chull(p) # Indexes of extremal points\n a <- c(a, a[1]) # Close the loop\n e <- p[a[-1],] - p[a[-length(a)], ] # Edge directions\n norms <- sqrt(rowSums(e^2)) # Edge lengths\n v <- e / norms # Unit edge directions\n w <- cbind(-v[,2], v[,1]) # Normal directions to the edges\n\n # Find the MBR\n vertices <- p[a, ] # Convex hull vertices\n x <- apply(vertices %*% t(v), 2, range) # Extremes along edges\n y <- apply(vertices %*% t(w), 2, range) # Extremes normal to edges\n areas <- (y[1,]-y[2,])*(x[1,]-x[2,]) # Areas\n k <- which.min(areas) # Index of the best edge (smallest area)\n\n # Form a rectangle from the extremes of the best edge\n cbind(x[c(1,2,2,1,1),k], y[c(1,1,2,2,1),k]) %*% rbind(v[k,], w[k,])\n}\n\n*/\n\n\n//\n// THIS RE-IMPLEMENTS THE R IN TYPESCRIPT, USING CUSTOM MATRIX OPERATIONS\n//\n\nimport { polyConvexHull } from './poly';\nimport * as M from './matrix';\n\ntype Point = [number, number];\n\n// For point addressing\nconst X = 0, Y = 1;\n\nexport function minimumBoundingRectangle(poly: any): any\n{\n // Get the convex hull polygon in standard form\n const ch = polyConvexHull(poly); \n\n // Select the exterior points (outer ring = 0)\n let chExt: Point[] = ch[0];\n\n // Close the loop (ring)\n chExt.push(chExt[0]);\n\n // Edge directions - Note the implict offset array indexing\n const e: Point[] = chExt.slice(1).map((pt, i) => [(pt[X] - chExt[i][X]), (pt[Y] - chExt[i][Y])]);\n\n // Edge lengths\n const norms: number[] = e.map(pt => Math.sqrt((pt[X] ** 2) + (pt[Y] ** 2)));\n\n // Unit edge directions\n const v: Point[] = e.map((pt, i) => [(pt[X] / norms[i]), (pt[Y] / norms[i])]);\n\n // Normal directions to the edges\n const w: Point[] = v.map(pt => [-pt[Y], pt[X]]);\n\n // FIND THE MBR - Switch to matrix operations\n\n // Convex hull vertices\n const vertices = M.matrix(chExt);\n\n const vT = M.transpose(M.matrix(v));\n const wT = M.transpose(M.matrix(w));\n\n // Extremes along edges\n const temp1 = M.matrix([M.apply(M.multiply(vertices, vT), M.Dim.Columns, M.min)]);\n const temp2 = M.matrix([M.apply(M.multiply(vertices, vT), M.Dim.Columns, M.max)]);\n const x = M.concat(temp1, temp2, M.Dim.Rows);\n\n // Extremes normal to edges\n const temp3 = M.matrix([M.apply(M.multiply(vertices, wT), M.Dim.Columns, M.min)]);\n const temp4 = M.matrix([M.apply(M.multiply(vertices, wT), M.Dim.Columns, M.max)]);\n const y = M.concat(temp3, temp4, M.Dim.Rows);\n\n // Areas\n const temp5 = M.subtract(M.row(y, 0), M.row(y, 1));\n const temp6 = M.subtract(M.row(x, 0), M.row(x, 1));\n const areas = M.dotMultiply(temp5, temp6);\n\n // Index of the best edge (smallest area)\n const smallestArea = Math.min(...areas);\n const k = [ areas.indexOf(smallestArea) ];\n\n // Form a rectangle from the extremes of the best edge\n const temp7 = M.subset(x, M.index([0, 1, 1, 0, 0], k));\n const temp8 = M.subset(y, M.index([0, 0, 1, 1, 0], k));\n const temp9 = M.subset(v, M.index(k, M.range(0, 1, true)));\n const temp10 = M.subset(w, M.index(k, M.range(0, 1, true)));\n const temp11 = M.concat(temp7, temp8, M.Dim.Columns);\n const temp12 = M.concat(temp9, temp10, M.Dim.Rows);\n\n const rect = M.multiply(temp11, temp12);\n\n // Revert back to standard TypeScript arrays\n const points = rect.slice(0, -1); // Remove the closing point\n\n // Convert to standard polygon form\n return [ points ];\n}\n\n\n//\n// THIS RE-IMPLEMENTS THE R IN TYPESCRIPT, USING MATHJS FOR MATRIX OPERATIONS\n//\n\n/*\n\nconst {\n matrix,\n multiply,\n transpose,\n apply,\n min,\n max,\n concat,\n row,\n subtract,\n dotMultiply,\n index,\n range,\n subset\n} = require('mathjs');\n\ntype SimplePoint = [number, number];\n\n// For point addressing\nconst X = 0, Y = 1;\nconst COLUMNS = 0, ROWS = 1;\n\nexport function minimumBoundingRectangle(poly: any): any\n{\n // Get the convex hull polygon in standard form\n const ch = polyConvexHull(poly); \n\n // Select the exterior points\n let chExt: SimplePoint[] = ch[0];\n\n // Close the loop (ring)\n chExt.push(chExt[0]);\n\n // Edge directions - Note the implict offset array indexing\n const e: SimplePoint[] = chExt.slice(1).map((pt, i) => [(pt[X] - chExt[i][X]), (pt[Y] - chExt[i][Y])]);\n\n // Edge lengths\n const norms: number[] = e.map(pt => Math.sqrt((pt[X] ** 2) + (pt[Y] ** 2)));\n\n // Unit edge directions\n const v: SimplePoint[] = e.map((pt, i) => [(pt[X] / norms[i]), (pt[Y] / norms[i])]);\n\n // Normal directions to the edges\n const w: SimplePoint[] = v.map(pt => [-pt[Y], pt[X]]);\n\n // FIND THE MBR\n\n // Switch to MathJS matrices for matrix operations\n\n // Convex hull vertices\n const vertices = matrix(chExt);\n\n const vT = transpose(matrix(v));\n const wT = transpose(matrix(w));\n\n // Extremes along edges\n const temp1 = matrix([apply(multiply(vertices, vT), COLUMNS, min)]);\n const temp2 = matrix([apply(multiply(vertices, vT), COLUMNS, max)]);\n const x = concat(temp1, temp2, COLUMNS);\n\n // Extremes normal to edges\n const temp3 = matrix([apply(multiply(vertices, wT), COLUMNS, min)]);\n const temp4 = matrix([apply(multiply(vertices, wT), COLUMNS, max)]);\n const y = concat(temp3, temp4, COLUMNS);\n\n // Areas\n const temp5 = subtract(row(y, 0), row(y, 1));\n const temp6 = subtract(row(x, 0), row(x, 1));\n const areas = dotMultiply(temp5, temp6);\n\n // Index of the best edge (smallest area)\n const areasArr = areas.valueOf()[0]; // Make the 2D matrix a 1D array\n const smallestArea = Math.min( ...areasArr );\n const k = areasArr.indexOf(smallestArea);\n\n // Form a rectangle from the extremes of the best edge\n const temp7 = subset(x, index([0, 1, 1, 0, 0], k));\n const temp8 = subset(y, index([0, 0, 1, 1, 0], k));\n const temp9 = subset(v, index(k, range(0, 1, true)));\n const temp10 = subset(w, index(k, range(0, 1, true)));\n const rect = multiply(concat(temp7, temp8), concat(temp9, temp10, COLUMNS));\n\n // Revert back to standard TypeScript arrays\n const points = rect.valueOf().slice(0, -1); // Remove the closing point\n\n // Convert to standard polygon form\n return [ points ];\n}\n\n*/\n","import * as Util from '../util/all';\n\nimport * as PP from './polypack';\nimport { makeConvexHullGrahamScan } from './graham-scan';\n\n// For incremental poly interface\nexport interface TickOptions\n{\n maxLeafCount?: number;\n maxDepth?: number;\n tickStep?: number;\n}\n\nexport const DefaultTickOptions = { maxLeafCount: 256, maxDepth: 20, tickStep: 1 };\n\n\n// Internal utilities\n\nexport const EARTH_RADIUS = 6371000; // Radius of earth in meters\n\nexport interface PolyOptions\n{\n noLatitudeCorrection?: boolean;\n}\nexport const DefaultOptions: PolyOptions = { };\n\n// Return geographic polygon area in meters^2\nexport function polySimpleArea(b: Float64Array, iOffset: number, n: number): number\n{\n let p1x: number;\n let p1y: number;\n let p2x: number;\n let p2y: number;\n let p3x: number;\n let p3y: number;\n let dx: number;\n let l: number;\n let m: number;\n let u: number;\n let i: number;\n let total: number = 0;\n if (n > 2)\n {\n for (i = 0; i < n; i++)\n {\n if (i === n - 2)\n {\n l = n - 2;\n m = n - 1;\n u = 0;\n }\n else if (i === n - 1)\n {\n l = n - 1;\n m = 0;\n u = 1;\n }\n else {\n l = i;\n m = i + 1;\n u = i + 2;\n }\n p1x = b[iOffset+l*2];\n p1y = b[iOffset+l*2+1];\n p2x = b[iOffset+m*2];\n p2y = b[iOffset+m*2+1];\n p3x = b[iOffset+u*2];\n p3y = b[iOffset+u*2+1];\n dx = (Util.deg2rad(p3x) - Util.deg2rad(p1x));\n dx *= Math.sin(Util.deg2rad(p2y));\n total += dx;\n }\n total *= EARTH_RADIUS * EARTH_RADIUS / 2;\n }\n return Math.abs(total);\n}\n\n// Allow bare polygon coordinates array or GeoJSON feature.\n// Normalize to multipolygon points array.\n\nexport function polyNormalize(poly: any): PP.PolyPack\n{\n return PP.polyPack(poly);\n}\n\nexport function polyNull(poly: any): boolean\n{\n let pp = PP.polyPack(poly);\n return pp == null || pp.length == 2;\n}\n\n// Area of geodesic polygon\nexport function polyArea(poly: any): number\n{\n let pp = polyNormalize(poly);\n let a: number = 0;\n\n // MultiPolygon is a set of polygons\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n a += polySimpleArea(b, iOffset, nPoints) * (iRing == 0 ? 1 : -1);\n });\n\n return a;\n}\n\n// NOTE - COMPACTNESS: Added the diameter of the geodesic polygon in meters\nexport function polyDiameter(poly: any, options?: PolyOptions): number\n{\n if (options === undefined) options = DefaultOptions;\n\n const ch: any = polyConvexHull(poly);\n const chCircle: Circle = polyToCircle(ch);\n\n const lon: number = chCircle.x;\n const lat: number = chCircle.y;\n const r: number = chCircle.r;\n\n const lonDistance: number = haversine(lon - r, lat, lon + r, lat, options);\n const latDistance: number = haversine(lon, lat - r, lon, lat + r, options);\n\n const diameter: number = Math.max(lonDistance, latDistance);\n \n return diameter;\n}\n\n// Return distance in meters given two lat/lon points\nfunction haversine(x1: number, y1: number, x2: number, y2: number, options: PolyOptions): number\n{\n let dLat = Util.deg2rad(y2 - y1);\n let dLon = Util.deg2rad(x2 - x1);\n let c: number;\n\n // Short circuit for using simple cartesian algorithm instead of haversine\n if (options.noLatitudeCorrection)\n c = Math.sqrt((dLat*dLat)+(dLon*dLon));\n else\n {\n let lat1 = Util.deg2rad(y1);\n let lat2 = Util.deg2rad(y2);\n\n let a = Math.sin(dLat/2) * Math.sin(dLat/2) +\n Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2)\n c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a))\n }\n\n return EARTH_RADIUS * c;\n}\n\n// The perimeter of geodesic polygon in meters\nexport function polyPerimeter(poly: any, options?: PolyOptions): number\n{\n if (options === undefined) options = DefaultOptions;\n\n let pp = polyNormalize(poly);\n let perimeter: number = 0;\n\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n if (iRing > 0) return; // skip holes\n let iStart = iOffset;\n let iEnd = (iOffset + nPoints * 2) - 2; // index to last point, not past last point\n for (; iOffset < iEnd; iOffset += 2)\n perimeter += haversine(b[iOffset], b[iOffset+1], b[iOffset+2], b[iOffset+3], options);\n\n // Close ring if necessary\n if (nPoints > 2 && (b[iStart] != b[iEnd] || b[iStart+1] != b[iEnd+1]))\n perimeter += haversine(b[iStart], b[iStart+1], b[iEnd], b[iEnd+1], options);\n });\n\n return perimeter;\n}\n\nclass Point {\n\tpublic constructor(\n\t\tpublic x: number,\n\t\tpublic y: number) {}\n}\n\nexport class Circle {\n\tpublic constructor(\n\t\tpublic x: number,\n\t\tpublic y: number,\n\t\tpublic r: number) {}\n}\n\n//\n// Returns the smallest circle that encloses the given polygon.\n// Runs in expected O(n) time, randomized.\n// Note: If 0 points are given, null is returned.\n// If 1 point is given, a circle of radius 0 is returned.\n//\n\nexport function polyToCircle(poly: any): Circle|null\n{\n return makeCircle(polyToExteriorPoints(poly));\n}\n\n//\n// Returns the circle whose perimeter is equal to the perimeter of the bounding perimeter\n// of the polygon. Use binary search to find an approximation.\n//\n\nexport function polyToPolsbyPopperCircle(poly: any, options?: PolyOptions): Circle|null\n{\n let pp = polyNormalize(poly);\n\n let c = polyToCircle(poly);\n if (c == null) return c;\n let p: number = polyPerimeter(poly, options);\n c.r = (p / (2 * Math.PI)) / 111139;\n return c;\n}\n\nfunction makeCircle(points: Array<Point>): Circle|null\n{\n if (points == null) return null;\n\n\t// Clone list to preserve the caller's data, do Durstenfeld shuffle\n\tlet shuffled: Array<Point> = points.slice();\n\tfor (let i = points.length - 1; i >= 0; i--) {\n\t\tlet j = Math.floor(Math.random() * (i + 1));\n\t\tj = Math.max(Math.min(j, i), 0);\n\t\tconst temp: Point = shuffled[i];\n\t\tshuffled[i] = shuffled[j];\n\t\tshuffled[j] = temp;\n\t}\n\n\t// Progressively add points to circle or recompute circle\n\tlet c: Circle|null = null;\n\tshuffled.forEach((p: Point, i: number) => {\n\t\tif (c === null || !isInCircle(c, p))\n\t\t\tc = makeCircleOnePoint(shuffled.slice(0, i + 1), p);\n\t});\n\treturn c;\n}\n\n// One boundary point known\nfunction makeCircleOnePoint(points: Array<Point>, p: Point): Circle\n{\n\tlet c: Circle = new Circle(p.x, p.y, 0);\n\tpoints.forEach((q: Point, i: number) => {\n\t\tif (!isInCircle(c, q)) {\n\t\t\tif (c.r == 0)\n\t\t\t\tc = makeDiameter(p, q);\n\t\t\telse\n\t\t\t\tc = makeCircleTwoPoints(points.slice(0, i + 1), p, q);\n\t\t}\n\t});\n\treturn c;\n}\n\n// Two boundary points known\nfunction makeCircleTwoPoints(points: Array<Point>, p: Point, q: Point): Circle\n{\n\tconst circ: Circle = makeDiameter(p, q);\n\tlet left : Circle|null = null;\n\tlet right: Circle|null = null;\n\n\t// For each point not in the two-point circle\n\tfor (const r of points) {\n\t\tif (isInCircle(circ, r))\n\t\t\tcontinue;\n\n\t\t// Form a circumcircle and classify it on left or right side\n\t\tconst cross: number = crossProduct(p.x, p.y, q.x, q.y, r.x, r.y);\n\t\tconst c: Circle|null = makeCircumcircle(p, q, r);\n\t\tif (c === null)\n\t\t\tcontinue;\n\t\telse if (cross > 0 && (left === null || crossProduct(p.x, p.y, q.x, q.y, c.x, c.y) > crossProduct(p.x, p.y, q.x, q.y, left.x, left.y)))\n\t\t\tleft = c;\n\t\telse if (cross < 0 && (right === null || crossProduct(p.x, p.y, q.x, q.y, c.x, c.y) < crossProduct(p.x, p.y, q.x, q.y, right.x, right.y)))\n\t\t\tright = c;\n\t}\n\n\t// Select which circle to return\n\tif (left === null && right === null)\n\t\treturn circ;\n\telse if (left === null && right !== null)\n\t\treturn right;\n\telse if (left !== null && right === null)\n\t\treturn left;\n\telse if (left !== null && right !== null)\n\t\treturn left.r <= right.r ? left : right;\n\telse\n\t\tthrow \"Assertion error\";\n}\n\nfunction makeDiameter(a: Point, b: Point): Circle\n{\n\tconst cx: number = (a.x + b.x) / 2;\n\tconst cy: number = (a.y + b.y) / 2;\n\tconst r0: number = Util.distance(cx, cy, a.x, a.y);\n\tconst r1: number = Util.distance(cx, cy, b.x, b.y);\n\treturn new Circle(cx, cy, Math.max(r0, r1));\n}\n\nfunction makeCircumcircle(a: Point, b: Point, c: Point): Circle|null\n{\n\t// Mathematical algorithm from Wikipedia: Circumscribed circle\n\tconst ox: number = (Math.min(a.x, b.x, c.x) + Math.max(a.x, b.x, c.x)) / 2;\n\tconst oy: number = (Math.min(a.y, b.y, c.y) + Math.max(a.y, b.y, c.y)) / 2;\n\tconst ax: number = a.x - ox; const ay: number = a.y - oy;\n\tconst bx: number = b.x - ox; const by: number = b.y - oy;\n\tconst cx: number = c.x - ox; const cy: number = c.y - oy;\n\tconst d: number = (ax * (by - cy) + bx * (cy - ay) + cx * (ay - by)) * 2;\n\tif (d == 0)\n\t\treturn null;\n\tconst x: number = ox + ((ax*ax + ay*ay) * (by - cy) + (bx*bx + by*by) * (cy - ay) + (cx*cx + cy*cy) * (ay - by)) / d;\n\tconst y: number = oy + ((ax*ax + ay*ay) * (cx - bx) + (bx*bx + by*by) * (ax - cx) + (cx*cx + cy*cy) * (bx - ax)) / d;\n\tconst ra: number = Util.distance(x, y, a.x, a.y);\n\tconst rb: number = Util.distance(x, y, b.x, b.y);\n\tconst rc: number = Util.distance(x, y, c.x, c.y);\n\treturn new Circle(x, y, Math.max(ra, rb, rc));\n}\n\n/* Simple mathematical functions */\n\nconst MULTIPLICATIVE_EPSILON: number = 1 + 1e-14;\n\nfunction isInCircle(c: Circle|null, p: Point): boolean\n{\n\treturn c !== null && Util.distance(p.x, p.y, c.x, c.y) <= c.r * MULTIPLICATIVE_EPSILON;\n}\n\n// Returns twice the signed area of the triangle defined by (x0, y0), (x1, y1), (x2, y2).\nfunction crossProduct(x0: number, y0: number, x1: number, y1: number, x2: number, y2: number): number\n{\n\treturn (x1 - x0) * (y2 - y0) - (y1 - y0) * (x2 - x0);\n}\n\n// cache x,y circle offsets for one quadrant indexed by number of segments\nlet circleOffsets: any = {};\n\nfunction getCircleOffsets(n: number): any\n{\n if (circleOffsets[n] === undefined)\n {\n let a: number[] = [];\n let incr = (Math.PI / 2) / n;\n let theta: number = 0;\n let i: number, j: number;\n\n // Compute NE quadrant\n for (i = 0; i < n; i++, theta += incr)\n {\n a.push(Math.sin(theta));\n a.push(Math.cos(theta));\n }\n // Add top of circle\n a.push(0);\n a.push(1);\n // Now flip X and replicate to NW quadrant\n for (i = 0; i < n; i++)\n {\n j = (n-i)*2;\n a.push(- a[j-1]);\n a.push(a[j-2]);\n }\n // Now flip X and Y and replicate to SW quadrant\n for (i = 0; i < n; i++)\n {\n j = (n-i)*2;\n a.push(- a[j-1]);\n a.push(- a[j-2]);\n }\n // Add bottom of circle\n a.push(0);\n a.push(-1);\n // Now flip Y and replicate to SE quadrant\n for (i = 0; i < n; i++)\n {\n j = (n-i)*2;\n a.push(a[j-1]);\n a.push(- a[j-2]);\n }\n // Duplicate final point per GeoJSON spec\n a.push(a[0]);\n a.push(a[1]);\n\n circleOffsets[n] = a;\n }\n\n return circleOffsets[n];\n}\n\n// Note that this is essentially an inversion of polyToCircle which computes a mathematical\n// circle given the point values, ignoring latitude correction. This inversion also\n// ignores that correction which means when plotted on a 2D map looks circular but the edge of\n// the circle is not a fixed distance (in physical units, e.g. meters) from the center.\n//\n\nexport function polyFromCircle(c: Circle, nSegments?: number): any\n{\n if (c === null || c.r == 0) return null;\n if (!nSegments || nSegments < 8) nSegments = 8;\n let poly: any = [];\n\n let offsets: any = getCircleOffsets(nSegments);\n const n: number = offsets.length;\n\n for (let i: number = 0; i < n; i += 2)\n poly.push([ c.x + (c.r * offsets[i]), c.y + (c.r * offsets[i+1]) ]);\n\n // return multi-polygon\n return [ [ poly ] ];\n}\n\n// isLeft(): tests if a point is Left|On|Right of an infinite line.\n// Input: three points P0, P1, and P2\n// Return: >0 for P2 left of the line through P0 and P1\n// =0 for P2 on the line\n// <0 for P2 right of the line\n\nfunction sortPointX(a: Point, b: Point): number { return a.x - b.x; }\nfunction sortPointY(a: Point, b: Point): number { return a.y - b.y; }\nfunction sortPoint(a: Point, b: Point): number { return a.x === b.x ? a.y - b.y : a.x - b.x; }\nfunction isLeft(p0: Point, p1: Point, p2: Point): number { return (p1.x - p0.x) * (p2.y - p0.y) - (p2.x - p0.x) * (p1.y - p0.y); }\n\nfunction pointsToPoly(points: Point[]): any\n{\n let p: any = [];\n\n for (let i: number = 0; i < points.length; i++)\n p.push( [ points[i].x, points[i].y ] );\n \n return [ p ];\n}\n\nexport function polyToExteriorPoints(poly: any): any\n{\n let pp = polyNormalize(poly);\n if (pp == null) return null;\n\n let points: Point[] = [];\n\n PP.polyPackEachPoint(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number) => {\n if (iRing > 0) return; // skip holes\n points.push(new Point(b[iOffset], b[iOffset+1]));\n });\n\n return points.length > 0 ? points : null;\n}\n\n//\n// polyConvexHull() - Two algorithms:\n// * Gram Scan (default) - in graham-scan.ts\n// * A.M.Andrew's monotone chain 2D convex hull algorithm - below\n//\n\nexport function polyConvexHull(poly: any, altAlgorithm?: any): any\n{\n if (altAlgorithm !== undefined)\n return makeConvexHullMonotoneChain2D(poly);\n \n return makeConvexHullGrahamScan(poly);\n}\n\nexport function makeConvexHullMonotoneChain2D(poly: any): any\n{\n // Normalize input\n let points = polyToExteriorPoints(poly);\n if (points == null) return null;\n\n points.sort(sortPoint);\n\n let H: Point[] = [];\n\n // the output array H[] will be used as the stack\n let n: number = points.length;\n let i: number;\n let bot: number = 0;\n let top: number = -1; // indices for bottom and top of the stack\n\n // Get the indices of points with min x-coord and min|max y-coord\n let minmin: number = 0, minmax: number;\n\n let xmin = points[0].x;\n for (i = 1; i < n; i++)\n if (points[i].x != xmin)\n break;\n\n minmax = i - 1;\n if (minmax == n - 1) // degenerate case: all x-coords == xmin\n {\n H[++top] = points[minmin];\n if (points[minmax].y != points[minmin].y) // a nontrivial segment\n H[++top] = points[minmax];\n H[++top] = points[minmin]; // add polygon endpoint\n return pointsToPoly(H);\n }\n\n // Get the indices of points with max x-coord and min|max y-coord\n let maxmin: number, maxmax: number = n - 1;\n let xmax: number = points[n - 1].x;\n for (i = n - 2; i >= 0; i--)\n if (points[i].x != xmax)\n break;\n maxmin = i + 1;\n\n // Compute the lower hull on the stack H\n H[++top] = points[minmin]; // push minmin point onto stack\n i = minmax;\n while (++i <= maxmin)\n {\n // the lower line joins points[minmin] with points[maxmin]\n if (isLeft(points[minmin], points[maxmin], points[i]) >= 0 && i < maxmin)\n continue; // ignore points[i] above or on the lower line\n\n while (top > 0) // there are at least 2 points on the stack\n {\n // test if points[i] is left of the line at the stack top\n if (isLeft(H[top - 1], H[top], points[i]) > 0)\n break; // points[i] is a new hull vertex\n else\n top--; // pop top point off stack\n }\n\n H[++top] = points[i]; // push points[i] onto stack\n }\n\n // Next, compute the upper hull on the stack H above the bottom hull\n if (maxmax != maxmin) // if distinct xmax points\n H[++top] = points[maxmax]; // push maxmax point onto stack\n\n bot = top; // the bottom point of the upper hull stack\n i = maxmin;\n while (--i >= minmax)\n {\n // the upper line joins points[maxmax] with points[minmax]\n if (isLeft(points[maxmax], points[minmax], points[i]) >= 0 && i > minmax)\n continue; // ignore points[i] below or on the upper line\n\n while (top > bot) // at least 2 points on the upper stack\n {\n // test if points[i] is left of the line at the stack top\n if (isLeft(H[top - 1], H[top], points[i]) > 0)\n break; // points[i] is a new hull vertex\n else\n top--; // pop top point off stack\n }\n\n if (points[i].x == H[0].x && points[i].y == H[0].y)\n return pointsToPoly(H); // special case (mgomes)\n\n H[++top] = points[i]; // push points[i] onto stack\n }\n\n if (minmax != minmin)\n H[++top] = points[minmin]; // push joining endpoint onto stack\n\n return pointsToPoly(H);\n}\n\n// NOTE - COMPACTNESS: Removed all the compactness notes.\n\n// TODO - COMPACTNESS: Ultimately remove this interface & polyCompactness(),\n// when dra-client no longer uses them.\nexport interface CompactnessDescription\n{\n value: number,\n reock: number,\n polsby_popper: number,\n convex_hull: number,\n schwartzberg: number,\n}\n\nexport function polyCompactness(poly: any, options?: PolyOptions): CompactnessDescription\n{\n if (options === undefined) options = DefaultOptions;\n\n let pp = polyNormalize(poly);\n\n let area: number = polyArea(pp);\n let perimeter: number = polyPerimeter(pp, options);\n\n let circle: Circle = polyToCircle(pp);\n let circleArea: number = polyArea(polyFromCircle(circle));\n let ppcircleArea: number = polyArea(polyFromCircle(polyToPolsbyPopperCircle(poly)));\n let hullArea: number = polyArea(polyConvexHull(pp));\n\n let result: CompactnessDescription = { value: 0, reock: 0, polsby_popper: 0, convex_hull: 0, schwartzberg: 0 };\n if (area == 0 || circle == null || circle.r == 0) return result;\n\n result.reock = area / circleArea;\n result.polsby_popper = area / ppcircleArea;\n result.convex_hull = area / hullArea;\n result.schwartzberg = ((2 * Math.PI) * Math.sqrt(area / Math.PI)) / perimeter;\n\n // Weight Reock and Polsby-Popper equally, normalize in 0-100 range\n result.value = Math.trunc(((result.reock + result.polsby_popper) / 2) * 100);\n return result;\n}\n\n\nexport interface PolyDescription\n{\n npoly: number,\n nhole: number,\n npoint: number\n}\n\nconst EmptyPolyDescription = { npoly: 0, nhole: 0, npoint: 0 };\n\nexport function polyDescribe(poly: any): PolyDescription\n{\n let pp = polyNormalize(poly);\n let d = Util.shallowCopy(EmptyPolyDescription);\n\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n d.npoint += nPoints;\n if (iRing == 0)\n d.npoly++;\n else\n d.nhole++;\n });\n\n return d;\n}\n\nexport function npoints(poly: any): number\n{\n let d = polyDescribe(poly);\n return d.npoint;\n}\n\n// \n// polyTransform: transform each point. Called for all polygons and all rings.\n// point, by point. Returns a packed structure.\n//\nexport function polyTransform(poly: any, transformFn: any): any\n{\n // Get all the points -- DON'T skip holes -- and transform them.\n // Don't alter input structure so copy if polyNormalize did not.\n let pp = polyNormalize(poly);\n if (! PP.polyPacked(poly))\n pp = PP.polyPackCopy(pp);\n\n PP.polyPackEachPoint(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number) =>\n {\n const [newX, newY] = transformFn([b[iOffset], b[iOffset+1]]);\n b[iOffset] = newX;\n b[iOffset+1] = newY;\n });\n\n return pp;\n}\n\nfunction identityTransform(pt: number[]): number[]\n{\n return [pt[0], pt[1]];\n}\n\nfunction closeRing(ring: any): any\n{\n if (ring.length > 1)\n {\n let p1 = ring[0];\n let p2 = ring[ring.length-1];\n if (p1[0] !== p2[0] || p1[1] !== p2[1])\n ring.push(p1);\n }\n return ring;\n}\n\nfunction closePoly(poly: any): any\n{\n poly.forEach(closeRing);\n return poly;\n}\n\n// This mutates the passed in feature to ensure it is correctly wound\n// For convenience, passed back the value provided.\nexport function featureRewind(poly: any): any\n{\n let pp = polyNormalize(poly);\n if (pp == null) return null;\n polyRewindRings(pp);\n if (poly.type === 'Feature')\n {\n if (poly.geometry.packed !== pp)\n {\n poly.geometry.coordinates = PP.polyUnpack(pp);\n // Also make sure first === last coordinate\n let d = Util.depthof(poly.geometry.coordinates);\n if (d === 4) closePoly(poly.geometry.coordinates);\n else if (d === 5) poly.geometry.coordinates.forEach(closePoly);\n }\n return poly;\n }\n else if (poly === pp)\n return pp;\n else\n return PP.polyUnpack(pp);\n}\n\n//\n// polyRewindRings: Check the winding order of the polygon's ring. Rewind them,\n// if necessary. Return a packed polygon.\n//\nexport function polyRewindRings(pp: any, bLog: boolean = false): any\n{\n if (pp == null || pp.buffer == null) return;\n\n if (pp.offset === undefined) throw 'oops: not a PolyPack';\n\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) =>\n {\n const iStart = iOffset;\n const iEnd = iStart + (nPoints * 2) - 2;\n\n // Determine the winding order of the ring\n let direction = 0;\n\n // Start at the second point\n iOffset += 2;\n for (; iOffset <= iEnd; iOffset += 2)\n {\n // The previous point\n let jOffset = iOffset - 2;\n\n // Sum over the edges\n direction += twoTimesArea(b[iOffset], b[jOffset], b[iOffset+1], b[jOffset+1]);\n }\n \n // Implicitly close the ring, if necessary\n if (nPoints > 2 && (b[iStart] != b[iEnd] || b[iStart + 1] != b[iEnd + 1]))\n {\n if (bLog) console.log(`Implicitly closing polygon ${iPoly}, ring ${iRing}.`);\n\n direction += twoTimesArea(b[iStart], b[iEnd], b[iStart + 1], b[iEnd + 1]);\n }\n\n // If the winding order is wrong, reverse it\n if (((iRing == 0) && (direction > 0)) || ((iRing > 0) && (direction < 0)))\n {\n if (bLog) console.log(`Rewinding polygon ${iPoly}, ring ${iRing}.`);\n\n let iFront = iStart;\n let iBack = iEnd;\n for (; iFront < iBack; iFront += 2, iBack -= 2)\n {\n let tmpX = b[iFront];\n let tmpY = b[iFront+1];\n b[iFront] = b[iBack];\n b[iFront+1] = b[iBack+1];\n b[iBack] = tmpX;\n b[iBack+1] = tmpY;\n }\n }\n });\n\n return pp;\n}\n\n//\n// To figure out which way a ring is wound:\n//\n// Sum over the edges, (x2 − x1) (y2 + y1). If the result is positive the curve\n// is clockwise, if it's negative the curve is counterclockwise. (The result is \n// twice the enclosed area, with a + /- convention.)\n//\n// Source: https://stackoverflow.com/questions/1165647/how-to-determine-if-a-list-of-polygon-points-are-in-clockwise-order#1165943\n//\nfunction twoTimesArea(x2: number, x1: number, y2: number, y1: number): number\n{\n return (x2 - x1) * (y2 + y1);\n}\n\n","import * as Util from '../util/all';\nimport * as PP from './polypack';\nimport * as T from './topo';\n\n// Packed Buffer format:\n//\n// (strings are packed as UTF8 bytes, padded to 4 byte boundary)\n//\n// { 4 byte size (byte offset to packed coordinate buffer) }\n// { 4 byte length: property name,\n// 4 byte length: json string }*\n// { 4 byte length: 'features' }\n// { 4 byte length: length of 'features' array }\n// { 4 byte length: property name,\n// 4 byte length: json string }*\n// { padding to 8 byte boundary }\n// { packed buffer coordinates in polypack format (indexed by geometry.packed above) }\n//\n\nconst MagicInt = 17;\nconst MagicFloat = 17.17;\n\nfunction pad(n: number, pad: number): number\n{\n let mod = n % pad;\n return mod ? pad - mod : 0;\n}\n\nfunction sizeOfString(coder: Util.Coder, s: string): number\n{\n let s8 = Util.s2u8(coder, s);\n return 4 + s8.length + pad(s8.length, 4);\n}\n\nfunction packString(coder: Util.Coder, buf8: Uint8Array, buf32: Int32Array, offset: number, s: string): number\n{\n let s8 = Util.s2u8(coder, s);\n buf32[offset >> 2] = s8.length;\n offset += 4;\n let i: number;\n for (i = 0; i < s8.length; i++) buf8[offset++] = s8[i];\n offset += pad(offset, 4);\n return offset;\n}\n\nfunction unpackString(coder: Util.Coder, buf8: Uint8Array, buf32: Int32Array, offset: number): string\n{\n let size = buf32[offset >> 2];\n let s = Util.u82s(coder, buf8, offset+4, size);\n return s;\n}\n\nexport function packCollection(coder: Util.Coder, col: any): ArrayBuffer\n{\n // Compute size\n let pp = PP.featurePack(col) as PP.PolyPack;\n let buffer: any = col.features.length ? col.features[0].geometry.packed.buffer : null; // to restore, below\n let size = 16; // int endiness, offset to coordinates, float endiness\n col.features.forEach((f: any) => { delete f.geometry.packed.buffer; }); // reconstructed when unpacking\n let j = JSON.stringify(col);\n size += sizeOfString(coder, j);\n size += pad(size, 8);\n let fullsize = size + pp.length * 8; // add space for coordinates\n\n // Now pack it\n let ab = new ArrayBuffer(fullsize);\n let buf8 = new Uint8Array(ab);\n let buf32 = new Int32Array(ab);\n let buf64 = new Float64Array(ab);\n let offset = 0;\n buf32[0] = MagicInt;\n offset += 4;\n buf32[1] = size;\n offset += 4;\n buf64[1] = MagicFloat; // Note that buf64[0] has the two ints stored above\n offset += 8;\n offset = packString(coder, buf8, buf32, offset, j);\n offset += pad(offset, 8);\n if (offset != size)\n throw 'Oops, packing error.';\n let foff = offset >> 3;\n let buf = pp.buffer as Float64Array;\n for (let i: number = 0; i < pp.length; i++)\n buf64[foff++] = buf[i];\n\n // Now restore\n col.features.forEach((f: any) => { f.geometry.packed.buffer = buffer; });\n PP.featureUnpack(col);\n\n return ab;\n}\n\nfunction reverse(buf8: Uint8Array, s: number, n: number): void\n{\n let e = s + n - 1;\n while (s < e)\n {\n let t = buf8[s];\n buf8[s] = buf8[e];\n buf8[e] = t;\n s++, e--;\n }\n}\n\nfunction enforceEndianness(ab: ArrayBuffer): void\n{\n let buf8 = new Uint8Array(ab);\n let buf32 = new Int32Array(ab);\n let buf64 = new Float64Array(ab);\n let reverseInts = false;\n if (buf32[0] != MagicInt)\n {\n reverseInts = true;\n reverse(buf8, 0, 4);\n if (buf32[0] != MagicInt) throw 'unpackCollection: badly formatted buffer';\n reverse(buf8, 4, 4); // size of non-floats\n }\n let reverseFloats = false;\n if (buf64[1] != MagicFloat)\n {\n reverseFloats = true;\n reverse(buf8, 8, 8);\n if (buf64[1] != MagicFloat) throw 'unpackCollection: badly formatted buffer';\n }\n if (reverseInts)\n reverse(buf8, 16, 4); // JSON string length\n if (reverseFloats)\n {\n let s = buf32[1]; // Offset to floats\n let e = ab.byteLength;\n for (; s < e; s += 8)\n reverse(buf8, s, 8);\n }\n}\n\nexport function unpackCollection(coder: Util.Coder, ab: ArrayBuffer): any\n{\n enforceEndianness(ab);\n let col: any = {};\n let buf8 = new Uint8Array(ab);\n let buf32 = new Int32Array(ab);\n let size = buf32[1];\n let buf64 = new Float64Array(ab, size); // offset to start of packed coordinates\n let offset = 16;\n let j = unpackString(coder, buf8, buf32, offset);\n col = JSON.parse(j);\n col.features.forEach((f: any) => { f.geometry.packed.buffer = buf64 });\n return col;\n}\n\n// Format of packed buffer:\n// [Size of JSON string] [4 bytes]\n// [Size of packedarcs] [4 bytes]\n// [Size of packedarcindices] [4 bytes]\n// [padding] [4 bytes]\n// [JSON string]\n// [pad to 8]\n// [packedarcs]\n// [packedarcindices]\n\nconst HeaderSize = 16; // 4 Int32's \n\nexport function topoToBuffer(coder: Util.Coder, topo: any): ArrayBuffer\n{\n // Make sure we're packed\n T.topoPack(topo);\n let savepack = topo.packed;\n delete topo.packed;\n let json = JSON.stringify(topo);\n let byteLength = HeaderSize; // 3 lengths + padding\n let stringLength = sizeOfString(coder, json);\n stringLength += pad(stringLength, 8);\n byteLength += stringLength;\n byteLength += savepack.arcs.byteLength;\n byteLength += savepack.arcindices.byteLength;\n let ab = new ArrayBuffer(byteLength);\n let buf8 = new Uint8Array(ab);\n let buf32 = new Int32Array(ab);\n let buf64 = new Float64Array(ab, HeaderSize + stringLength, savepack.arcs.length);\n\n buf32[0] = stringLength;\n buf32[1] = savepack.arcs.byteLength;\n buf32[2] = savepack.arcindices.byteLength;\n buf32[3] = 0;\n packString(coder, buf8, buf32, HeaderSize, json); json = null;\n let af = savepack.arcs as Float64Array;\n let n = af.length;\n let i = 0;\n let j = 0;\n while (i < n)\n buf64[j++] = af[i++];\n let ai = savepack.arcindices as Int32Array;\n n = ai.length;\n i = 0;\n j = (HeaderSize + stringLength + savepack.arcs.byteLength) / 4;\n while (i < n)\n buf32[j++] = ai[i++];\n\n // restore\n topo.packed = savepack;\n\n return ab;\n}\n\nexport function topoFromBuffer(coder: Util.Coder, ab: ArrayBuffer): any\n{\n let buf8 = new Uint8Array(ab);\n let buf32 = new Int32Array(ab);\n let stringLength = buf32[0];\n let arcsByteLength = buf32[1];\n let arcindicesByteLength = buf32[2];\n let json = unpackString(coder, buf8, buf32, HeaderSize);\n let topo = JSON.parse(json);\n topo.packed = {};\n topo.packed.arcs = new Float64Array(ab, stringLength + HeaderSize, arcsByteLength / 8);\n topo.packed.arcindices = new Int32Array(ab, stringLength + HeaderSize + arcsByteLength, arcindicesByteLength / 4);\n return topo;\n}\n","import TinyQueue from 'tinyqueue';\nimport * as Util from '../util/all';\nimport * as P from './poly';\nimport * as PP from './polypack';\nimport * as BB from './boundbox';\n\ninterface PolyLabelResult\n{\n x: number;\n y: number;\n d: number;\n}\n\n//\n// polyLabel: given polygon, return contained point furthest from any edge, and that distance\n//\n\nexport function polyLabel(poly: any, precision?: number, debug?: boolean): PolyLabelResult\n{\n let pp = P.polyNormalize(poly);\n if (pp == null) return { x: 0, y: 0, d: 0 };\n\n // For multi-polygon, pick largest polygon\n let iLargest: number;\n let nLargestArea: number;\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n if (iRing) return;\n let nArea = P.polySimpleArea(b, iOffset, nPoints);\n if (iLargest === undefined || nArea > nLargestArea) { iLargest = iPoly, nLargestArea = nArea }\n });\n\n if (iLargest === undefined)\n return { x: 0, y: 0, d: 0 };\n\n precision = precision || 0.00001;\n\n let forEachPoint = (iter: any) => {\n PP.polyPackEachPoint(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number) => {\n if (iPoly != iLargest || iRing) return;\n iter(b[iOffset], b[iOffset+1]);\n });\n };\n let forEachPointPair = (iter: any) => {\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly, iRing: number, iOffset: number, nPoints: number) => {\n if (iPoly != iLargest || iRing) return;\n let iFirst = iOffset;\n let iLast = iOffset + nPoints * 2;\n let iSecond = iLast - 2;\n for (; iFirst < iLast; iSecond = iFirst, iFirst += 2)\n iter(b[iFirst], b[iFirst+1], b[iSecond], b[iSecond+1]);\n });\n };\n\n // find the bounding box of the outer ring\n let minX: number, minY: number, maxX: number, maxY: number;\n forEachPoint((x: number, y: number) => {\n if (minX === undefined || x < minX) minX = x;\n if (minY === undefined || y < minY) minY = y;\n if (maxX === undefined || x > maxX) maxX = x;\n if (maxY === undefined || y > maxY) maxY = y;\n });\n\n let width: number = maxX - minX;\n let height: number = maxY - minY;\n let cellSize: number = Math.min(width, height);\n let h: number = cellSize / 2;\n\n if (cellSize === 0) return { x: minX, y: minY, d: 0 };\n\n // a priority queue of cells in order of their \"potential\" (max distance to polygon)\n let cellQueue = new TinyQueue<Cell>(undefined, compareMax);\n\n // cover polygon with initial cells\n for (let x: number = minX; x < maxX; x += cellSize)\n {\n for (let y: number = minY; y < maxY; y += cellSize)\n cellQueue.push(new Cell(x + h, y + h, h, forEachPointPair));\n }\n\n // take centroid as the first best guess\n let bestCell: any = getCentroidCell(forEachPointPair);\n\n // special case for rectangular polygons\n let bboxCell: Cell = new Cell(minX + width / 2, minY + height / 2, 0, forEachPointPair);\n if (bboxCell.d > bestCell.d) bestCell = bboxCell;\n\n let numProbes = cellQueue.length;\n\n while (cellQueue.length)\n {\n // pick the most promising cell from the queue\n let cell = cellQueue.pop();\n\n // update the best cell if we found a better one\n if (cell.d > bestCell.d)\n {\n bestCell = cell;\n if (debug) console.log('found best %d after %d probes', Math.round(1e4 * cell.d) / 1e4, numProbes);\n }\n\n // do not drill down further if there's no chance of a better solution\n if (cell.max - bestCell.d <= precision) continue;\n\n // split the cell into four cells\n h = cell.h / 2;\n cellQueue.push(new Cell(cell.x - h, cell.y - h, h, forEachPointPair));\n cellQueue.push(new Cell(cell.x + h, cell.y - h, h, forEachPointPair));\n cellQueue.push(new Cell(cell.x - h, cell.y + h, h, forEachPointPair));\n cellQueue.push(new Cell(cell.x + h, cell.y + h, h, forEachPointPair));\n numProbes += 4;\n }\n\n if (debug)\n {\n console.log('num probes: ' + numProbes);\n console.log('best distance: ' + bestCell.d);\n }\n\n return { x: bestCell.x, y: bestCell.y, d: bestCell.d };\n}\n\nfunction compareMax(a: Cell, b: Cell) { return b.max - a.max; }\n\nclass Cell\n{\n x: number;\n y: number;\n h: number;\n d: number;\n max: number;\n\n constructor(x: number, y: number, h: number, forEachPointPair: any)\n {\n this.x = x; // cell center x\n this.y = y; // cell center y\n this.h = h; // half the cell size\n this.d = pointToPolygonDist(x, y, forEachPointPair); // distance from cell center to polygon\n this.max = this.d + this.h * Math.SQRT2; // max distance to polygon within a cell\n }\n}\n\n// signed distance from point to polygon outline (negative if point is outside)\nfunction pointToPolygonDist(x: number, y: number, forEachPointPair: any): number\n{\n let inside: boolean = false;\n let minDistSq: number = Infinity;\n\n forEachPointPair((ax: number, ay: number, bx: number, by: number) => {\n if ((ay > y !== by > y) && (x < (bx - ax) * (y - ay) / (by - ay) + ax))\n inside = !inside;\n\n minDistSq = Math.min(minDistSq, getSegDistSq(x, y, ax, ay, bx, by));\n });\n\n return (inside ? 1 : -1) * Math.sqrt(minDistSq);\n}\n\n// get polygon centroid\nfunction getCentroidCell(forEachPointPair: any): Cell\n{\n let area = 0;\n let x = 0;\n let y = 0;\n let fx: number;\n let fy: number;\n\n forEachPointPair((ax: number, ay: number, bx: number, by: number) => {\n if (fx === undefined) fx = ax, fy = ay;\n let f: number = ax * by - bx * ay;\n x += (ax + bx) * f;\n y += (ay + by) * f;\n area += f * 3;\n });\n if (area === 0) return new Cell(fx, fy, 0, forEachPointPair);\n return new Cell(x / area, y / area, 0, forEachPointPair);\n}\n\n// get squared distance from a point to a segment\nfunction getSegDistSq(px: number, py: number, ax: number, ay: number, bx: number, by: number): number\n{\n let dx = bx - ax;\n let dy = by - ay;\n\n if (dx !== 0 || dy !== 0)\n {\n let t: number = ((px - ax) * dx + (py - ay) * dy) / (dx * dx + dy * dy);\n\n if (t > 1)\n {\n ax = bx;\n ay = by;\n }\n else if (t > 0)\n {\n ax += dx * t;\n ay += dy * t;\n }\n }\n\n dx = px - ax;\n dy = py - ay;\n\n return dx * dx + dy * dy;\n}\n","// Shared libraries\nimport * as Util from '../util/all';\n\n// Format for efficient packing of multipolygon coordinates\n//\n// [n] number of polygons\n// [n polygon headers]...\n// [n] number of rings\n// [n]... number of coordinates in ring\n// followed by [x,y]... for all the coordinates\n\nexport interface PolyPack\n{\n offset: number;\n length: number;\n buffer: any;\n}\n\nexport function polyPackSize(coords: any): number\n{\n // Null feature?\n if (coords == null || (coords.length !== undefined && coords.length == 0)) return 0;\n\n let depth = Util.depthof(coords);\n if (depth == 3) coords = [[ coords ]];\n else if (depth == 4) coords = [ coords ]; // normalize to multipolygon\n let nFloats: number = 2; // for number of polygons and size of header block\n let i: number, j: number;\n let p: any, r: any;\n for (i = 0; i < coords.length; i++)\n {\n p = coords[i];\n nFloats++; // For number of rings in this polygon\n for (j = 0; j < p.length; j++)\n {\n nFloats++; // For number of coordinates in this ring\n r = p[j];\n nFloats += r.length * 2; // for each x, y pair\n }\n }\n return nFloats;\n}\n\ntype EachRingCB = (buffer: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => void;\ntype EachPointCB = (buffer: Float64Array, iPoly: number, iRing: number, iOffset: number) => void;\n\nexport function polyPackEachRing(pack: PolyPack, cb: EachRingCB): void\n{\n if (pack == null || pack.buffer == null) return;\n\n if (pack.offset === undefined) throw 'oops: not a PolyPack';\n\n let b = pack.buffer;\n let iRing: number;\n let iOffset: number = pack.offset;\n let cOffset: number = b[iOffset+1] + pack.offset;\n\n // Grab number of polygons\n let nPoly: number = b[iOffset++];\n // Move past header length\n iOffset++;\n for (let iPoly: number = 0; iPoly < nPoly; iPoly++)\n {\n // Grab number of rings in this polygon\n let nRing: number = b[iOffset++];\n for (let iRing: number = 0; iRing < nRing; iRing++)\n {\n // Grab number of points in this ring\n let nPoints: number = b[iOffset++];\n cb(b, iPoly, iRing, cOffset, nPoints);\n cOffset += nPoints * 2;\n }\n }\n}\n\nexport function polyPackEachPoint(pack: PolyPack, cb: EachPointCB): void\n{\n polyPackEachRing(pack, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n let iEnd: number = iOffset + (nPoints * 2);\n for (; iOffset < iEnd; iOffset += 2)\n cb(b, iPoly, iRing, iOffset);\n });\n}\n\nexport function polyPackCountPoints(pack: PolyPack): number\n{\n let n = 0;\n polyPackEachRing(pack, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => { n += nPoints });\n return n;\n}\n\nexport function polyPacked(f: any): boolean\n{\n if (f == null) return false;\n if (f.offset !== undefined) return true;\n if (f.geometry !== undefined) return f.geometry.packed !== undefined;\n if (f.type === 'FeatureCollection' && f.features !== undefined && f.features.length > 0)\n return polyPacked(f.features[0]);\n return false;\n}\n\n// Convert to multi-polygon format if necessary\nexport function normalizeArcs(arcs: any): any\n{\n let d = Util.depthof(arcs);\n while (d < 4) { arcs = [arcs], d++ } // note that depth is n-1 compared to coords because leaf is just number, not [x,y]\n return arcs;\n}\n\nexport function countArcPolygons(arcs: any): number\n{\n arcs = normalizeArcs(arcs);\n return arcs.length;\n}\n\nexport function countArcRings(arcs: any, iPoly?: number): number\n{\n arcs = normalizeArcs(arcs);\n let r = 0;\n arcs.forEach((a: any, ip: number) => { if (iPoly === undefined || iPoly === ip) r += a.length })\n return r;\n}\n\nexport function countOneArcPoints(topo: any, ring: any): number\n{\n // for each ring\n let n = 0;\n ring.forEach((i: number, index: number) => {\n // for each arc\n let a = topo.arcs[i < 0 ? ~i : i];\n if (index > 0) n--;\n n += a.length;\n });\n if (n < 4) n = 4;\n return n;\n}\n\nexport function countArcPoints(topo: any, arcs: any, iPoly?: number): number\n{\n arcs = normalizeArcs(arcs);\n let npoints = 0;\n arcs.forEach((polygon: any, ip: number) => {\n if (iPoly === undefined || iPoly === ip)\n polygon.forEach((ring: any) => { npoints += countOneArcPoints(topo, ring) })\n });\n return npoints;\n}\n\n// This packs the TopoJSON arc format into a PolyPack. Basics:\n// 1) Negative indices indicate arc should be traversed backward.\n// 2) First and last point of sequential arcs are duplicated, so only include one instance. Easiest way\n// of implementing this (to match topojson implementation) is first delete last point.\n// 3) If total number of points < 4, duplicate the first point until you get 4 to meet GeoJSON standard.\n// 4) Can also request to pack just a single polygon of a multi-polygon\n//\nexport function polyPackTopoArcs(topo: any, arcs: any, iPoly?: number): PolyPack\n{\n if (topo == null || arcs == null || arcs.length == 0) return null;\n arcs = normalizeArcs(arcs);\n let nPoints = countArcPoints(topo, arcs, iPoly);\n if (nPoints == 0) return null;\n let nFloats = 2 + (2 * countArcRings(arcs, iPoly)) + (2 * nPoints);\n let ab = new ArrayBuffer(nFloats * 8);\n let prepack: PolyPack = { offset: 0, length: nFloats, buffer: new Float64Array(ab) };\n let af = prepack.buffer as Float64Array;\n let z = 0;\n af[z++] = iPoly === undefined ? countArcPolygons(arcs) : 1;\n z++; // spot for header size\n\n // Fill in header - number of rings in each polygon and number of points in each ring\n arcs.forEach((polygon: any, ip: number) => {\n if (iPoly === undefined || iPoly === ip)\n {\n af[z++] = polygon.length;\n polygon.forEach((ring: any) => af[z++] = countOneArcPoints(topo, ring));\n }\n });\n\n // go back and fill in header size\n af[1] = z;\n\n // now copy in the points\n arcs.forEach((polygon: any, ip: number) => {\n if (iPoly === undefined || iPoly === ip)\n polygon.forEach((ring: any) => {\n let b = z;\n ring.forEach((i: number, index: number) => {\n let a = topo.arcs[i < 0 ? ~i : i];\n if (index > 0) z -= 2;\n let n = a.length;\n let j;\n if (i < 0)\n for (j = n-1; j >= 0; j--) { let pt: any = a[j]; af[z++] = pt[0], af[z++] = pt[1] }\n else\n for (j = 0; j < n; j++) { let pt: any = a[j]; af[z++] = pt[0], af[z++] = pt[1] }\n });\n // need at least 4 points in each ring\n if (z != b)\n while (z < b+8) { af[z++] = af[b], af[z++] = af[b+1] }\n });\n });\n\n return prepack;\n}\n\nexport function polyPack(coords: any, prepack?: PolyPack): PolyPack\n{\n // Null feature?\n if (coords == null || (coords.length !== undefined && coords.length == 0)) return null;\n\n // Actually already a PolyPack?\n if (coords.offset !== undefined) return coords as PolyPack;\n\n // Packed feature?\n if (coords && coords.geometry && coords.geometry.packed !== undefined)\n return coords.geometry.packed as PolyPack;\n\n // Unpacked feature, grab the coordinates array\n if (coords && coords.geometry)\n coords = coords.geometry.coordinates;\n\n // Transparently handle polygon or multi-polygon\n let depth = Util.depthof(coords);\n if (depth == 3) coords = [ [ coords ] ];\n else if (depth == 4) coords = [ coords ];\n\n let nFloats = polyPackSize(coords);\n let i: number, j: number, k: number;\n let p: any, r: any;\n\n // Allocate typed buffer if not passed in\n if (prepack === undefined)\n {\n let ab = new ArrayBuffer(nFloats * 8);\n prepack = { offset: 0, length: nFloats, buffer: new Float64Array(ab) };\n }\n else\n {\n prepack = Util.shallowCopy(prepack);\n prepack.length = nFloats;\n }\n\n let af: Float64Array = prepack.buffer as Float64Array;\n\n // Fill in header\n let z: number = prepack.offset;\n af[z++] = coords.length;\n z++; // spot for header size\n for (i = 0; i < coords.length; i++)\n {\n p = coords[i];\n af[z++] = p.length;\n for (j = 0; j < p.length; j++)\n af[z++] = p[j].length;\n }\n\n // set header size back in header\n af[prepack.offset+1] = z - prepack.offset;\n\n // Fill in coords\n for (i = 0; i < coords.length; i++)\n {\n p = coords[i];\n for (j = 0; j < p.length; j++)\n {\n r = p[j];\n for (k = 0; k < r.length; k++)\n {\n af[z++] = r[k][0];\n af[z++] = r[k][1];\n }\n }\n }\n\n return prepack;\n}\n\nexport function polyPackCopy(coords: any): PolyPack\n{\n let pp = polyPack(coords);\n\n if (pp == null) return null;\n\n let copy: PolyPack = { offset: 0, length: pp.length, buffer: null };\n let ab = new ArrayBuffer(pp.length * 8);\n let afDst = new Float64Array(ab);\n copy.buffer = afDst;\n let afSrc = pp.buffer as Float64Array;\n for (let i = 0; i < pp.length; i++)\n afDst[i] = afSrc[i+pp.offset];\n return copy;\n}\n\nexport function polyUnpack(prepack: any): any\n{\n // Check if not packed\n if (prepack == null) return [];\n if (prepack.offset === undefined) return prepack;\n\n let i: number, j: number, k: number;\n let nPolys: number, nRings: number, nCoords: number;\n let p: any, r: any;\n let af: Float64Array = prepack.buffer as Float64Array;\n let coords: any = [];\n let h: number = prepack.offset as number;\n nPolys = af[h++];\n let z = af[h++] + prepack.offset; // start of coordinates\n for (i = 0; i < nPolys; i++)\n {\n p = [];\n coords[i] = p;\n nRings = af[h++];\n for (j = 0; j < nRings; j++)\n {\n r = [];\n p[j] = r;\n nCoords = af[h++];\n for (k = 0; k < nCoords; k++)\n r[k] = [ af[z++], af[z++] ];\n }\n }\n\n return coords.length > 1 ? coords : coords[0];\n}\n\nexport function featurePackSize(f: any): number\n{\n if (f && f.geometry && f.geometry.coordinates)\n return polyPackSize(f.geometry.coordinates);\n return 0;\n}\n\nexport function featurePack(f: any, prepack?: PolyPack): any\n{\n if (f && f.type === 'Feature')\n {\n if (f.geometry && f.geometry.coordinates)\n {\n f.geometry.packed = polyPack(f.geometry.coordinates, prepack);\n delete f.geometry.coordinates;\n }\n else if (f.geometry === undefined)\n {\n f.geometry = {}\n f.geometry.packed = prepack ? { offset: prepack.offset, length: 0, buffer: prepack.buffer } : { offset: 0, length: 0, buffer: null };\n }\n return f.geometry.packed;\n }\n else if (f.type && f.type === 'FeatureCollection' && f.features)\n {\n // Allocate one large buffer\n let nFloats: number = 0;\n let i: number;\n for (i = 0; i < f.features.length; i++)\n nFloats += featurePackSize(f.features[i]);\n let ab = new ArrayBuffer(nFloats * 8);\n prepack = { offset: 0, length: nFloats, buffer: new Float64Array(ab) };\n\n // Now pack\n for (i = 0; i < f.features.length; i++)\n {\n let postpack = featurePack(f.features[i], prepack);\n prepack.offset += postpack ? postpack.length : 0;\n }\n if (prepack.offset != nFloats)\n throw 'oops, packing bug';\n return prepack;\n }\n return null;\n}\n\nexport function featureUnpack(f: any): any\n{\n if (f && f.geometry && f.geometry.packed !== undefined)\n {\n f.geometry.coordinates = polyUnpack(f.geometry.packed);\n // Check for oops, optimized away the multipolygon in polyUnpack\n if (f.geometry.type === 'MultiPolygon' && Util.depthof(f.geometry.coordinates) === 4)\n f.geometry.coordinates = [ f.geometry.coordinates ];\n delete f.geometry.packed;\n }\n else if (f.type && f.type === 'FeatureCollection' && f.features)\n {\n for (let i: number = 0; i < f.features.length; i++)\n featureUnpack(f.features[i]);\n }\n return f;\n}\n\nexport type SavePack = WeakMap<any,any>;\n\nexport function featureUnpackTemporarily(f: any, save?: SavePack): SavePack\n{\n if (save === undefined) save = new WeakMap<any,any>();\n\n if (f && f.type === 'Feature')\n {\n if (f.geometry && f.geometry.packed)\n {\n save.set(f, f.geometry.packed);\n featureUnpack(f);\n }\n }\n else if (f.type && f.type === 'FeatureCollection' && f.features)\n {\n f.features.forEach((ff: any) => {\n if (ff.geometry && ff.geometry.packed)\n save.set(ff, ff.geometry.packed);\n });\n featureUnpack(f);\n }\n return save;\n}\n\nexport function featureRepack(f: any, save: SavePack): any\n{\n if (f && f.type === 'Feature')\n {\n if (f.geometry)\n {\n let packed = save.get(f);\n if (packed)\n {\n f.geometry.packed = packed;\n delete f.geometry.coordinates;\n }\n }\n }\n else if (f.type && f.type === 'FeatureCollection' && f.features)\n {\n f.features.forEach((ff: any) => featureRepack(ff, save));\n }\n return f;\n}\n\nexport function featurePackString(f: any): string\n{\n let packed = f.offset ? f : (f.geometry.packed ? f.geometry.packed : polyPack(f.geometry.coordinates));\n let af = packed.buffer as Float64Array;\n let a: string[] = [];\n for (let i: number = 0; i < packed.length; i++)\n a.push(String(af[i]));\n return a.join(' ');\n}\n\nexport function featureUnpackString(s: string): any\n{\n let a = s.split(' ');\n let ab = new ArrayBuffer(a.length * 8);\n let af = new Float64Array(ab);\n let i: number = 0;\n a.forEach((n: string) => { af[i++] = Number(n) });\n let f: any = { type: 'Feature', geometry: {type: 'Polygon', packed: { offset: 0, length: a.length, buffer: af } } };\n f = featureUnpack(f);\n if (Util.depthof(f.geometry.coordinates) === 5)\n f.geometry.type = 'MultiPolygon';\n return f;\n}\n","import * as Util from '../util/all';\nimport * as PP from './polypack';\n\n// Round feature geometry to 6 decimal precision\nexport function polyRound(o: any): any\n{\n if (o)\n {\n if (Array.isArray(o))\n {\n if (o.length && typeof o[0] === 'number')\n {\n for (let i = 0; i < o.length; i++)\n o[i] = Util.precisionRound(o[i], 6);\n }\n else\n o.forEach((e: any) => { polyRound(e) });\n }\n else if (o.features !== undefined && Array.isArray(o.features))\n o.features.forEach((f: any) => { polyRound(f) });\n else if (o.geometry !== undefined && o.geometry.coordinates !== undefined)\n polyRound(o.geometry.coordinates);\n else if (o.geometry !== undefined && o.geometry.packed !== undefined)\n PP.polyPackEachPoint(o.geometry.packed, (b: Float64Array, iPoly: number, iRing: number, iOffset: number) => {\n b[iOffset] = Util.precisionRound(b[iOffset], 6);\n b[iOffset+1] = Util.precisionRound(b[iOffset+1], 6);\n });\n }\n return o;\n}\n","import * as Util from '../util/all';\n\nimport { simplify } from './simplify';\n\nexport function polySimplify(poly: any, tolerance: number = 0.0001): void\n{\n if (poly == null) return;\n if (poly.geometry && poly.geometry.coordinates) poly = poly.geometry.coordinates;\n let depth = Util.depthof(poly);\n if (depth == 4)\n poly = [ poly ];\n else if (depth != 5)\n return;\n\n // Poly is multi-polygon, array of polygons\n for (let i: number = 0; i < poly.length; i++)\n {\n // p is polygon, array of rings, each ring is array of points which is what gets fed to underlying simplify routine.\n let p = poly[i];\n\n for (let j: number = 0; j < p.length; j++)\n p[j] = simplify(p[j], tolerance, true);\n }\n}\n","// Public libraries\nimport * as PC from 'polygon-clipping';\n\n// Shared libraries\nimport * as Util from '../util/all';\nimport * as FSM from '../fsm/all';\n\n// Local libraries\nimport * as Poly from './poly';\nimport * as PP from './polypack';\nimport * as BB from './boundbox';\nimport * as PR from './polyround';\n\nlet _union: any = undefined;\nlet anyPC: any = PC;\nif (anyPC.union) _union = anyPC.union;\nif (anyPC.default && anyPC.default.union) _union = anyPC.default.union;\nif (_union === undefined) throw 'Unable to load union function from polygon-clipping';\n\nexport interface WrappedPoly { box: BB.BoundBox, p: any };\n\nexport interface WorkDone\n{\n nUnion: number,\n nDifference: number,\n ms: number,\n}\n\nfunction featureCoords(feature: any): any\n{\n/*\n if (feature.geometry !== undefined)\n {\n if (feature.geometry.packed !== undefined)\n return PP.polyUnpack(feature.geometry.packed);\n else\n return feature.geometry.coordinates;\n }\n else if (feature.offset !== undefined)\n return PP.polyUnpack(feature);\n else\n return feature;\n*/\n if (feature.geometry !== undefined)\n {\n if (feature.geometry.packed !== undefined)\n return feature.geometry.packed;\n else\n return feature.geometry.coordinates;\n }\n else\n return feature;\n}\n\n// This function takes an array of packed or unpacked polygon/multipolygons and\n// returns an unpacked polygon/multipolygon coordinate array. Returns null if\n// handed an empty array.\n\nexport function unionPolys(polys: any[]): any\n{\n if (polys == null) return null;\n\n let cleanPolys: any[] = polys.filter((f: any) => f != null);\n if (cleanPolys.length == 0) return null;\n if (cleanPolys.length == 1) return PP.polyUnpack(cleanPolys[0]);\n cleanPolys = cleanPolys.map( (f: any) => PP.polyUnpack(f) );\n\n let poly: any = cleanPolys.pop();\n return PR.polyRound(_union(poly, ...cleanPolys));\n}\n\nexport interface QuadOptions\n{\n maxLeafCount?: number;\n maxDepth?: number;\n tickStep?: number;\n}\nexport const DefaultQuadOptions: QuadOptions = { maxLeafCount: 20, maxDepth: 20, tickStep: 1 };\n\nexport interface TickCounter { ticks: number };\n\n// Use geo orientation for t/b (that is, t > b)\nclass QuadLevel\n{\n options: QuadOptions;\n level: number;\n children: QuadLevel[];\n features: any[];\n box: BB.BoundBox;\n asyncUnion: any;\n\n constructor(options: QuadOptions, level: number, box: BB.BoundBox, features: WrappedPoly[])\n {\n this.options = options;\n this.level = level;\n this.box = box;\n if (features.length <= options.maxLeafCount || this.level >= options.maxDepth)\n {\n if (this.level >= options.maxDepth)\n throw `QuadTree: maximum depth of ${options.maxDepth} exceeded`;\n this.features = features.map((wp: WrappedPoly) => wp.p);\n this.children = null;\n }\n else\n {\n this.features = null;\n let cx = BB.boundboxCX(box);\n let cy = BB.boundboxCY(box);\n\n let tl: BB.BoundBox = { left: box.left, top: box.top, right: cx, bottom: cy };\n let tr: BB.BoundBox = { left: cx, top: box.top, right: box.right, bottom: cy };\n let bl: BB.BoundBox = { left: box.left, top: cy, right: cx, bottom: box.bottom };\n let br: BB.BoundBox = { left: cx, top: cy, right: box.right, bottom: box.bottom };\n let tlFeatures = [];\n let trFeatures = [];\n let blFeatures = [];\n let brFeatures = [];\n\n for (let i: number = 0; i < features.length; i++)\n {\n let f = features[i];\n\n if (this.featureInBox(tl, f))\n tlFeatures.push(f);\n else if (this.featureInBox(tr, f))\n trFeatures.push(f);\n else if (this.featureInBox(bl, f))\n blFeatures.push(f);\n else if (this.featureInBox(br, f))\n brFeatures.push(f);\n }\n this.children = [];\n this.children.push(new QuadLevel(options, level+1, tl, tlFeatures));\n this.children.push(new QuadLevel(options, level+1, tr, trFeatures));\n this.children.push(new QuadLevel(options, level+1, bl, blFeatures));\n this.children.push(new QuadLevel(options, level+1, br, brFeatures));\n this.asyncUnion = null;\n }\n }\n\n private featureInBox(box: BB.BoundBox, f: WrappedPoly): boolean\n {\n return BB.boundboxIntersects(box, f.box);\n }\n\n union(): any\n {\n if (this.asyncUnion == null)\n {\n if (this.children == null)\n this.asyncUnion = unionPolys(this.features);\n else\n this.asyncUnion = unionPolys(this.children.map((q: QuadLevel) => q.union()));\n }\n return this.asyncUnion;\n }\n\n get isempty(): boolean\n {\n return this.children == null && this.features.length == 0;\n }\n\n tickUnion(tickCounter: TickCounter): void\n {\n if (!this.isempty && this.asyncUnion == null)\n {\n if (this.children == null)\n {\n if (tickCounter.ticks != 0)\n {\n this.union();\n tickCounter.ticks--;\n }\n }\n else\n {\n for (let i: number = 0; i < this.children.length && tickCounter.ticks != 0; i++)\n this.children[i].tickUnion(tickCounter);\n\n // If tickCounter hasn't gone to zero, we fully computed children, go ahead and compute union here.\n if (tickCounter.ticks != 0)\n {\n this.union();\n tickCounter.ticks--;\n }\n }\n }\n }\n}\n\nexport class FsmQuadTree extends FSM.Fsm\n{\n quad: QuadLevel;\n asyncUnion: any;\n isempty: boolean;\n options: Poly.TickOptions;\n work: WorkDone;\n\n constructor(env: FSM.FsmEnvironment, options?: Poly.TickOptions, col?: any)\n {\n super(env);\n this.options = Util.shallowAssignImmutable(Poly.DefaultTickOptions, options);\n this.work = { nUnion: 0, nDifference: 0, ms: 0 };\n this.initialize(col);\n }\n\n initialize(col: any): void\n {\n this.quad = null;\n this.asyncUnion = undefined;\n this.isempty = true;\n\n if (col != null)\n {\n let features: any = col.features ? col.features : col;\n this.work.nUnion = features.length;\n this.isempty = features.length == 0;\n\n // Compute BoundBox for each feature\n let wrapped: WrappedPoly[] = features.map((f: any) => { return { box: BB.boundbox(f), p: featureCoords(f) } });\n\n let box = BB.boundbox(col);\n this.quad = new QuadLevel(this.options, 0, box, wrapped);\n }\n\n this.setState(this.isempty ? FSM.FSM_DONE : FSM.FSM_STARTING);\n }\n\n cancel(): any\n {\n this.quad = null;\n this.asyncUnion = undefined;\n this.isempty = true;\n this.setState(FSM.FSM_DONE);\n }\n\n get result(): any\n {\n if (this.asyncUnion === undefined && this.quad)\n this.asyncUnion = this.quad.union();\n return this.asyncUnion;\n }\n\n tick(): void\n {\n if (this.ready)\n {\n switch (this.state)\n {\n case FSM.FSM_STARTING:\n this.setState(FSM.FSM_PENDING);\n break;\n\n case FSM.FSM_PENDING:\n let tickCounter: TickCounter = { ticks: this.options.tickStep }\n let elapsed = new Util.Elapsed();\n if (!this.isempty && this.asyncUnion === undefined)\n {\n this.quad.tickUnion(tickCounter);\n if (tickCounter.ticks != 0)\n this.result;\n }\n this.work.ms += elapsed.ms();\n if (this.asyncUnion !== undefined)\n this.setState(FSM.FSM_DONE);\n else\n this.setState(FSM.FSM_PENDING);\n break;\n }\n }\n }\n}\n","import * as Util from '../util/all';\n\nimport * as P from './poly';\nimport * as PP from './polypack';\n\n// Given three colinear points p, q, r, the function checks if\n// point q lies on line segment 'pr'\nfunction onSegment(px: number, py: number, qx: number, qy: number, rx: number, ry: number): boolean\n{\n if (qx <= Math.max(px, rx) && qx >= Math.min(px, rx) &&\n qy <= Math.max(py, ry) && qy >= Math.min(py, ry))\n return true;\n\n return false;\n}\n\n// To find orientation of ordered triplet (p, q, r).\n// The function returns following values\n// 0 --> p, q and r are colinear\n// 1 --> Clockwise\n// 2 --> Counterclockwise\nfunction orientation(px: number, py: number, qx: number, qy: number, rx: number, ry: number): number\n{\n // See https://www.geeksforgeeks.org/orientation-3-ordered-points/\n // for details of below formula.\n let val: number = (qy - py) * (rx - qx) -\n (qx - px) * (ry - qy);\n\n if (val == 0) return 0; // colinear\n\n return (val > 0)? 1: 2; // clock or counterclock wise\n}\n\n// The main function that returns true if line segment 'p1q1'\n// and 'p2q2' intersect.\nfunction doIntersect(p1x: number, p1y: number, q1x: number, q1y: number, p2x: number, p2y: number, q2x: number, q2y: number): boolean\n{\n // closing segment is not intersection\n if (p1x - q2x + p1y - q2y === 0) return false;\n\n // Find the four orientations needed for general and\n // special cases\n let o1 = orientation(p1x, p1y, q1x, q1y, p2x, p2y);\n let o2 = orientation(p1x, p1y, q1x, q1y, q2x, q2y);\n let o3 = orientation(p2x, p2y, q2x, q2y, p1x, p1y);\n let o4 = orientation(p2x, p2y, q2x, q2y, q1x, q1y);\n\n // General case\n if (o1 != o2 && o3 != o4)\n return true;\n\n // Special Cases\n // p1, q1 and p2 are colinear and p2 lies on segment p1q1\n if (o1 == 0 && onSegment(p1x, p1y, p2x, p2y, q1x, q1y)) return true;\n\n // p1, q1 and q2 are colinear and q2 lies on segment p1q1\n if (o2 == 0 && onSegment(p1x, p1y, q2x, q2y, q1x, q1y)) return true;\n\n // p2, q2 and p1 are colinear and p1 lies on segment p2q2\n if (o3 == 0 && onSegment(p2x, p2y, p1x, p1y, q2x, q2y)) return true;\n\n // p2, q2 and q1 are colinear and q1 lies on segment p2q2\n if (o4 == 0 && onSegment(p2x, p2y, q1x, q1y, q2x, q2y)) return true;\n\n return false; // Doesn't fall in any of the above cases\n}\n\n// no extra storage, but brute-force O(N^2) in number of segments. See selfIntersectFast for better approach.\nexport function selfIntersect(poly: any): boolean\n{\n let pp = P.polyNormalize(poly);\n if (pp == null) return false;\n let bIntersect = false;\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n if (bIntersect) return;\n let iEnd = iOffset + ((nPoints-2) * 2);\n let jEnd = iOffset + ((nPoints-1) * 2);\n for (let i = iOffset; i < iEnd; i += 2)\n for (let j = i + 4; j < jEnd; j += 2)\n if (doIntersect(b[i], b[i+1], b[i+2], b[i+3], b[j], b[j+1], b[j+2], b[j+3]))\n {\n bIntersect = true;\n return;\n }\n });\n return bIntersect;\n}\n","import * as Util from '../util/all';\n\nimport * as P from './poly';\nimport * as PP from './polypack';\n\n// Adapted from rowanwins/shamos-hoey \n/*\nMIT License\n\nCopyright (c) 2019 Rowan Winsemius\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\n\n// External libraries\nimport TinyQueue from 'tinyqueue'\nimport SplayTree from 'splaytree'\n\nclass Event\n{\n x: number;\n y: number;\n otherEvent: Event;\n isLeftEndpoint: boolean | null;\n segment: Segment;\n\n constructor(x: number, y: number)\n {\n this.x = x\n this.y = y\n\n this.otherEvent = null\n this.isLeftEndpoint = null\n this.segment = null\n }\n\n isOtherEndOfSegment(eventToCheck: Event): boolean\n {\n return this === eventToCheck.otherEvent\n }\n\n isSamePoint(eventToCheck: Event): boolean\n {\n return this.x === eventToCheck.x && this.y === eventToCheck.y\n }\n\n isBelow(p: Event): boolean\n {\n return this.isLeftEndpoint ?\n signedArea(this, this.otherEvent, p) > 0 :\n signedArea(this.otherEvent, p, this) > 0\n }\n\n isAbove(p: Event): boolean\n {\n return !this.isBelow(p)\n }\n}\n\nclass EventQueue\n{\n tiny: TinyQueue<Event>;\n\n constructor()\n {\n this.tiny = new TinyQueue<Event>([], checkWhichEventIsLeft)\n }\n\n push(event: Event): void { this.tiny.push(event) }\n pop(): Event { return this.tiny.pop() as Event }\n get length(): number { return this.tiny.length }\n}\n\nclass Segment\n{\n leftSweepEvent: Event;\n rightSweepEvent: Event;\n segmentAbove: Segment;\n segmentBelow: Segment;\n\n constructor(event: Event)\n {\n this.leftSweepEvent = event\n this.rightSweepEvent = event.otherEvent\n this.segmentAbove = null\n this.segmentBelow = null\n\n event.segment = this\n event.otherEvent.segment = this\n }\n}\n\nclass SweepLine\n{\n tree: SplayTree<Segment>;\n\n constructor()\n {\n this.tree = new SplayTree<Segment>(compareSegments)\n }\n\n addSegment(event: Event): Segment\n {\n const seg = new Segment(event)\n const node: any = this.tree.insert(seg)\n const nextNode: any = this.tree.next(node)\n const prevNode: any = this.tree.prev(node)\n if (nextNode !== null)\n {\n seg.segmentAbove = nextNode.key\n seg.segmentAbove.segmentBelow = seg\n }\n if (prevNode !== null)\n {\n seg.segmentBelow = prevNode.key\n seg.segmentBelow.segmentAbove = seg\n }\n return node.key\n }\n\n findSegment(seg: Segment): Segment\n {\n const node: any = this.tree.find(seg)\n if (node === null) return null\n return node.key\n }\n\n removeSegmentFromSweepline(seg: Segment): void\n {\n const node: any = this.tree.find(seg)\n if (node === null) return\n const nextNode: any = this.tree.next(node)\n const prevNode: any = this.tree.prev(node)\n\n if (nextNode !== null)\n {\n const nextSeg = nextNode.key\n nextSeg.segmentBelow = seg.segmentBelow\n }\n if (prevNode !== null)\n {\n const prevSeg = prevNode.key\n prevSeg.segmentAbove = seg.segmentAbove\n }\n this.tree.remove(seg)\n }\n\n testIntersect(seg1: Segment, seg2: Segment): boolean\n {\n if (seg1 === null || seg2 === null) return false\n\n if (seg1.rightSweepEvent.isSamePoint(seg2.leftSweepEvent) ||\n seg1.rightSweepEvent.isSamePoint(seg2.rightSweepEvent) ||\n seg1.leftSweepEvent.isSamePoint(seg2.leftSweepEvent) ||\n seg1.leftSweepEvent.isSamePoint(seg2.rightSweepEvent)) return false\n\n const x1 = seg1.leftSweepEvent.x\n const y1 = seg1.leftSweepEvent.y\n const x2 = seg1.rightSweepEvent.x\n const y2 = seg1.rightSweepEvent.y\n const x3 = seg2.leftSweepEvent.x\n const y3 = seg2.leftSweepEvent.y\n const x4 = seg2.rightSweepEvent.x\n const y4 = seg2.rightSweepEvent.y\n\n const denom = ((y4 - y3) * (x2 - x1)) - ((x4 - x3) * (y2 - y1))\n const numeA = ((x4 - x3) * (y1 - y3)) - ((y4 - y3) * (x1 - x3))\n const numeB = ((x2 - x1) * (y1 - y3)) - ((y2 - y1) * (x1 - x3))\n\n if (denom === 0)\n {\n if (numeA === 0 && numeB === 0) return false\n return false\n }\n\n const uA = numeA / denom\n const uB = numeB / denom\n\n return (uA >= 0 && uA <= 1 && uB >= 0 && uB <= 1)\n }\n}\n\nfunction checkWhichEventIsLeft(e1: Event, e2: Event): number\n{\n if (e1.x > e2.x) return 1\n if (e1.x < e2.x) return -1\n\n if (e1.y !== e2.y) return e1.y > e2.y ? 1 : -1\n return 1\n}\n\nfunction compareSegments(seg1: Segment, seg2: Segment): number\n{\n if (seg1 === seg2) return 0\n\n if (signedArea(seg1.leftSweepEvent, seg1.rightSweepEvent, seg2.leftSweepEvent) !== 0 ||\n signedArea(seg1.leftSweepEvent, seg1.rightSweepEvent, seg2.rightSweepEvent) !== 0)\n {\n // If the segments share their left endpoints\n // use the right endpoint to sort\n if (seg1.leftSweepEvent.isSamePoint(seg2.leftSweepEvent)) return seg1.leftSweepEvent.isBelow(seg2.rightSweepEvent) ? -1 : 1\n\n // If the segments have different left endpoints\n // use the left endpoint to sort\n if (seg1.leftSweepEvent.x === seg2.leftSweepEvent.x) return seg1.leftSweepEvent.y < seg2.leftSweepEvent.y ? -1 : 1\n\n // If the line segment associated to e1 been inserted\n // into S after the line segment associated to e2 ?\n if (checkWhichEventIsLeft(seg1.leftSweepEvent, seg2.leftSweepEvent) === 1) return seg2.leftSweepEvent.isAbove(seg1.leftSweepEvent) ? -1 : 1\n\n // The line segment associated to e2 has been inserted\n // into S after the line segment associated to e1\n return seg1.leftSweepEvent.isBelow(seg2.leftSweepEvent) ? -1 : 1\n }\n\n return checkWhichEventIsLeft(seg1.leftSweepEvent, seg2.leftSweepEvent) === 1 ? 1 : -1\n}\n\nfunction runCheck(eventQueue: EventQueue): boolean\n{\n const sweepLine = new SweepLine()\n let currentSegment = null\n while (eventQueue.length)\n {\n const event = eventQueue.pop()\n\n if (event.isLeftEndpoint)\n {\n currentSegment = sweepLine.addSegment(event)\n if (sweepLine.testIntersect(currentSegment, currentSegment.segmentAbove)) return true\n if (sweepLine.testIntersect(currentSegment, currentSegment.segmentBelow)) return true\n }\n else\n {\n if (!event.segment) continue\n if (sweepLine.testIntersect(event.segment.segmentAbove, event.segment.segmentBelow)) return true\n sweepLine.removeSegmentFromSweepline(event.segment)\n }\n }\n return false\n}\n\nfunction signedArea(p0: any, p1: any, p2: any): number\n{\n return (p0.x - p2.x) * (p1.y - p2.y) - (p1.x - p2.x) * (p0.y - p2.y)\n}\n\nexport function selfIntersectFast(poly: any): boolean\n{\n let pp = P.polyNormalize(poly);\n if (pp == null) return false;\n\n // Fill queue\n let eventQueue = new EventQueue();\n PP.polyPackEachRing(pp, (b: Float64Array, iPoly: number, iRing: number, iOffset: number, nPoints: number) => {\n let iEnd = iOffset + (nPoints - 1) * 2; // iterating over segments so right before last point\n for (; iOffset < iEnd; iOffset += 2)\n {\n const e1 = new Event(b[iOffset], b[iOffset+1]);\n const e2 = new Event(b[iOffset+2], b[iOffset+3]);\n\n e1.otherEvent = e2\n e2.otherEvent = e1\n\n if (checkWhichEventIsLeft(e1, e2) > 0)\n {\n e2.isLeftEndpoint = true\n e1.isLeftEndpoint = false\n }\n else\n {\n e1.isLeftEndpoint = true\n e2.isLeftEndpoint = false\n }\n eventQueue.push(e1)\n eventQueue.push(e2)\n }\n });\n\n return runCheck(eventQueue)\n}\n","/*\n Adapted from:\n (c) 2017, Vladimir Agafonkin\n Simplify.js, a high-performance JS polyline simplification library\n mourner.github.io/simplify-js\n*/\n\nexport type Point = [ number, number];\n\n// square distance between 2 points\nfunction getSqDist(p1: Point, p2: Point): number\n{\n var dx = p1[0] - p2[0],\n dy = p1[1] - p2[1];\n\n return dx * dx + dy * dy;\n}\n\n// square distance from a point to a segment\nfunction getSqSegDist(p: Point, p1: Point, p2: Point): number\n{\n var x = p1[0],\n y = p1[1],\n dx = p2[0] - x,\n dy = p2[1] - y;\n\n if (dx !== 0 || dy !== 0) {\n\n var t = ((p[0] - x) * dx + (p[1] - y) * dy) / (dx * dx + dy * dy);\n\n if (t > 1) {\n x = p2[0];\n y = p2[1];\n\n } else if (t > 0) {\n x += dx * t;\n y += dy * t;\n }\n }\n\n dx = p[0] - x;\n dy = p[1] - y;\n\n return dx * dx + dy * dy;\n}\n\n\n// rest of the code doesn't care about point format\n\n// basic distance-based simplification\nfunction simplifyRadialDist(points: Point[], sqTolerance: number): Point[]\n{\n let prevPoint: Point = points[0],\n newPoints: Point[] = [prevPoint],\n point: Point;\n\n for (let i = 1, len = points.length; i < len; i++) {\n point = points[i];\n\n if (getSqDist(point, prevPoint) > sqTolerance) {\n newPoints.push(point);\n prevPoint = point;\n }\n }\n\n if (prevPoint !== point) newPoints.push(point);\n\n return newPoints;\n}\n\nfunction simplifyDPStep(points: Point[], first: number, last: number, sqTolerance: number, simplified: Point[]): void\n{\n let maxSqDist: number = sqTolerance,\n index: number;\n\n for (let i = first + 1; i < last; i++)\n {\n let sqDist = getSqSegDist(points[i], points[first], points[last]);\n\n if (sqDist > maxSqDist)\n {\n index = i;\n maxSqDist = sqDist;\n }\n }\n\n if (maxSqDist > sqTolerance)\n {\n if (index - first > 1) simplifyDPStep(points, first, index, sqTolerance, simplified);\n simplified.push(points[index]);\n if (last - index > 1) simplifyDPStep(points, index, last, sqTolerance, simplified);\n }\n}\n\n// simplification using Ramer-Douglas-Peucker algorithm\nfunction simplifyDouglasPeucker(points: Point[], sqTolerance: number): Point[]\n{\n let last: number = points.length - 1;\n\n let simplified: Point[] = [points[0]];\n simplifyDPStep(points, 0, last, sqTolerance, simplified);\n simplified.push(points[last]);\n\n return simplified;\n}\n\n// both algorithms combined for awesome performance\nexport function simplify(points: Point[], tolerance: number = 1, highestQuality: boolean = false): Point[]\n{\n if (tolerance == 0 || points.length <= 2)\n return points;\n\n let sqTolerance: number = tolerance * tolerance;\n\n points = highestQuality ? points : simplifyRadialDist(points, sqTolerance);\n points = simplifyDouglasPeucker(points, sqTolerance);\n\n return points;\n}\n","\n// Forked version that supports packing\nimport * as TopoClient from '@dra2020/topojson-client';\n// Forked version that fixes self-looping hole problem\nimport * as TopoServer from '@dra2020/topojson-server';\n// Forked version that fixes performance problem\nimport * as TopoSimplify from '@dra2020/topojson-simplify';\n\nimport * as Util from '../util/all';\nimport * as FSM from '../fsm/all';\n\nimport * as P from './poly';\nimport * as Q from './quad';\nimport * as PP from './polypack';\nimport * as PL from './polylabel';\nimport { selfIntersectFast } from './shamos';\n\nexport type Topo = any;\n\nfunction getGEOID(f: any): string\n{\n if (f.features && f.features.length) f = f.features[0];\n else if (Array.isArray(f)) f = f[0];\n if (f.properties.id !== undefined) return 'id';\n if (f.properties.GEOID !== undefined) return 'GEOID';\n if (f.properties.GEOID10 !== undefined) return 'GEOID10';\n}\n\nexport function topoFromCollection(col: any): Topo\n{\n if (col == null) return null;\n let save = PP.featureUnpackTemporarily(col);\n let prop = getGEOID(col);\n let objects: any = {};\n col.features.forEach((f: any) => objects[f.properties[prop]] = f);\n let topo = TopoServer.topology(objects);\n PP.featureRepack(col, save);\n if (col.datasets)\n (topo as any).datasets = col.datasets;\n return topo;\n}\n\nfunction ringsCancel(outerPoly: any, innerRing: any): boolean\n{\n if (outerPoly.length != 1) return false;\n let outerRing = outerPoly[0];\n if (outerRing.length !== innerRing.length) return false;\n let n = outerRing.length-1;\n let i = 0;\n for (; i <= n; i++, n--)\n if (! Util.shallowEqual(outerRing[i], innerRing[n]))\n return false;\n return true;\n}\n\nfunction correctGeometry(f: any): any\n{\n if (f && f.geometry && f.geometry.type === 'MultiPolygon' && f.geometry.coordinates)\n {\n let multiPoly = f.geometry.coordinates;\n\n /* Comment this out right now - might have been do to not rewinding merge output\n // topojson will under certain circumstances return a MultiPolygon with the first Polygon containing holes\n // that are precisely filled by a subsequent polygon. We make a secondary union pass to try to correct for this.\n // If we have a really degenerate multipolygon (test above some number of polygons) omit this expensive pass\n // since cleanup is unlikely.\n if (multiPoly.length > 1 && multiPoly.length < 50)\n {\n let result = Q.unionPolys(multiPoly);\n if (Util.depthof(result) == 4) result = [ result ];\n multiPoly = result;\n }\n */\n\n // Convert degenerate MultiPolygon to Polygon\n if (multiPoly.length == 1)\n {\n f.geometry.type = 'Polygon';\n f.geometry.coordinates = multiPoly[0];\n }\n }\n\n return f;\n}\n\nexport function topoContiguity(topo: Topo): any\n{\n let objects: any[] = Object.values(topo.objects);\n let geoid = getGEOID(objects);\n objects.forEach((o: any) => { o.properties.id = o.properties[geoid] });\n let neighbors = TopoClient.neighbors(objects, true);\n let result: any = {};\n result['OUT_OF_STATE'] = [];\n objects.forEach((o: any, i: number) => {\n result[o.properties.id] = neighbors[i].map((j: any) => {\n if (j >= 0)\n return objects[j].properties.id;\n else\n {\n result['OUT_OF_STATE'].push(o.properties.id);\n return 'OUT_OF_STATE';\n }\n });\n });\n return result;\n}\n\nexport function topoToFeature(topo: Topo, geoid: string): any\n{\n return correctGeometry(TopoClient.feature(topo, topo.objects[geoid]));\n}\n\nexport function topoToCollection(topo: Topo): any\n{\n let col: any = { type: 'FeatureCollection', features: [] };\n Object.keys(topo.objects).forEach((geoid: string) => {\n col.features.push(topoToFeature(topo, geoid));\n });\n if (topo.datasets) col.datasets = topo.datasets;\n return col;\n}\n\nfunction keepArcs(topo: any, arcs: any, keepweight: number): void\n{\n arcs.forEach((a: any) => {\n if (Array.isArray(a))\n keepArcs(topo, a, keepweight);\n else\n {\n let arc = topo.arcs[a < 0 ? ~a : a];\n arc.forEach((pt: any) => {\n if (pt[2] >= keepweight)\n pt[2] = Infinity;\n });\n }\n });\n}\n\nfunction fullFidelity(topo: any, arcs: any): boolean\n{\n let bFull = true;\n\n arcs.forEach((a: any) => {\n if (Array.isArray(a))\n bFull = bFull && fullFidelity(topo, a);\n else\n {\n let arc = topo.arcs[a < 0 ? ~a : a];\n arc.forEach((pt: any) => {\n if (bFull && pt[2] !== Infinity)\n bFull = false;\n });\n }\n });\n return bFull;\n}\n\nfunction misMatchPoly(p1: any, p2: any): boolean\n{\n if (p1 == null || p2 == null || p1.length != p2.length) return true;\n for (let i = 0; i < p1.length; i++)\n if (p1[i] == null || p2[i] == null) return true;\n return false;\n}\n\nfunction misMatchMulti(m1: any, m2: any): boolean\n{\n if (m1 == null || m2 == null || m1.length != m2.length) return true;\n for (let i = 0; i < m1.length; i++)\n if (misMatchPoly(m1[i], m2[i])) return true;\n return false;\n}\n\nfunction misMatchObject(o1: any, o2: any): boolean\n{\n if (o1 == null || o2 == null || o1.type !== o2.type) return true;\n return (o1.type === 'MultiPolygon') ? misMatchMulti(o1.arcs, o2.arcs) : misMatchPoly(o1.arcs, o2.arcs);\n}\n\nconst MAX_TRIES = 25;\n\nfunction bigTimeString(ms: number): string\n{\n let seconds = Math.trunc(ms / 1000);\n let minutes = Math.trunc(seconds / 60);\n seconds -= minutes * 60;\n return `${minutes}:${seconds < 10 ? '0' : ''}${seconds}`;\n}\n\nexport interface SimplifyOptions\n{\n minArea?: number,\n}\n\nconst DefaultSimplifyOptions: SimplifyOptions = { minArea: 500 };\n\n//\n// topoSimplifyCollection:\n// This implements our simplification strategy for block/precinct level shapes. The basic idea is to\n// ensure that all shapes generated at the block level have non-zero area and do not introduce self-crossing\n// edges. Since topological simplification happens at the edge level, self-crossing is a risk when opposite\n// edges make simplification decisions that cause the edges to cross. Crossing edges result in visual anomalies.\n// In addition, our basic strategy is that if we have well-formed block shapes, all other shape processing\n// (virtual features, precincts, counties, districts) can be done by fast merges that generate well-formed\n// shapes without holes, overlaps or crossing edges.\n// The strategy here is to first just do topological simplification at the default simplification level. We then\n// scan for problematic shapes (zero area, too thin and narrow or self-crossing) and keep additional points on\n// the edges (arcs) for those shapes, adding additional points on each iteration step until we have a good set.\n// For tiny shapes (zero area or short and thin) we just immediately say keep all points since these are mostly \n// shapes with a small number of points anyway.\n//\n\nexport function topoSimplifyCollection(col: any, options?: SimplifyOptions): any\n{\n options = Util.shallowAssignImmutable(DefaultSimplifyOptions, options);\n\n if (col == null) return null;\n let elapsedTotal = new Util.Elapsed();\n let elapsed = new Util.Elapsed();\n let topo = topoFromCollection(col);\n console.log(`topoSimplifyCollection: fromCollection: ${Math.round(elapsed.ms())}ms`);\n elapsed.start();\n topo = TopoSimplify.presimplify(topo, TopoSimplify['sphericalTriangleArea']);\n console.log(`topoSimplifyCollection: presimplify: ${Math.round(elapsed.ms())}ms`);\n elapsed.start();\n\n // Keep iterating on removing simplification from degenerate shapes\n let nTries = 1;\n let nBadLast = Number.MAX_VALUE;\n let keepweight = 1E-11;\n let nLabelTolerance = 1E-4;\n let minArea = options.minArea;\n let keepTiny = new WeakMap<any, any>();\n while (true)\n {\n let testtopo = TopoSimplify.simplify(topo, 1E-10);\n elapsed.start();\n let nBad = 0;\n let nTiny = 0;\n col.features.forEach((f: any) => {\n let oOld: any = topo.objects[f.properties.id];\n let oNew: any = testtopo.objects[f.properties.id];\n if (! keepTiny.has(f))\n {\n // Walk through each polygon of a multipolygon separately since I may have a large non-degenerate\n // shape combined with degenerate smaller shapes that I want to identify. I do not examine holes\n // separately under the assumption that holes will have matching polygons that would be identified\n // and would cause those shared edges (between the hole and the filling polygon) to be preserved if necessary.\n //\n // I do make a final pass of testing for self-intersection that looks at both polygon and hole edges.\n //\n let arcs = PP.normalizeArcs(oNew.arcs);\n let npoly = PP.countArcPolygons(arcs);\n let bDecided = false;\n let iPoly = 0;\n for (; !bDecided && iPoly < npoly; iPoly++)\n {\n let pp = PP.polyPackTopoArcs(testtopo, arcs, iPoly);\n P.polyRewindRings(pp);\n let a = P.polyArea(pp);\n if (a <= 0)\n {\n keepTiny.set(f, f);\n keepArcs(topo, oOld.arcs, 0); // keeps all points to avoid reprocessing these tiny shapes\n nBad++, nTiny++, bDecided = true;\n }\n else if (a < minArea)\n {\n let d = PL.polyLabel(pp);\n if (d.d < nLabelTolerance)\n {\n keepTiny.set(f, f);\n keepArcs(topo, oOld.arcs, 0); // keeps all points to avoid reprocessing these tiny shapes\n nBad++, nTiny++, bDecided = true;\n }\n }\n }\n if (! bDecided)\n {\n let pp = PP.polyPackTopoArcs(testtopo, arcs);\n if (selfIntersectFast(pp))\n {\n keepArcs(topo, oOld.arcs, keepweight);\n nBad++;\n }\n }\n }\n });\n console.log(`topoSimplifyCollection: pass ${nTries}: ${nBad} (${nTiny} tiny) of ${col.features.length} features are degenerate`);\n\n // If not making progress, keep more points\n if (nBad >= nBadLast)\n {\n keepweight /= 10;\n console.log(`topoSimplifyCollection: pass ${nTries}: reducing weight limit to ${keepweight}`);\n }\n nBadLast = nBad;\n\n if (nBad && nTries > MAX_TRIES)\n console.error(`topoSimplifyCollection: failed to finalize simplify down to zero degenerate features`);\n // If no bad block shapes, or finished trying, just return result\n if (nBad == 0 || nTries > MAX_TRIES)\n {\n col = topoToCollection(testtopo);\n break;\n }\n\n nTries++;\n }\n\n console.log(`topoSimplifyCollection: total elapsed time: ${bigTimeString(elapsedTotal.ms())}`);\n\n return col;\n}\n\nexport function topoMerge(topo: Topo, geoids: string[]): any\n{\n if (geoids == null || geoids.length == 0) return null;\n let objects: any[] = [];\n geoids.forEach((geoid) => objects.push(topo.objects[geoid]));\n let f: any = correctGeometry({ type: 'Feature', properties: {}, geometry: TopoClient.merge(topo, objects) });\n P.featureRewind(f);\n\n /* Comment out for now - may be due to merge output needing to be rewound\n // If I get a bad output from topoMerge, just do more expensive poly union. This can happen if input polygons\n // are a little funky (in particular, if they double back along the same edge.\n if (selfIntersectFast(f))\n {\n //console.log('topoMerge: patching selfIntersect');\n let polys: any[] = [];\n geoids.forEach((geoid) => polys.push(topoToFeature(topo, geoid).geometry.coordinates));\n let result = Q.unionPolys(polys);\n let depth = Util.depthof(result);\n if (depth === 5 && result.length === 1)\n {\n depth = 4;\n result = result[0];\n }\n f = { type: 'feature', properties: {}, geometry: { type: depth == 4 ? 'Polygon' : 'MultiPolygon', coordinates: result } };\n }\n */\n return f;\n}\n\nexport function topoMergeFeatures(topo: Topo, features: any[]): any\n{\n if (features == null || features.length == 0) return null;\n let prop = getGEOID(features);\n return topoMerge(topo, features.map(f => f.properties[prop]));\n}\n\nlet UniqueState = FSM.FSM_CUSTOM1;\nlet FSM_COMPUTING = UniqueState++;\n\nclass FsmIncrementalUnion extends FSM.Fsm\n{\n options: P.TickOptions;\n key: any;\n map: any; // { [geoid: string]: Feature }\n result: any;\n work: Q.WorkDone;\n\n constructor(env: FSM.FsmEnvironment, options: P.TickOptions, key: any, map?: any)\n {\n super(env);\n this.options = options;\n this.key = key;\n this.result = null;\n this.map = null;\n if (map) this.recompute(map);\n }\n\n matches(key: any): boolean\n {\n return Util.shallowEqual(this.key, key);\n }\n\n recompute(map: any): void\n {\n if (this.map != null && map != null && Util.shallowEqual(map, this.map))\n {\n this.work = { nUnion: 0, nDifference: 0, ms: 0 };\n }\n else if (map == null || Util.isEmpty(map))\n {\n this.work = { nUnion: 0, nDifference: 0, ms: 0 };\n this.result = null;\n this.map = map;\n }\n else\n {\n let values = Object.values(map);\n this.work = { nUnion: values.length, nDifference: 0, ms: 0 };\n let elapsed = new Util.Elapsed();\n this.result = topoMergeFeatures(this.key.topo, values);\n this.work.ms = elapsed.ms();\n this.map = map;\n }\n this.setState(FSM.FSM_DONE);\n }\n\n cancel(): void\n {\n this.result = null;\n this.map = null;\n this.setState(FSM.FSM_DONE);\n }\n\n tick(): void\n {\n if (this.ready)\n {\n switch (this.state)\n {\n case FSM.FSM_STARTING:\n // never initialized to do work (see recompute())\n this.setState(FSM.FSM_DONE);\n break;\n }\n }\n }\n}\n\nexport interface TopoUnionResult\n{\n key: any;\n poly: any;\n work: Q.WorkDone;\n}\n\nexport class FsmTopoUnion extends FSM.Fsm\n{\n options: P.TickOptions;\n unions: FsmIncrementalUnion[];\n work: Q.WorkDone;\n\n constructor(env: FSM.FsmEnvironment, options?: P.TickOptions)\n {\n super(env);\n this.options = Util.shallowAssignImmutable(P.DefaultTickOptions, options);\n this.unions = [];\n this.work = { nUnion: 0, nDifference: 0, ms: 0 };\n }\n\n get result(): TopoUnionResult[]\n {\n if (this.unions.length > 0 && this.state === FSM.FSM_DONE)\n return this.unions.map((i: FsmIncrementalUnion) => ({ key: i.key, poly: i.result, work: i.work }) );\n else\n return null;\n }\n\n cancel(): void\n {\n this.unions.forEach((i: FsmIncrementalUnion) => {\n i.cancel();\n });\n this.unions = [];\n this.setState(FSM.FSM_DONE);\n }\n\n cancelOne(key: any): void\n {\n for (let i = 0; i < this.unions.length; i++)\n {\n let u = this.unions[i];\n if (u.matches(key))\n {\n u.cancel();\n return;\n }\n }\n }\n\n recompute(key: any, map: any): void\n {\n let fsm: FsmIncrementalUnion = this.unions.find((i: FsmIncrementalUnion) => i.matches(key));\n if (fsm == null)\n {\n fsm = new FsmIncrementalUnion(this.env, this.options, key, map);\n this.unions.push(fsm);\n }\n else\n fsm.recompute(map);\n this.work = { nUnion: 0, nDifference: 0, ms: 0 };\n this.unions.forEach((u) => { this.work.nUnion += u.work.nUnion; this.work.nDifference += u.work.nDifference });\n this.waitOn(fsm);\n this.setState(FSM_COMPUTING);\n }\n\n tick(): void\n {\n if (this.ready)\n {\n switch (this.state)\n {\n case FSM.FSM_STARTING:\n case FSM_COMPUTING:\n if (this.unions) this.unions.forEach((u) => { this.work.ms += u.work.ms });\n this.setState(FSM.FSM_DONE);\n break;\n }\n }\n }\n}\n\nexport function topoPacked(topo: any): boolean\n{\n return topo.packed !== undefined;\n}\n\nexport function topoPack(topo: any): any\n{\n let tc = TopoClient;\n TopoClient.packArcs(topo);\n TopoClient.packArcIndices(topo);\n return topo;\n}\n\nexport function topoUnpack(topo: any): any\n{\n TopoClient.unpackArcs(topo);\n TopoClient.unpackArcIndices(topo);\n return topo;\n}\n","import * as PC from 'polygon-clipping';\n\nimport * as Util from '../util/all';\nimport * as FSM from '../fsm/all';\n\nimport * as Poly from './poly';\nimport * as Q from './quad';\nimport * as PP from './polypack';\nimport * as PR from './polyround';\n\n// Confusion on how polygon-clipping exposes its interface - be flexible\nlet _union: any = undefined;\nlet _difference: any = undefined;\nlet _intersection: any = undefined;\nlet anyPC: any = PC;\nif (anyPC.union) _union = anyPC.union;\nelse if (anyPC.default && anyPC.default.union) _union = anyPC.default.union;\nif (_union === undefined) throw 'Unable to load union function from polygon-clipping';\nif (anyPC.difference) _difference = anyPC.difference;\nelse if (anyPC.default && anyPC.default.difference) _difference = anyPC.default.difference;\nif (_difference === undefined) throw 'Unable to load difference function from polygon-clipping';\nif (anyPC.intersection) _intersection = anyPC.intersection;\nelse if (anyPC.default && anyPC.default.intersection) _intersection = anyPC.default.intersection;\nif (_intersection === undefined) throw 'Unable to load intersection function from polygon-clipping';\n\nconst FSM_COMPUTING = FSM.FSM_CUSTOM1;\n\nfunction unpackCoords(buffer: Float64Array, offset: number, nPoints: number): any\n{\n let c: any[] = [];\n\n let end = offset + nPoints*2;\n for (; offset < end; offset += 2)\n c.push([buffer[offset], buffer[offset+1]]);\n return [ c ];\n}\n\nexport function polyIntersects(p1: any, p2: any): boolean\n{\n let pp1 = Poly.polyNormalize(p1);\n let pp2 = Poly.polyNormalize(p2);\n let bIntersects: boolean = false;\n\n PP.polyPackEachRing(pp1, (buffer1: Float64Array, iPoly1: number, iRing1: number, iOffset1: number, nPoints1: number) => {\n if (iRing1 == 0)\n {\n let c1 = unpackCoords(buffer1, iOffset1, nPoints1);\n PP.polyPackEachRing(pp2, (buffer2: Float64Array, iPoly2: number, iRing2: number, iOffset2: number, nPoints2: number) => {\n if (iRing2 == 0)\n {\n let c2 = unpackCoords(buffer2, iOffset2, nPoints2);\n let result = _intersection(c1, c2);\n if (result && result.length > 0)\n bIntersects = true; \n }\n });\n }\n });\n return bIntersects;\n}\n\nclass FsmDifference extends FSM.Fsm\n{\n accum: any;\n polys: any[];\n work: Q.WorkDone;\n\n constructor(env: FSM.FsmEnvironment, accum?: any, polys?: any[])\n {\n super(env);\n this.work = { nUnion: 0, nDifference: 0, ms: 0 };\n this.initialize(accum, polys);\n }\n\n initialize(accum: any, polys: any[])\n {\n this.accum = accum;\n this.polys = polys;\n if (polys == null || polys.length == 0)\n this.setState(FSM.FSM_DONE);\n else\n {\n this.work.nDifference = polys.length;\n this.setState(FSM.FSM_STARTING);\n }\n }\n\n cancel(): void\n {\n this.accum = null;\n this.polys = null;\n this.setState(FSM.FSM_DONE);\n }\n\n get result(): any\n {\n return this.accum;\n }\n\n tick(): void\n {\n if (this.ready)\n {\n switch (this.state)\n {\n case FSM.FSM_STARTING:\n if (this.polys == null)\n this.setState(FSM.FSM_DONE);\n else\n this.setState(FSM_COMPUTING);\n break;\n\n case FSM_COMPUTING:\n let elapsed = new Util.Elapsed();\n this.accum = PR.polyRound(_difference(this.accum, this.polys));\n this.work.ms = elapsed.ms();\n this.polys = null;\n this.setState(FSM.FSM_DONE);\n break;\n }\n }\n }\n}\n\nconst FSM_UNION = FSM.FSM_CUSTOM1;\nconst FSM_DIFFERENCE = FSM.FSM_CUSTOM2;\n\nfunction coords(f: any): any\n{\n return (f.geometry !== undefined) ? (f.geometry.packed !== undefined ? f.geometry.packed : f.geometry.coordinates) : f;\n}\n\nclass FsmIncrementalUnion extends FSM.Fsm\n{\n options: Poly.TickOptions;\n key: any;\n map: any; // { [geoid: string]: Feature }\n result: any;\n lastCompleteMap: any;\n lastCompleteResult: any;\n toSub: any[];\n fsmUnion: Q.FsmQuadTree;\n fsmDifference: FsmDifference;\n work: Q.WorkDone;\n\n constructor(env: FSM.FsmEnvironment, options: Poly.TickOptions, key: any, map?: any)\n {\n super(env);\n this.options = options;\n this.key = key;\n this.result = null;\n this.map = null;\n this.lastCompleteResult = null;\n this.lastCompleteMap = null;\n this.toSub = null;\n this.fsmUnion = null;\n this.fsmDifference = null;\n if (map) this.recompute(map);\n }\n\n matches(key: any): boolean\n {\n return Util.shallowEqual(this.key, key);\n }\n\n recompute(map: any): void\n {\n // If a computation is in progress, just cancel and restart\n if (this.fsmUnion)\n {\n this.fsmUnion.cancel();\n this.fsmUnion = null;\n this.result = this.lastCompleteResult;\n this.map = this.lastCompleteMap;\n }\n if (this.fsmDifference)\n {\n this.fsmDifference.cancel();\n this.fsmDifference = null;\n this.result = this.lastCompleteResult;\n this.map = this.lastCompleteMap;\n }\n\n let polys: any[] = [];\n if (this.result == null || Util.isEmpty(map))\n {\n // Starting from scratch\n this.toSub = null;\n for (let id in map) if (map.hasOwnProperty(id))\n polys.push(coords(map[id]));\n }\n else\n {\n // We have the result of a previous computation - compute a difference since we assume\n // that is cheaper (often only one or two polygons added or removed).\n let id: string;\n\n // To add (polygons in new map did not occur in old map)\n polys.push(this.result);\n this.result = null;\n for (id in map) if (map.hasOwnProperty(id) && this.map[id] === undefined)\n polys.push(coords(map[id]));\n\n // To sub\n this.toSub = [];\n for (id in this.map) if (this.map.hasOwnProperty(id) && map[id] === undefined)\n {\n let c = PP.polyUnpack(coords(this.map[id]));\n if (Util.depthof(c) === 5)\n for (let i: number = 0; i < c.length; i++)\n this.toSub.push(c[i]);\n else\n this.toSub.push(c);\n }\n if (this.toSub.length == 0)\n this.toSub = null;\n }\n\n // Short-circuit when no work to be done\n if (polys.length == 1 && this.toSub == null && this.lastCompleteResult)\n {\n this.work = { nUnion: 0, nDifference: 0, ms: 0 };\n this.result = this.lastCompleteResult;\n this.map = this.lastCompleteMap;\n this.setState(FSM.FSM_DONE);\n }\n else\n {\n this.work = { nUnion: polys.length - 1, nDifference: this.toSub ? this.toSub.length : 0, ms: 0 };\n this.fsmUnion = new Q.FsmQuadTree(this.env, this.options, polys);\n this.waitOn(this.fsmUnion);\n this.setState(FSM_UNION);\n this.map = map;\n }\n }\n\n cancel(): void\n {\n if (this.fsmUnion)\n {\n this.fsmUnion.cancel();\n this.fsmUnion = null;\n }\n if (this.fsmDifference)\n {\n this.fsmDifference.cancel();\n this.fsmDifference = null;\n }\n this.result = null;\n this.map = null;\n this.lastCompleteResult = null;\n this.lastCompleteMap = null;\n this.setState(FSM.FSM_DONE);\n }\n\n tick(): void\n {\n if (this.ready)\n {\n switch (this.state)\n {\n case FSM.FSM_STARTING:\n // never initialized to do work (see recompute())\n this.setState(FSM.FSM_DONE);\n break;\n\n case FSM_UNION:\n if (this.fsmUnion)\n this.work.ms += this.fsmUnion.work.ms;\n this.fsmDifference = new FsmDifference(this.env, this.fsmUnion.result, this.toSub);\n this.waitOn(this.fsmDifference);\n this.toSub = null;\n this.fsmUnion = null;\n this.setState(FSM_DIFFERENCE);\n break;\n\n case FSM_DIFFERENCE:\n this.result = this.fsmDifference.result;\n this.work.ms += this.fsmDifference.work.ms;\n this.lastCompleteResult = this.result;\n this.lastCompleteMap = this.map;\n this.fsmDifference = null;\n this.setState(FSM.FSM_DONE);\n break;\n }\n }\n }\n}\n\nexport interface UnionResult\n{\n key: any;\n poly: any;\n work: Q.WorkDone;\n}\n\nexport class FsmUnion extends FSM.Fsm\n{\n options: Poly.TickOptions;\n unions: FsmIncrementalUnion[];\n work: Q.WorkDone;\n\n constructor(env: FSM.FsmEnvironment, options?: Poly.TickOptions)\n {\n super(env);\n this.options = Util.shallowAssignImmutable(Poly.DefaultTickOptions, options);\n this.unions = [];\n this.work = { nUnion: 0, nDifference: 0, ms: 0 };\n }\n\n get result(): UnionResult[]\n {\n if (this.unions.length > 0 && this.state === FSM.FSM_DONE)\n return this.unions.map((i: FsmIncrementalUnion) => ({ key: i.key, poly: i.result, work: i.work }) );\n else\n return null;\n }\n\n cancel(): void\n {\n this.unions.forEach((i: FsmIncrementalUnion) => {\n i.cancel();\n });\n this.unions = [];\n this.setState(FSM.FSM_DONE);\n }\n\n cancelOne(key: any): void\n {\n for (let i = 0; i < this.unions.length; i++)\n {\n let u = this.unions[i];\n if (u.matches(key))\n {\n u.cancel();\n return;\n }\n }\n }\n\n recompute(key: any, map: any): void\n {\n let fsm: FsmIncrementalUnion = this.unions.find((i: FsmIncrementalUnion) => i.matches(key));\n if (fsm == null)\n {\n fsm = new FsmIncrementalUnion(this.env, this.options, key, map);\n this.unions.push(fsm);\n }\n else\n fsm.recompute(map);\n this.work = { nUnion: 0, nDifference: 0, ms: 0 };\n this.unions.forEach((u) => { this.work.nUnion += u.work.nUnion; this.work.nDifference += u.work.nDifference });\n this.waitOn(fsm);\n this.setState(FSM_COMPUTING);\n }\n\n tick(): void\n {\n if (this.ready)\n {\n switch (this.state)\n {\n case FSM.FSM_STARTING:\n case FSM_COMPUTING:\n if (this.unions) this.unions.forEach((u) => { this.work.ms += u.work.ms });\n this.setState(FSM.FSM_DONE);\n break;\n }\n }\n }\n}\n","export * from './env';\nexport * from './storage';\nexport * from './datablob';\nexport * from './splitsblob';\n","// Shared libraries\nimport * as Util from '../util/all';\nimport * as Context from '../context/all';\nimport * as LogAbstract from '../logabstract/all';\nimport * as FSM from '../fsm/all';\n\n// App libraries\nimport { Environment } from './env';\nimport * as Storage from './storage';\n\nexport class DataBlob extends Storage.StorageBlob\n{\n constructor(env: Environment, params: Storage.BlobParams)\n {\n if (params.bucket == null) params.bucket = env.context.xflag('production') ? 'data' : 'data-dev';\n super(env, params);\n }\n\n get env(): Environment { return this._env as Environment; }\n\n get json(): any { return this.params.loadTo }\n\n static createForJSON(env: Environment, id: string): DataBlob\n {\n let blob = new DataBlob(env, { id: id, loadToType: 'object' });\n blob.startLoad(env.storageManager);\n return blob;\n }\n\n static createForStream(env: Environment, id: string, bucket?: string): DataBlob\n {\n let blob = new DataBlob(env, { id: id, bucket: bucket, loadToType: 'stream' });\n blob.startLoad(env.storageManager);\n return blob;\n }\n}\n","// Node\nimport * as zlib from 'zlib';\n\n// Shared libraries\nimport * as Context from '../context/all';\nimport * as LogAbstract from '../logabstract/all';\nimport * as FSM from '../fsm/all';\n\n// App libraries\nimport { Environment } from './env';\nimport * as Storage from './storage';\n\nexport class SplitsBlob extends Storage.StorageBlob\n{\n ls: { [key: string]: Storage.BlobProperties };\n\n constructor(env: Environment, params: Storage.BlobParams)\n {\n if (params.bucket === undefined) params.bucket = env.context.xflag('production') ? 'splits' : 'splits-dev';\n super(env, params);\n }\n\n get env(): Environment { return this._env as Environment; }\n\n get collection(): any { return this.params.loadTo }\n\n static createForLs(env: Environment): SplitsBlob\n {\n let blob = new SplitsBlob(env, { id: '' });\n blob.startList(env.storageManager);\n new FSM.FsmOnDone(env, blob.fsmList, (f: FSM.Fsm) => {\n if (! f.iserror)\n {\n blob.ls = {};\n blob.keys.forEach((k: string, i: number) => { blob.ls[k] = blob.props[i] });\n }\n });\n return blob;\n }\n\n static createForUpload(env: Environment, id: string, collection: any): SplitsBlob\n {\n let params: Storage.BlobParams = {\n id: id,\n saveFromType: 'object',\n saveFrom: collection,\n ContentEncoding: 'gzip',\n ContentType: 'application/json',\n CacheControl: 'no-cache'\n };\n let blob = new SplitsBlob(env, params);\n blob.setDirty();\n blob.checkSave(env.storageManager);\n return blob;\n }\n\n static createForDownload(env: Environment, id: string): SplitsBlob\n {\n let blob = new SplitsBlob(env, { id: id, loadToType: 'object' });\n blob.startLoad(env.storageManager);\n return blob;\n }\n}\n","// Node libraries\nimport * as stream from 'stream';\n\n// Shared libraries\nimport * as Util from '../util/all';\nimport * as Context from '../context/all';\nimport * as FSM from '../fsm/all';\nimport * as LogAbstract from '../logabstract/all';\n\nimport { Environment } from './env';\n\nexport const ESuccess: number = 0;\nexport const EFail: number = 1;\nexport const ENotFound: number = 2;\nexport const EPending: number = 3;\nexport const EBadFormat: number = 4;\n\nexport type StorageState = number;\nexport const StorageStateClean = 0;\nexport const StorageStateDirty = 1;\nexport const StorageStateSaving = 2;\nexport const StorageStateLoading = 4;\nexport const StorageStateLoadCanceled = 8;\nexport const StorageStateLoadFailed = 16;\nexport const StorageStateDeleting = 32;\nexport const StorageStateDeleted = 64;\nexport const StorageStateListing = 128;\n\nconst StorageContextDefaults: Context.ContextValues = { StorageRetryDelay: 60000 };\n\nexport type BucketMap = { [key: string]: string };\nexport const BucketDefault = \"default\";\nexport const BucketDev = \"development\";\nexport const BucketProd = \"production\";\nexport const BucketLogs = \"logs\";\n\nexport type TransferUrlOp = 'putObject' | 'getObject';\n\nexport interface TransferParams\n{\n op: TransferUrlOp;\n contentType?: string;\n}\n\n// Where does the source data for save come from?\nexport type DispositionType = 'object' | 'string' | 'buffer' | 'stream' | 'filepath';\nexport type LoadToFilter = (blob: StorageBlob, a: any) => any;\n\nexport interface BlobParams\n{\n id: string;\n bucket?: string;\n saveFromType?: DispositionType;\n saveFrom?: any;\n loadToType?: DispositionType;\n loadTo?: any;\n loadToFilter?: LoadToFilter;\n deleteAfterLoad?: boolean;\n suppressDeleteError?: boolean;\n ContentEncoding?: string; // 'gzip' only\n ContentType?: string; // 'application/json' or 'application/octet-stream'\n CacheControl?: string; // 'no-cache' or 'max-age=14400'\n}\n\nexport class FsmTransferUrl extends FSM.Fsm\n{\n bucket: string;\n key: string;\n params: TransferParams;\n url: string;\n\n constructor(env: Environment, bucket: string, params: TransferParams)\n {\n super(env);\n this.bucket = bucket;\n this.params = Util.shallowAssignImmutable({ contentType: 'text/plain; charset=UTF-8' }, params);\n this.key = Util.createGuid();\n this.url = undefined;\n }\n}\n\nexport interface BlobProperties\n{\n Key?: string;\n ContentLength?: number;\n ContentDisposition?: string;\n ContentEncoding?: string;\n ContentType?: string;\n ContentLanguage?: string;\n LastModified?: string;\n ETag?: string;\n}\n\nexport interface MultiBufferList\n{\n buf: Buffer;\n next: MultiBufferList;\n}\n\nexport class MultiBufferPassThrough extends stream.Duplex\n{\n _dopush: boolean;\n _head: MultiBufferList;\n _tail: MultiBufferList;\n\n constructor()\n {\n super({});\n this._dopush = false;\n this._head = null;\n this._tail = null;\n }\n\n _read(): void\n {\n this._dopush = true;\n this._dopushing();\n }\n\n _dopushing(): void\n {\n while (this._dopush && this._head)\n {\n this._dopush = this.push(this._head.buf);\n this._head = this._head.next;\n if (this._head == null)\n this._tail = null;\n }\n }\n\n _pushChunk(chunk: any): void\n {\n let tail: MultiBufferList = { buf: chunk as Buffer, next: null };\n if (this._head == null)\n this._head = tail;\n else\n this._tail.next = tail;\n this._tail = tail;\n this._dopushing();\n }\n\n _write(chunk: any, encoding: string, cb: any): void\n {\n if (! Buffer.isBuffer(chunk)) throw 'MultiBufferPassThrough only supports writing Buffer type';\n this._pushChunk(chunk);\n cb(null);\n }\n\n _done(): void\n {\n this._pushChunk(null);\n }\n\n _flush(cb: any): void\n {\n this._read();\n cb();\n }\n\n _transform(chunk: any, encoding: string, cb: any): void\n {\n this._write(chunk, encoding, cb);\n }\n}\n\nexport class StorageBlob\n{\n _env: Environment;\n params: BlobParams;\n state: StorageState;\n tStarted: Date;\n fsmSave: FSM.Fsm;\n fsmLoad: FSM.Fsm;\n fsmDel: FSM.Fsm;\n fsmList: FSM.Fsm;\n _props: FSM.FsmArray;\n _keys: FSM.FsmArray;\n\n constructor(env: Environment, params: BlobParams)\n {\n this._env = env;\n this.params = Util.shallowCopy(params);\n this.env.context.setDefaults(StorageContextDefaults);\n if (this.params.bucket == null) this.params.bucket = 'default';\n this.state = StorageStateClean;\n this.tStarted = null;\n this.fsmSave = new FSM.Fsm(this.env);\n this.fsmSave.setState(FSM.FSM_DONE);\n this.fsmLoad = new FSM.Fsm(this.env);\n this.fsmLoad.setState(FSM.FSM_DONE);\n this.fsmDel = new FSM.Fsm(this.env);\n this.fsmDel.setState(FSM.FSM_DONE);\n this.fsmList = new FSM.Fsm(this.env);\n this.fsmList.setState(FSM.FSM_DONE);\n this._keys = new FSM.FsmArray(env);\n this._props = new FSM.FsmArray(env);\n }\n\n get env() { return this._env; }\n\n // For listings, wait on fsmArray to get partial results, call resetList to reset fsmArray for next chunk, fsmList marked done at end.\n // Or just wait for fsmList to get all results at once.\n get keys(): string[] { return this._keys.a as string[] }\n get props(): BlobProperties[] { return this._props.a as BlobProperties[] }\n resetList(): void { this._keys.reset(); this._props.reset() }\n get fsmArray(): FSM.Fsm { return this._keys }\n\n setSaveFrom(t: DispositionType, data: any): void\n {\n this.params.saveFromType = t;\n this.params.saveFrom = data;\n }\n\n setLoadTo(t: DispositionType): void\n {\n this.params.loadToType = t;\n }\n\n needSave(): boolean\n {\n if (this.state == StorageStateDirty)\n return true;\n if (this.state == StorageStateClean)\n return false;\n\n if (this.isDirty() && this.isSaving())\n {\n let now = new Date();\n return now.getTime() - this.tStarted.getTime() > this.env.context.xnumber('StorageRetryDelay');\n }\n\n // Not loaded, either not yet, or load failed\n return false;\n }\n\n isSaving(): boolean\n {\n return (this.state & StorageStateSaving) != 0;\n }\n\n isLoading(): boolean\n {\n return (this.state & StorageStateLoading) != 0;\n }\n\n isListing(): boolean\n {\n return (this.state & StorageStateListing) != 0;\n }\n\n setListing(): void\n {\n this.state |= StorageStateListing;\n this.fsmList.setState(FSM.FSM_PENDING);\n }\n\n setListed(): void\n {\n this.state &= ~StorageStateListing;\n // Don't set fsmList to DONE here - do in endList since we may continue listing\n }\n\n isDeleting(): boolean\n {\n return (this.state & StorageStateDeleting) != 0;\n }\n\n isDeleted(): boolean\n {\n return (this.state & StorageStateDeleted) != 0;\n }\n\n isLoadFailed(): boolean\n {\n return (this.state & StorageStateLoadFailed) != 0;\n }\n\n isValid(): boolean\n {\n return !(this.isLoading() || this.isLoadFailed() || this.isDeleting() || this.isDeleted());\n }\n\n isReadable(): boolean\n {\n return !(this.isLoading() || this.isDeleting() || this.isDeleted());\n }\n\n isDirty(): boolean\n {\n return (this.state & StorageStateDirty) != 0;\n }\n\n isSafeToUnload(): boolean\n {\n return !this.isLoading() && !this.isDirty() && !this.isSaving();\n }\n\n setDirty(): void\n {\n if ((this.state & StorageStateLoading) != 0)\n {\n this.env.log.error('storage: object being set dirty while loading');\n }\n this.state |= StorageStateDirty;\n }\n\n setInit(): void\n {\n // Only used to allow auto-initialization for debugging\n this.state = StorageStateClean;\n }\n\n setLoading(): void\n {\n if (this.isDirty())\n {\n this.env.log.error('storage: object already dirty when getting loaded');\n }\n this.state |= StorageStateLoading;\n this.tStarted = new Date();\n this.fsmLoad.setState(FSM.FSM_PENDING);\n }\n\n setLoaded(result: number): void\n {\n if (this.isDirty())\n {\n this.env.log.error('storage: object already dirty when load finished');\n }\n if (result == ESuccess)\n this.state = StorageStateClean;\n else\n this.state = StorageStateLoadFailed;\n this.fsmLoad.setState(result === ESuccess ? FSM.FSM_DONE : FSM.FSM_ERROR);\n }\n\n setSaving(): void\n {\n this.state = StorageStateSaving;\n this.tStarted = new Date();\n this.fsmSave.setState(FSM.FSM_PENDING);\n }\n\n setSaved(result: number): void\n {\n if (result == ESuccess && this.state == StorageStateSaving)\n this.state = StorageStateClean;\n else\n this.state = StorageStateDirty;\n this.tStarted = null;\n this.fsmSave.setState(result === ESuccess ? FSM.FSM_DONE : FSM.FSM_ERROR);\n }\n\n setDeleting(): void\n {\n this.state |= StorageStateDeleting;\n this.fsmDel.setState(FSM.FSM_PENDING);\n }\n\n setDeleted(result: number): void\n {\n if (result == ESuccess)\n this.state |= StorageStateDeleted;\n else\n this.env.log.error('storage: delete failed');\n this.state &= ~StorageStateDeleting;\n\n // Supports fire-and-forget\n if (this.params.suppressDeleteError)\n result = ESuccess;\n this.fsmDel.setState(result === ESuccess ? FSM.FSM_DONE : FSM.FSM_ERROR);\n }\n\n startLoad(sm: StorageManager): void\n {\n sm.load(this);\n }\n\n startHead(sm: StorageManager): void\n {\n sm.head(this);\n this.fsmList.setState(FSM.FSM_PENDING); // result fsmList for head request, results show up in props\n }\n\n checkSave(sm: StorageManager): void\n {\n if (this.needSave())\n {\n if (this.isSaving())\n {\n this.env.log.event('storage: save overlaps');\n }\n sm.save(this);\n }\n }\n\n startDelete(sm: StorageManager): void\n {\n if (this.isDeleting())\n {\n this.env.log.error('storage: attempt to delete while deleting');\n }\n else\n sm.del(this);\n }\n\n endSave(br: BlobRequest): void\n {\n // fsmSave triggered by setSaved\n }\n\n endLoad(br: BlobRequest): void\n {\n if (this.params.loadToType === undefined)\n throw 'endLoad: loadToType must be set';\n\n if (br.result() == ESuccess)\n {\n switch (this.params.loadToType)\n {\n case 'stream':\n // No work here, processing happened in stream handlers\n break;\n case 'buffer':\n this.params.loadTo = br.asBuffer(); // automatically uncompressed if necessary\n break;\n case 'string':\n this.params.loadTo = br.asString(); // automatically uncompressed if necessary\n break;\n case 'object':\n {\n try\n {\n this.params.loadTo = JSON.parse(br.asString());\n }\n catch(err)\n {\n this.env.log.error('storage: could not parse JSON');\n this.fsmLoad.setState(FSM.FSM_ERROR);\n }\n }\n break;\n case 'filepath':\n throw 'endLoad: filepath is not a supported value for loadTo';\n break;\n }\n\n if (this.params.loadToFilter)\n this.params.loadTo = this.params.loadToFilter(this, this.params.loadTo);\n }\n\n // Support auto-delete behavior\n if (this.params.deleteAfterLoad)\n this.startDelete(this.env.storageManager);\n }\n\n endHead(br: BlobRequest): void\n {\n if (br.result() == ESuccess)\n {\n let a = br.asProps();\n if (a && a.length > 0)\n this.props.push(a[0]);\n }\n this.fsmList.setState(br.result() ? FSM.FSM_ERROR : FSM.FSM_DONE);\n }\n\n endDelete(br: BlobRequest): void\n {\n // Note that fsmDel is marked complete in setDeleted\n }\n\n startList(sm: StorageManager, continuationToken?: string): void\n {\n if (this.isListing())\n {\n this.env.log.error('storage: attempt to list while listing');\n }\n else\n {\n sm.ls(this, continuationToken);\n }\n }\n\n endList(br: BlobRequest): void\n {\n if (! br.result())\n {\n let props = br.asProps();\n this._keys.concat(props.map(p => p.Key));\n this._props.concat(props);\n if (br.continuationToken())\n this.env.storageManager.ls(this, br.continuationToken());\n else\n {\n // Set _keys and _props to done since might not have happened if no values to push\n this._keys.setState(FSM.FSM_DONE);\n this._props.setState(FSM.FSM_DONE);\n this.fsmList.setState(FSM.FSM_DONE);\n }\n }\n else\n {\n this.env.log.error(`list failed: ${br.asError()}`);\n this._keys.setState(FSM.FSM_ERROR);\n this._props.setState(FSM.FSM_ERROR);\n this.fsmList.setState(FSM.FSM_ERROR);\n }\n }\n\n toLoadStream(): stream.Readable\n {\n return this.params.loadToType === 'stream' ? this.params.loadTo as stream.Readable : null;\n }\n\n setLoadStream(rs: stream.Readable): void\n {\n this.params.loadToType = 'stream';\n this.params.loadTo = rs;\n }\n}\n\nexport interface BlobRequest\n{\n blob: StorageBlob;\n\n result(): number;\n asBuffer(): Buffer;\n asString(): string;\n asError(): string;\n asProps(): BlobProperties[];\n continuationToken(): string;\n}\n\nexport interface BlobRequestIndex\n{\n [key: string]: BlobRequest;\n}\n\nexport class StorageManager\n{\n _env: Environment;\n saveBlobIndex: BlobRequestIndex;\n loadBlobIndex: BlobRequestIndex;\n headBlobIndex: BlobRequestIndex;\n delBlobIndex: BlobRequestIndex;\n lsBlobIndex: BlobRequestIndex;\n onList: any;\n bucketMap: BucketMap;\n\n constructor(env: Environment, bucketMap?: BucketMap)\n {\n this._env = env;\n this.saveBlobIndex = {};\n this.loadBlobIndex = {};\n this.headBlobIndex = {};\n this.delBlobIndex = {};\n this.lsBlobIndex = {};\n this.onList = {};\n this.bucketMap = bucketMap;\n }\n\n save(blob: StorageBlob): void {} // override\n load(blob: StorageBlob): void {} // override\n del(blob: StorageBlob): void {} // override\n head(blob: StorageBlob): void {} // override\n ls(blob: StorageBlob, continuationToken?: string): void {} // override\n createTransferUrl(params: TransferParams): FsmTransferUrl { return null } // override\n\n on(eventName: string, cb: any): void\n {\n let aCB: any[] = this.onList[eventName];\n if (aCB === undefined)\n {\n aCB = [];\n this.onList[eventName] = aCB;\n }\n aCB.push(cb);\n }\n\n off(eventName: string, cb: any): void\n {\n let aCB: any[] = this.onList[eventName];\n if (aCB !== undefined)\n {\n for (let i: number = 0; i < aCB.length; i++)\n if (aCB[i] === cb)\n {\n aCB.splice(i, 1);\n break;\n }\n }\n }\n\n emit(eventName: string, blob: StorageBlob): void\n {\n let aCB: any[] = this.onList[eventName];\n if (aCB !== undefined)\n {\n for (let i: number = 0; i < aCB.length; i++)\n (aCB[i])(blob);\n }\n }\n}\n","export * from './s3';\n","// Node libraries\nimport * as fs from 'fs';\nimport * as stream from 'stream';\nimport * as zlib from 'zlib';\n\n// Public libraries\nimport * as S3 from 'aws-sdk/clients/s3';\n\n// Shared libraries\nimport * as Context from '../context/all';\nimport * as Storage from '../storage/all';\nimport * as LogAbstract from '../logabstract/all';\nimport * as FSM from '../fsm/all';\n\nexport interface Environment\n{\n context: Context.IContext;\n log: LogAbstract.ILog;\n fsmManager: FSM.FsmManager;\n storageManager: Storage.StorageManager;\n}\n\nclass S3Request implements Storage.BlobRequest\n{\n blob: Storage.StorageBlob;\n req: any;\n res: any;\n data: any;\n err: any;\n\n constructor(blob: Storage.StorageBlob)\n {\n this.blob = blob;\n this.req = null;\n this.res = null;\n this.data = null;\n this.err = null;\n }\n\n continuationToken(): string\n {\n if (this.data && this.data.NextContinuationToken)\n return this.data.NextContinuationToken;\n\n return undefined;\n }\n\n result(): number\n {\n if (this.data == null && this.blob.toLoadStream() == null && this.err == null)\n return Storage.EPending;\n else if (this.err != null)\n {\n if (this.err.statusCode && this.err.statusCode == 404)\n return Storage.ENotFound;\n else if (this.err.statusCode === 999)\n return Storage.EBadFormat;\n else\n return Storage.EFail;\n }\n else\n return Storage.ESuccess;\n }\n\n decode(): void\n {\n if (this.err == null && this.data && this.data.Body && this.data.ContentEncoding === 'gzip')\n {\n try\n {\n this.data.Body = zlib.gunzipSync(this.data.Body);\n }\n catch (err)\n {\n this.err = { statusCode: 999, message: 'Content not in gzip format.' };\n }\n }\n }\n\n asString(): string\n {\n if (this.err || this.res == null || this.data == null || this.data.Body == null)\n return undefined;\n let body: Buffer = this.data.Body;\n return body.toString('utf-8');\n }\n\n // Uncompress as necessary\n asBuffer(): Buffer\n {\n if (this.err || this.res == null || this.data == null || this.data.Body == null)\n return undefined;\n let body: Buffer = this.data.Body;\n return body;\n }\n\n _dataToProps(data: any): Storage.BlobProperties\n {\n let props: Storage.BlobProperties = {};\n props.ContentLength = (data.Size !== undefined) ? data.Size : 0;\n props.Key = data.Key;\n props.ETag = data.ETag;\n props.LastModified = data.LastModified;\n props.ContentEncoding = data.ContentEncoding;\n return props;\n }\n\n asProps(): Storage.BlobProperties[]\n {\n let a: Storage.BlobProperties[] = [];\n\n if (this.data && Array.isArray(this.data.Contents))\n {\n for (let i: number = 0; i < this.data.Contents.length; i++)\n a.push(this._dataToProps(this.data.Contents[i]));\n }\n else\n a.push(this._dataToProps(this.data));\n\n return a;\n }\n\n asError(): string\n {\n if (this.err)\n return this.err.message ? this.err.message : JSON.stringify(this.err);\n return undefined;\n }\n}\n\nconst ChunkSize = 4000000;\n\nexport class FsmStreamLoader extends FSM.Fsm\n{\n sm: StorageManager;\n blob: Storage.StorageBlob;\n param: any;\n err: any;\n contentLength: number;\n contentPos: number;\n readStream: Storage.MultiBufferPassThrough;\n passThrough: Storage.MultiBufferPassThrough;\n\n constructor(env: Environment, sm: StorageManager, blob: Storage.StorageBlob)\n {\n super(env);\n this.sm = sm;\n this.blob = blob;\n this.contentPos = 0;\n this.param = { Bucket: sm.blobBucket(blob), Key: blob.params.id };\n\n // We use passthrough stream because we want to make the load stream available\n // immediately but we don't actually know whether we are going to have to pipe\n // through gunzip or not until we get the first ContentEncoding header back.\n this.readStream = new Storage.MultiBufferPassThrough();\n this.passThrough = new Storage.MultiBufferPassThrough();\n this.blob.setLoadStream(this.passThrough);\n }\n\n get env(): Environment { return this._env as Environment; }\n\n setStreamError(): void\n {\n this.passThrough._done();\n this.setState(FSM.FSM_ERROR);\n this.err = { statusCode: 999, message: 'Content not in gzip format.' };\n }\n\n tick(): void\n {\n if (this.ready)\n {\n // Figure out next chunk\n if (this.contentLength === undefined)\n this.param.Range = `bytes=0-${ChunkSize-1}`;\n else\n this.param.Range = `bytes=${this.contentPos}-${Math.min(this.contentPos+ChunkSize-1, this.contentLength-1)}`;\n\n switch (this.state)\n {\n\n case FSM.FSM_STARTING:\n this.sm.s3.getObject(this.param, (err: any, data: any) => {\n if (err == null)\n {\n // On first chunk, figure out if we need to pipe through gunzip\n if (this.contentLength === undefined)\n {\n if (data.ContentEncoding && data.ContentEncoding === 'gzip')\n {\n let unzip = zlib.createGunzip({});\n unzip.on('end', () => { this.passThrough._done(); this.setState(FSM.FSM_DONE); } );\n unzip.on('error', () => { this.setStreamError() } );\n this.readStream.pipe(unzip).pipe(this.passThrough);\n }\n else\n {\n this.readStream.on('end', () => { this.passThrough._done(); this.setState(FSM.FSM_DONE); } );\n this.readStream.on('error', () => { this.setStreamError() } );\n this.readStream.pipe(this.passThrough);\n }\n }\n\n // Handle this data\n if (data.Body)\n this.readStream.write(data.Body);\n\n // Update content range and content length for next time through, or noticing finish\n if (data.ContentRange)\n {\n let re = /bytes (\\d+)-(\\d+)\\/(\\d+)/\n let s: string = data.ContentRange; // \"bytes start-end/total\"\n let matched = re.exec(s);\n if (matched && matched.length === 4)\n {\n this.contentPos = Number(matched[2]) + 1;\n this.contentLength = Number(matched[3]);\n }\n }\n }\n\n // Error or done reading\n if (err || this.contentPos === this.contentLength)\n {\n this.err = err;\n this.readStream._done();\n if (err)\n {\n this.passThrough._done();\n this.setState(FSM.FSM_ERROR);\n }\n }\n else\n this.setState(FSM.FSM_STARTING);\n });\n break;\n }\n }\n }\n}\n\nexport class FsmTransferUrl extends Storage.FsmTransferUrl\n{\n storageManager: StorageManager;\n\n constructor(env: Environment, bucket: string, params: Storage.TransferParams)\n {\n super(env, bucket, params);\n }\n}\n\nexport class StorageManager extends Storage.StorageManager\n{\n s3: any;\n count: number;\n\n constructor(env: Environment, bucketMap?: Storage.BucketMap)\n {\n super(env, bucketMap);\n\n if (this.env.context.xstring('aws_access_key_id') === undefined\n || this.env.context.xstring('aws_secret_access_key') === undefined)\n {\n this.env.log.error('S3: not configured: exiting');\n this.env.log.dump();\n process.exit(1);\n }\n\n this.s3 = new S3({apiVersion: '2006-03-01', region: 'us-west-2'});\n this.count = 0;\n }\n\n get env(): Environment { return this._env as Environment; }\n\n lookupBucket(s: string): string\n {\n while (this.bucketMap[s] !== undefined)\n s = this.bucketMap[s];\n return s;\n }\n\n blobBucket(blob: Storage.StorageBlob): string\n {\n return this.lookupBucket(blob.params.bucket);\n }\n\n load(blob: Storage.StorageBlob): void\n {\n if (blob.params.id == '')\n {\n this.env.log.error('S3: blob load called with empty key');\n return;\n }\n let id: string = `load+${blob.params.id}+${this.count++}`;\n\n this.env.log.event('S3: load start', 1);\n let trace = new LogAbstract.AsyncTimer(this.env.log, 'S3: load', 1);\n let params = { Bucket: this.blobBucket(blob), Key: blob.params.id };\n let rq = new S3Request(blob);\n this.loadBlobIndex[id] = rq;\n blob.setLoading();\n if (blob.params.loadToType === 'stream')\n {\n let fsm = new FsmStreamLoader(this.env, this, blob);\n rq.req = fsm;\n new FSM.FsmOnDone(this.env, fsm, (f: FSM.Fsm) => {\n this._finishLoad(blob, id, rq, fsm.err, undefined);\n trace.log();\n });\n }\n else\n {\n rq.req = this.s3.getObject(params, (err: any, data: any) => {\n this._finishLoad(blob, id, rq, err, data);\n trace.log();\n });\n }\n }\n\n _finishLoad(blob: Storage.StorageBlob, id: string, rq: S3Request, err: any, data: any)\n {\n rq.res = this;\n if (err)\n rq.err = err;\n else\n rq.data = data;\n\n rq.decode();\n blob.setLoaded(rq.result());\n blob.endLoad(rq);\n this.emit('load', blob);\n\n delete this.loadBlobIndex[id];\n\n this.env.log.event('S3: load end', 1);\n }\n\n head(blob: Storage.StorageBlob): void\n {\n if (blob.params.id == '')\n {\n this.env.log.error('S3: blob head called with empty key');\n return;\n }\n let id: string = `head+${blob.params.id}+${this.count++}`;\n\n this.env.log.event('S3: head start', 1);\n let trace = new LogAbstract.AsyncTimer(this.env.log, 'S3: head', 1);\n let params = { Bucket: this.blobBucket(blob), Key: blob.params.id };\n let rq = new S3Request(blob);\n this.headBlobIndex[id] = rq;\n blob.setLoading();\n rq.req = this.s3.headObject(params, (err: any, data: any) => {\n rq.res = this;\n if (err)\n rq.err = err;\n else\n rq.data = data;\n\n blob.setLoaded(rq.result());\n blob.endHead(rq);\n this.emit('head', blob);\n\n delete this.headBlobIndex[id];\n\n this.env.log.event('S3: head end', 1);\n trace.log();\n });\n }\n\n safeSaveFromPath(blob: Storage.StorageBlob, rq: S3Request, id: string, trace: LogAbstract.AsyncTimer): any\n {\n try\n {\n // We can't gzip the stream, so read as buffer (more size limited than stream) if required\n if (blob.params.ContentEncoding === 'gzip')\n return fs.readFileSync(blob.params.saveFrom);\n else\n return fs.createReadStream(blob.params.saveFrom);\n }\n catch (err)\n {\n rq.err = err;\n process.nextTick(() => {\n blob.setSaved(rq.result());\n blob.endSave(rq);\n this.emit('save', blob);\n delete this.saveBlobIndex[id];\n this.env.log.error('S3: failed to open blob path file');\n trace.log();\n });\n }\n return null;\n }\n\n save(blob: Storage.StorageBlob): void\n {\n if (blob.params.id == '')\n {\n this.env.log.error('S3: blob save called with empty key');\n return;\n }\n let id: string = `save+${blob.params.id}+${this.count++}`;\n\n this.env.log.event('S3: save start', 1);\n\n let trace = new LogAbstract.AsyncTimer(this.env.log, 'S3: save', 1);\n let params: any = { Bucket: this.blobBucket(blob), Key: blob.params.id };\n if (blob.params.ContentEncoding)\n params['ContentEncoding'] = blob.params.ContentEncoding;\n if (blob.params.ContentType)\n params['ContentType'] = blob.params.ContentType;\n if (blob.params.CacheControl)\n params['CacheControl'] = blob.params.CacheControl;\n let rq = new S3Request(blob);\n this.saveBlobIndex[id] = rq;\n blob.setSaving();\n\n let body: any;\n let bodyStream: stream.Readable;\n switch (blob.params.saveFromType)\n {\n case 'object':\n body = Buffer.from(JSON.stringify(blob.params.saveFrom));\n break;\n case 'string':\n body = Buffer.from(blob.params.saveFrom);\n break;\n case 'buffer':\n body = blob.params.saveFrom;\n break;\n case 'stream':\n body = blob.params.saveFrom;\n bodyStream = body as stream.Readable;\n break;\n case 'filepath':\n body = this.safeSaveFromPath(blob, rq, id, trace);\n if (body && !Buffer.isBuffer(body)) bodyStream = body as stream.Readable;\n if (body == null) return;\n break;\n }\n if (blob.params.ContentEncoding === 'gzip' && Buffer.isBuffer(body))\n body = zlib.gzipSync(body);\n\n params.Body = body;\n rq.req = this.s3.putObject(params, (err: any, data: any) => {\n if (err)\n rq.err = err;\n else\n rq.data = data;\n rq.res = this;\n\n blob.setSaved(rq.result());\n blob.endSave(rq);\n this.emit('save', blob);\n\n delete this.saveBlobIndex[id];\n\n this.env.log.event('S3: save done', 1);\n trace.log();\n\n if (bodyStream)\n bodyStream.destroy();\n });\n }\n\n del(blob: Storage.StorageBlob): void\n {\n if (blob.params.id == '')\n {\n this.env.log.error('S3: blob delete called with empty key');\n return;\n }\n let id: string = `delete+${blob.params.id}+${this.count++}`;\n\n this.env.log.event(`S3: del start`, 1);\n\n let trace = new LogAbstract.AsyncTimer(this.env.log, 'S3: del', 1);\n let params = { Bucket: this.blobBucket(blob), Key: blob.params.id };\n let rq = new S3Request(blob);\n this.delBlobIndex[id] = rq;\n blob.setDeleting();\n rq.req = this.s3.deleteObject(params, (err: any, data: any) => {\n if (err)\n rq.err = err;\n else\n rq.data = data;\n rq.res = this;\n\n blob.setDeleted(rq.result());\n blob.endDelete(rq);\n this.emit('del', blob);\n\n delete this.delBlobIndex[id];\n\n trace.log();\n this.env.log.event(`S3: del done`, 1);\n });\n }\n\n ls(blob: Storage.StorageBlob, continuationToken?: string): void\n {\n let b = this.blobBucket(blob);\n if (b == '')\n {\n this.env.log.error('S3: blob ls called with empty bucket');\n return;\n }\n let id: string = `ls+${b}+${this.count++}`;\n\n this.env.log.event(`S3: ls start`, 1);\n\n let trace = new LogAbstract.AsyncTimer(this.env.log, 'S3: ls', 1);\n let params: any = { Bucket: b };\n if (continuationToken)\n params.ContinuationToken = continuationToken;\n let rq = new S3Request(blob);\n this.lsBlobIndex[id] = rq;\n blob.setListing();\n rq.req = this.s3.listObjectsV2(params, (err: any, data: any) => {\n if (err)\n rq.err = err;\n else\n rq.data = data;\n rq.res = this;\n\n blob.setListed();\n blob.endList(rq);\n this.emit('ls', blob);\n\n delete this.lsBlobIndex[id];\n\n trace.log();\n this.env.log.event(`S3: ls done`, 1);\n });\n }\n\n createTransferUrl(params: Storage.TransferParams): Storage.FsmTransferUrl\n {\n let fsm = new FsmTransferUrl(this.env, this.lookupBucket('transfers'), params);\n if (fsm === null)\n {\n let params: any = { Bucket: fsm.bucket, Fields: { key: fsm.key } };\n this.s3.createPresignedPost(params, (err: any, url: string) => {\n if (err)\n {\n this.env.log.error(`S3: createPresignedPost failed: ${err}`);\n fsm.setState(FSM.FSM_ERROR);\n }\n else\n {\n fsm.url = url;\n fsm.setState(FSM.FSM_DONE);\n }\n });\n }\n else\n {\n let s3params: any = { Bucket: fsm.bucket, Key: fsm.key };\n if (params.op === 'putObject') s3params.ContentType = fsm.params.contentType;\n this.s3.getSignedUrl(params.op, s3params, (err: any, url: string) => {\n if (err)\n {\n this.env.log.error(`S3: getSignedUrl failed: ${err}`);\n fsm.setState(FSM.FSM_ERROR);\n }\n else\n {\n fsm.url = url;\n fsm.setState(FSM.FSM_DONE);\n }\n });\n }\n return fsm;\n }\n}\n","export * from './util';\nexport * from './countedhash';\nexport * from './indexedarray';\nexport * from './gradient';\nexport * from './bintrie';\n","//\n// Packed format Trie for mapping string to string\n// Assumptions:\n// 1. Lots of duplicate prefix strings in keys (so branching in trie happens late).\n// 2. Lots of duplicate prefix strings in values.\n// 3. Lots of keys with duplicate prefix map to the same string value.\n// Especially good for something like our blockmapping.json file since both the keys (blockIDs)\n// and values (precinct IDs) have a ton of redundancy and ~250 avg keys (blockID) map to same\n// precinctID.\n// The packed structure is just read directly into memory and walked in packed format.\n\n// The structure is divided into two pieces, a node \"tree\" (flat n-ary trie with offsets\n// to next nodes) and a value table. A value is a pair of string fragment offsets.\n//\n// Main header is:\n// value table offset (32 bit value)\n// [ node table ]\n// [ value table ]\n\n// A tree node is:\n// node length / value - (length of byte and node offset table)\n// [ bytes ]* (padded to 4)\n// [ node or value offset ]* (32 bit signed values, negative values are value table refs)\n//\n// We just do a linear scan through the bytes since we assume many will only have a single child,\n// max ~15.\n// The byte array contains the next byte to match, the node offset is the respective next node.\n// A negative node offset is the actual value.\n//\n// A value is an entry in the value table. It is:\n// fragment offset 1 (from start of value table) (offset zero means null, not a legal offset)\n// fragment offset 2 (from start of value table)\n//\n// where a fragment is:\n// length (byte)\n// [ bytes ]*\n//\n// value table is:\n// number of pairs (32 bit value)\n// [ fragment offset pairs ]*\n// [ fragment values ]*\n\nexport interface Coder\n{\n encoder: { encode: (s: string) => Uint8Array };\n decoder: { decode: (u8: Uint8Array) => string };\n}\n\n/*\n-- For Node\nimport * as u from 'util';\nUtil.setCoder({ encoder: new u.TextEncoder(), decoder: new u.TextDecoder('utf-8') });\n\n-- For Browser\nUtil.setCoder({ encoder: new TextEncoder(), decoder: new TextDecoder('utf-8') });\n*/\n\nexport function s2u8(coder: Coder, s: string): Uint8Array\n{\n return coder.encoder.encode(s);\n}\n\nexport function u82s(coder: Coder, u8: Uint8Array, offset: number, n: number): string\n{\n return coder.decoder.decode(u8.subarray(offset, offset+n));\n}\n\n// String table algorithm:\n// For each string, divide into fragments of n to 3 bytes\n// Allocate an occurence for each fragment.\n// Sort the fragments by number of occurrences.\n// For each string, pick fragmentation that maximizes occurrence count and mark\n// fragmentation as \"in use\"\n\ninterface Fragment\n{\n count: number;\n used: number;\n offset: number;\n s: string;\n u8?: Uint8Array;\n}\n\ntype FragmentTable = { [frag: string]: Fragment };\ntype FragmentPair = { f1: Fragment, f2: Fragment, offset?: number };\nconst NullFragment = { count: 0, used: 0, offset: 0, s: '' };\n\nfunction sortBestPair(p1: FragmentPair, p2: FragmentPair): number\n{\n let d = (p1.f1.count+p1.f2.count) - (p2.f1.count+p2.f2.count);\n if (d) return d;\n d = (p1.f1.used + p1.f2.used) - (p2.f1.used+p2.f2.used);\n return d;\n}\n\nfunction unique(a: string[]): string[]\n{\n a = a.slice().sort();\n return a.filter((s: string, i: number) => { return i == 0 || s !== a[i-1] });\n}\n\nclass ValueTable\n{\n coder: Coder;\n ab: ArrayBuffer;\n u8: Uint8Array;\n u32: Uint32Array;\n\n constructor(coder: Coder) { this.coder = coder }\n\n static fromBuffer(coder: Coder, ab: ArrayBuffer, offset: number, length: number): ValueTable\n {\n let vt = new ValueTable(coder);\n vt.ab = ab;\n vt.u8 = new Uint8Array(ab, offset, length);\n let u32 = new Uint32Array(ab, offset, 1);\n let n = u32[0];\n vt.u32 = new Uint32Array(ab, offset, 1+2*n);\n return vt;\n }\n\n // Returns string given offset into value table\n fromOffset(offset: number): string\n {\n let o1 = this.u32[offset];\n let o2 = this.u32[offset+1];\n let n = 0;\n if (o1) n += this.u8[o1];\n if (o2) n += this.u8[o2];\n let ab = new ArrayBuffer(n);\n let u8 = new Uint8Array(ab);\n n = this.u8[o1];\n let j = 0;\n while (j < n) u8[j++] = this.u8[++o1];\n n = this.u8[o2];\n let k = 0;\n while (k < n) k++, u8[j++] = this.u8[++o2];\n return u82s(this.coder, u8, 0, j);\n }\n}\n\nclass ValueTableBuilder\n{\n coder: Coder;\n values: string[];\n fragments: FragmentTable;\n pairs: { [value: string]: FragmentPair };\n ab: ArrayBuffer;\n u8: Uint8Array;\n u32: Uint32Array;\n\n constructor(coder: Coder) { this.coder = coder }\n\n // Building\n static fromStrings(coder: Coder, values: string[]): ValueTableBuilder\n {\n let nc = 0;\n values.forEach(s => nc += s.length);\n //console.log(`bintrie: ValueTable: ${values.length} initial values, ${nc} initial char count`);\n values = unique(values);\n //console.log(`bintrie: ValueTable: ${values.length} unique values`);\n let vtb = new ValueTableBuilder(coder);\n vtb.values = values;\n vtb.fragments = {};\n vtb.pairs = {};\n values.forEach(s => vtb.extractFragments(s));\n values.forEach(s => vtb.pickFragments(s));\n //console.log(`bintrie: ValueTable: ${Object.keys(vtb.fragments).length} initial fragments`);\n Object.keys(vtb.fragments).forEach(s => { if (! vtb.fragments[s].used) delete vtb.fragments[s] });\n //console.log(`bintrie: ValueTable: ${Object.keys(vtb.fragments).length} final fragments`);\n vtb.toBinary();\n vtb.validateStrings(values);\n //console.log(`bintrie: ValueTable: ${vtb.u8.length} final byte length`);\n return vtb;\n }\n\n // Validation\n validateStrings(values: string[]): void\n {\n let vt = ValueTable.fromBuffer(this.coder, this.ab, 0, this.ab.byteLength);\n let orig = values.slice().sort();\n let here: string[] = [];\n let n = this.u32[0];\n for (let i = 0; i < n; i++)\n here.push(vt.fromOffset(i*2+1));\n here.sort();\n for (let i = 0; i < here.length; i++)\n if (orig[i] !== here[i])\n {\n console.error('ValueTable: content mismatch');\n break;\n }\n }\n\n // Building\n addFragment(s: string): void\n {\n let f = this.fragments[s];\n if (f === undefined)\n f = { count: 0, used: 0, s: s, offset: 0, u8: s2u8(this.coder, s) }, this.fragments[s] = f;\n f.count++;\n }\n\n // Building\n extractFragments(s: string): void\n {\n let n = s.length;\n if (n < 6)\n this.addFragment(s);\n else\n for (let j = 3; j < n-2; j++)\n {\n this.addFragment(s.substring(0, j));\n this.addFragment(s.substring(j));\n }\n }\n\n // Building\n pickFragments(s: string): void\n {\n let a: { f1: Fragment, f2: Fragment }[] = [];\n let n = s.length;\n if (n < 6)\n a.push({ f1: this.fragments[s], f2: NullFragment });\n else\n for (let j = 3; j < n-2; j++)\n a.push({ f1: this.fragments[s.substring(0, j)], f2: this.fragments[s.substring(j)] });\n a.sort(sortBestPair);\n let p = a[0];\n p.f1.used = 1;\n p.f2.used = 1;\n this.pairs[s] = p;\n }\n\n // Building\n toOffset(s: string): number\n {\n return this.pairs[s].offset;\n }\n\n // Building\n toBinary(): void\n {\n let byteLength = 0;\n byteLength += (this.values.length * 2 * 4) + 4;\n let keys = Object.keys(this.fragments);\n keys.forEach(s => {\n let f = this.fragments[s];\n f.offset = byteLength;\n byteLength += f.u8.byteLength + 1;\n });\n this.ab = new ArrayBuffer(byteLength);\n this.u8 = new Uint8Array(this.ab);\n this.u32 = new Uint32Array(this.ab, 0, this.values.length*2+1);\n let pOffset = 0;\n this.u32[pOffset++] = this.values.length;\n this.values.forEach(s => {\n let p = this.pairs[s];\n p.offset = pOffset;\n this.u32[pOffset++] = p.f1.offset;\n this.u32[pOffset++] = p.f2.offset;\n });\n let fOffset = (this.values.length * 2 * 4) + 4;\n keys.forEach(s => {\n let f = this.fragments[s];\n this.u8[fOffset++] = f.u8.length;\n for (let i = 0; i < f.u8.length; i++)\n this.u8[fOffset++] = f.u8[i];\n });\n }\n}\n\nexport type StringMap = { [key: string]: string };\n\n// Building\ninterface UnpackedNode\n{\n // This for leaf node\n suffix: Uint8Array;\n value: number;\n\n // This for internal node\n bytes: number[] | null;\n nodes: UnpackedNode[] | null;\n}\n\nfunction pad(n: number, pad: number): number { let mod = n % pad; return mod ? pad - mod : 0; }\nfunction pad4(n: number): number { return pad(n, 4) }\n\nexport class BinTrie\n{\n coder: Coder;\n ab: ArrayBuffer;\n vt: ValueTable;\n u8: Uint8Array;\n i32: Int32Array;\n\n constructor(coder: Coder)\n {\n this.coder = coder;\n }\n\n static fromBuffer(coder: Coder, ab: ArrayBuffer): BinTrie\n {\n let bt = new BinTrie(coder);\n bt.ab = ab;\n bt.u8 = new Uint8Array(bt.ab);\n let i32 = new Int32Array(bt.ab, 0, 1);\n let valueOffset = i32[0];\n bt.i32 = new Int32Array(bt.ab, 0, valueOffset >> 2);\n bt.vt = ValueTable.fromBuffer(coder, bt.ab, valueOffset, bt.u8.length - valueOffset);\n return bt;\n }\n\n get(key: string): string\n {\n let u8 = s2u8(this.coder, key);\n let byteOffset = 4;\n for (let i = 0; i <= u8.length; i++)\n {\n let iOffset = byteOffset >> 2;\n let n = this.i32[iOffset];\n if (i == u8.length)\n return undefined;\n let b = u8[i];\n byteOffset += 4;\n let j: number;\n for (j = 0; j < n; j++)\n if (this.u8[byteOffset+j] === b)\n {\n byteOffset += n + pad4(n); // move past byte table\n iOffset = byteOffset >> 2; // convert ioffset to that location\n iOffset += j; // index intoo node offset table\n byteOffset = this.i32[iOffset]; // and move to child node\n if (byteOffset < 0)\n return this.vt.fromOffset(-byteOffset);\n break;\n }\n if (j === n)\n return undefined;\n }\n return undefined;\n }\n}\n\nexport class BinTrieBuilder\n{\n coder: Coder;\n root: UnpackedNode;\n vtb: ValueTableBuilder;\n vt: ValueTable;\n ab: ArrayBuffer;\n u8: Uint8Array;\n i32: Int32Array;\n\n constructor(coder: Coder)\n {\n this.coder = coder;\n }\n\n // Building\n nodeCount(node: UnpackedNode): number\n {\n let n = 1;\n if (node.nodes)\n node.nodes.forEach(child => n += this.nodeCount(child))\n return n;\n }\n\n // Validation\n nodeBranching(node: UnpackedNode, counts: number[]): number\n {\n let n = node.nodes ? node.nodes.length : 0;\n counts[n] = counts[n] === undefined ? 1 : counts[n]+1;\n if (node.nodes)\n node.nodes.forEach(child => n += this.nodeBranching(child, counts))\n return n;\n }\n\n // Validation\n nodeValueCount(node: UnpackedNode): number\n {\n let n = node.value ? 1 : 0;\n if (node.nodes)\n node.nodes.forEach(child => n += this.nodeValueCount(child))\n return n;\n }\n\n // Building\n nodeByteLength(node: UnpackedNode): number\n {\n let byteLength = 0; // length of child arrays\n if (node.nodes)\n {\n byteLength += 4; // length of child arrays\n byteLength += node.bytes.length + pad4(node.bytes.length);\n byteLength += node.nodes.length * 4;\n node.nodes.forEach(n => { byteLength += this.nodeByteLength(n) });\n }\n return byteLength;\n }\n\n // Building\n addString(s: string, value: number): void\n {\n let u8 = s2u8(this.coder, s);\n if (this.root == null)\n this.root = { suffix: u8, value: value, bytes: null, nodes: null };\n else\n {\n let node = this.root;\n let n = u8.length;\n let j = 0;\n while (j < n)\n {\n // If at leaf node, need to split it\n if (node.bytes == null)\n {\n node.bytes = [ node.suffix[0] ];\n node.nodes = [ { suffix: node.suffix.subarray(1), value: node.value, bytes: null, nodes: null } ];\n node.suffix = null;\n node.value = 0;\n }\n\n let k: number;\n for (k = 0; k < node.bytes.length; k++)\n if (node.bytes[k] == u8[j])\n break;\n \n if (k < node.bytes.length)\n {\n node = node.nodes[k];\n j++;\n }\n else\n {\n node.bytes.push(u8[j++]);\n let nNew: UnpackedNode = { suffix: u8.subarray(j), value: value, bytes: null, nodes: null };\n node.nodes.push(nNew);\n node = nNew;\n }\n }\n }\n }\n\n // Building\n dedup(node: UnpackedNode): void\n {\n // If all subnodes point to the same value, we can just turn this node into a value node\n if (node.nodes)\n {\n node.nodes.forEach(n => this.dedup(n));\n let value = node.nodes[0].value;\n if (value)\n {\n node.nodes.forEach(n => { if (n.value != value) value = 0 });\n if (value)\n {\n node.value = value;\n delete node.nodes;\n delete node.bytes;\n }\n }\n }\n }\n\n // Validation\n getUnpacked(key: string): string\n {\n function getFromNode(vt: ValueTable, node: UnpackedNode, u8: Uint8Array, offset: number): string\n {\n if (node.value)\n return vt.fromOffset(node.value);\n else\n {\n if (offset >= u8.length)\n {\n console.error('bintrie: failure during lookup in unpacked format');\n return 'undefined';\n }\n let j = node.bytes.findIndex(e => e === u8[offset]);\n if (j === undefined)\n {\n console.error('bintrie: failure during lookup in unpacked format');\n return 'undefined';\n }\n return getFromNode(vt, node.nodes[j], u8, offset+1);\n }\n }\n\n return getFromNode(this.vt, this.root, s2u8(this.coder, key), 0);\n }\n\n // Building\n packNode(node: UnpackedNode, byteOffset: number): number\n {\n if (node.nodes)\n {\n let i;\n let iOffset = byteOffset >> 2;\n this.i32[iOffset] = node.nodes.length;\n byteOffset += 4;\n for (i = 0; i < node.bytes.length; i++)\n this.u8[byteOffset++] = node.bytes[i];\n byteOffset += pad4(byteOffset);\n iOffset = byteOffset >> 2;\n byteOffset += node.nodes.length * 4;\n for (i = 0; i < node.nodes.length; i++)\n {\n let n = node.nodes[i];\n if (n.value)\n this.i32[iOffset++] = - n.value;\n else\n {\n this.i32[iOffset++] = byteOffset;\n byteOffset = this.packNode(n, byteOffset);\n }\n }\n }\n return byteOffset;\n }\n\n // Building\n toBinary(): void\n {\n let byteLength = 4 + this.nodeByteLength(this.root);\n let valueOffset = byteLength;\n byteLength += this.vtb.u8.length;\n this.ab = new ArrayBuffer(byteLength);\n this.u8 = new Uint8Array(this.ab);\n this.i32 = new Int32Array(this.ab, 0, valueOffset >> 2);\n this.i32[0] = valueOffset;\n let byteOffset = this.packNode(this.root, 4);\n if (byteOffset != valueOffset)\n throw 'unexpected result from packNode';\n\n // Now copy in ValueTable\n let u8 = this.vtb.u8;\n let n = u8.length;\n for (let j = 0, k = valueOffset; j < n; j++, k++)\n this.u8[k] = u8[j];\n }\n\n // Building\n static fromMap(coder: Coder, o: StringMap): BinTrie\n {\n let btb = new BinTrieBuilder(coder);\n btb.vtb = ValueTableBuilder.fromStrings(coder, Object.values(o));\n btb.vt = ValueTable.fromBuffer(coder, btb.vtb.ab, 0, btb.vtb.ab.byteLength);\n let keys = Object.keys(o);\n keys.forEach(s => btb.addString(s, btb.vtb.toOffset(o[s])));\n\n //console.log(`bintrie: initial node count: ${btb.nodeCount(btb.root)}`);\n\n // validate\n let good = true;\n keys.forEach(k => {\n if (good && btb.getUnpacked(k) !== o[k])\n {\n //console.error('bintrie: missing key in unpacked, un-deduped tree');\n good = false;\n }\n });\n\n // dedup (collapse branches pointing to same value)\n btb.dedup(btb.root);\n\n // validate\n keys.forEach(k => {\n if (good && btb.getUnpacked(k) !== o[k])\n {\n //console.error('bintrie: missing key in unpacked, deduped tree');\n good = false;\n }\n });\n\n //console.log(`bintrie: final node count after dedup: ${btb.nodeCount(btb.root)}`);\n //console.log(`bintrie: value nodes after dedup: ${btb.nodeValueCount(btb.root)}`);\n let counts: number[] = [];\n //console.log(`bintrie: singleton nodes after dedup: ${btb.nodeBranching(btb.root, counts)}`);\n counts.forEach((count: number, i: number) => {\n //if (count !== undefined)\n //console.log(`bintrie: branch factor: ${i}, count: ${count}`);\n });\n\n btb.toBinary();\n\n let bt = BinTrie.fromBuffer(coder, btb.ab);\n\n // validate\n keys.forEach((k: string, i: number) => {\n if (good && bt.get(k) !== o[k])\n {\n console.error(`bintrie: missing key (${i}th) in packed structure`);\n good = false;\n }\n });\n\n console.log(`bintrie: total size: ${btb.u8.length}, value table size: ${btb.vtb.u8.length}`);\n\n return bt;\n }\n}\n","export class CountedHash\n{\n n: number;\n val: { [id: string]: true|null }; // true === isset, null === indeterminant\n\n constructor()\n {\n this.n = 0;\n this.val = {};\n }\n\n get length(): number { return this.n; }\n\n indeterminate(id: string): boolean\n {\n return id != '' && this.val[id] === null;\n }\n\n test(id: string): boolean\n {\n return id != '' && this.val[id] !== undefined;\n }\n\n set(id: string, val: true|null = true): void\n {\n if (id != '')\n {\n if (! this.test(id))\n this.n++;\n this.val[id] = val;\n }\n }\n\n clear(id: string): void\n {\n if (this.test(id))\n {\n this.n--;\n delete this.val[id];\n }\n }\n\n apply(vals: { [id: string]: boolean|null }): void\n {\n this.empty();\n\n if (vals)\n Object.keys(vals).forEach((id) => {\n if (vals[id] !== false)\n this.set(id, vals[id] === true ? true : null);\n });\n }\n\n empty(): void\n {\n this.n = 0;\n this.val = {};\n }\n\n asArray(): string[]\n {\n let a: string[] = [];\n\n this.forEach(id => { a.push(id) });\n\n return a;\n }\n\n // This really only useful when length === 0|1\n asString(): string\n {\n for (var id in this.val) if (this.val.hasOwnProperty(id))\n return id;\n\n return '';\n }\n\n forEach(f: (id: string) => void): void\n {\n for (var id in this.val) if (this.val.hasOwnProperty(id))\n f(id);\n }\n}\n","interface RGB\n{\n r: number,\n g: number,\n b: number,\n}\n\nexport interface Stop\n{\n color: string,\n stop: number,\n rgb?: RGB;\n}\n\nexport type GradientStops = Stop[];\n\nfunction parseStops(stops: GradientStops): void\n{\n if (stops[0].rgb) return;\n\n stops.forEach((s) => {\n if (s.rgb === undefined)\n {\n let r = parseInt(s.color.substr(1, 2), 16);\n let g = parseInt(s.color.substr(3, 2), 16);\n let b = parseInt(s.color.substr(5, 2), 16);\n s.rgb = { r: r, g: g, b: b };\n }\n });\n stops.sort();\n}\n\nfunction asHex(v: number): string\n{\n return v.toString(16).padStart(2, '0');\n}\n\nfunction toHexColor(r: number, g: number, b: number): string\n{\n return `#${asHex(r)}${asHex(g)}${asHex(b)}`;\n}\n\nexport function execGradient(stops: GradientStops, value: number): string\n{\n parseStops(stops);\n let r = stops[stops.length-1].rgb.r;\n let g = stops[stops.length-1].rgb.g;\n let b = stops[stops.length-1].rgb.b;\n for (let i = 1; i < stops.length; i++)\n {\n let e = stops[i];\n if (value < e.stop)\n {\n let s = stops[i-1];\n r = s.rgb.r + Math.floor(((e.rgb.r - s.rgb.r) * (value - s.stop) / (e.stop - s.stop)));\n g = s.rgb.g + Math.floor(((e.rgb.g - s.rgb.g) * (value - s.stop) / (e.stop - s.stop)));\n b = s.rgb.b + Math.floor(((e.rgb.b - s.rgb.b) * (value - s.stop) / (e.stop - s.stop)));\n break;\n }\n }\n return toHexColor(r, g, b);\n}\n\nexport function parseGradient(sStops: string): GradientStops\n{\n let stops: GradientStops = [];\n let re = / ?([^ ]+) ([^ ,]+%?),?(.*)/;\n\n if (sStops == null || sStops == '' ) return stops;\n\n // Strip off leading CSS form if present\n if (sStops.indexOf('linear-gradient') == 0)\n {\n let rePre = /^[^,]*, (.*)\\)$/;\n let a = rePre.exec(sStops);\n if (a)\n sStops = a[1];\n }\n\n while (sStops && sStops != '')\n {\n let a = re.exec(sStops);\n if (a == null)\n break;\n let stop = a[2];\n sStops = a[3];\n if (a[2].indexOf('%') >= 0)\n {\n stop = stop.substr(0, stop.length-1);\n stop = String(Number(stop) * 0.01);\n }\n \n stops.push({ color: a[1], stop: Number(stop) });\n }\n return stops;\n}\n\nexport function asCSSGradient(stops: GradientStops): string\n{\n parseStops(stops);\n\n let a: string[] = [];\n stops.forEach((s) => {\n let stop = s.stop >= 0.0 && s.stop <= 1.0 ? `${Math.round(s.stop*100)}%` : String(s.stop);\n a.push(`${toHexColor(s.rgb.r, s.rgb.g, s.rgb.b)} ${stop}`);\n });\n return `linear-gradient(to right, ${a.join(', ')})`;\n}\n","export class IndexedArray\n{\n o: any;\n a: any[];\n\n constructor()\n {\n this.o = {};\n this.a = null;\n }\n\n ensure(): void\n {\n if (this.a === null)\n {\n this.a = [];\n for (let p in this.o) if (this.o.hasOwnProperty(p))\n this.a.push(p);\n this.a.sort((a: string, b: string) => { a = a.toUpperCase(); b = b.toUpperCase(); return a < b ? -1 : (a > b ? 1 : 0); });\n }\n }\n\n asArray(): any[]\n {\n this.ensure();\n return this.a;\n }\n\n get length(): number { this.ensure(); return this.a.length; }\n\n test(s: string): boolean\n {\n return !!s && this.o[s] !== undefined;\n }\n\n set(s: string): void\n {\n if (!!s && !this.test(s))\n {\n this.o[s] = true;\n this.a = null;\n }\n }\n\n setAll(a: string[]): void\n {\n if (a && a.length)\n for (let i: number = 0; i < a.length; i++)\n this.set(a[i]);\n }\n\n clear(s: string): void\n {\n if (this.test(s))\n {\n delete this.o[s];\n this.a = null;\n }\n }\n\n at(i: number): string\n {\n this.ensure();\n if (i < 0 || i >= this.a.length)\n return undefined;\n return this.a[i];\n }\n\n empty(): void\n {\n this.o = {};\n this.a = null;\n }\n\n forEach(f: (s: string) => void): void\n {\n for (var s in this.o) if (this.o.hasOwnProperty(s))\n f(s);\n }\n}\n","export type DateString = string;\nexport function Now(): DateString { return (new Date()).toJSON(); }\n\n// polyfill\nlet hrtime: any = global && global.process && global.process.hrtime ? global.process.hrtime : null;\n\nexport class Elapsed\n{\n tStart: any;\n tDur: any;\n\n constructor(bStart: boolean = true)\n {\n this.tStart = undefined;\n this.tDur = undefined;\n if (bStart) this.start();\n }\n\n start(): void\n {\n if (hrtime)\n this.tStart = hrtime();\n else\n this.tStart = performance.now();\n if (this.tDur) this.tDur = undefined;\n }\n\n end(): void\n {\n if (this.tStart === undefined) this.start();\n if (hrtime)\n this.tDur = hrtime(this.tStart);\n else\n this.tDur = performance.now() - this.tStart;\n }\n\n ms(): number\n {\n if (this.tDur === undefined) this.end();\n if (hrtime)\n return Math.round((this.tDur[0]*1000) + (this.tDur[1]/1000000));\n else\n return this.tDur;\n }\n\n nano(): number\n {\n if (this.tDur === undefined) this.end();\n if (hrtime)\n return (this.tDur[0]*1000000000) + this.tDur[1];\n else\n return this.tDur * 1000000;\n }\n}\n\nexport class MultiTimer\n{\n _overall: Elapsed;\n _segment: Elapsed;\n _msAggregate: number;\n\n constructor(bStart: boolean = true)\n {\n this._overall = new Elapsed(bStart);\n this._segment = new Elapsed(bStart);\n this._msAggregate = 0;\n }\n\n start(): void\n {\n this._overall.start();\n this._segment = new Elapsed();\n this._msAggregate = 0;\n }\n\n end(): number\n {\n this._overall.end();\n this.segend();\n return this._overall.ms();\n }\n\n segstart(): void\n {\n this._segment = new Elapsed();\n }\n\n segend(): number\n {\n let ms = 0;\n if (this._segment)\n {\n ms = this._segment.ms();\n this._msAggregate += ms;\n this._segment = null;\n }\n return ms;\n }\n\n get overall(): number { return this._overall.ms() }\n get aggregate(): number { return this._msAggregate }\n}\n\nexport class Deadline\n{\n msDelta: number;\n elapsed: Elapsed;\n\n constructor(msDelta: number)\n {\n this.msDelta = msDelta;\n this.elapsed = new Elapsed();\n }\n\n start(): void\n {\n this.elapsed.start();\n }\n\n done(): boolean\n {\n this.elapsed.end();\n return this.elapsed.ms() > this.msDelta;\n }\n}\n\nexport function createGuid(): string\n{\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = Math.random()*16|0, v = c === 'x' ? r : (r&0x3|0x8);\n return v.toString(16);\n });\n}\n\ntype LoopTest = WeakMap<any,boolean>;\n\nfunction _sizeof(a: any, loops: LoopTest): number\n{\n if (a === null || a === undefined) return 0;\n\n switch (typeof a)\n {\n default: return 0;\n case 'number': return 8;\n case 'boolean': return 4;\n case 'string': return a.length * 2;\n\n case 'object':\n {\n if (loops.has(a))\n return 0;\n else\n loops.set(a, true);\n\n let t: number = 0;\n if (Array.isArray(a))\n {\n for (let i: number = 0; i < a.length; i++)\n t += _sizeof(a[i], loops);\n t += 8; // length\n }\n else if (Buffer && Buffer.isBuffer(a))\n {\n t = a.length;\n }\n else if (a.hasOwnProperty === undefined)\n return t;\n else\n {\n for (var key in a) if (a.hasOwnProperty && a.hasOwnProperty(key))\n {\n t += _sizeof(key, loops); // this is a good estimate of download size, but poor estimate of internal size\n // because of JS object templating vs. naive hashtables\n t += _sizeof(a[key], loops);\n }\n }\n return t;\n }\n }\n}\n\nexport function sizeof(a: any): number\n{\n let loops: LoopTest = new WeakMap();\n let n: number = _sizeof(a, loops);\n return n;\n}\n\nexport function depthof(a: any): number\n{\n if (a === null || a === undefined) return 1;\n\n switch (typeof a)\n {\n default: return 1;\n case 'number': return 1;\n case 'boolean': return 1;\n case 'string': return 1;\n\n case 'object':\n {\n let d: number = 0;\n if (Array.isArray(a))\n return a.length > 0 ? (1 + depthof(a[0])) : 2; // still return 2 for empty array\n else if (Buffer && Buffer.isBuffer(a))\n return 2;\n else if (a.hasOwnProperty === undefined)\n return 1;\n else\n {\n for (var key in a) if (a.hasOwnProperty(key))\n return 1 + depthof(a[key]);\n return 2; // or 2 for empty object\n }\n }\n }\n}\nexport function isEmpty(o: any): boolean\n{\n if (o === null || o === undefined) return true;\n for (var p in o) if (o.hasOwnProperty(p)) return false;\n return true;\n}\n\nexport function countKeys(o: any): number\n{\n if (o === undefined || typeof o !== 'object') return -1;\n\n let count: number = 0;\n for (let p in o) if (o.hasOwnProperty(p))\n count++;\n return count;\n}\n\nexport function nthProperty(o: any, n: number = 0): any\n{\n for (let p in o) if (o.hasOwnProperty(p))\n {\n if (n <= 0) return o[p];\n n--;\n }\n return undefined;\n}\n\nexport function nthKey(o: any, n: number = 0): any\n{\n for (let p in o) if (o.hasOwnProperty(p))\n {\n if (n <= 0) return p;\n n--;\n }\n return undefined;\n}\n\nexport function partialEqual(o: any, subset: any): boolean\n{\n for (let p in subset) if (subset.hasOwnProperty(p))\n if (o[p] !== subset[p])\n return false;\n return true;\n}\n\nexport interface EqOptions\n{\n omitKey?: { [key: string]: boolean },\n unorderedArrays?: boolean,\n emptyStringIsNull: boolean,\n}\n\nfunction exactEqual(o1: any, o2: any, options?: EqOptions): boolean\n{\n if (o1 === o2) return true;\n if (options && options.emptyStringIsNull)\n if ((o1 == null && o2 == '') || (o2 == null && o1 == ''))\n return true;\n return false;\n}\n\nexport function deepEqual(o1: any, o2: any, options?: EqOptions): boolean\n{\n // fast exit\n if (exactEqual(o1, o2, options)) return true;\n\n // must be same types\n if (typeof o1 !== typeof o2) return false;\n\n // Already tested for exact primitive equality so if not objects, not equal\n if (typeof o1 !== 'object' || o1 == null) return false;\n if (typeof o2 !== 'object' || o2 == null) return false;\n\n // Special case array\n if (Array.isArray(o1))\n {\n if (! Array.isArray(o2)) return false;\n if (o1.length != o2.length) return false;\n if (options && options.unorderedArrays)\n {\n o1 = o1.sort();\n o2 = o2.sort();\n }\n for (let i: number = 0; i < o1.length; i++)\n if (! deepEqual(o1[i], o2[i], options))\n return false;\n return true;\n }\n\n // Special case object\n if (o1.hasOwnProperty === undefined || o2.hasOwnProperty === undefined)\n return exactEqual(o1, o2, options);\n\n for (let p in o1) if (o1.hasOwnProperty(p))\n {\n if (options && options.omitKey && options.omitKey[p])\n continue;\n if (o2[p] === undefined)\n return false;\n if (! deepEqual(o1[p], o2[p], options))\n return false;\n }\n // If any properties in o2 aren't in o1, not equal\n for (let p in o2) if (o2.hasOwnProperty(p))\n {\n if (options && options.omitKey && options.omitKey[p])\n continue;\n if (o1[p] === undefined)\n return false;\n }\n\n return true;\n}\n\nconst Months = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ];\n\nexport function prettyDate(d: Date): string\n{\n if (d == null) return 'unknown';\n\n let mmm = Months[d.getMonth()];\n let dd = d.getDate();\n let yyyy = d.getFullYear();\n let hh = d.getHours();\n let m = d.getMinutes();\n let mm = m < 10 ? `0${m}` : String(m);\n let ampm = hh >= 12 ? 'PM' : 'AM';\n if (hh > 12) hh -= 12;\n\n return `${mmm} ${dd}, ${yyyy} at ${hh}:${mm} ${ampm}`;\n}\n\nexport function relativeDate(d: Date): string\n{\n if (d == null) return 'unknown';\n let now = new Date();\n let yyyyNow = now.getFullYear();\n let mmmNow = Months[now.getMonth()];\n let ddNow = now.getDate();\n\n let mmm = Months[d.getMonth()];\n let dd = d.getDate();\n let yyyy = d.getFullYear();\n let hh = d.getHours();\n let m = d.getMinutes();\n let mm = m < 10 ? `0${m}` : String(m);\n let ampm = hh >= 12 ? 'PM' : 'AM';\n if (hh > 12) hh -= 12;\n\n if (yyyyNow === yyyy && mmmNow === mmm && ddNow === dd)\n return `Today at ${hh}:${mm} ${ampm}`;\n else if (yyyyNow === yyyy)\n return `${mmm} ${dd}`;\n else\n return `${mmm} ${dd}, ${yyyy}`;\n}\n\nconst OneMinute = 1000 * 60;\nconst OneHour = OneMinute * 60;\nconst OneDay = OneHour * 24;\n\nexport function recentDate(d: Date): string\n{\n if (d == null) return 'u';\n let now = new Date();\n let msNow = now.getTime();\n let msThen = d.getTime();\n let msDelta = msNow - msThen;\n\n // Within the hour, display in minutes\n if (msDelta < OneHour)\n return `${Math.round(msDelta/OneMinute)+1}m`;\n\n // Within the day, display in hours\n else if (msDelta < OneDay)\n return `${Math.round(msDelta/OneHour)+1}h`;\n\n // Otherwise, display using relativeDate\n else\n return relativeDate(d);\n}\n\nexport function textToHtml(sText: string): string\n{\n let lines: string[] = sText.split('\\n');\n let aHtml: string[] = [];\n let inTable: boolean = false;\n aHtml.push('<body>');\n for (let i: number = 0; i < lines.length; i++)\n {\n let line = lines[i];\n let isRow: boolean = line.indexOf('|') === 0;\n if (inTable && !isRow)\n {\n aHtml.push('</tbody></table>');\n inTable = false;\n }\n if (isRow && !inTable)\n {\n inTable = true;\n aHtml.push('<table border=\"1\" cellspacing=\"0\" cellpadding=\"2\"><tbody>');\n }\n if (isRow)\n {\n let cells = line.split('|');\n if (cells.length > 2)\n {\n aHtml.push('<tr>');\n for (let j: number = 1; j < cells.length-1; j++)\n aHtml.push(`<td>${cells[j]}</td>`);\n aHtml.push('</tr>');\n }\n }\n else\n aHtml.push(`<div>${line} </div>`);\n }\n if (inTable)\n aHtml.push('</tbody></table>');\n aHtml.push('</body>');\n return aHtml.join('');\n}\n\nexport function shallowCopy(src: any): any\n{\n if (src === null || src === undefined) return src;\n\n switch (typeof src)\n {\n case 'boolean':\n case 'number':\n case 'string':\n case 'symbol':\n case 'function':\n default:\n return src;\n\n case 'object':\n if (Array.isArray(src))\n return src.slice();\n else\n {\n let copy: any = {};\n\n for (var p in src) if (src.hasOwnProperty(p))\n copy[p] = src[p];\n return copy;\n }\n }\n}\n\nexport function shallowAssign(o1: any, o2: any): any\n{\n if (o1 === null || o1 === undefined) o1 = {};\n if (o2 === null || o2 === undefined) return o1;\n if (typeof o2 !== 'object' || typeof o1 !== 'object') return o1;\n\n for (var p in o2) if (o2.hasOwnProperty(p))\n o1[p] = o2[p];\n return o1;\n}\n\nexport function shallowDelete(o1: any, o2: any): any\n{\n if (o1 == null || o2 == null) return o1;\n if (typeof o2 !== 'object' || typeof o1 !== 'object') return o1;\n\n for (var p in o2) if (o2.hasOwnProperty(p))\n delete o1[p];\n return o1;\n}\n\nexport function shallowAssignImmutable(o1: any, o2: any): any\n{\n if (o1 === null || o1 === undefined) o1 = {};\n if (o2 === null || o2 === undefined) return o1;\n if (typeof o2 !== 'object' || typeof o1 !== 'object') return o1;\n\n // First determine whether o2 changes any properties, if it has, make new instance\n let oNew: any = o1;\n for (let p in o2) if (o2.hasOwnProperty(p))\n {\n if (o1[p] != o2[p])\n {\n oNew = shallowCopy(o1);\n break;\n }\n }\n if (oNew !== o1)\n shallowAssign(oNew, o2);\n return oNew;\n}\n\nexport function shallowEqual(o1: any, o2: any): boolean\n{\n if (o1 === undefined || o2 === undefined || typeof o1 !== 'object' || typeof o2 !== 'object')\n return o1 === o2;\n\n if (Array.isArray(o1) && Array.isArray(o2))\n {\n if (o1.length != o2.length) return false;\n for (let i: number = 0; i < o1.length; i++)\n if (o1[i] !== o2[i]) return false;\n return true;\n }\n else\n {\n let p: any;\n\n for (p in o1) if (o1.hasOwnProperty(p))\n if (o1[p] !== o2[p]) return false;\n for (p in o2) if (o2.hasOwnProperty(p))\n if (o1[p] === undefined) return false;\n return true;\n }\n}\n\nexport function deepCopy(src: any): any\n{\n // Beware typeof oddities\n if (src === null || src === undefined) return src;\n\n if (typeof src === 'object')\n {\n if (Array.isArray(src))\n {\n let dst: any[] = [];\n\n for (let i: number = 0; i < src.length; i++)\n dst.push(deepCopy(src[i]));\n return dst;\n }\n else\n {\n if (src.hasOwnProperty === undefined)\n return src;\n\n let dst: any = {};\n for (var p in src) if (src.hasOwnProperty(p))\n dst[p] = deepCopy(src[p]);\n return dst;\n }\n }\n else\n return src;\n}\n\nexport function deepAccum(accum: any, o: any): any\n{\n if (accum == null) accum = {};\n if (o == null) return accum;\n for (let p in o) if (o.hasOwnProperty(p))\n {\n let vs: any = o[p];\n let vd: any = accum[p];\n let ts = typeof vs;\n if (ts === 'number')\n {\n if (vd !== undefined && typeof vd !== 'number')\n throw 'deepAccum: unexpected type mismatch';\n if (p === 'min')\n accum[p] = vd === undefined ? vs : Math.min(vd, vs);\n else if (p === 'max')\n accum[p] = vd === undefined ? vs : Math.max(vd, vs);\n else\n accum[p] = (vd === undefined ? 0 : vd) + vs;\n }\n else if (vs == null || ts === 'string' || ts === 'boolean')\n accum[p] = vs;\n else if (ts === 'object')\n {\n if (vd === undefined)\n {\n vd = {};\n accum[p] = vd;\n }\n else if (typeof vd !== 'object')\n throw 'deepAccum: unexpected type mismatch';\n deepAccum(vd, vs);\n }\n }\n return accum;\n}\n\nexport function precisionRound(n: number, p: number): number\n{\n let f: number = Math.pow(10, p);\n return Math.round(n * f) / f;\n}\n\nexport function percentString(num: number, den: number, precision: number = 0): string\n{\n if (den == 0)\n return '(-)';\n\n let p: number = precisionRound((num/den) * 100, precision);\n\n return String(p) + '%';\n}\n\nexport function hash(s: string): number\n{\n let hash: number = 5381;\n let i: number = s.length;\n\n while (i)\n hash = (hash * 33) ^ s.charCodeAt(--i);\n\n /* JavaScript does bitwise operations (like XOR, above) on 32-bit signed\n * integers. Since we want the results to be always positive, convert the\n * signed int to an unsigned by doing an unsigned bitshift. */\n return hash >>> 0;\n}\n\nexport function hashObject(o: any): number\n{\n return hash(o ? JSON.stringify(o) : '');\n}\n\nconst HexTable: string[] = [ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' ];\nexport function toHex(n: number): string\n{\n if (n < 0 || n > 255) throw('only 0 to 255 supported now');\n n = Math.floor(n);\n return HexTable[n >> 4] + HexTable[n & 15];\n}\n\nexport function toRGBA(color: string, alpha: number): string\n{\n // Allow passing rgba in rather than only '#ffffff' form\n if (color.indexOf('rgba') === 0)\n return color;\n\n let r: number;\n let g: number;\n let b: number;\n\n switch (color)\n {\n case 'white':\n r = 255; g = 255; b = 255;\n break;\n\n case 'black':\n r = 0; g = 0; b = 0;\n break;\n\n default:\n r = parseInt(color.substr(1, 2), 16);\n g = parseInt(color.substr(3, 2), 16);\n b = parseInt(color.substr(5, 2), 16);\n break;\n }\n\n return `rgba(${String(r)}, ${String(g)}, ${String(b)}, ${String(alpha)})`;\n}\n\nexport function toRGBAIntensity(color: string, intensity: number, alpha: number): string\n{\n // for now assume color is black\n let g: number = precisionRound(255 * intensity, 0);\n return `rgba(${String(g)}, ${String(g)}, ${String(g)}, ${String(alpha)})`;\n}\n\n// Geo functions\nexport function distance(x0: number, y0: number, x1: number, y1: number): number\n{\n return Math.hypot(x0 - x1, y0 - y1);\n}\n\nexport function deg2rad(num: number): number { return num * Math.PI / 180; }\nexport function rad2deg(num: number): number { return num / Math.PI * 180; }\n\n// Restricts lon to range [-180..180]\nexport function wrapLon(lon: number): number\n{\n let worlds = Math.floor((lon + 180) / 360);\n return lon - (worlds * 360);\n}\n","module.exports = require(\"@dra2020/topojson-client\");;","module.exports = require(\"@dra2020/topojson-server\");;","module.exports = require(\"@dra2020/topojson-simplify\");;","module.exports = require(\"buffer\");;","module.exports = require(\"child_process\");;","module.exports = require(\"crypto\");;","module.exports = require(\"dgram\");;","module.exports = require(\"diff-match-patch\");;","module.exports = require(\"domain\");;","module.exports = require(\"events\");;","module.exports = require(\"fs\");;","module.exports = require(\"http\");;","module.exports = require(\"https\");;","module.exports = require(\"jmespath\");;","module.exports = require(\"os\");;","module.exports = require(\"path\");;","module.exports = require(\"polygon-clipping\");;","module.exports = require(\"querystring\");;","module.exports = require(\"splaytree\");;","module.exports = require(\"stream\");;","module.exports = require(\"tinyqueue\");;","module.exports = require(\"url\");;","module.exports = require(\"util\");;","module.exports = require(\"uuid\");;","module.exports = require(\"xml2js\");;","module.exports = require(\"zlib\");;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(\"./lib/all/all.ts\");\n"],"sourceRoot":""}
|