{"version":3,"sources":["webpack:///./node_modules/@peculiar/asn1-schema/build/es2015/convert.js","webpack:///./node_modules/@peculiar/asn1-schema/build/es2015/converters.js","webpack:///./node_modules/@peculiar/asn1-schema/build/es2015/decorators.js","webpack:///./node_modules/@peculiar/asn1-schema/build/es2015/enums.js","webpack:///./node_modules/@peculiar/asn1-schema/build/es2015/errors/index.js","webpack:///./node_modules/@peculiar/asn1-schema/build/es2015/errors/schema_validation.js","webpack:///./node_modules/@peculiar/asn1-schema/build/es2015/helper.js","webpack:///./node_modules/@peculiar/asn1-schema/build/es2015/index.js","webpack:///./node_modules/@peculiar/asn1-schema/build/es2015/objects.js","webpack:///./node_modules/@peculiar/asn1-schema/build/es2015/parser.js","webpack:///./node_modules/@peculiar/asn1-schema/build/es2015/schema.js","webpack:///./node_modules/@peculiar/asn1-schema/build/es2015/serializer.js","webpack:///./node_modules/@peculiar/asn1-schema/build/es2015/storage.js","webpack:///./node_modules/@peculiar/asn1-schema/build/es2015/types/bit_string.js","webpack:///./node_modules/@peculiar/asn1-schema/build/es2015/types/index.js","webpack:///./node_modules/@peculiar/asn1-schema/build/es2015/types/octet_string.js","webpack:///./node_modules/@peculiar/json-schema/build/index.es.js","webpack:///./node_modules/@peculiar/webcrypto/build/webcrypto.es.js","webpack:///./node_modules/asn1js/build/index.es.js","webpack:///./node_modules/pvtsutils/build/index.js","webpack:///./node_modules/pvutils/build/utils.es.js","webpack:///./node_modules/sdp/sdp.js","webpack:///./node_modules/tslib/tslib.es6.js","webpack:///./node_modules/webcrypto-core/build/webcrypto-core.es.js","webpack:///./node_modules/webrtc-adapter/src/js/adapter_core.js","webpack:///./node_modules/webrtc-adapter/src/js/adapter_factory.js","webpack:///./node_modules/webrtc-adapter/src/js/chrome/chrome_shim.js","webpack:///./node_modules/webrtc-adapter/src/js/chrome/getdisplaymedia.js","webpack:///./node_modules/webrtc-adapter/src/js/chrome/getusermedia.js","webpack:///./node_modules/webrtc-adapter/src/js/common_shim.js","webpack:///./node_modules/webrtc-adapter/src/js/firefox/firefox_shim.js","webpack:///./node_modules/webrtc-adapter/src/js/firefox/getdisplaymedia.js","webpack:///./node_modules/webrtc-adapter/src/js/firefox/getusermedia.js","webpack:///./node_modules/webrtc-adapter/src/js/safari/safari_shim.js","webpack:///./node_modules/webrtc-adapter/src/js/utils.js","webpack:///./src/api/webrtc.js"],"names":["isIOS","isMobile","crypto","Crypto","window","subtle","e","viewers","Map","startViewer","Player","Informs","viewer","remoteView","remoteStream","localView","localStream","signalingClient","dataChannel","peerConnection","peerConnectionStatsInterval","kinesisVideoClient","AWS","KinesisVideo","correctClockSkew","describeSignalingChannelResponse","describeSignalingChannel","ChannelName","channelName","promise","channelARN","ChannelInfo","ChannelARN","getSignalingChannelEndpointResponse","getSignalingChannelEndpoint","SingleMasterChannelEndpointConfiguration","Protocols","Role","KVSWebRTC","VIEWER","endpointsByProtocol","ResourceEndpointList","reduce","endpoints","endpoint","Protocol","ResourceEndpoint","kinesisVideoSignalingChannelsClient","KinesisVideoSignalingChannels","HTTPS","getIceServerConfigResponse","getIceServerConfig","iceServers","natTraversalDisabled","forceTURN","push","urls","config","region","IceServerList","forEach","iceServer","Uris","username","Username","credential","Password","channelEndpoint","WSS","clientId","role","credentials","systemClockOffset","resolution","widescreen","width","ideal","height","constraints","video","sendVideo","sendAudio","audio","echoCancellation","configuration","iceTransportPolicy","RTCPeerConnection","openDataChannel","dataChannelObj","createDataChannel","on","sendAUdio","navigator","mediaDevices","getUserMedia","getTracks","track","addTrack","setLocalDescription","createOffer","offerToReceiveAudio","offerToReceiveVideo","useTrickleICE","sendSdpOffer","localDescription","answer","setRemoteDescription","candidate","addIceCandidate","logPeerConnectionState","error","addEventListener","includes","sendIceCandidate","onconnectionstatechange","evt","oniceconnectionstatechange","event","rtcPeerConnection","target","iceConnectionState","stats","getStats","report","type","state","id","localCandidateId","remoteCandidateId","stopViewer","iceCandidatesCollected","Promise","resolve","reject","onicecandidate","ontrack","MediaStream","srcObject","style","display","streams","open","set","key","then","catch","err","get","clearInterval","close","stop","delete","removeRTCRemnants","keys","size"],"mappings":";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACiB;AACb;AACQ;AACtC;AACP;AACA,eAAe,yDAAa;AAC5B;AACA;AACA,eAAe,iDAAS;AACxB;AACA;AACA,oBAAoB,+DAAqB;AACzC,cAAc,+DAAqB;AACnC;AACA,oBAAoB,8CAAc;AAClC;AACA,yDAAyD,iBAAiB;AAC1E;AACA;AACA;AACA;;;;;;;;;;;;;ACrBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACM;AACK;AACrC;AACP,yCAAyC,2CAAW;AACpD;AACA;AACA,uBAAuB,2CAAW;AAClC;AACA,uBAAuB,8CAAc;AACrC;AACA;AACA;AACA;AACA,KAAK;AACL;AACO;AACP;AACA;AACA;AACA,0BAA0B,8CAAc,EAAE,gBAAgB;AAC1D;AACO;AACP;AACA,0BAA0B,iDAAiB,EAAE,QAAQ;AACrD;AACO;AACP;AACA,0BAA0B,8CAAc,EAAE,kBAAkB;AAC5D;AACO;AACP;AACA,sBAAsB,8CAAc;AACpC;AACO;AACP;AACA,0BAA0B,gDAAgB,EAAE,kBAAkB;AAC9D;AACO;AACP;AACA,0BAA0B,uDAAuB,EAAE,QAAQ;AAC3D;AACO;AACP;AACA,0BAA0B,8CAAc,EAAE,QAAQ;AAClD;AACO;AACP;AACA,0BAA0B,kDAAkB,EAAE,kBAAkB;AAChE;AACO;AACP,4BAA4B,wDAAW;AACvC;AACA;AACA;AACA;AACA;AACA,wCAAwC,QAAQ;AAChD;AACA;AACO,qDAAqD,iDAAiB;AACtE,oDAAoD,gDAAgB;AACpE,0DAA0D,sDAAsB;AAChF,wDAAwD,oDAAoB;AAC5E,0DAA0D,sDAAsB;AAChF,wDAAwD,oDAAoB;AAC5E,yDAAyD,qDAAqB;AAC9E,oDAAoD,gDAAgB;AACpE,wDAAwD,oDAAoB;AAC5E,wDAAwD,oDAAoB;AAC5E,wDAAwD,oDAAoB;AAC5E,0DAA0D,sDAAsB;AAChF;AACP;AACA,0BAA0B,8CAAc,EAAE,mBAAmB;AAC7D;AACO;AACP;AACA,0BAA0B,sDAAsB,EAAE,mBAAmB;AACrE;AACO;AACP;AACA;AACA,mBAAmB,2CAAW;AAC9B,KAAK;AACL;AACO;AACP;AACA,aAAa,mDAAY;AACzB;AACA,aAAa,mDAAY;AACzB;AACA,aAAa,mDAAY;AACzB;AACA,aAAa,mDAAY;AACzB;AACA,aAAa,mDAAY;AACzB;AACA,aAAa,mDAAY;AACzB;AACA,aAAa,mDAAY;AACzB;AACA,aAAa,mDAAY;AACzB;AACA,aAAa,mDAAY;AACzB;AACA,aAAa,mDAAY;AACzB;AACA,aAAa,mDAAY;AACzB;AACA,aAAa,mDAAY;AACzB;AACA,aAAa,mDAAY;AACzB;AACA,aAAa,mDAAY;AACzB;AACA,aAAa,mDAAY;AACzB;AACA,aAAa,mDAAY;AACzB;AACA,aAAa,mDAAY;AACzB;AACA,aAAa,mDAAY;AACzB;AACA,aAAa,mDAAY;AACzB;AACA,aAAa,mDAAY;AACzB;AACA,aAAa,mDAAY;AACzB;AACA,aAAa,mDAAY;AACzB;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACvIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA2C;AACJ;AACG;AACnC;AACP;AACA,SAAS,sDAAa;AACtB,iBAAiB,sDAAa;AAC9B,QAAQ,sDAAa;AACrB;AACA;AACA,iBAAiB,sDAAa;AAC9B;AACA;AACA;AACO,qCAAqC,OAAO,mDAAY,SAAS;AACjE,yCAAyC,OAAO,mDAAY,kBAAkB;AAC9E,8CAA8C,OAAO,mDAAY,uBAAuB;AACxF;AACP;AACA,SAAS,sDAAa;AACtB,iBAAiB,sDAAa;AAC9B,QAAQ,sDAAa;AACrB;AACA;AACA,iBAAiB,sDAAa;AAC9B;AACA,wCAAwC;AACxC;AACA,iCAAiC,4DAA2B;AAC5D;AACA,0EAA0E,YAAY,OAAO,wBAAwB;AACrH;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACnCA;AAAA;AAAA;AAAO;AACP;AACA;AACA;AACA;AACA,CAAC,oCAAoC;AAC9B;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,oCAAoC;;;;;;;;;;;;;ACnCrC;AAAA;AAAA;AAAA;AAAoC;;;;;;;;;;;;;ACApC;AAAA;AAAO;AACP;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACLA;AAAA;AAAA;AAAA;AAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uBAAuB;AAC1C;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACvCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA6B;AACC;AAC8D;AACvC;AAChB;AACQ;AACpB;AACC;AACA;;;;;;;;;;;;;ACR1B;AAAA;AAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACZA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACoB;AACV;AACS;AACI;AACd;AACnC;AACP;AACA,2BAA2B,8CAAc;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6DAAa;AAC7B;AACA;AACA;AACA,2BAA2B,sDAAa;AACxC,YAAY,sDAAa;AACzB;AACA,2CAA2C,kDAAkB,oBAAoB,mDAAY;AAC7F,mCAAmC,kDAAkB;AACrD;AACA;AACA;AACA,qBAAqB;AACrB;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,uCAAuC,oDAAoB,GAAG;AAC9D;AACA,0BAA0B,gEAAwB,2BAA2B,YAAY,gBAAgB,gCAAgC;AACzI;AACA;AACA,gBAAgB,6DAAa;AAC7B;AACA;AACA;AACA;AACA;AACA,sCAAsC,4DAA2B;AACjE;AACA,0FAA0F,YAAY;AACtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,6DAAa;AACvE,oGAAoG,6DAAa;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,+CAAe;AACjD,kCAAkC,0CAAU;AAC5C;AACA;AACA,+CAA+C,8CAAc;AAC7D;AACA,gFAAgF,wBAAwB;AACxG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,6DAAa;AAC7C;AACA;AACA;AACA,qDAAqD,mDAAY;AACjE,iDAAiD,mCAAM;AACvD;AACA,mEAAmE,aAAa;AAChF;AACA;AACA;AACA;AACA,oCAAoC,8CAAc;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,gEAAwB;AACzD;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACvIA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACoB;AACZ;AAClC;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,kCAAkC;AACxF;AACA;AACA,uCAAuC,kCAAkC;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,mDAAY;AAC9B,qBAAqB;AACrB;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,mDAAY;AACjD,iCAAiC,mCAAM;AACvC;AACA,sEAAsE,aAAa;AACnF;AACA,yCAAyC,OAAO;AAChD;AACA,qBAAqB,6DAAa;AAClC;AACA;AACA;AACA;AACA;AACA,wCAAwC,mDAAY;AACpD,mCAAmC,0CAAU,EAAE,OAAO;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,0CAAU,EAAE,OAAO;AAClD;AACA;AACA;AACA;AACA;AACA,sBAAsB,0CAAU;AAChC,sBAAsB,+CAAe;AACrC;AACA;AACA;AACA,4BAA4B,+CAAe;AAC3C;AACA;AACA,yBAAyB;AACzB;AACA,iBAAiB;AACjB;AACA;AACA;AACA,yDAAyD,6DAAa;AACtE;AACA,8BAA8B,kDAAkB;AAChD,8BAA8B,gDAAgB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,kDAAkB;AAC7D;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,yBAAyB;AACzB;AACA;AACA;AACA,uCAAuC,kDAAkB;AACzD;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,mDAAY;AAC7B,2BAA2B,+CAAe,EAAE,6BAA6B;AACzE,iBAAiB,mDAAY;AAC7B,2BAA2B,0CAAU,EAAE,6BAA6B;AACpE,iBAAiB,mDAAY;AAC7B,2BAA2B,6CAAa,EAAE,6BAA6B;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC9JA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAiC;AACU;AACU;AACE;AACb;AACnC;AACP;AACA,2BAA2B,gDAAgB;AAC3C;AACA;AACA;AACA;AACA;AACA,8CAA8C,6DAAa;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAa;AACpC,QAAQ,sDAAa;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,4DAA2B;AAC7D;AACA,sFAAsF,YAAY;AAClG;AACA;AACA;AACA;AACA,2DAA2D,wBAAwB;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,4DAAY;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,uEAAuE,6DAAa;AACpF;AACA,iEAAiE,2CAAW;AAC5E,+CAA+C,gDAAgB;AAC/D;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA,6BAA6B;AAC7B;AACA;AACA,+CAA+C,kDAAkB;AACjE;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,2CAA2C,kDAAkB;AAC7D;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,mDAAY;AAC7B,gCAAgC,+CAAe,EAAE,mBAAmB;AACpE;AACA,iBAAiB,mDAAY;AAC7B,gCAAgC,0CAAU,EAAE,mBAAmB;AAC/D;AACA,iBAAiB,mDAAY;AAC7B;AACA,+CAA+C,YAAY;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,IAAI,oCAAoC,mDAAY,kBAAkB,cAAc,YAAY;AAC7I;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAe;AACrC,sBAAsB,0CAAU;AAChC;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAe;AACrC,sBAAsB,0CAAU;AAChC;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACzJA;AAAA;AAAA;AAA4C;AACrC,0BAA0B,wDAAgB;;;;;;;;;;;;;ACDjD;AAAA;AAAA;AAAA;AAAA;AAAiC;AACiB;AAC3C;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,+DAAqB;AAC1C;AACA,6BAA6B,+DAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gDAAgB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,gDAAgB,EAAE,oDAAoD;AACzF;AACA;AACA,mBAAmB,gDAAgB,EAAE,OAAO;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC1DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA6B;AACE;;;;;;;;;;;;;ACD/B;AAAA;AAAA;AAAA;AAAA;AAAiC;AACiB;AAC3C;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,+DAAqB;AACrC,8BAA8B,+DAAqB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,kDAAkB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,kDAAkB,EAAE,wBAAwB;AAC/D;AACA;AACA,mBAAmB,kDAAkB,EAAE,OAAO;AAC9C;AACA;;;;;;;;;;;;;ACtCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gDAAgD,mBAAmB,YAAY,QAAQ;AACvF;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sCAAsC,WAAW,YAAY,QAAQ;AACrE;AACA;AACA;;AAEA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sCAAsC;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,oBAAoB;AACjE;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,wBAAwB,UAAU;AAClC;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,mBAAmB;AAC5F;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E,IAAI,GAAG,IAAI;AACrF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E,IAAI,GAAG,IAAI;AACrF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E,YAAY;AACtF;AACA;AACA;AACA;AACA;AACA,4EAA4E,eAAe;AAC3F;AACA;AACA;AACA;AACA,4EAA4E,eAAe;AAC3F;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,gCAAgC,EAAE,eAAe;AAC/G;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;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA;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,sFAAsF,IAAI;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,aAAa;AAC1F;AACA;AACA,8DAA8D,aAAa;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uFAAuF,IAAI,cAAc,UAAU;AACnH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,aAAa;AACnE;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;AACA;AACA;AACA;AACA;AACA,+DAA+D,KAAK;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,IAAI,cAAc,UAAU;AACzF;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B,gDAAgD,YAAY,eAAe,wBAAwB;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,aAAa;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEmJ;;;;;;;;;;;;;ACnenJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;;AAEuC;AAC2C;AACvC;AACX;AACC;AACI;AACF;AACA;AACyD;AACjC;AACM;;AAEjE;AACA,yBAAyB,6CAAM,MAAM,iDAAO;AAC5C,uBAAuB,iDAAO;AAC9B;;AAEA,wBAAwB,wDAAc;AACtC;AACA;AACA,oBAAoB,6CAAM;AAC1B,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAU;AACV,IAAI,sEAAQ,EAAE,oBAAoB,mEAAa,0BAA0B;AACzE;AACA,wDAAU;AACV,IAAI,sEAAQ,EAAE,wBAAwB,mEAAa,yCAAyC;AAC5F;AACA,wDAAU;AACV,IAAI,sEAAQ,EAAE,OAAO,mEAAa,SAAS;AAC3C;AACA,wDAAU;AACV,IAAI,sEAAQ,EAAE,OAAO,mEAAa,yBAAyB;AAC3D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,2BAA2B,sBAAsB;AACjD;AACA,2BAA2B,sBAAsB;AACjD;AACA,2BAA2B,sBAAsB;AACjD;AACA,2BAA2B,sBAAsB;AACjD;AACA,2BAA2B,sBAAsB;AACjD;AACA,2BAA2B,sBAAsB;AACjD;AACA,0BAA0B,6DAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA,wDAAU;AACV,IAAI,sEAAQ,EAAE,+CAA+C;AAC7D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,6CAAe;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,oEAAc;AACrC;AACA;AACA;AACA,0BAA0B,6DAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gEAAU,oBAAoB,6BAA6B;AACjF;AACA;AACA;AACA,2BAA2B,6CAAM;AACjC;AACA;AACA,0BAA0B,6DAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6DAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,6CAAM;AAChE;AACA,0DAA0D,6CAAM;AAChE;AACA,0DAA0D,6CAAM;AAChE;AACA,yDAAyD,6CAAM;AAC/D;AACA,0DAA0D,6CAAM;AAChE;AACA,0BAA0B,6DAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,6CAAM;AAChE;AACA,0DAA0D,6CAAM;AAChE;AACA,0DAA0D,6CAAM;AAChE;AACA,yDAAyD,6CAAM;AAC/D;AACA,0DAA0D,6CAAM;AAChE;AACA,0BAA0B,6DAAmB;AAC7C;AACA;AACA;AACA,uBAAuB,6CAAe,uBAAuB,qBAAqB;AAClF;AACA,cAAc,6CAAM;AACpB;AACA;AACA;AACA;AACA,yBAAyB,6CAAe,yBAAyB,qBAAqB;AACtF;AACA,cAAc,6CAAM;AACpB;AACA;AACA;AACA,uBAAuB,6CAAe,uBAAuB,qBAAqB,iBAAiB,6CAAM;AACzG;AACA,cAAc,6CAAM;AACpB;AACA;AACA;AACA;AACA,yBAAyB,6CAAe,yBAAyB,qBAAqB;AACtF;AACA,cAAc,6CAAM;AACpB;AACA;AACA;AACA,uBAAuB,6CAAe,uBAAuB,qBAAqB,iBAAiB,6CAAM;AACzG;AACA,SAAS;AACT;AACA,0BAA0B,6CAAM;AAChC;AACA;AACA,cAAc,6CAAM;AACpB;AACA;AACA;AACA;AACA,yBAAyB,6CAAe,yBAAyB,qBAAqB;AACtF;AACA;AACA;AACA;AACA,4BAA4B,6CAAM;AAClC;AACA;AACA;AACA,cAAc,6CAAM;AACpB;AACA;AACA;AACA,uBAAuB,6CAAe,yBAAyB,qBAAqB;AACpF;AACA,cAAc,6CAAM;AACpB;AACA;AACA;AACA,yBAAyB,6CAAe,2BAA2B,qBAAqB;AACxF;AACA,cAAc,6CAAM;AACpB;AACA;AACA;AACA,uBAAuB,6CAAe,uBAAuB,qBAAqB;AAClF;AACA,cAAc,6CAAM;AACpB;AACA;AACA;AACA;AACA,yBAAyB,6CAAe,yBAAyB,qBAAqB;AACtF;AACA,cAAc,6CAAM;AACpB;AACA;AACA;AACA,sBAAsB,6CAAM;;AAE5B;AACA;AACA;AACA;AACA,kBAAkB,6DAAmB;AACrC;AACA;AACA;AACA;AACA,gBAAgB,wDAAc;AAC9B;AACA;AACA;AACA;;AAEA,6BAA6B,6DAAmB;AAChD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,uBAAuB;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,aAAa,6CAAM;AACnB,WAAW,6CAAM;AACjB;AACA;AACA,oBAAoB,6CAAM;AAC1B;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,6CAAM;AACzB,uBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;AACA;AACA,mBAAmB,qDAAqB,OAAO,gBAAgB;AAC/D;AACA;AACA;AACA;AACA;AACA,kBAAkB,6CAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,6CAAM;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,wBAAwB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8DAAoB;AAClD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,uDAAuD,6CAAM;AAC7D;AACA;AACA;AACA;AACA,eAAe,6CAAM,yBAAyB,6CAAM;AACpD;AACA;AACA;AACA;AACA;AACA,gEAAgE,uBAAuB;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,6DAAmB;AAChD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,uBAAuB;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,6DAAmB;AAChD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,uBAAuB;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4BAA4B,4DAAkB;AAC9C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,uBAAuB;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,6DAAmB;AAChD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,uBAAuB;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6DAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA,wDAAU;AACV,IAAI,sEAAQ,EAAE,+CAA+C;AAC7D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,6CAAe;AAClC;AACA;AACA;AACA;AACA;AACA,uBAAuB,oEAAc;AACrC;AACA;AACA;AACA,0BAA0B,6DAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gEAAU,oBAAoB,6BAA6B;AACjF;AACA;AACA;AACA,2BAA2B,6CAAM;AACjC;AACA;AACA,0BAA0B,6DAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,6CAAM;AAChE;AACA,8DAA8D,6CAAM;AACpE;AACA,0BAA0B,6DAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,6CAAM;AAChE;AACA,8DAA8D,6CAAM;AACpE;AACA,0BAA0B,6DAAmB;AAC7C;AACA;AACA;AACA,uBAAuB,6CAAe;AACtC;AACA,cAAc,6CAAM;AACpB;AACA;AACA;AACA;AACA,yBAAyB,6CAAe;AACxC;AACA,cAAc,6CAAM;AACpB;AACA;AACA;AACA,uBAAuB,6CAAe,0CAA0C,6CAAM;AACtF;AACA,cAAc,6CAAM;AACpB;AACA;AACA;AACA;AACA,yBAAyB,6CAAe;AACxC;AACA,cAAc,6CAAM;AACpB;AACA;AACA;;AAEA,6BAA6B,0DAAgB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,4CAA4C;AAC5G;AACA,sBAAsB,6DAAmB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iCAAiC,0DAAgB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,4CAA4C;AAC5G;AACA,sBAAsB,6DAAmB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,8BAA8B,qBAAqB,OAAO,OAAO;AACjE;AACA;AACA,wBAAwB,sCAAsC;AAC9D;AACA,wBAAwB,sCAAsC;AAC9D;AACA;AACA;AACA,sBAAsB,6DAAmB;AACzC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,+DAAS,kBAAkB,mDAAS;AAC5D,eAAe,+DAAS,2BAA2B,mDAAS;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,oEAAc;AACjD;AACA;AACA,oBAAoB,gEAAU,iBAAiB,eAAe,mDAAS,gBAAgB;AACvF,4BAA4B,mDAAS;AACrC;AACA;AACA,6BAA6B,mEAAa;AAC1C,oBAAoB,6CAAM,MAAM,mEAAa;AAC7C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,+DAAS,kBAAkB,mDAAS;AAC5D,eAAe,+DAAS,0BAA0B,mDAAS;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,oEAAc;AACjD;AACA;AACA,oBAAoB,gEAAU,iBAAiB,eAAe,mDAAS,eAAe;AACtF,4BAA4B,mDAAS;AACrC;AACA;AACA,4BAA4B,mEAAa;AACzC,oBAAoB,6CAAM,MAAM,mEAAa;AAC7C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,6CAAM;AACrC,YAAY,6CAAM;AAClB,YAAY,6CAAM;AAClB;AACA,qBAAqB,6CAAe;AACpC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,oEAAc;AACrC;AACA;AACA;AACA;AACA,0BAA0B,6DAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gEAAU,oBAAoB,eAAe,mDAAS,gBAAgB;AACzG;AACA;AACA;AACA,mCAAmC,gEAAU,oBAAoB,eAAe,mDAAS,eAAe;AACxG;AACA;AACA;AACA;AACA,gCAAgC,+DAAS,gCAAgC,mDAAS;AAClF,+BAA+B,+DAAS,0BAA0B,mDAAS;AAC3E;AACA;AACA;AACA,gCAAgC,+DAAS,gCAAgC,mDAAS;AAClF,+BAA+B,+DAAS,2BAA2B,mDAAS;AAC5E;AACA;AACA;AACA,0BAA0B,6DAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6DAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6DAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6DAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6DAAmB;AAC7C;AACA;AACA;AACA,4BAA4B,mDAAS;AACrC;AACA;AACA,6BAA6B,mEAAa;AAC1C;AACA,mBAAmB,6CAAM,MAAM,mEAAa;AAC5C,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mDAAS;AACrC;AACA;AACA,4BAA4B,mEAAa;AACzC;AACA,mBAAmB,6CAAM,MAAM,mEAAa;AAC5C,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6DAAmB;AAC7C;AACA;AACA;AACA;AACA,uBAAuB,6CAAe;AACtC,sBAAsB,6CAAM;AAC5B;AACA,sDAAsD,4BAA4B;AAClF;AACA;AACA;AACA;AACA;AACA,8BAA8B,6CAAe;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAe;AACtC,sBAAsB,6CAAM;AAC5B;AACA,qDAAqD,4BAA4B;AACjF;AACA;AACA;AACA;AACA;AACA,8BAA8B,6CAAe;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,4BAA4B;AAC5E,qBAAqB,6CAAe;AACpC;AACA;AACA,8BAA8B,6CAAe;AAC7C;AACA;AACA;AACA,iDAAiD,4BAA4B;AAC7E,qBAAqB,6CAAe;AACpC;AACA;AACA,8BAA8B,6CAAe;AAC7C;AACA;AACA;AACA;;AAEA,6BAA6B,6DAAmB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,gCAAgC;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,6DAAmB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,gCAAgC;AAChG;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,6CAAe;AACpC,oBAAoB,6CAAM;AAC1B;AACA;AACA;;AAEA,8BAA8B,8DAAoB;AAClD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6CAAe;AACzC,oBAAoB,oEAA0B;AAC9C;AACA;AACA;AACA,QAAQ,6CAAe;AACvB;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA;AACA,6DAA6D,oCAAoC;AACjG;AACA,sBAAsB,6CAAe;AACrC;AACA,qBAAqB,6CAAe;AACpC,SAAS,EAAE,6CAAM;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,oCAAoC;AAClG;AACA,oBAAoB,6CAAe;AACnC;AACA,qBAAqB,6CAAe;AACpC,SAAS,EAAE,6CAAM;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,0BAA0B,6CAAe;AACzC,oBAAoB,oEAA0B;AAC9C;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA,cAAc,0BAA0B;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,gCAAgC;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,YAAY;AACnC;AACA;AACA;AACA;AACA;AACA,wBAAwB,6CAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4BAA4B,6DAAmB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iDAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,oDAAoB;AACxC;AACA;AACA;AACA;AACA,oBAAoB,qDAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,gCAAgC;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,KAAK,aAAa,0CAA0C,aAAa,KAAK;AAC7G,qBAAqB,gDAAgB;AACrC;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,6DAAmB,0CAA0C,WAAW;AAC1F;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,+DAAS,kBAAkB,mDAAS;AAC5D,eAAe,+DAAS,2BAA2B,mDAAS;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,oEAAc;AACjD;AACA;AACA;AACA,sBAAsB,6DAAmB;AACzC;AACA,4BAA4B,mDAAS;AACrC;AACA,iDAAiD,mEAAa,eAAe,mDAAS;AACtF,oBAAoB,gEAAU,iBAAiB,eAAe,mDAAS,eAAe;AACtF,6BAA6B,mEAAa;AAC1C,oBAAoB,6CAAM,MAAM,mEAAa;AAC7C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,+DAAS,kBAAkB,mDAAS;AAC5D,mBAAmB,mDAAS;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,oEAAc;AACjD;AACA;AACA;AACA,sBAAsB,6DAAmB;AACzC;AACA,oBAAoB,gEAAU,iBAAiB,eAAe,mDAAS,cAAc;AACrF,4BAA4B,mDAAS;AACrC;AACA,gDAAgD,mEAAa,eAAe,mDAAS;AACrF,4BAA4B,mEAAa;AACzC,oBAAoB,6CAAM,MAAM,mEAAa;AAC7C;AACA;AACA;;AAEA,2BAA2B,6DAAmB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,6DAAmB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,6DAAmB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6BAA6B,6DAAmB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8BAA8B,6DAAmB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8BAA8B,6DAAmB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8BAA8B,6DAAmB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,6CAAe;AACpC;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAe;AACtC,sBAAsB,6CAAM;AAC5B;AACA,sDAAsD,4BAA4B;AAClF;AACA;AACA;AACA;AACA;AACA,4BAA4B,+DAAS,kBAAkB,mDAAS;AAChE,6BAA6B,sDAAY,8BAA8B,uDAAa;AACpF;AACA;AACA;AACA;AACA,uBAAuB,6CAAe;AACtC,sBAAsB,6CAAM;AAC5B;AACA,qDAAqD,4BAA4B;AACjF;AACA;AACA;AACA;AACA,gCAAgC,mDAAS;AACzC,2BAA2B,uDAAa;AACxC,+BAA+B,sDAAY;AAC3C,wBAAwB,+DAAqB;AAC7C,wBAAwB,+DAAqB;AAC7C,+BAA+B,6CAAM,MAAM,mEAAa;AACxD;AACA;AACA;AACA;AACA;AACA,qBAAqB,6CAAe;AACpC,8BAA8B,+DAAS,qBAAqB,mDAAS;AACrE,gCAAgC,+DAAS,iCAAiC,mDAAS;AACnF,2BAA2B,6CAAM;AACjC,6BAA6B,+DAAS,8BAA8B,mDAAS;AAC7E,wCAAwC,6CAAM;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,oEAAc;AACrC;AACA;AACA;AACA;AACA,sCAAsC,+DAAS,iBAAiB,mDAAS;AACzE;AACA;AACA;AACA,0BAA0B,6DAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gEAAU,oBAAoB,eAAe,mDAAS,eAAe;AACxG;AACA;AACA;AACA,mCAAmC,gEAAU,oBAAoB,eAAe,mDAAS,cAAc;AACvG;AACA;AACA;AACA;AACA,mCAAmC,mDAAS;AAC5C;AACA;AACA;AACA,gCAAgC,+DAAS,gCAAgC,mDAAS;AAClF,mCAAmC,mDAAS;AAC5C;AACA;AACA;AACA;AACA,gCAAgC,+DAAS,gCAAgC,mDAAS;AAClF,+BAA+B,+DAAS,2BAA2B,mDAAS;AAC5E;AACA;AACA;AACA;AACA,0BAA0B,6DAAmB;AAC7C;AACA;AACA;AACA;AACA,sBAAsB,0DAAgB;AACtC;AACA;AACA;AACA,mCAAmC,+DAAS,mBAAmB,mDAAS;AACxE;AACA;AACA,sBAAsB,0DAAgB;AACtC;AACA;AACA,sBAAsB,0DAAgB;AACtC;AACA;AACA;AACA,4BAA4B,mDAAS;AACrC;AACA,iDAAiD,mEAAa,eAAe,mDAAS;AACtF,6BAA6B,mEAAa;AAC1C;AACA,mBAAmB,6CAAM,MAAM,mEAAa;AAC5C,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA,4BAA4B,mDAAS;AACrC;AACA;AACA,gDAAgD,mEAAa,eAAe,mDAAS;AACrF;AACA;AACA,mBAAmB,6CAAM,MAAM,mEAAa;AAC5C,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4BAA4B,4DAAkB;AAC9C;AACA;AACA,2BAA2B,uDAAa;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,gCAAgC;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2BAA2B,2DAAiB;AAC5C;AACA;AACA,2BAA2B,uDAAa;AACxC;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,gCAAgC;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,uDAAuD;AACvG;AACA;AACA;;AAEA;AACA,KAAK,mDAAS;AACd,aAAa,mDAAS;AACtB,KAAK,mDAAS;AACd,YAAY,mDAAS;AACrB,KAAK,mDAAS;AACd,eAAe,mDAAS;AACxB,KAAK,mDAAS;AACd,cAAc,mDAAS;AACvB;AACA;AACA;AACA;AACA,kBAAkB,6DAAmB,0CAA0C,WAAW;AAC1F;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,+DAAS,kBAAkB,mDAAS;AAC5D,eAAe,+DAAS,2BAA2B,mDAAS;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,oEAAc;AACjD;AACA;AACA;AACA,sBAAsB,6DAAmB;AACzC;AACA,4BAA4B,mDAAS;AACrC;AACA,oBAAoB,gEAAU,iBAAiB,eAAe,mDAAS,kBAAkB;AACzF,6BAA6B,mEAAa;AAC1C,oBAAoB,6CAAM,MAAM,mEAAa;AAC7C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,+DAAS,kBAAkB,mDAAS;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,iDAAO;AACtB,SAAS;AACT;AACA;AACA;AACA,sBAAsB,6DAAmB;AACzC;AACA;AACA,sBAAsB,6DAAmB;AACzC;AACA,4BAA4B,mDAAS;AACrC;AACA,4BAA4B,iDAAO;AACnC,oBAAoB,6CAAM,MAAM,mEAAa;AAC7C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,6CAAe;AACpC;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,4BAA4B;AAClF;AACA;AACA;AACA;AACA,0BAA0B,6CAAe,YAAY,6CAAM;AAC3D,eAAe,oEAA0B;AACzC;AACA;AACA;AACA,qDAAqD,4BAA4B;AACjF;AACA;AACA;AACA;AACA,mBAAmB,6CAAe,cAAc,6CAAM,sBAAsB,6CAAM;AAClF;AACA;AACA;AACA,0BAA0B,6CAAe;AACzC;AACA;AACA;AACA,SAAS;AACT,2BAA2B,6CAAe;AAC1C;AACA;AACA;AACA,SAAS;AACT,qBAAqB,6CAAe;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,uBAAuB,oEAAc;AACrC;AACA;AACA;AACA;AACA,sCAAsC,+DAAS,iBAAiB,mDAAS;AACzE;AACA;AACA;AACA,0BAA0B,6DAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,gEAAU,oBAAoB,eAAe,mDAAS,kBAAkB;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,iDAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,+DAAS,gCAAgC,mDAAS;AAClF;AACA;AACA;AACA,gCAAgC,+DAAS,gCAAgC,mDAAS;AAClF,+BAA+B,+DAAS,2BAA2B,mDAAS;AAC5E;AACA;AACA;AACA,0BAA0B,6DAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,iDAAO;AACtB,SAAS;AACT,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,iDAAO;AACtB,SAAS;AACT,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4BAA4B,4DAAkB;AAC9C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,gCAAgC;AAC/F;AACA;AACA;;AAEA,6BAA6B,6DAAmB;AAChD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,uDAAuD;AACvG;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,gCAAgC;AAC/F;AACA;AACA;;AAEA;AACA;;AAEA,6BAA6B,6DAAmB;AAChD;AACA;AACA,yBAAyB,oEAA0B;AACnD;AACA,YAAY,6CAAe,oCAAoC,6CAAM;AACrE;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,uBAAuB,6CAAM;AAC7B,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,kBAAkB,6DAAmB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,yBAAyB;AAC7C;AACA;AACA;AACA;AACA,wDAAU;AACV,IAAI,sEAAQ,EAAE,+CAA+C;AAC7D;;AAEA,2BAA2B,2DAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,6CAAe;AAClC;AACA;AACA;AACA;AACA,qBAAqB,6CAAe;AACpC,oBAAoB,6CAAM;AAC1B;AACA;AACA;AACA;AACA,qBAAqB,6CAAe;AACpC,oBAAoB,6CAAM;AAC1B,4BAA4B,6CAAM;AAClC;AACA;AACA;AACA;AACA;AACA,sBAAsB,gEAAU,oBAAoB,8BAA8B;AAClF;AACA;AACA;AACA,2BAA2B,6CAAM;AACjC;AACA;AACA,0BAA0B,6DAAmB;AAC7C;AACA;AACA,mBAAmB,4BAA4B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,oEAAc;AACrC;AACA;AACA;AACA,0BAA0B,6DAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,2BAA2B,2DAAiB;AAC5C;AACA;AACA,sBAAsB,6DAAmB;AACzC;AACA;AACA,mBAAmB,6CAAM;AACzB,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,6CAAe;AAC1C;AACA,qBAAqB,oEAAuB;AAC5C,oBAAoB,6CAAe,kBAAkB,oEAAuB;AAC5E,oBAAoB,oEAAuB;AAC3C;AACA,wBAAwB,6CAAM;AAC9B;AACA,uBAAuB,gBAAgB;AACvC,wBAAwB,6CAAe;AACvC,wBAAwB,6CAAM,8BAA8B,6CAAM;AAClE;AACA;AACA,eAAe,6CAAM;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB,6CAAe,2CAA2C,iCAAiC;AAChH,oBAAoB,6CAAM;AAC1B;AACA;AACA;;AAEA,+BAA+B,+DAAqB;AACpD;AACA;AACA;AACA;;AAEA,+BAA+B,+DAAqB;AACpD;AACA;AACA;AACA;;AAEA,2BAA2B,2DAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iDAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,+CAAe;AACrE;AACA;AACA;AACA;AACA,uBAAuB,gDAAgB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qBAAqB,qDAAW;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAM;AAC7B,QAAQ,6CAAe;AACvB;AACA;AACA;;AAEkB;;;;;;;;;;;;;AC/uElB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;;AAEuC;AACJ;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA,mBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA;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;;AAEA;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,sDAAsD,+DAA+B;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,iDAAiB;AAC/C;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA,iBAAiB,wFAAwF,KAAK;AAC9G;AACA;AACA;AACA,qCAAqC,+DAA+B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iDAAiB;AAChD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,aAAa,GAAG,KAAK;AACtC;AACA;AACA;AACA;AACA,mDAAmD,+DAA+B;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,kDAAkB;AACjD;AACA;AACA;AACA;AACA;AACA,+BAA+B,gBAAgB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,0BAA0B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+DAA+B;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,+BAA+B;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,WAAW;AACtC;AACA;AACA;AACA;AACA,iCAAiC,oDAAoB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,iBAAiB,cAAc,GAAG,KAAK;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,+DAA+B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oDAAoB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,kDAAkB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,2BAA2B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,iBAAiB,wEAAwE,KAAK;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,iDAAiB;AAChC;AACA;AACA,kBAAkB,sBAAsB,KAAK,iDAAiB,8CAA8C;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qDAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,sCAAsC,KAAK;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB,MAAM,sBAAsB;AACpE;AACA;AACA;;AAEA;AACA,iBAAiB,kCAAkC,KAAK;AACxD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,+DAA+B;AACvD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,sDAAsD,KAAK;AAC5E;AACA;AACA;AACA;AACA;AACA,qBAAqB,+DAA+B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,uBAAuB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E,EAAE;AAC5E;AACA;AACA,kBAAkB,uBAAuB;AACzC;AACA;AACA,iBAAiB,UAAU,MAAM,kBAAkB;AACnD,iBAAiB,UAAU;AAC3B;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA,iBAAiB,uBAAuB,KAAK;AAC7C;AACA;AACA,gCAAgC,+DAA+B;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+DAA+B;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,oDAAoB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB,KAAK,cAAc;AAC3D;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA,iBAAiB,uCAAuC,KAAK;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,uBAAuB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,iBAAiB,aAAa,eAAe,iBAAiB,KAAK;AACnE;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB,KAAK,iDAAiB,qCAAqC;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAA+B;AAC9C;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA,iBAAiB,uDAAuD,KAAK;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,+DAA+B;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,iBAAiB,aAAa,eAAe,iBAAiB,KAAK;AACnE;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,sBAAsB,KAAK,kEAAkE;AACnH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,QAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sDAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sDAAsB;AAC9C;AACA;AACA;AACA;AACA,oCAAoC,QAAQ;AAC5C;AACA;AACA,6CAA6C,QAAQ;AACrD;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAsB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,QAAQ;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,QAAQ;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,uBAAuB,KAAK;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,oDAAoB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,oDAAoB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,iBAAiB;AACzE;AACA,2BAA2B,OAAO;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL,CAAC;;AAED;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,iDAAiB;AACrD;AACA;AACA;AACA,yCAAyC,iDAAiB,cAAc;AACxE;AACA,2BAA2B,+DAA+B,cAAc,iDAAiB;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,qCAAqC,yCAAyC;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,sBAAsB,KAAK,2BAA2B;AACxE;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA,iBAAiB,mDAAmD,KAAK;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+DAA+B;AACzD;AACA;AACA;AACA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oDAAoB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kBAAkB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,4BAA4B;AACvD;AACA;AACA;AACA;AACA,2BAA2B,kDAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,SAAS;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,iDAAiB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;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,iBAAiB,sCAAsC,KAAK;AAC5D;AACA;AACA;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,uBAAuB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,uBAAuB,uBAAuB;AAC9C;AACA;AACA;AACA,4BAA4B,OAAO;AACnC;AACA,2BAA2B,EAAE,QAAQ;AACrC;AACA,iCAAiC,EAAE,OAAO,MAAM;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uBAAuB;AAC9C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB,KAAK,sCAAsC;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA,iBAAiB,8BAA8B,KAAK;AACpD;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+DAA+B;AACzD;AACA;AACA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oDAAoB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,4BAA4B;AACvD;AACA;AACA;AACA;AACA,2BAA2B,kDAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,SAAS;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,iDAAiB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,sCAAsC,KAAK;AAC5D;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,uBAAuB;AAC9C;AACA;AACA;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;AACA,uBAAuB,uBAAuB;AAC9C;AACA;AACA;AACA,4BAA4B,OAAO;AACnC;AACA,2BAA2B,EAAE,QAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uBAAuB;AAC9C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB,KAAK,sCAAsC;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA,iBAAiB,gBAAgB,KAAK;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB,gBAAgB,KAAK;AACtC;AACA;AACA;AACA,gEAAgE,+DAA+B;AAC/F;AACA;AACA;AACA;AACA,uBAAuB,YAAY;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uCAAuC,+DAA+B;AACtE;AACA,oCAAoC,iDAAiB;AACrD;AACA;AACA,qEAAqE,GAAG;AACxE,oCAAoC,iDAAiB;AACrD;AACA;AACA;AACA,sDAAsD,iDAAiB;AACvE;AACA;AACA;AACA;;AAEA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA,gCAAgC,iDAAiB;AACjD,uCAAuC,+DAA+B;AACtE;AACA;AACA;AACA,sDAAsD,iDAAiB;AACvE;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,gBAAgB,KAAK;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,eAAe;AACtC,4BAA4B,kDAAkB;AAC9C;AACA;AACA;AACA;AACA,+CAA+C,QAAQ;AACvD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,gBAAgB,KAAK;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA,iBAAiB,kCAAkC,KAAK;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,+DAA+B;AACvF;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,iDAAiB;AAC9C,6BAA6B,iDAAiB;AAC9C,6BAA6B,iDAAiB;AAC9C,6BAA6B,iDAAiB;AAC9C,6BAA6B,iDAAiB;AAC9C,6BAA6B,iDAAiB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,sBAAsB,KAAK,4BAA4B;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,4CAA4C;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,EAAE,KAAK,EAAE,KAAK,EAAE;AAC9C;AACA;AACA;AACA;AACA,8BAA8B,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,wBAAwB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,iDAAiB;AAC9C,6BAA6B,iDAAiB;AAC9C,6BAA6B,iDAAiB;AAC9C,6BAA6B,iDAAiB;AAC9C,6BAA6B,iDAAiB;AAC9C,6BAA6B,iDAAiB;AAC9C;AACA;AACA,iCAAiC,iDAAiB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA,iBAAiB,yCAAyC,KAAK;AAC/D;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,4BAA4B,KAAK;AAClD;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,kDAAkD,KAAK;AACxE;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,oBAAoB,KAAK;AAC1C,wBAAwB,+DAA+B;AACvD;AACA;AACA;AACA;AACA;AACA,wBAAwB,+DAA+B;AACvD;AACA;AACA;AACA,wBAAwB,+DAA+B;AACvD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,8BAA8B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uBAAuB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,yCAAyC;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,eAAe;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,8BAA8B,+DAA+B;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEgiB;;;;;;;;;;;;;ACvjGhiB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,kBAAkB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,wCAAwC,EAAE,mBAAmB,EAAE,iBAAiB,EAAE;AAClF;AACA;AACA;AACA;AACA;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4BAA4B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,IAAI;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,IAAI;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,SAAS;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,SAAS;AACtE;AACA;AACA;AACA;AACA;AACA,uBAAuB,kBAAkB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,SAAS;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,UAAU;AACtC;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,cAAc;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,sBAAsB;AACzC;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;AACA,mBAAmB,uBAAuB;AAC1C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;AC9YA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,QAAQ;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,QAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,8BAA8B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,8BAA8B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wBAAwB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,SAAS;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kBAAkB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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,sBAAsB,EAAE,sBAAsB;AAC3E;AACA;AACA;AACA,iCAAiC,sBAAsB,EAAE,sBAAsB,EAAE,sBAAsB;AACvG;AACA;AACA,iCAAiC,sBAAsB,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,sBAAsB;AAC/H;AACA;AACA;AACA;AACA,yBAAyB,sBAAsB,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,sBAAsB;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,QAAQ;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,QAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAE2R;;;;;;;;;;;;;AClV3R;AACa;;AAEb;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB;AACpB,0BAA0B;AAC1B;AACA;AACA;AACA,8DAA8D;AAC9D,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL,iDAAiD;AACjD;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,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;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;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,kBAAkB,OAAO;AAC1C;AACA;AACA;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;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;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;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAI,IAA0B;AAC9B;AACA;;;;;;;;;;;;;ACjyBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU,gBAAgB,sCAAsC,iBAAiB,EAAE;AACnF,yBAAyB,8EAA8E;AACvG;AACA;;AAEO;AACP;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC;AACA;;AAEO;AACP;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA,4DAA4D,cAAc;AAC1E;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA,4CAA4C,QAAQ;AACpD;AACA;;AAEO;AACP,mCAAmC,oCAAoC;AACvE;;AAEO;AACP,wBAAwB,uFAAuF,UAAU;AACzH;AACA;AACA,2GAA2G;AAC3G;AACA,uCAAuC,QAAQ;AAC/C;AACA,iEAAiE;AACjE;AACA,+CAA+C,yFAAyF,2CAA2C;AACnL,+DAA+D,2CAA2C;AAC1G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA,mBAAmB,yBAAyB;AAC5C;AACA;AACA;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA,6CAA6C,0EAA0E;AACvH;;AAEO;AACP;AACA;;AAEO;AACP,2BAA2B,+DAA+D,gBAAgB,EAAE,EAAE;AAC9G;AACA,mCAAmC,MAAM,6BAA6B,EAAE,YAAY,WAAW,EAAE;AACjG,kCAAkC,MAAM,iCAAiC,EAAE,YAAY,WAAW,EAAE;AACpG,+BAA+B,qFAAqF;AACpH;AACA,KAAK;AACL;;AAEO;AACP,aAAa,6BAA6B,0BAA0B,aAAa,EAAE,qBAAqB;AACxG,gBAAgB,qDAAqD,oEAAoE,aAAa,EAAE;AACxJ,sBAAsB,sBAAsB,qBAAqB,GAAG;AACpE;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC,kCAAkC,SAAS;AAC3C,kCAAkC,WAAW,UAAU;AACvD,yCAAyC,cAAc;AACvD;AACA,6GAA6G,OAAO,UAAU;AAC9H,gFAAgF,iBAAiB,OAAO;AACxG,wDAAwD,gBAAgB,QAAQ,OAAO;AACvF,8CAA8C,gBAAgB,gBAAgB,OAAO;AACrF;AACA,iCAAiC;AACjC;AACA;AACA,SAAS,YAAY,aAAa,OAAO,EAAE,UAAU,WAAW;AAChE,mCAAmC,SAAS;AAC5C;AACA;;AAEO;AACP;AACA;AACA;AACA,gBAAgB,oCAAoC,aAAa,EAAE;AACnE;AACA;AACA,CAAC;AACD;AACA;AACA,CAAC;;AAEM;AACP;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,MAAM,gBAAgB;AACzC;AACA;AACA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;;AAEA;AACO;AACP,4BAA4B,sBAAsB;AAClD;AACA;AACA;;AAEA;AACO;AACP,iDAAiD,QAAQ;AACzD,wCAAwC,QAAQ;AAChD,wDAAwD,QAAQ;AAChE;AACA;AACA;;AAEO;AACP,4EAA4E,OAAO;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;;AAEO;AACP;AACA;AACA,iBAAiB,sFAAsF,aAAa,EAAE;AACtH,sBAAsB,gCAAgC,qCAAqC,0CAA0C,EAAE,EAAE,GAAG;AAC5I,2BAA2B,MAAM,eAAe,EAAE,YAAY,oBAAoB,EAAE;AACpF,sBAAsB,oGAAoG;AAC1H,6BAA6B,uBAAuB;AACpD,4BAA4B,wBAAwB;AACpD,2BAA2B,yDAAyD;AACpF;;AAEO;AACP;AACA,iBAAiB,4CAA4C,SAAS,EAAE,qDAAqD,aAAa,EAAE;AAC5I,yBAAyB,6BAA6B,oBAAoB,uCAAuC,gBAAgB,EAAE,KAAK;AACxI;;AAEO;AACP;AACA;AACA,2GAA2G,sFAAsF,aAAa,EAAE;AAChN,sBAAsB,8BAA8B,gDAAgD,uDAAuD,EAAE,EAAE,GAAG;AAClK,4CAA4C,sCAAsC,UAAU,oBAAoB,EAAE,EAAE,UAAU;AAC9H;;AAEO;AACP,gCAAgC,uCAAuC,aAAa,EAAE,EAAE,OAAO,kBAAkB;AACjH;AACA;;AAEA;AACA,yCAAyC,6BAA6B;AACtE,CAAC;AACD;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP,4CAA4C;AAC5C;;AAEO;AACP;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,+CAA+C;AACvE;AACA;AACA,wBAAwB,cAAc;AACtC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sFAAsF,SAAS,eAAe,EAAE;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAC;;;;;;;;;;;;;ACjXF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;;AAEoE;AAClB;AACmF;AAClG;AAC6B;AACjC;;AAE/B;AACA;;AAEA;AACA;;AAEA;AACA;AACA,wCAAwC,gBAAgB,WAAW,OAAO;AAC1E;AACA;;AAEA;AACA;;AAEA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,EAAE,gBAAgB,EAAE;AAC5C;AACA;AACA,eAAe,iDAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iDAAO;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,aAAa,SAAS,gBAAgB,aAAa,aAAa;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,0BAA0B;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,+DAAqB;AACvC;AACA;AACA;AACA;AACA,eAAe,+DAAqB;AACpC;AACA;;AAEA;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;AACA;;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;AACA;AACA;AACA;AACA;;AAEA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,YAAY;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,iBAAiB;AACnF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iDAAO;AACtC;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;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;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,4BAA4B;AAC3F;AACA;;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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,UAAU;AACjE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAU;AACV,IAAI,qEAAO,EAAE,OAAO,kEAAY,mBAAmB;AACnD;AACA,mBAAmB,wDAAU;AAC7B,IAAI,qEAAO,EAAE,OAAO,kEAAY,SAAS;AACzC;;AAEA;AACA;AACA;AACA;AACA;AACA,wDAAU;AACV,IAAI,qEAAO;AACX,cAAc,kEAAY;AAC1B,KAAK;AACL;AACA,wDAAU;AACV,IAAI,qEAAO;AACX,cAAc,kEAAY;AAC1B;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAU;AACV,IAAI,qEAAO,EAAE,OAAO,kEAAY,UAAU;AAC1C;AACA,wDAAU;AACV,IAAI,qEAAO,EAAE,4BAA4B;AACzC;AACA,wDAAU;AACV,IAAI,qEAAO,EAAE,OAAO,kEAAY,cAAc;AAC9C;AACA,wDAAU;AACV,IAAI,qEAAO,EAAE,OAAO,kEAAY,sBAAsB;AACtD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAU;AACV,IAAI,qEAAO,EAAE,4BAA4B;AACzC;AACA,wDAAU;AACV,IAAI,qEAAO,EAAE,OAAO,kEAAY,YAAY;AAC5C;;AAEA;AACA,yBAAyB,iDAAO;AAChC,uBAAuB,iDAAO;AAC9B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,cAAc,yDAAO;AACrB;AACA,mBAAmB,8CAAY,EAAE,WAAW;AAC5C,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAU;AACV,IAAI,qEAAO,EAAE,OAAO,kEAAY,qBAAqB,yEAAmB,EAAE;AAC1E;AACA,wDAAU;AACV,IAAI,qEAAO,EAAE,OAAO,kEAAY,qDAAqD;AACrF,IAAI,sEAAQ,EAAE,0DAA0D;AACxE;AACA,wDAAU;AACV,IAAI,qEAAO,EAAE,OAAO,kEAAY,qDAAqD;AACrF,IAAI,sEAAQ,EAAE,0DAA0D;AACxE;AACA,wDAAU;AACV,IAAI,qEAAO,EAAE,OAAO,kEAAY,qDAAqD;AACrF,IAAI,sEAAQ,EAAE,0DAA0D;AACxE;AACA,wDAAU;AACV,IAAI,qEAAO,EAAE,OAAO,kEAAY,qDAAqD;AACrF,IAAI,sEAAQ,EAAE,0DAA0D;AACxE;AACA,wDAAU;AACV,IAAI,qEAAO,EAAE,OAAO,kEAAY,qDAAqD;AACrF,IAAI,sEAAQ,EAAE,0DAA0D;AACxE;AACA,wDAAU;AACV,IAAI,qEAAO,EAAE,OAAO,kEAAY,qDAAqD;AACrF,IAAI,sEAAQ,EAAE,2DAA2D;AACzE;AACA,wDAAU;AACV,IAAI,qEAAO,EAAE,OAAO,kEAAY,qDAAqD;AACrF,IAAI,sEAAQ,EAAE,2DAA2D;AACzE;AACA,wDAAU;AACV,IAAI,qEAAO,EAAE,OAAO,kEAAY,qDAAqD;AACrF,IAAI,sEAAQ,EAAE,2DAA2D;AACzE;AACA,wDAAU;AACV,IAAI,qEAAO,EAAE,OAAO,kEAAY,sBAAsB;AACtD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAU;AACV,IAAI,qEAAO,EAAE,OAAO,kEAAY,qDAAqD;AACrF,IAAI,sEAAQ,EAAE,0DAA0D;AACxE;AACA,wDAAU;AACV,IAAI,qEAAO,EAAE,OAAO,kEAAY,qDAAqD;AACrF,IAAI,sEAAQ,EAAE,0DAA0D;AACxE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,iDAAO;AACtB,eAAe,iDAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iDAAO;AACzB,kBAAkB,iDAAO;AACzB,sBAAsB,yDAAO;AAC7B;AACA;AACA;AACA;AACA,wDAAU;AACV,IAAI,qEAAO,EAAE,OAAO,kEAAY,cAAc;AAC9C;AACA,cAAc,wDAAU;AACxB,IAAI,qEAAO,EAAE,OAAO,kEAAY,SAAS;AACzC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,iDAAO;AACjC;AACA;AACA;AACA,wBAAwB,mEAAa;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iDAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,wDAAU;AACV,IAAI,qEAAO,EAAE,OAAO,kEAAY,qBAAqB,yEAAmB,EAAE;AAC1E;AACA,wDAAU;AACV,IAAI,qEAAO,EAAE,OAAO,kEAAY,cAAc;AAC9C;AACA,wDAAU;AACV,IAAI,qEAAO,EAAE,mBAAmB,kEAAY,sBAAsB;AAClE;AACA,wDAAU;AACV,IAAI,qEAAO,EAAE,mBAAmB,kEAAY,4BAA4B;AACxE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,8CAAY,EAAE,4BAA4B;AACjE;AACA,mBAAmB,8CAAY,EAAE,kBAAkB;AACnD,KAAK;AACL;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,qBAAqB,+DAAqB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,+DAAqB;AACvC,kBAAkB,+DAAqB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,+DAAqB;AACvC,kBAAkB,+DAAqB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,+DAAqB;AAC1C;AACA;AACA;AACA;AACA;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,wBAAwB,+DAAqB;AAC7C,wBAAwB,+DAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAU;AACV,IAAI,qEAAO,EAAE,OAAO,kEAAY,wDAAwD;AACxF;AACA,wDAAU;AACV,IAAI,qEAAO,EAAE,OAAO,kEAAY,wDAAwD;AACxF;;AAEA;AACA;AACA,wDAAU;AACV,IAAI,qEAAO,EAAE,mCAAmC,kEAAY,4BAA4B;AACxF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,iDAAO;AAC5B;AACA;AACA;AACA;AACA,eAAe,iDAAO;AACtB;AACA;AACA;AACA;AACA,wDAAU;AACV,IAAI,qEAAO,EAAE,OAAO,kEAAY,cAAc;AAC9C;AACA,eAAe,wDAAU;AACzB,IAAI,qEAAO,EAAE,OAAO,kEAAY,SAAS;AACzC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,iDAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,iDAAO;AAC5B;AACA;AACA;AACA,wDAAU;AACV,IAAI,qEAAO,EAAE,OAAO,kEAAY,YAAY;AAC5C;AACA,cAAc,wDAAU;AACxB,IAAI,qEAAO,EAAE,OAAO,kEAAY,SAAS;AACzC;;AAEA;AACA;AACA,wDAAU;AACV,IAAI,qEAAO,EAAE,OAAO,kEAAY,cAAc;AAC9C,IAAI,sEAAQ,EAAE,OAAO,mEAAa,uDAAuD;AACzF;AACA,kBAAkB,wDAAU;AAC5B,IAAI,qEAAO,EAAE,OAAO,kEAAY,SAAS;AACzC;;AAEA;AACA;AACA,uBAAuB,gBAAgB;AACvC,uBAAuB,gBAAgB;AACvC,uBAAuB,gBAAgB;AACvC;AACA,6BAA6B,aAAa;AAC1C,6BAA6B,aAAa;AAC1C,6BAA6B,aAAa;AAC1C,6BAA6B,aAAa;AAC1C,6BAA6B,aAAa;AAC1C,6BAA6B,aAAa;AAC1C,6BAA6B,aAAa;AAC1C,6BAA6B,aAAa;AAC1C,6BAA6B,aAAa;AAC1C,6BAA6B,aAAa;AAC1C,6BAA6B,aAAa;AAC1C,6BAA6B,aAAa;AAC1C,6BAA6B,aAAa;AAC1C,6BAA6B,aAAa;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0BAA0B,wBAAwB,EAAE;AACpD;AACA;AACA,sBAAsB,oBAAoB,EAAE;AAC5C,uBAAuB,qBAAqB,EAAE;AAC9C,sBAAsB,oBAAoB,EAAE;AAC5C,2BAA2B,yBAAyB,EAAE;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,mBAAmB;AACnB;AACA;AACA;AACA,oBAAoB,gEAAU;AAC9B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,SAAS;AACpE;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,4CAA4C;AAC/D,mBAAmB,4CAA4C;AAC/D,mBAAmB,4CAA4C;AAC/D,mBAAmB,4CAA4C;AAC/D,mBAAmB,4DAA4D;AAC/E,mBAAmB,4DAA4D;AAC/E,mBAAmB,4DAA4D;AAC/E,mBAAmB,4DAA4D;AAC/E,mBAAmB,4DAA4D;AAC/E,mBAAmB,4DAA4D;AAC/E,mBAAmB,4DAA4D;AAC/E,mBAAmB,4DAA4D;AAC/E,mBAAmB,4DAA4D;AAC/E,mBAAmB,4DAA4D;AAC/E,mBAAmB,4DAA4D;AAC/E,mBAAmB,4DAA4D;AAC/E,mBAAmB,4DAA4D;AAC/E,mBAAmB,4DAA4D;;AAE/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,QAAQ;AACnE;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;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,aAAa,+DAAqB;AAClC;AACA;AACA;AACA,aAAa,+DAAqB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,iDAAO;AAC5B,kBAAkB,qBAAqB,GAAG,sBAAsB,GAAG,uBAAuB,GAAG,uBAAuB,GAAG,mBAAmB;AAC1I;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;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,6BAA6B,+DAAqB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,4CAA4C;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,+DAAqB;AAClD;AACA,4CAA4C,4CAA4C;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,+DAAqB;AAClD,kCAAkC,+DAAqB;AACvD;AACA,8CAA8C,4CAA4C;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,+DAAqB;AAClD;AACA,+CAA+C,4CAA4C,sBAAsB,iBAAiB;AAClI;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,+DAAqB;AAClD;AACA,+CAA+C,4CAA4C,sBAAsB,iBAAiB;AAClI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,4CAA4C,oBAAoB,iBAAiB;AACnI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,4CAA4C,0CAA0C,kBAAkB;AAC/J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,+DAAqB;AACtD,6DAA6D,4CAA4C;AACzG;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,4CAA4C;AAChG;AACA;AACA;AACA;AACA;AACA,sBAAsB,iDAAO;AAC7B;AACA;AACA,6BAA6B,+DAAqB;AAClD;AACA,iCAAiC,4CAA4C,8BAA8B,kBAAkB;AAC7H;AACA;AACA;AACA,6BAA6B,+DAAqB;AAClD;AACA,8CAA8C,4CAA4C,gCAAgC,kBAAkB;AAC5I;AACA;AACA,qCAAqC,iDAAO;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,WAAW,uBAAuB,KAAK,gCAAgC,YAAY;AACzI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,0CAA0C,iDAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEkmB;;;;;;;;;;;;;ACtgDlmB;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEuC;;AAEpD;AACA,EAAE,0EAAc,EAAE,2DAA2D;AAC9D,sEAAO,EAAC;;;;;;;;;;;;;ACfvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACiC;;AAEjC;AACmD;AACG;AACH;AACP;AACjB;;AAE3B;AACO,yBAAyB,OAAO,KAAK;AAC5C;AACA;AACA;AACA,CAAC;AACD;AACA,kBAAkB,0CAAS;AAC3B,yBAAyB,oDAAmB;;AAE5C;AACA;AACA,IAAI,qDAAU;AACd,oBAAoB,qDAAoB;AACxC,gBAAgB,iDAAgB;AAChC,qBAAqB,sDAAqB;AAC1C;AACA,IAAI,qCAAG;AACP;;AAEA;AACA;AACA;AACA,WAAW,gDAAU,KAAK,sEAA6B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gDAAU;;AAEtC;AACA,MAAM,2EAAyC;AAC/C,MAAM,iFAA+C;;AAErD,MAAM,oEAA2B;AACjC,MAAM,mEAA0B;AAChC,MAAM,sEAA6B;AACnC,MAAM,+DAAsB;AAC5B,MAAM,2EAAkC;AACxC,MAAM,0EAAiC;AACvC,MAAM,gEAAuB;AAC7B,MAAM,8EAAqC;AAC3C,MAAM,wEAA+B;;AAErC,MAAM,gEAA8B;AACpC,MAAM,6EAA2C;AACjD,MAAM,gEAA8B;AACpC,MAAM,+DAA6B;AACnC,MAAM,mEAAiC;AACvC,MAAM,mEAAiC;AACvC;AACA;AACA,WAAW,kDAAW,KAAK,wEAA8B;AACzD;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kDAAW;;AAEvC;AACA,MAAM,2EAAyC;AAC/C,MAAM,iFAA+C;;AAErD,MAAM,sEAA4B;AAClC,MAAM,wEAA8B;AACpC,MAAM,iEAAuB;AAC7B,MAAM,sEAA4B;AAClC,MAAM,wEAA8B;AACpC,MAAM,0EAAgC;AACtC,MAAM,wEAA8B;AACpC,MAAM,wEAA8B;AACpC,MAAM,uEAA6B;AACnC,MAAM,qEAA2B;AACjC,MAAM,sEAA4B;;AAElC,MAAM,gEAA8B;AACpC,MAAM,gEAA8B;AACpC,MAAM,+DAA6B;AACnC,MAAM,mEAAiC;AACvC;AACA;AACA,WAAW,gDAAU;AACrB;AACA;AACA;AACA;AACA;AACA,4BAA4B,gDAAU;;AAEtC;AACA,MAAM,2EAAyC;AAC/C,MAAM,iFAA+C;;AAErD,MAAM,wEAA+B;AACrC,MAAM,yEAAgC;AACtC,MAAM,oEAA2B;AACjC,MAAM,uEAA8B;AACpC,MAAM,wEAA+B;AACrC,MAAM,6EAAoC;AAC1C,MAAM,oEAA2B;AACjC,MAAM,oEAA2B;;AAEjC,MAAM,gEAA8B;AACpC,MAAM,6EAA2C;AACjD,MAAM,+DAA6B;AACnC,MAAM,mEAAiC;AACvC,MAAM,mEAAiC;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;AC1IA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACa;AACwB;;AAEW;AACM;;AAE/C;AACP;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf,4BAA4B;AAC5B;;AAEA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,eAAe;AACf,4BAA4B;AAC5B;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,IAAI,iEAA6B;AACjC;AACA;AACA,WAAW,QAAQ,sBAAsB;AACzC;AACA;AACA,KAAK;AACL;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;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,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB;AACvB;AACA;AACA,SAAS;AACT;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;;AAEP;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEA;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,QAAQ,qDAAiB;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,iEAA6B;AACjC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,QAAQ,qDAAiB;AACzB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;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,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACO;AACP,EAAE,iEAA6B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;;;;;;;;;;;AC7rBA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACa;AACN;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;;;;;;;;;;;;ACjDA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACa;AACwB;AACrC,gBAAgB,6CAAS;;AAElB;AACP;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;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,2DAA2D,YAAY;AACvE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA,qBAAqB;AACrB,qBAAqB;AACrB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;;;;;;;;;;;;AC5LA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACa;;AAEc;AACM;;AAE1B;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,8BAA8B,0CAAQ;AACtC;AACA;AACA;AACA,aAAa,4BAA4B;AACzC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAE,8DAA6B;AAC/B;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,GAAG;AACH;;AAEO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAE,8DAA6B;AAC/B;AACA,8BAA8B,0CAAQ;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,GAAG;AACH;;AAEO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,qBAAqB,0CAAQ;AAC7B;AACA;AACA,oBAAoB,0CAAQ;AAC5B;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,0CAAQ;AAC1B;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,aAAa;AAC5B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,8DAA6B;AAC/B;AACA;AACA,GAAG;AACH;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA,iCAAiC,mBAAmB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,mBAAmB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC7cA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACa;;AAEqB;AACc;AACM;;AAE/C;AACP;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,KAAK;AACL;AACA;;AAEO;AACP;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA,aAAa;AACb,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA,eAAe;AACf,aAAa;AACb;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEO;AACP;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;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,8DAA6B;AAC/B;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,iDAAgB;AACtB;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,KAAK;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;;;;;;;;;;;;AC3SA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACa;;AAEN;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,OAAO;AACP;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACnCA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACa;;AAEqB;;AAE3B;AACP;AACA;;AAEA;AACA;AACA,IAAI,iDAAgB;AACpB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;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;AACA;AACA;AACA;;;;;;;;;;;;;AClEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACa;AACqB;;AAE3B;AACP;AACA;AACA;AACA;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,aAAa;AACb;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,WAAW;AACX;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEO;AACP;AACA,2BAA2B;AAC3B;AACA,OAAO,OAAO,oDAAmB;AACjC;AACA;;AAEA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gCAAgC;AACvD;AACA;AACA,YAAY,iDAAgB;AAC5B;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,KAAK;AACL;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,WAAW;AACX;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA,wCAAwC,sBAAsB;AAC9D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,WAAW;AACX;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,SAAS;AACT;AACA,wCAAwC,sBAAsB;AAC9D;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;AC9VA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACa;;AAEb;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,YAAY,QAAQ;AACpB;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,SAAS;AACpB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;AACO;AACP;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS,UAAU;;AAEnB,kCAAkC;AAClC;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,0DAA0D;AAC1D;AACA;AACA;AACA;AACA;AACA,GAAG,OAAO;AACV;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,EAAE;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,aAAa;AACpD,GAAG,IAAI;AACP;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;;AAEA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;;;;;;;;;;;;;;ACrQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA0B;AACuC;AACV;AACvD;AACqC;AACQ;AAE7C,IAAIA,0DAAK,IAAIC,6DAAQ,EAAE;EACrB,MAAMC,MAAM,GAAG,IAAIC,0DAAM,CAAC,CAAC;EAC3B,IAAI,CAACC,MAAM,CAACF,MAAM,EAAEE,MAAM,CAACF,MAAM,GAAGA,MAAM,CAAC,KACtC;IACH;IACA,IAAI;MACFE,MAAM,CAACF,MAAM,CAACG,MAAM,GAAGD,MAAM,CAACF,MAAM,CAACG,MAAM,IAAIH,MAAM,CAACG,MAAM;IAC9D,CAAC,CAAC,OAAOC,CAAC,EAAE,CAEZ;EACF;AACF;;AAEA;AACe;EACb;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,OAAO,EAAG,IAAIC,GAAG,CAAC,CAAC;EACnB,MAAMC,WAAWA,CAACC,MAAM,EAAEC,OAAO,EAAE;IAGjC,MAAMC,MAAM,GAAG;MACbC,UAAU,EAAE,IAAI;MAAI;MACpBC,YAAY,EAAE,IAAI;MAAE;MACpBC,SAAS,EAAE,IAAI;MAAK;MACpBC,WAAW,EAAE,IAAI;MAAG;MACpBC,eAAe,EAAE,IAAI;MACrBC,WAAW,EAAE,IAAI;MACjBC,cAAc,EAAE,IAAI;MACpBC,2BAA2B,EAAE;IAC/B,CAAC;;IAED;IACAR,MAAM,CAACC,UAAU,GAAGH,MAAM,CAAC,CAAC;IAC5B,MAAMW,kBAAkB,GAAG,IAAIC,8CAAG,CAACC,YAAY,CAAC;MAC9CC,gBAAgB,EAAE;IACpB,CAAC,CAAC;IAGF,MAAMC,gCAAgC,GAAG,MAAMJ,kBAAkB,CAC9DK,wBAAwB,CAAC;MACxBC,WAAW,EAAEhB,OAAO,CAACiB;IACvB,CAAC,CAAC,CACDC,OAAO,CAAC,CAAC;IACZ,MAAMC,UAAU,GAAGL,gCAAgC,CAACM,WAAW,CAACC,UAAU;IAG1E,MAAMC,mCAAmC,GAAG,MAAMZ,kBAAkB,CACjEa,2BAA2B,CAAC;MAC3BF,UAAU,EAAEF,UAAU;MACtBK,wCAAwC,EAAE;QACxCC,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC;QAC3BC,IAAI,EAAEC,wEAAc,CAACC;MACvB;IACF,CAAC,CAAC,CACDV,OAAO,CAAC,CAAC;IAEZ,MAAMW,mBAAmB,GAAGP,mCAAmC,CAACQ,oBAAoB,CAACC,MAAM,CAAC,CAACC,SAAS,EAAEC,QAAQ,KAAK;MACnHD,SAAS,CAACC,QAAQ,CAACC,QAAQ,CAAC,GAAGD,QAAQ,CAACE,gBAAgB;MACxD,OAAOH,SAAS;IAClB,CAAC,EAAE,CAAC,CAAC,CAAC;IAGN,MAAMI,mCAAmC,GAAG,IAAIzB,8CAAG,CAAC0B,6BAA6B,CAAC;MAChFJ,QAAQ,EAAEJ,mBAAmB,CAACS,KAAK;MACnCzB,gBAAgB,EAAE;IACpB,CAAC,CAAC;IACF,MAAM0B,0BAA0B,GAAG,MAAMH,mCAAmC,CACzEI,kBAAkB,CAAC;MAClBnB,UAAU,EAAEF;IACd,CAAC,CAAC,CACDD,OAAO,CAAC,CAAC;IACZ,MAAMuB,UAAU,GAAG,EAAE;IACrB,IAAI,CAACzC,OAAO,CAAC0C,oBAAoB,IAAI,CAAC1C,OAAO,CAAC2C,SAAS,EAAE;MACvDF,UAAU,CAACG,IAAI,CAAC;QAAEC,IAAI,EAAE,0BAA0BlC,8CAAG,CAACmC,MAAM,CAACC,MAAM;MAAqB,CAAC,CAAC;IAC5F;IACA,IAAI,CAAC/C,OAAO,CAAC0C,oBAAoB,EAAE;MACjCH,0BAA0B,CAACS,aAAa,CAACC,OAAO,CAACC,SAAS,IAAI;QAC5DT,UAAU,CAACG,IAAI,CAAC;UACdC,IAAI,EAAEK,SAAS,CAACC,IAAI;UACpBC,QAAQ,EAAEF,SAAS,CAACG,QAAQ;UAC5BC,UAAU,EAAEJ,SAAS,CAACK;QACxB,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ;IAGAtD,MAAM,CAACK,eAAe,GAAG,IAAIqB,mFAAyB,CAAC;MACrDR,UAAU;MACVqC,eAAe,EAAE3B,mBAAmB,CAAC4B,GAAG;MACxCC,QAAQ,EAAE1D,OAAO,CAAC0D,QAAQ;MAC1BC,IAAI,EAAEhC,wEAAc,CAACC,MAAM;MAC3BmB,MAAM,EAAEpC,8CAAG,CAACmC,MAAM,CAACC,MAAM;MACzBa,WAAW,EAAEjD,8CAAG,CAACmC,MAAM,CAACc,WAAW;MACnCC,iBAAiB,EAAEnD,kBAAkB,CAACoC,MAAM,CAACe;IAC/C,CAAC,CAAC;IAIF,MAAMC,UAAU,GAAG9D,OAAO,CAAC+D,UAAU,GAAG;MAAEC,KAAK,EAAE;QAAEC,KAAK,EAAE;MAAK,CAAC;MAAEC,MAAM,EAAE;QAAED,KAAK,EAAE;MAAI;IAAE,CAAC,GAAG;MAAED,KAAK,EAAE;QAAEC,KAAK,EAAE;MAAI,CAAC;MAAEC,MAAM,EAAE;QAAED,KAAK,EAAE;MAAI;IAAE,CAAC;IAC9I,MAAME,WAAW,GAAG;MAClBC,KAAK,EAAEpE,OAAO,CAACqE,SAAS,GAAGP,UAAU,GAAG,KAAK;MAC7C,IAAG9D,OAAO,CAACsE,SAAS,IAAI;QAACC,KAAK,EAAE;UAAEC,gBAAgB,EAAE;QAAK;MAAC,CAAC;IAC7D,CAAC;IAED,MAAMC,aAAa,GAAG;MACpBhC,UAAU;MACV;MACA;MACAiC,kBAAkB,EAAE1E,OAAO,CAAC2C,SAAS,GAAG,OAAO,GAAG;IACpD,CAAC;IACD1C,MAAM,CAACO,cAAc,GAAG,IAAImE,iBAAiB,CAACF,aAAa,CAAC;IAC5D,IAAIzE,OAAO,CAAC4E,eAAe,EAAE;MAC3B,MAAMC,cAAc,GAAG5E,MAAM,CAACO,cAAc,CAACsE,iBAAiB,CAAC,gBAAgB,CAAC;MAChF7E,MAAM,CAACM,WAAW,GAAGsE,cAAc;IACrC;IAEA5E,MAAM,CAACK,eAAe,CAACyE,EAAE,CAAC,MAAM,EAAE,YAAY;MAE5C,IAAI/E,OAAO,CAACqE,SAAS,IAAIrE,OAAO,CAACgF,SAAS,EAAE;QAC1C,IAAI;UACF/E,MAAM,CAACI,WAAW,GAAG,MAAM4E,SAAS,CAACC,YAAY,CAACC,YAAY,CAAChB,WAAW,CAAC;UAC3ElE,MAAM,CAACI,WAAW,CAAC+E,SAAS,CAAC,CAAC,CAACnC,OAAO,CAAEoC,KAAK,IAAK;YAChDpF,MAAM,CAACO,cAAc,CAAC8E,QAAQ,CAACD,KAAK,EAAEpF,MAAM,CAACI,WAAW,CAAC;UAC3D,CAAC,CAAC;QACJ,CAAC,CAAC,OAAOV,CAAC,EAAE;UAEV;QACF;MACF;MAGA,MAAMM,MAAM,CAACO,cAAc,CAAC+E,mBAAmB,CAC7C,MAAMtF,MAAM,CAACO,cAAc,CAACgF,WAAW,CAAC;QACtCC,mBAAmB,EAAE,IAAI;QACzBC,mBAAmB,EAAE;MACvB,CAAC,CACH,CAAC;MACD,IAAI1F,OAAO,CAAC2F,aAAa,EAAE;QAEzB1F,MAAM,CAACK,eAAe,CAACsF,YAAY,CAAC3F,MAAM,CAACO,cAAc,CAACqF,gBAAgB,CAAC;MAC7E;IAIF,CAAC,CAAC;IAEF5F,MAAM,CAACK,eAAe,CAACyE,EAAE,CAAC,WAAW,EAAE,MAAOe,MAAM,IAAK;MAEvD,MAAM7F,MAAM,CAACO,cAAc,CAACuF,oBAAoB,CAACD,MAAM,CAAC;IAC1D,CAAC,CAAC;IAEF7F,MAAM,CAACK,eAAe,CAACyE,EAAE,CAAC,cAAc,EAAGiB,SAAS,IAAK;MAEvD/F,MAAM,CAACO,cAAc,CAACyF,eAAe,CAACD,SAAS,CAAC;IAClD,CAAC,CAAC;IAEF/F,MAAM,CAACK,eAAe,CAACyE,EAAE,CAAC,OAAO,EAAE,MAAM;MAEvC,IAAI,CAACmB,sBAAsB,CAACjG,MAAM,CAACO,cAAc,CAAC;IACpD,CAAC,CAAC;IAEFP,MAAM,CAACK,eAAe,CAACyE,EAAE,CAAC,OAAO,EAAGoB,KAAK,IAAK,CAG9C,CAAC,CAAC;IAEFlG,MAAM,CAACO,cAAc,CAAC4F,gBAAgB,CAAC,cAAc,EAAE,CAAC;MAACJ;IAAS,CAAC,KAAK;MACtE,IAAIA,SAAS,EAAE;QAEb,IAAIA,SAAS,CAACA,SAAS,CAACK,QAAQ,CAAC,OAAO,CAAC,EAAE,CAE3C,CAAC,MAAM,IAAIL,SAAS,CAACA,SAAS,CAACK,QAAQ,CAAC,OAAO,CAAC,EAAE,CAElD,CAAC,MAAM,IAAIL,SAAS,CAACA,SAAS,CAACK,QAAQ,CAAC,MAAM,CAAC,EAAE,CAEjD;QACA,IAAIrG,OAAO,CAAC2F,aAAa,EAAE;UAEzB1F,MAAM,CAACK,eAAe,CAACgG,gBAAgB,CAACN,SAAS,CAAC;QACpD;MACF,CAAC,MAAM;QAEL,IAAI,CAAChG,OAAO,CAAC2F,aAAa,EAAE;UAE1B1F,MAAM,CAACK,eAAe,CAACsF,YAAY,CAAC3F,MAAM,CAACO,cAAc,CAACqF,gBAAgB,CAAC;QAC7E;MACF;IACF,CAAC,CAAC;;IAEF;IACA5F,MAAM,CAACO,cAAc,CAAC+F,uBAAuB,GAAIC,GAAG,IAAK,CAEzD,CAAC;;IAED;IACA;IACAvG,MAAM,CAACO,cAAc,CAACiG,0BAA0B,GAAG,MAAOC,KAAK,IAAK;MAClE,MAAMC,iBAAiB,GAAGD,KAAK,CAACE,MAAM;MAGtC,IAAID,iBAAiB,CAACE,kBAAkB,KAAK,WAAW,EAAE;QAGxD;QACA,MAAMC,KAAK,GAAG,MAAM7G,MAAM,CAACO,cAAc,CAACuG,QAAQ,CAAC,IAAI,CAAC;QACxDD,KAAK,CAAC7D,OAAO,CAAC+D,MAAM,IAAI;UACtB,IAAIA,MAAM,CAACC,IAAI,KAAK,gBAAgB,IAAID,MAAM,CAACE,KAAK,KAAK,WAAW,EAAE;YAGpEJ,KAAK,CAAC7D,OAAO,CAAC+C,SAAS,IAAI;cACzB,IAAIA,SAAS,CAACmB,EAAE,KAAKH,MAAM,CAACI,gBAAgB,EAAE,CAE9C,CAAC,MAAM,IAAIpB,SAAS,CAACmB,EAAE,KAAKH,MAAM,CAACK,iBAAiB,EAAE,CAEtD;YACF,CAAC,CAAC;UACJ;QACF,CAAC,CAAC;MACJ,CAAC,MAAM,IAAIV,iBAAiB,CAACE,kBAAkB,KAAK,cAAc,EAAE;QAElE;QACA,MAAMC,KAAK,GAAG,MAAM7G,MAAM,CAACO,cAAc,CAACuG,QAAQ,CAAC,IAAI,CAAC;QACxDD,KAAK,CAAC7D,OAAO,CAAC+D,MAAM,IAAI;UACtB,IAAIA,MAAM,CAACC,IAAI,KAAK,gBAAgB,IAAID,MAAM,CAACE,KAAK,KAAK,QAAQ,EAAE,CAEnE,CAAC,MAAM,IAAIF,MAAM,CAACC,IAAI,KAAK,iBAAiB,IAAID,MAAM,CAACC,IAAI,KAAK,kBAAkB,EAAE,CAEpF;QACF,CAAC,CAAC;MACJ,CAAC,MAAM,IAAIN,iBAAiB,CAACE,kBAAkB,KAAK,QAAQ,EAAE;QAE5D;QACA,MAAMC,KAAK,GAAG,MAAM7G,MAAM,CAACO,cAAc,CAACuG,QAAQ,CAAC,IAAI,CAAC;QACxDD,KAAK,CAAC7D,OAAO,CAAC+D,MAAM,IAAI;UACtB,IAAIA,MAAM,CAACC,IAAI,KAAK,gBAAgB,IAAID,MAAM,CAACE,KAAK,KAAK,QAAQ,EAAE,CAEnE,CAAC,MAAM,IAAIF,MAAM,CAACC,IAAI,KAAK,iBAAiB,IAAID,MAAM,CAACC,IAAI,KAAK,kBAAkB,EAAE,CAEpF;QACF,CAAC,CAAC;QACF;QACA,IAAI,CAACK,UAAU,CAACtH,OAAO,CAAC;MAC1B;IACF,CAAC;;IAED;IACA,MAAMuH,sBAAsB,GAAG,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;MAC9DzH,MAAM,CAACO,cAAc,CAACmH,cAAc,GAAG,CAAC;QAAE3B;MAAU,CAAC,KAAK;QACxD,IAAI,CAACA,SAAS,EAAE;UACd;UACAyB,OAAO,CAAC,CAAC;QACX;MACF,CAAC;IACH,CAAC,CAAC;IAEFxH,MAAM,CAACO,cAAc,CAACoH,OAAO,GAAGlB,KAAK,IAAI;MAEvCzG,MAAM,CAACE,YAAY,GAAG,IAAI0H,WAAW,CAAC,CAAC;MACvC5H,MAAM,CAACC,UAAU,CAAC4H,SAAS,GAAG7H,MAAM,CAACE,YAAY;MACjDF,MAAM,CAACC,UAAU,CAAC6H,KAAK,CAACC,OAAO,GAAG,OAAO;MACzCtB,KAAK,CAACuB,OAAO,CAAC,CAAC,CAAC,CAAC7C,SAAS,CAAC,CAAC,CAACnC,OAAO,CAACoC,KAAK,IAAI;QAE5CpF,MAAM,CAACE,YAAY,CAACmF,QAAQ,CAACD,KAAK,CAAC;MACrC,CAAC,CAAC;;MAGF;MACA;MACA;IACF,CAAC;IAEDpF,MAAM,CAACK,eAAe,CAAC4H,IAAI,CAAC,CAAC;IAC7B;IACA,IAAI,CAACtI,OAAO,CAACuI,GAAG,CAACnI,OAAO,CAACoI,GAAG,EAAEnI,MAAM,CAAC;;IAErC;IACA,MAAMsH,sBAAsB;IAE5B;EACF,CAAC;EACDrB,sBAAsBA,CAAC1F,cAAc,EAAE;IACrC,IAAI,CAACA,cAAc,EAAE;IAErBA,cAAc,CAACuG,QAAQ,CAAC,CAAC,CAACsB,IAAI,CAACvB,KAAK,IAAI;MACtCA,KAAK,CAAC7D,OAAO,CAAC+D,MAAM,IAAI,CAGxB,CAAC,CAAC;IACJ,CAAC,CAAC,CAACsB,KAAK,CAACC,GAAG,IAAI,CAEhB,CAAC,CAAC;EACJ,CAAC;EACDjB,UAAUA,CAACtH,OAAO,EAAE;IAClB,MAAMC,MAAM,GAAG,IAAI,CAACL,OAAO,CAAC4I,GAAG,CAACxI,OAAO,CAACoI,GAAG,CAAC;IAC5C,IAAI,CAACnI,MAAM,EAAE;MACX;IACF;IACA,IAAIA,MAAM,CAACQ,2BAA2B,EAAE;MACtCgI,aAAa,CAACxI,MAAM,CAACQ,2BAA2B,CAAC;MACjDR,MAAM,CAACQ,2BAA2B,GAAG,IAAI;IAC3C;IACA,IAAIR,MAAM,CAACM,WAAW,EAAE;MACtBN,MAAM,CAACM,WAAW,CAACmI,KAAK,CAAC,CAAC;MAC1BzI,MAAM,CAACM,WAAW,GAAG,IAAI;IAC3B;IACA,IAAIN,MAAM,CAACK,eAAe,EAAE;MAC1BL,MAAM,CAACK,eAAe,CAACoI,KAAK,CAAC,CAAC;MAC9BzI,MAAM,CAACK,eAAe,GAAG,IAAI;IAC/B;IACA,IAAIL,MAAM,CAACO,cAAc,EAAE;MACzBP,MAAM,CAACO,cAAc,CAACkI,KAAK,CAAC,CAAC;MAC7BzI,MAAM,CAACO,cAAc,GAAG,IAAI;IAC9B;IACA,IAAIP,MAAM,CAACG,SAAS,EAAE;MACpBH,MAAM,CAACG,SAAS,CAAC0H,SAAS,GAAG,IAAI;IACnC;IACA,IAAI7H,MAAM,CAACI,WAAW,EAAE;MACtBJ,MAAM,CAACI,WAAW,CAAC+E,SAAS,CAAC,CAAC,CAACnC,OAAO,CAACoC,KAAK,IAAIA,KAAK,CAACsD,IAAI,CAAC,CAAC,CAAC;MAC7D1I,MAAM,CAACI,WAAW,GAAG,IAAI;IAC3B;IACA,IAAIJ,MAAM,CAACC,UAAU,EAAE;MACrBD,MAAM,CAACC,UAAU,CAAC4H,SAAS,GAAG,IAAI;IACpC;IACA,IAAI7H,MAAM,CAACE,YAAY,EAAE;MACvBF,MAAM,CAACE,YAAY,CAACiF,SAAS,CAAC,CAAC,CAACnC,OAAO,CAACoC,KAAK,IAAIA,KAAK,CAACsD,IAAI,CAAC,CAAC,CAAC;MAC9D1I,MAAM,CAACE,YAAY,GAAG,IAAI;IAC5B;IACA,IAAI,CAACP,OAAO,CAACgJ,MAAM,CAAC5I,OAAO,CAACoI,GAAG,CAAC;EAClC,CAAC;EACD,MAAMS,iBAAiBA,CAAA,EAAG;IACxB,OAAO,IAAIrB,OAAO,CAAEC,OAAO,IAAK;MAC9B,MAAMqB,IAAI,GAAG,IAAI,CAAClJ,OAAO,CAACkJ,IAAI,CAAC,CAAC;MAChC,KAAK,MAAMV,GAAG,IAAIU,IAAI,EAAE,IAAI,CAACxB,UAAU,CAAC;QAAEc,GAAG,EAAGA;MAAI,CAAC,CAAC;MACtD,IAAI,IAAI,CAACxI,OAAO,CAACmJ,IAAI,GAAG,CAAC,EAAEtB,OAAO,CAAC,IAAI,CAAC;IAC1C,CAAC,CAAC;EACJ;AACF,CAAC,E","file":"js/Dashboard~MobileThumbnailView~PrivateStoreCCTV~VideoJSWebRTCTest~splitScreen~videoHlsPlayerPage.js","sourcesContent":["import * as asn1js from \"asn1js\";\nimport { BufferSourceConverter } from \"pvtsutils\";\nimport { AsnParser } from \"./parser\";\nimport { AsnSerializer } from \"./serializer\";\nexport class AsnConvert {\n static serialize(obj) {\n return AsnSerializer.serialize(obj);\n }\n static parse(data, target) {\n return AsnParser.parse(data, target);\n }\n static toString(data) {\n const buf = BufferSourceConverter.isBufferSource(data)\n ? BufferSourceConverter.toArrayBuffer(data)\n : AsnConvert.serialize(data);\n const asn = asn1js.fromBER(buf);\n if (asn.offset === -1) {\n throw new Error(`Cannot decode ASN.1 data. ${asn.result.error}`);\n }\n return asn.result.toString();\n }\n}\n","import * as asn1js from \"asn1js\";\nimport { AsnPropTypes } from \"./enums\";\nimport { OctetString } from \"./types/index\";\nexport const AsnAnyConverter = {\n fromASN: (value) => value instanceof asn1js.Null ? null : value.valueBeforeDecodeView,\n toASN: (value) => {\n if (value === null) {\n return new asn1js.Null();\n }\n const schema = asn1js.fromBER(value);\n if (schema.result.error) {\n throw new Error(schema.result.error);\n }\n return schema.result;\n },\n};\nexport const AsnIntegerConverter = {\n fromASN: (value) => value.valueBlock.valueHexView.byteLength >= 4\n ? value.valueBlock.toString()\n : value.valueBlock.valueDec,\n toASN: (value) => new asn1js.Integer({ value: +value }),\n};\nexport const AsnEnumeratedConverter = {\n fromASN: (value) => value.valueBlock.valueDec,\n toASN: (value) => new asn1js.Enumerated({ value }),\n};\nexport const AsnIntegerArrayBufferConverter = {\n fromASN: (value) => value.valueBlock.valueHexView,\n toASN: (value) => new asn1js.Integer({ valueHex: value }),\n};\nexport const AsnIntegerBigIntConverter = {\n fromASN: (value) => value.toBigInt(),\n toASN: (value) => asn1js.Integer.fromBigInt(value),\n};\nexport const AsnBitStringConverter = {\n fromASN: (value) => value.valueBlock.valueHexView,\n toASN: (value) => new asn1js.BitString({ valueHex: value }),\n};\nexport const AsnObjectIdentifierConverter = {\n fromASN: (value) => value.valueBlock.toString(),\n toASN: (value) => new asn1js.ObjectIdentifier({ value }),\n};\nexport const AsnBooleanConverter = {\n fromASN: (value) => value.valueBlock.value,\n toASN: (value) => new asn1js.Boolean({ value }),\n};\nexport const AsnOctetStringConverter = {\n fromASN: (value) => value.valueBlock.valueHexView,\n toASN: (value) => new asn1js.OctetString({ valueHex: value }),\n};\nexport const AsnConstructedOctetStringConverter = {\n fromASN: (value) => new OctetString(value.getValue()),\n toASN: (value) => value.toASN(),\n};\nfunction createStringConverter(Asn1Type) {\n return {\n fromASN: (value) => value.valueBlock.value,\n toASN: (value) => new Asn1Type({ value }),\n };\n}\nexport const AsnUtf8StringConverter = createStringConverter(asn1js.Utf8String);\nexport const AsnBmpStringConverter = createStringConverter(asn1js.BmpString);\nexport const AsnUniversalStringConverter = createStringConverter(asn1js.UniversalString);\nexport const AsnNumericStringConverter = createStringConverter(asn1js.NumericString);\nexport const AsnPrintableStringConverter = createStringConverter(asn1js.PrintableString);\nexport const AsnTeletexStringConverter = createStringConverter(asn1js.TeletexString);\nexport const AsnVideotexStringConverter = createStringConverter(asn1js.VideotexString);\nexport const AsnIA5StringConverter = createStringConverter(asn1js.IA5String);\nexport const AsnGraphicStringConverter = createStringConverter(asn1js.GraphicString);\nexport const AsnVisibleStringConverter = createStringConverter(asn1js.VisibleString);\nexport const AsnGeneralStringConverter = createStringConverter(asn1js.GeneralString);\nexport const AsnCharacterStringConverter = createStringConverter(asn1js.CharacterString);\nexport const AsnUTCTimeConverter = {\n fromASN: (value) => value.toDate(),\n toASN: (value) => new asn1js.UTCTime({ valueDate: value }),\n};\nexport const AsnGeneralizedTimeConverter = {\n fromASN: (value) => value.toDate(),\n toASN: (value) => new asn1js.GeneralizedTime({ valueDate: value }),\n};\nexport const AsnNullConverter = {\n fromASN: () => null,\n toASN: () => {\n return new asn1js.Null();\n },\n};\nexport function defaultConverter(type) {\n switch (type) {\n case AsnPropTypes.Any:\n return AsnAnyConverter;\n case AsnPropTypes.BitString:\n return AsnBitStringConverter;\n case AsnPropTypes.BmpString:\n return AsnBmpStringConverter;\n case AsnPropTypes.Boolean:\n return AsnBooleanConverter;\n case AsnPropTypes.CharacterString:\n return AsnCharacterStringConverter;\n case AsnPropTypes.Enumerated:\n return AsnEnumeratedConverter;\n case AsnPropTypes.GeneralString:\n return AsnGeneralStringConverter;\n case AsnPropTypes.GeneralizedTime:\n return AsnGeneralizedTimeConverter;\n case AsnPropTypes.GraphicString:\n return AsnGraphicStringConverter;\n case AsnPropTypes.IA5String:\n return AsnIA5StringConverter;\n case AsnPropTypes.Integer:\n return AsnIntegerConverter;\n case AsnPropTypes.Null:\n return AsnNullConverter;\n case AsnPropTypes.NumericString:\n return AsnNumericStringConverter;\n case AsnPropTypes.ObjectIdentifier:\n return AsnObjectIdentifierConverter;\n case AsnPropTypes.OctetString:\n return AsnOctetStringConverter;\n case AsnPropTypes.PrintableString:\n return AsnPrintableStringConverter;\n case AsnPropTypes.TeletexString:\n return AsnTeletexStringConverter;\n case AsnPropTypes.UTCTime:\n return AsnUTCTimeConverter;\n case AsnPropTypes.UniversalString:\n return AsnUniversalStringConverter;\n case AsnPropTypes.Utf8String:\n return AsnUtf8StringConverter;\n case AsnPropTypes.VideotexString:\n return AsnVideotexStringConverter;\n case AsnPropTypes.VisibleString:\n return AsnVisibleStringConverter;\n default:\n return null;\n }\n}\n","import * as converters from \"./converters\";\nimport { AsnTypeTypes } from \"./enums\";\nimport { schemaStorage } from \"./storage\";\nexport const AsnType = (options) => (target) => {\n let schema;\n if (!schemaStorage.has(target)) {\n schema = schemaStorage.createDefault(target);\n schemaStorage.set(target, schema);\n }\n else {\n schema = schemaStorage.get(target);\n }\n Object.assign(schema, options);\n};\nexport const AsnChoiceType = () => AsnType({ type: AsnTypeTypes.Choice });\nexport const AsnSetType = (options) => AsnType({ type: AsnTypeTypes.Set, ...options });\nexport const AsnSequenceType = (options) => AsnType({ type: AsnTypeTypes.Sequence, ...options });\nexport const AsnProp = (options) => (target, propertyKey) => {\n let schema;\n if (!schemaStorage.has(target.constructor)) {\n schema = schemaStorage.createDefault(target.constructor);\n schemaStorage.set(target.constructor, schema);\n }\n else {\n schema = schemaStorage.get(target.constructor);\n }\n const copyOptions = Object.assign({}, options);\n if (typeof copyOptions.type === \"number\" && !copyOptions.converter) {\n const defaultConverter = converters.defaultConverter(options.type);\n if (!defaultConverter) {\n throw new Error(`Cannot get default converter for property '${propertyKey}' of ${target.constructor.name}`);\n }\n copyOptions.converter = defaultConverter;\n }\n schema.items[propertyKey] = copyOptions;\n};\n","export var AsnTypeTypes;\n(function (AsnTypeTypes) {\n AsnTypeTypes[AsnTypeTypes[\"Sequence\"] = 0] = \"Sequence\";\n AsnTypeTypes[AsnTypeTypes[\"Set\"] = 1] = \"Set\";\n AsnTypeTypes[AsnTypeTypes[\"Choice\"] = 2] = \"Choice\";\n})(AsnTypeTypes || (AsnTypeTypes = {}));\nexport var AsnPropTypes;\n(function (AsnPropTypes) {\n AsnPropTypes[AsnPropTypes[\"Any\"] = 1] = \"Any\";\n AsnPropTypes[AsnPropTypes[\"Boolean\"] = 2] = \"Boolean\";\n AsnPropTypes[AsnPropTypes[\"OctetString\"] = 3] = \"OctetString\";\n AsnPropTypes[AsnPropTypes[\"BitString\"] = 4] = \"BitString\";\n AsnPropTypes[AsnPropTypes[\"Integer\"] = 5] = \"Integer\";\n AsnPropTypes[AsnPropTypes[\"Enumerated\"] = 6] = \"Enumerated\";\n AsnPropTypes[AsnPropTypes[\"ObjectIdentifier\"] = 7] = \"ObjectIdentifier\";\n AsnPropTypes[AsnPropTypes[\"Utf8String\"] = 8] = \"Utf8String\";\n AsnPropTypes[AsnPropTypes[\"BmpString\"] = 9] = \"BmpString\";\n AsnPropTypes[AsnPropTypes[\"UniversalString\"] = 10] = \"UniversalString\";\n AsnPropTypes[AsnPropTypes[\"NumericString\"] = 11] = \"NumericString\";\n AsnPropTypes[AsnPropTypes[\"PrintableString\"] = 12] = \"PrintableString\";\n AsnPropTypes[AsnPropTypes[\"TeletexString\"] = 13] = \"TeletexString\";\n AsnPropTypes[AsnPropTypes[\"VideotexString\"] = 14] = \"VideotexString\";\n AsnPropTypes[AsnPropTypes[\"IA5String\"] = 15] = \"IA5String\";\n AsnPropTypes[AsnPropTypes[\"GraphicString\"] = 16] = \"GraphicString\";\n AsnPropTypes[AsnPropTypes[\"VisibleString\"] = 17] = \"VisibleString\";\n AsnPropTypes[AsnPropTypes[\"GeneralString\"] = 18] = \"GeneralString\";\n AsnPropTypes[AsnPropTypes[\"CharacterString\"] = 19] = \"CharacterString\";\n AsnPropTypes[AsnPropTypes[\"UTCTime\"] = 20] = \"UTCTime\";\n AsnPropTypes[AsnPropTypes[\"GeneralizedTime\"] = 21] = \"GeneralizedTime\";\n AsnPropTypes[AsnPropTypes[\"DATE\"] = 22] = \"DATE\";\n AsnPropTypes[AsnPropTypes[\"TimeOfDay\"] = 23] = \"TimeOfDay\";\n AsnPropTypes[AsnPropTypes[\"DateTime\"] = 24] = \"DateTime\";\n AsnPropTypes[AsnPropTypes[\"Duration\"] = 25] = \"Duration\";\n AsnPropTypes[AsnPropTypes[\"TIME\"] = 26] = \"TIME\";\n AsnPropTypes[AsnPropTypes[\"Null\"] = 27] = \"Null\";\n})(AsnPropTypes || (AsnPropTypes = {}));\n","export * from \"./schema_validation\";\n","export class AsnSchemaValidationError extends Error {\n constructor() {\n super(...arguments);\n this.schemas = [];\n }\n}\n","export function isConvertible(target) {\n if (typeof target === \"function\" && target.prototype) {\n if (target.prototype.toASN && target.prototype.fromASN) {\n return true;\n }\n else {\n return isConvertible(target.prototype);\n }\n }\n else {\n return !!(target && typeof target === \"object\" && \"toASN\" in target && \"fromASN\" in target);\n }\n}\nexport function isTypeOfArray(target) {\n var _a;\n if (target) {\n const proto = Object.getPrototypeOf(target);\n if (((_a = proto === null || proto === void 0 ? void 0 : proto.prototype) === null || _a === void 0 ? void 0 : _a.constructor) === Array) {\n return true;\n }\n return isTypeOfArray(proto);\n }\n return false;\n}\nexport function isArrayEqual(bytes1, bytes2) {\n if (!(bytes1 && bytes2)) {\n return false;\n }\n if (bytes1.byteLength !== bytes2.byteLength) {\n return false;\n }\n const b1 = new Uint8Array(bytes1);\n const b2 = new Uint8Array(bytes2);\n for (let i = 0; i < bytes1.byteLength; i++) {\n if (b1[i] !== b2[i]) {\n return false;\n }\n }\n return true;\n}\n","export * from \"./converters\";\nexport * from \"./types/index\";\nexport { AsnProp, AsnType, AsnChoiceType, AsnSequenceType, AsnSetType } from \"./decorators\";\nexport { AsnTypeTypes, AsnPropTypes } from \"./enums\";\nexport { AsnParser } from \"./parser\";\nexport { AsnSerializer } from \"./serializer\";\nexport * from \"./errors\";\nexport * from \"./objects\";\nexport * from \"./convert\";\n","export class AsnArray extends Array {\n constructor(items = []) {\n if (typeof items === \"number\") {\n super(items);\n }\n else {\n super();\n for (const item of items) {\n this.push(item);\n }\n }\n }\n}\n","import * as asn1js from \"asn1js\";\nimport { AsnPropTypes, AsnTypeTypes } from \"./enums\";\nimport * as converters from \"./converters\";\nimport { AsnSchemaValidationError } from \"./errors\";\nimport { isConvertible, isTypeOfArray } from \"./helper\";\nimport { schemaStorage } from \"./storage\";\nexport class AsnParser {\n static parse(data, target) {\n const asn1Parsed = asn1js.fromBER(data);\n if (asn1Parsed.result.error) {\n throw new Error(asn1Parsed.result.error);\n }\n const res = this.fromASN(asn1Parsed.result, target);\n return res;\n }\n static fromASN(asn1Schema, target) {\n var _a;\n try {\n if (isConvertible(target)) {\n const value = new target();\n return value.fromASN(asn1Schema);\n }\n const schema = schemaStorage.get(target);\n schemaStorage.cache(target);\n let targetSchema = schema.schema;\n if (asn1Schema.constructor === asn1js.Constructed && schema.type !== AsnTypeTypes.Choice) {\n targetSchema = new asn1js.Constructed({\n idBlock: {\n tagClass: 3,\n tagNumber: asn1Schema.idBlock.tagNumber,\n },\n value: schema.schema.valueBlock.value,\n });\n for (const key in schema.items) {\n delete asn1Schema[key];\n }\n }\n const asn1ComparedSchema = asn1js.compareSchema({}, asn1Schema, targetSchema);\n if (!asn1ComparedSchema.verified) {\n throw new AsnSchemaValidationError(`Data does not match to ${target.name} ASN1 schema. ${asn1ComparedSchema.result.error}`);\n }\n const res = new target();\n if (isTypeOfArray(target)) {\n if (!(\"value\" in asn1Schema.valueBlock && Array.isArray(asn1Schema.valueBlock.value))) {\n throw new Error(`Cannot get items from the ASN.1 parsed value. ASN.1 object is not constructed.`);\n }\n const itemType = schema.itemType;\n if (typeof itemType === \"number\") {\n const converter = converters.defaultConverter(itemType);\n if (!converter) {\n throw new Error(`Cannot get default converter for array item of ${target.name} ASN1 schema`);\n }\n return target.from(asn1Schema.valueBlock.value, (element) => converter.fromASN(element));\n }\n else {\n return target.from(asn1Schema.valueBlock.value, (element) => this.fromASN(element, itemType));\n }\n }\n for (const key in schema.items) {\n const asn1SchemaValue = asn1ComparedSchema.result[key];\n if (!asn1SchemaValue) {\n continue;\n }\n const schemaItem = schema.items[key];\n const schemaItemType = schemaItem.type;\n if (typeof schemaItemType === \"number\" || isConvertible(schemaItemType)) {\n const converter = (_a = schemaItem.converter) !== null && _a !== void 0 ? _a : (isConvertible(schemaItemType)\n ? new schemaItemType()\n : null);\n if (!converter) {\n throw new Error(\"Converter is empty\");\n }\n if (schemaItem.repeated) {\n if (schemaItem.implicit) {\n const Container = schemaItem.repeated === \"sequence\"\n ? asn1js.Sequence\n : asn1js.Set;\n const newItem = new Container();\n newItem.valueBlock = asn1SchemaValue.valueBlock;\n const newItemAsn = asn1js.fromBER(newItem.toBER(false));\n if (newItemAsn.offset === -1) {\n throw new Error(`Cannot parse the child item. ${newItemAsn.result.error}`);\n }\n if (!(\"value\" in newItemAsn.result.valueBlock && Array.isArray(newItemAsn.result.valueBlock.value))) {\n throw new Error(\"Cannot get items from the ASN.1 parsed value. ASN.1 object is not constructed.\");\n }\n const value = newItemAsn.result.valueBlock.value;\n res[key] = Array.from(value, (element) => converter.fromASN(element));\n }\n else {\n res[key] = Array.from(asn1SchemaValue, (element) => converter.fromASN(element));\n }\n }\n else {\n let value = asn1SchemaValue;\n if (schemaItem.implicit) {\n let newItem;\n if (isConvertible(schemaItemType)) {\n newItem = new schemaItemType().toSchema(\"\");\n }\n else {\n const Asn1TypeName = AsnPropTypes[schemaItemType];\n const Asn1Type = asn1js[Asn1TypeName];\n if (!Asn1Type) {\n throw new Error(`Cannot get '${Asn1TypeName}' class from asn1js module`);\n }\n newItem = new Asn1Type();\n }\n newItem.valueBlock = value.valueBlock;\n value = asn1js.fromBER(newItem.toBER(false)).result;\n }\n res[key] = converter.fromASN(value);\n }\n }\n else {\n if (schemaItem.repeated) {\n if (!Array.isArray(asn1SchemaValue)) {\n throw new Error(\"Cannot get list of items from the ASN.1 parsed value. ASN.1 value should be iterable.\");\n }\n res[key] = Array.from(asn1SchemaValue, (element) => this.fromASN(element, schemaItemType));\n }\n else {\n res[key] = this.fromASN(asn1SchemaValue, schemaItemType);\n }\n }\n }\n return res;\n }\n catch (error) {\n if (error instanceof AsnSchemaValidationError) {\n error.schemas.push(target.name);\n }\n throw error;\n }\n }\n}\n","import * as asn1js from \"asn1js\";\nimport { AsnPropTypes, AsnTypeTypes } from \"./enums\";\nimport { isConvertible } from \"./helper\";\nexport class AsnSchemaStorage {\n constructor() {\n this.items = new WeakMap();\n }\n has(target) {\n return this.items.has(target);\n }\n get(target, checkSchema = false) {\n const schema = this.items.get(target);\n if (!schema) {\n throw new Error(`Cannot get schema for '${target.prototype.constructor.name}' target`);\n }\n if (checkSchema && !schema.schema) {\n throw new Error(`Schema '${target.prototype.constructor.name}' doesn't contain ASN.1 schema. Call 'AsnSchemaStorage.cache'.`);\n }\n return schema;\n }\n cache(target) {\n const schema = this.get(target);\n if (!schema.schema) {\n schema.schema = this.create(target, true);\n }\n }\n createDefault(target) {\n const schema = {\n type: AsnTypeTypes.Sequence,\n items: {},\n };\n const parentSchema = this.findParentSchema(target);\n if (parentSchema) {\n Object.assign(schema, parentSchema);\n schema.items = Object.assign({}, schema.items, parentSchema.items);\n }\n return schema;\n }\n create(target, useNames) {\n const schema = this.items.get(target) || this.createDefault(target);\n const asn1Value = [];\n for (const key in schema.items) {\n const item = schema.items[key];\n const name = useNames ? key : \"\";\n let asn1Item;\n if (typeof (item.type) === \"number\") {\n const Asn1TypeName = AsnPropTypes[item.type];\n const Asn1Type = asn1js[Asn1TypeName];\n if (!Asn1Type) {\n throw new Error(`Cannot get ASN1 class by name '${Asn1TypeName}'`);\n }\n asn1Item = new Asn1Type({ name });\n }\n else if (isConvertible(item.type)) {\n const instance = new item.type();\n asn1Item = instance.toSchema(name);\n }\n else if (item.optional) {\n const itemSchema = this.get(item.type);\n if (itemSchema.type === AsnTypeTypes.Choice) {\n asn1Item = new asn1js.Any({ name });\n }\n else {\n asn1Item = this.create(item.type, false);\n asn1Item.name = name;\n }\n }\n else {\n asn1Item = new asn1js.Any({ name });\n }\n const optional = !!item.optional || item.defaultValue !== undefined;\n if (item.repeated) {\n asn1Item.name = \"\";\n const Container = item.repeated === \"set\"\n ? asn1js.Set\n : asn1js.Sequence;\n asn1Item = new Container({\n name: \"\",\n value: [\n new asn1js.Repeated({\n name,\n value: asn1Item,\n }),\n ],\n });\n }\n if (item.context !== null && item.context !== undefined) {\n if (item.implicit) {\n if (typeof item.type === \"number\" || isConvertible(item.type)) {\n const Container = item.repeated\n ? asn1js.Constructed\n : asn1js.Primitive;\n asn1Value.push(new Container({\n name,\n optional,\n idBlock: {\n tagClass: 3,\n tagNumber: item.context,\n },\n }));\n }\n else {\n this.cache(item.type);\n const isRepeated = !!item.repeated;\n let value = !isRepeated\n ? this.get(item.type, true).schema\n : asn1Item;\n value = \"valueBlock\" in value ? value.valueBlock.value : value.value;\n asn1Value.push(new asn1js.Constructed({\n name: !isRepeated ? name : \"\",\n optional,\n idBlock: {\n tagClass: 3,\n tagNumber: item.context,\n },\n value: value,\n }));\n }\n }\n else {\n asn1Value.push(new asn1js.Constructed({\n optional,\n idBlock: {\n tagClass: 3,\n tagNumber: item.context,\n },\n value: [asn1Item],\n }));\n }\n }\n else {\n asn1Item.optional = optional;\n asn1Value.push(asn1Item);\n }\n }\n switch (schema.type) {\n case AsnTypeTypes.Sequence:\n return new asn1js.Sequence({ value: asn1Value, name: \"\" });\n case AsnTypeTypes.Set:\n return new asn1js.Set({ value: asn1Value, name: \"\" });\n case AsnTypeTypes.Choice:\n return new asn1js.Choice({ value: asn1Value, name: \"\" });\n default:\n throw new Error(`Unsupported ASN1 type in use`);\n }\n }\n set(target, schema) {\n this.items.set(target, schema);\n return this;\n }\n findParentSchema(target) {\n const parent = Object.getPrototypeOf(target);\n if (parent) {\n const schema = this.items.get(parent);\n return schema || this.findParentSchema(parent);\n }\n return null;\n }\n}\n","import * as asn1js from \"asn1js\";\nimport * as converters from \"./converters\";\nimport { AsnPropTypes, AsnTypeTypes } from \"./enums\";\nimport { isConvertible, isArrayEqual } from \"./helper\";\nimport { schemaStorage } from \"./storage\";\nexport class AsnSerializer {\n static serialize(obj) {\n if (obj instanceof asn1js.BaseBlock) {\n return obj.toBER(false);\n }\n return this.toASN(obj).toBER(false);\n }\n static toASN(obj) {\n if (obj && typeof obj === \"object\" && isConvertible(obj)) {\n return obj.toASN();\n }\n if (!(obj && typeof obj === \"object\")) {\n throw new TypeError(\"Parameter 1 should be type of Object.\");\n }\n const target = obj.constructor;\n const schema = schemaStorage.get(target);\n schemaStorage.cache(target);\n let asn1Value = [];\n if (schema.itemType) {\n if (!Array.isArray(obj)) {\n throw new TypeError(\"Parameter 1 should be type of Array.\");\n }\n if (typeof schema.itemType === \"number\") {\n const converter = converters.defaultConverter(schema.itemType);\n if (!converter) {\n throw new Error(`Cannot get default converter for array item of ${target.name} ASN1 schema`);\n }\n asn1Value = obj.map((o) => converter.toASN(o));\n }\n else {\n asn1Value = obj.map((o) => this.toAsnItem({ type: schema.itemType }, \"[]\", target, o));\n }\n }\n else {\n for (const key in schema.items) {\n const schemaItem = schema.items[key];\n const objProp = obj[key];\n if (objProp === undefined\n || schemaItem.defaultValue === objProp\n || (typeof schemaItem.defaultValue === \"object\" && typeof objProp === \"object\"\n && isArrayEqual(this.serialize(schemaItem.defaultValue), this.serialize(objProp)))) {\n continue;\n }\n const asn1Item = AsnSerializer.toAsnItem(schemaItem, key, target, objProp);\n if (typeof schemaItem.context === \"number\") {\n if (schemaItem.implicit) {\n if (!schemaItem.repeated\n && (typeof schemaItem.type === \"number\" || isConvertible(schemaItem.type))) {\n const value = {};\n value.valueHex = asn1Item instanceof asn1js.Null ? asn1Item.valueBeforeDecodeView : asn1Item.valueBlock.toBER();\n asn1Value.push(new asn1js.Primitive({\n optional: schemaItem.optional,\n idBlock: {\n tagClass: 3,\n tagNumber: schemaItem.context,\n },\n ...value,\n }));\n }\n else {\n asn1Value.push(new asn1js.Constructed({\n optional: schemaItem.optional,\n idBlock: {\n tagClass: 3,\n tagNumber: schemaItem.context,\n },\n value: asn1Item.valueBlock.value,\n }));\n }\n }\n else {\n asn1Value.push(new asn1js.Constructed({\n optional: schemaItem.optional,\n idBlock: {\n tagClass: 3,\n tagNumber: schemaItem.context,\n },\n value: [asn1Item],\n }));\n }\n }\n else if (schemaItem.repeated) {\n asn1Value = asn1Value.concat(asn1Item);\n }\n else {\n asn1Value.push(asn1Item);\n }\n }\n }\n let asnSchema;\n switch (schema.type) {\n case AsnTypeTypes.Sequence:\n asnSchema = new asn1js.Sequence({ value: asn1Value });\n break;\n case AsnTypeTypes.Set:\n asnSchema = new asn1js.Set({ value: asn1Value });\n break;\n case AsnTypeTypes.Choice:\n if (!asn1Value[0]) {\n throw new Error(`Schema '${target.name}' has wrong data. Choice cannot be empty.`);\n }\n asnSchema = asn1Value[0];\n break;\n }\n return asnSchema;\n }\n static toAsnItem(schemaItem, key, target, objProp) {\n let asn1Item;\n if (typeof (schemaItem.type) === \"number\") {\n const converter = schemaItem.converter;\n if (!converter) {\n throw new Error(`Property '${key}' doesn't have converter for type ${AsnPropTypes[schemaItem.type]} in schema '${target.name}'`);\n }\n if (schemaItem.repeated) {\n if (!Array.isArray(objProp)) {\n throw new TypeError(\"Parameter 'objProp' should be type of Array.\");\n }\n const items = Array.from(objProp, (element) => converter.toASN(element));\n const Container = schemaItem.repeated === \"sequence\"\n ? asn1js.Sequence\n : asn1js.Set;\n asn1Item = new Container({\n value: items,\n });\n }\n else {\n asn1Item = converter.toASN(objProp);\n }\n }\n else {\n if (schemaItem.repeated) {\n if (!Array.isArray(objProp)) {\n throw new TypeError(\"Parameter 'objProp' should be type of Array.\");\n }\n const items = Array.from(objProp, (element) => this.toASN(element));\n const Container = schemaItem.repeated === \"sequence\"\n ? asn1js.Sequence\n : asn1js.Set;\n asn1Item = new Container({\n value: items,\n });\n }\n else {\n asn1Item = this.toASN(objProp);\n }\n }\n return asn1Item;\n }\n}\n","import { AsnSchemaStorage } from \"./schema\";\nexport const schemaStorage = new AsnSchemaStorage();\n","import * as asn1js from \"asn1js\";\nimport { BufferSourceConverter } from \"pvtsutils\";\nexport class BitString {\n constructor(params, unusedBits = 0) {\n this.unusedBits = 0;\n this.value = new ArrayBuffer(0);\n if (params) {\n if (typeof params === \"number\") {\n this.fromNumber(params);\n }\n else if (BufferSourceConverter.isBufferSource(params)) {\n this.unusedBits = unusedBits;\n this.value = BufferSourceConverter.toArrayBuffer(params);\n }\n else {\n throw TypeError(\"Unsupported type of 'params' argument for BitString\");\n }\n }\n }\n fromASN(asn) {\n if (!(asn instanceof asn1js.BitString)) {\n throw new TypeError(\"Argument 'asn' is not instance of ASN.1 BitString\");\n }\n this.unusedBits = asn.valueBlock.unusedBits;\n this.value = asn.valueBlock.valueHex;\n return this;\n }\n toASN() {\n return new asn1js.BitString({ unusedBits: this.unusedBits, valueHex: this.value });\n }\n toSchema(name) {\n return new asn1js.BitString({ name });\n }\n toNumber() {\n let res = \"\";\n const uintArray = new Uint8Array(this.value);\n for (const octet of uintArray) {\n res += octet.toString(2).padStart(8, \"0\");\n }\n res = res.split(\"\").reverse().join(\"\");\n if (this.unusedBits) {\n res = res.slice(this.unusedBits).padStart(this.unusedBits, \"0\");\n }\n return parseInt(res, 2);\n }\n fromNumber(value) {\n let bits = value.toString(2);\n const octetSize = (bits.length + 7) >> 3;\n this.unusedBits = (octetSize << 3) - bits.length;\n const octets = new Uint8Array(octetSize);\n bits = bits.padStart(octetSize << 3, \"0\").split(\"\").reverse().join(\"\");\n let index = 0;\n while (index < octetSize) {\n octets[index] = parseInt(bits.slice(index << 3, (index << 3) + 8), 2);\n index++;\n }\n this.value = octets.buffer;\n }\n}\n","export * from \"./bit_string\";\nexport * from \"./octet_string\";\n","import * as asn1js from \"asn1js\";\nimport { BufferSourceConverter } from \"pvtsutils\";\nexport class OctetString {\n get byteLength() {\n return this.buffer.byteLength;\n }\n get byteOffset() {\n return 0;\n }\n constructor(param) {\n if (typeof param === \"number\") {\n this.buffer = new ArrayBuffer(param);\n }\n else {\n if (BufferSourceConverter.isBufferSource(param)) {\n this.buffer = BufferSourceConverter.toArrayBuffer(param);\n }\n else if (Array.isArray(param)) {\n this.buffer = new Uint8Array(param);\n }\n else {\n this.buffer = new ArrayBuffer(0);\n }\n }\n }\n fromASN(asn) {\n if (!(asn instanceof asn1js.OctetString)) {\n throw new TypeError(\"Argument 'asn' is not instance of ASN.1 OctetString\");\n }\n this.buffer = asn.valueBlock.valueHex;\n return this;\n }\n toASN() {\n return new asn1js.OctetString({ valueHex: this.buffer });\n }\n toSchema(name) {\n return new asn1js.OctetString({ name });\n }\n}\n","/**\n * Copyright (c) 2020, Peculiar Ventures, All rights reserved.\n */\n\nclass JsonError extends Error {\r\n constructor(message, innerError) {\r\n super(innerError\r\n ? `${message}. See the inner exception for more details.`\r\n : message);\r\n this.message = message;\r\n this.innerError = innerError;\r\n }\r\n}\n\nclass TransformError extends JsonError {\r\n constructor(schema, message, innerError) {\r\n super(message, innerError);\r\n this.schema = schema;\r\n }\r\n}\n\nclass ParserError extends TransformError {\r\n constructor(schema, message, innerError) {\r\n super(schema, `JSON doesn't match to '${schema.target.name}' schema. ${message}`, innerError);\r\n }\r\n}\n\nclass ValidationError extends JsonError {\r\n}\n\nclass SerializerError extends JsonError {\r\n constructor(schemaName, message, innerError) {\r\n super(`Cannot serialize by '${schemaName}' schema. ${message}`, innerError);\r\n this.schemaName = schemaName;\r\n }\r\n}\n\nclass KeyError extends ParserError {\r\n constructor(schema, keys, errors = {}) {\r\n super(schema, \"Some keys doesn't match to schema\");\r\n this.keys = keys;\r\n this.errors = errors;\r\n }\r\n}\n\nvar JsonPropTypes;\r\n(function (JsonPropTypes) {\r\n JsonPropTypes[JsonPropTypes[\"Any\"] = 0] = \"Any\";\r\n JsonPropTypes[JsonPropTypes[\"Boolean\"] = 1] = \"Boolean\";\r\n JsonPropTypes[JsonPropTypes[\"Number\"] = 2] = \"Number\";\r\n JsonPropTypes[JsonPropTypes[\"String\"] = 3] = \"String\";\r\n})(JsonPropTypes || (JsonPropTypes = {}));\n\nfunction checkType(value, type) {\r\n switch (type) {\r\n case JsonPropTypes.Boolean:\r\n return typeof value === \"boolean\";\r\n case JsonPropTypes.Number:\r\n return typeof value === \"number\";\r\n case JsonPropTypes.String:\r\n return typeof value === \"string\";\r\n }\r\n return true;\r\n}\r\nfunction throwIfTypeIsWrong(value, type) {\r\n if (!checkType(value, type)) {\r\n throw new TypeError(`Value must be ${JsonPropTypes[type]}`);\r\n }\r\n}\r\nfunction isConvertible(target) {\r\n if (target && target.prototype) {\r\n if (target.prototype.toJSON && target.prototype.fromJSON) {\r\n return true;\r\n }\r\n else {\r\n return isConvertible(target.prototype);\r\n }\r\n }\r\n else {\r\n return !!(target && target.toJSON && target.fromJSON);\r\n }\r\n}\n\nclass JsonSchemaStorage {\r\n constructor() {\r\n this.items = new Map();\r\n }\r\n has(target) {\r\n return this.items.has(target) || !!this.findParentSchema(target);\r\n }\r\n get(target) {\r\n const schema = this.items.get(target) || this.findParentSchema(target);\r\n if (!schema) {\r\n throw new Error(\"Cannot get schema for current target\");\r\n }\r\n return schema;\r\n }\r\n create(target) {\r\n const schema = { names: {} };\r\n const parentSchema = this.findParentSchema(target);\r\n if (parentSchema) {\r\n Object.assign(schema, parentSchema);\r\n schema.names = {};\r\n for (const name in parentSchema.names) {\r\n schema.names[name] = Object.assign({}, parentSchema.names[name]);\r\n }\r\n }\r\n schema.target = target;\r\n return schema;\r\n }\r\n set(target, schema) {\r\n this.items.set(target, schema);\r\n return this;\r\n }\r\n findParentSchema(target) {\r\n const parent = target.__proto__;\r\n if (parent) {\r\n const schema = this.items.get(parent);\r\n return schema || this.findParentSchema(parent);\r\n }\r\n return null;\r\n }\r\n}\n\nconst DEFAULT_SCHEMA = \"default\";\r\nconst schemaStorage = new JsonSchemaStorage();\n\nclass PatternValidation {\r\n constructor(pattern) {\r\n this.pattern = new RegExp(pattern);\r\n }\r\n validate(value) {\r\n const pattern = new RegExp(this.pattern.source, this.pattern.flags);\r\n if (typeof value !== \"string\") {\r\n throw new ValidationError(\"Incoming value must be string\");\r\n }\r\n if (!pattern.exec(value)) {\r\n throw new ValidationError(`Value doesn't match to pattern '${pattern.toString()}'`);\r\n }\r\n }\r\n}\n\nclass InclusiveValidation {\r\n constructor(min = Number.MIN_VALUE, max = Number.MAX_VALUE) {\r\n this.min = min;\r\n this.max = max;\r\n }\r\n validate(value) {\r\n throwIfTypeIsWrong(value, JsonPropTypes.Number);\r\n if (!(this.min <= value && value <= this.max)) {\r\n const min = this.min === Number.MIN_VALUE ? \"MIN\" : this.min;\r\n const max = this.max === Number.MAX_VALUE ? \"MAX\" : this.max;\r\n throw new ValidationError(`Value doesn't match to diapason [${min},${max}]`);\r\n }\r\n }\r\n}\n\nclass ExclusiveValidation {\r\n constructor(min = Number.MIN_VALUE, max = Number.MAX_VALUE) {\r\n this.min = min;\r\n this.max = max;\r\n }\r\n validate(value) {\r\n throwIfTypeIsWrong(value, JsonPropTypes.Number);\r\n if (!(this.min < value && value < this.max)) {\r\n const min = this.min === Number.MIN_VALUE ? \"MIN\" : this.min;\r\n const max = this.max === Number.MAX_VALUE ? \"MAX\" : this.max;\r\n throw new ValidationError(`Value doesn't match to diapason (${min},${max})`);\r\n }\r\n }\r\n}\n\nclass LengthValidation {\r\n constructor(length, minLength, maxLength) {\r\n this.length = length;\r\n this.minLength = minLength;\r\n this.maxLength = maxLength;\r\n }\r\n validate(value) {\r\n if (this.length !== undefined) {\r\n if (value.length !== this.length) {\r\n throw new ValidationError(`Value length must be exactly ${this.length}.`);\r\n }\r\n return;\r\n }\r\n if (this.minLength !== undefined) {\r\n if (value.length < this.minLength) {\r\n throw new ValidationError(`Value length must be more than ${this.minLength}.`);\r\n }\r\n }\r\n if (this.maxLength !== undefined) {\r\n if (value.length > this.maxLength) {\r\n throw new ValidationError(`Value length must be less than ${this.maxLength}.`);\r\n }\r\n }\r\n }\r\n}\n\nclass EnumerationValidation {\r\n constructor(enumeration) {\r\n this.enumeration = enumeration;\r\n }\r\n validate(value) {\r\n throwIfTypeIsWrong(value, JsonPropTypes.String);\r\n if (!this.enumeration.includes(value)) {\r\n throw new ValidationError(`Value must be one of ${this.enumeration.map((v) => `'${v}'`).join(\", \")}`);\r\n }\r\n }\r\n}\n\nclass JsonTransform {\r\n static checkValues(data, schemaItem) {\r\n const values = Array.isArray(data) ? data : [data];\r\n for (const value of values) {\r\n for (const validation of schemaItem.validations) {\r\n if (validation instanceof LengthValidation && schemaItem.repeated) {\r\n validation.validate(data);\r\n }\r\n else {\r\n validation.validate(value);\r\n }\r\n }\r\n }\r\n }\r\n static checkTypes(value, schemaItem) {\r\n if (schemaItem.repeated && !Array.isArray(value)) {\r\n throw new TypeError(\"Value must be Array\");\r\n }\r\n if (typeof schemaItem.type === \"number\") {\r\n const values = Array.isArray(value) ? value : [value];\r\n for (const v of values) {\r\n throwIfTypeIsWrong(v, schemaItem.type);\r\n }\r\n }\r\n }\r\n static getSchemaByName(schema, name = DEFAULT_SCHEMA) {\r\n return { ...schema.names[DEFAULT_SCHEMA], ...schema.names[name] };\r\n }\r\n}\n\nclass JsonSerializer extends JsonTransform {\r\n static serialize(obj, options, replacer, space) {\r\n const json = this.toJSON(obj, options);\r\n return JSON.stringify(json, replacer, space);\r\n }\r\n static toJSON(obj, options = {}) {\r\n let res;\r\n let targetSchema = options.targetSchema;\r\n const schemaName = options.schemaName || DEFAULT_SCHEMA;\r\n if (isConvertible(obj)) {\r\n return obj.toJSON();\r\n }\r\n if (Array.isArray(obj)) {\r\n res = [];\r\n for (const item of obj) {\r\n res.push(this.toJSON(item, options));\r\n }\r\n }\r\n else if (typeof obj === \"object\") {\r\n if (targetSchema && !schemaStorage.has(targetSchema)) {\r\n throw new JsonError(\"Cannot get schema for `targetSchema` param\");\r\n }\r\n targetSchema = (targetSchema || obj.constructor);\r\n if (schemaStorage.has(targetSchema)) {\r\n const schema = schemaStorage.get(targetSchema);\r\n res = {};\r\n const namedSchema = this.getSchemaByName(schema, schemaName);\r\n for (const key in namedSchema) {\r\n try {\r\n const item = namedSchema[key];\r\n const objItem = obj[key];\r\n let value;\r\n if ((item.optional && objItem === undefined)\r\n || (item.defaultValue !== undefined && objItem === item.defaultValue)) {\r\n continue;\r\n }\r\n if (!item.optional && objItem === undefined) {\r\n throw new SerializerError(targetSchema.name, `Property '${key}' is required.`);\r\n }\r\n if (typeof item.type === \"number\") {\r\n if (item.converter) {\r\n if (item.repeated) {\r\n value = objItem.map((el) => item.converter.toJSON(el, obj));\r\n }\r\n else {\r\n value = item.converter.toJSON(objItem, obj);\r\n }\r\n }\r\n else {\r\n value = objItem;\r\n }\r\n }\r\n else {\r\n if (item.repeated) {\r\n value = objItem.map((el) => this.toJSON(el, { schemaName }));\r\n }\r\n else {\r\n value = this.toJSON(objItem, { schemaName });\r\n }\r\n }\r\n this.checkTypes(value, item);\r\n this.checkValues(value, item);\r\n res[item.name || key] = value;\r\n }\r\n catch (e) {\r\n if (e instanceof SerializerError) {\r\n throw e;\r\n }\r\n else {\r\n throw new SerializerError(schema.target.name, `Property '${key}' is wrong. ${e.message}`, e);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n res = {};\r\n for (const key in obj) {\r\n res[key] = this.toJSON(obj[key], { schemaName });\r\n }\r\n }\r\n }\r\n else {\r\n res = obj;\r\n }\r\n return res;\r\n }\r\n}\n\nclass JsonParser extends JsonTransform {\r\n static parse(data, options) {\r\n const obj = JSON.parse(data);\r\n return this.fromJSON(obj, options);\r\n }\r\n static fromJSON(target, options) {\r\n const targetSchema = options.targetSchema;\r\n const schemaName = options.schemaName || DEFAULT_SCHEMA;\r\n const obj = new targetSchema();\r\n if (isConvertible(obj)) {\r\n return obj.fromJSON(target);\r\n }\r\n const schema = schemaStorage.get(targetSchema);\r\n const namedSchema = this.getSchemaByName(schema, schemaName);\r\n const keyErrors = {};\r\n if (options.strictProperty && !Array.isArray(target)) {\r\n JsonParser.checkStrictProperty(target, namedSchema, schema);\r\n }\r\n for (const key in namedSchema) {\r\n try {\r\n const item = namedSchema[key];\r\n const name = item.name || key;\r\n const value = target[name];\r\n if (value === undefined && (item.optional || item.defaultValue !== undefined)) {\r\n continue;\r\n }\r\n if (!item.optional && value === undefined) {\r\n throw new ParserError(schema, `Property '${name}' is required.`);\r\n }\r\n this.checkTypes(value, item);\r\n this.checkValues(value, item);\r\n if (typeof (item.type) === \"number\") {\r\n if (item.converter) {\r\n if (item.repeated) {\r\n obj[key] = value.map((el) => item.converter.fromJSON(el, obj));\r\n }\r\n else {\r\n obj[key] = item.converter.fromJSON(value, obj);\r\n }\r\n }\r\n else {\r\n obj[key] = value;\r\n }\r\n }\r\n else {\r\n const newOptions = {\r\n ...options,\r\n targetSchema: item.type,\r\n schemaName,\r\n };\r\n if (item.repeated) {\r\n obj[key] = value.map((el) => this.fromJSON(el, newOptions));\r\n }\r\n else {\r\n obj[key] = this.fromJSON(value, newOptions);\r\n }\r\n }\r\n }\r\n catch (e) {\r\n if (!(e instanceof ParserError)) {\r\n e = new ParserError(schema, `Property '${key}' is wrong. ${e.message}`, e);\r\n }\r\n if (options.strictAllKeys) {\r\n keyErrors[key] = e;\r\n }\r\n else {\r\n throw e;\r\n }\r\n }\r\n }\r\n const keys = Object.keys(keyErrors);\r\n if (keys.length) {\r\n throw new KeyError(schema, keys, keyErrors);\r\n }\r\n return obj;\r\n }\r\n static checkStrictProperty(target, namedSchema, schema) {\r\n const jsonProps = Object.keys(target);\r\n const schemaProps = Object.keys(namedSchema);\r\n const keys = [];\r\n for (const key of jsonProps) {\r\n if (schemaProps.indexOf(key) === -1) {\r\n keys.push(key);\r\n }\r\n }\r\n if (keys.length) {\r\n throw new KeyError(schema, keys);\r\n }\r\n }\r\n}\n\nfunction getValidations(item) {\r\n const validations = [];\r\n if (item.pattern) {\r\n validations.push(new PatternValidation(item.pattern));\r\n }\r\n if (item.type === JsonPropTypes.Number || item.type === JsonPropTypes.Any) {\r\n if (item.minInclusive !== undefined || item.maxInclusive !== undefined) {\r\n validations.push(new InclusiveValidation(item.minInclusive, item.maxInclusive));\r\n }\r\n if (item.minExclusive !== undefined || item.maxExclusive !== undefined) {\r\n validations.push(new ExclusiveValidation(item.minExclusive, item.maxExclusive));\r\n }\r\n if (item.enumeration !== undefined) {\r\n validations.push(new EnumerationValidation(item.enumeration));\r\n }\r\n }\r\n if (item.type === JsonPropTypes.String || item.repeated || item.type === JsonPropTypes.Any) {\r\n if (item.length !== undefined || item.minLength !== undefined || item.maxLength !== undefined) {\r\n validations.push(new LengthValidation(item.length, item.minLength, item.maxLength));\r\n }\r\n }\r\n return validations;\r\n}\r\nconst JsonProp = (options = {}) => (target, propertyKey) => {\r\n const errorMessage = `Cannot set type for ${propertyKey} property of ${target.constructor.name} schema`;\r\n let schema;\r\n if (!schemaStorage.has(target.constructor)) {\r\n schema = schemaStorage.create(target.constructor);\r\n schemaStorage.set(target.constructor, schema);\r\n }\r\n else {\r\n schema = schemaStorage.get(target.constructor);\r\n if (schema.target !== target.constructor) {\r\n schema = schemaStorage.create(target.constructor);\r\n schemaStorage.set(target.constructor, schema);\r\n }\r\n }\r\n const defaultSchema = {\r\n type: JsonPropTypes.Any,\r\n validations: [],\r\n };\r\n const copyOptions = Object.assign(defaultSchema, options);\r\n copyOptions.validations = getValidations(copyOptions);\r\n if (typeof copyOptions.type !== \"number\") {\r\n if (!schemaStorage.has(copyOptions.type) && !isConvertible(copyOptions.type)) {\r\n throw new Error(`${errorMessage}. Assigning type doesn't have schema.`);\r\n }\r\n }\r\n let schemaNames;\r\n if (Array.isArray(options.schema)) {\r\n schemaNames = options.schema;\r\n }\r\n else {\r\n schemaNames = [options.schema || DEFAULT_SCHEMA];\r\n }\r\n for (const schemaName of schemaNames) {\r\n if (!schema.names[schemaName]) {\r\n schema.names[schemaName] = {};\r\n }\r\n const namedSchema = schema.names[schemaName];\r\n namedSchema[propertyKey] = copyOptions;\r\n }\r\n};\n\nexport { JsonError, JsonParser, JsonProp, JsonPropTypes, JsonSerializer, KeyError, ParserError, SerializerError, TransformError, ValidationError };\n","/*!\n Copyright (c) Peculiar Ventures, LLC\n*/\n\nimport * as core from 'webcrypto-core';\nimport { BufferSourceConverter as BufferSourceConverter$1 } from 'webcrypto-core';\nexport { CryptoKey } from 'webcrypto-core';\nimport { Buffer } from 'buffer';\nimport * as crypto from 'crypto';\nimport crypto__default from 'crypto';\nimport * as process from 'process';\nimport { __decorate } from 'tslib';\nimport { JsonProp, JsonPropTypes, JsonSerializer, JsonParser } from '@peculiar/json-schema';\nimport { Convert, BufferSourceConverter } from 'pvtsutils';\nimport { AsnParser, AsnSerializer } from '@peculiar/asn1-schema';\n\nconst JsonBase64UrlConverter = {\n fromJSON: (value) => Buffer.from(Convert.FromBase64Url(value)),\n toJSON: (value) => Convert.ToBase64Url(value),\n};\n\nclass CryptoKey extends core.CryptoKey {\n constructor() {\n super(...arguments);\n this.data = Buffer.alloc(0);\n this.algorithm = { name: \"\" };\n this.extractable = false;\n this.type = \"secret\";\n this.usages = [];\n this.kty = \"oct\";\n this.alg = \"\";\n }\n}\n__decorate([\n JsonProp({ name: \"ext\", type: JsonPropTypes.Boolean, optional: true })\n], CryptoKey.prototype, \"extractable\", void 0);\n__decorate([\n JsonProp({ name: \"key_ops\", type: JsonPropTypes.String, repeated: true, optional: true })\n], CryptoKey.prototype, \"usages\", void 0);\n__decorate([\n JsonProp({ type: JsonPropTypes.String })\n], CryptoKey.prototype, \"kty\", void 0);\n__decorate([\n JsonProp({ type: JsonPropTypes.String, optional: true })\n], CryptoKey.prototype, \"alg\", void 0);\n\nclass SymmetricKey extends CryptoKey {\n constructor() {\n super(...arguments);\n this.kty = \"oct\";\n this.type = \"secret\";\n }\n}\n\nclass AsymmetricKey extends CryptoKey {\n}\n\nclass AesCryptoKey extends SymmetricKey {\n get alg() {\n switch (this.algorithm.name.toUpperCase()) {\n case \"AES-CBC\":\n return `A${this.algorithm.length}CBC`;\n case \"AES-CTR\":\n return `A${this.algorithm.length}CTR`;\n case \"AES-GCM\":\n return `A${this.algorithm.length}GCM`;\n case \"AES-KW\":\n return `A${this.algorithm.length}KW`;\n case \"AES-CMAC\":\n return `A${this.algorithm.length}CMAC`;\n case \"AES-ECB\":\n return `A${this.algorithm.length}ECB`;\n default:\n throw new core.AlgorithmError(\"Unsupported algorithm name\");\n }\n }\n set alg(value) {\n }\n}\n__decorate([\n JsonProp({ name: \"k\", converter: JsonBase64UrlConverter })\n], AesCryptoKey.prototype, \"data\", void 0);\n\nclass AesCrypto {\n static async generateKey(algorithm, extractable, keyUsages) {\n const key = new AesCryptoKey();\n key.algorithm = algorithm;\n key.extractable = extractable;\n key.usages = keyUsages;\n key.data = crypto__default.randomBytes(algorithm.length >> 3);\n return key;\n }\n static async exportKey(format, key) {\n if (!(key instanceof AesCryptoKey)) {\n throw new Error(\"key: Is not AesCryptoKey\");\n }\n switch (format.toLowerCase()) {\n case \"jwk\":\n return JsonSerializer.toJSON(key);\n case \"raw\":\n return new Uint8Array(key.data).buffer;\n default:\n throw new core.OperationError(\"format: Must be 'jwk' or 'raw'\");\n }\n }\n static async importKey(format, keyData, algorithm, extractable, keyUsages) {\n let key;\n switch (format.toLowerCase()) {\n case \"jwk\":\n key = JsonParser.fromJSON(keyData, { targetSchema: AesCryptoKey });\n break;\n case \"raw\":\n key = new AesCryptoKey();\n key.data = Buffer.from(keyData);\n break;\n default:\n throw new core.OperationError(\"format: Must be 'jwk' or 'raw'\");\n }\n key.algorithm = algorithm;\n key.algorithm.length = key.data.length << 3;\n key.extractable = extractable;\n key.usages = keyUsages;\n switch (key.algorithm.length) {\n case 128:\n case 192:\n case 256:\n break;\n default:\n throw new core.OperationError(\"keyData: Is wrong key length\");\n }\n return key;\n }\n static async encrypt(algorithm, key, data) {\n switch (algorithm.name.toUpperCase()) {\n case \"AES-CBC\":\n return this.encryptAesCBC(algorithm, key, Buffer.from(data));\n case \"AES-CTR\":\n return this.encryptAesCTR(algorithm, key, Buffer.from(data));\n case \"AES-GCM\":\n return this.encryptAesGCM(algorithm, key, Buffer.from(data));\n case \"AES-KW\":\n return this.encryptAesKW(algorithm, key, Buffer.from(data));\n case \"AES-ECB\":\n return this.encryptAesECB(algorithm, key, Buffer.from(data));\n default:\n throw new core.OperationError(\"algorithm: Is not recognized\");\n }\n }\n static async decrypt(algorithm, key, data) {\n if (!(key instanceof AesCryptoKey)) {\n throw new Error(\"key: Is not AesCryptoKey\");\n }\n switch (algorithm.name.toUpperCase()) {\n case \"AES-CBC\":\n return this.decryptAesCBC(algorithm, key, Buffer.from(data));\n case \"AES-CTR\":\n return this.decryptAesCTR(algorithm, key, Buffer.from(data));\n case \"AES-GCM\":\n return this.decryptAesGCM(algorithm, key, Buffer.from(data));\n case \"AES-KW\":\n return this.decryptAesKW(algorithm, key, Buffer.from(data));\n case \"AES-ECB\":\n return this.decryptAesECB(algorithm, key, Buffer.from(data));\n default:\n throw new core.OperationError(\"algorithm: Is not recognized\");\n }\n }\n static async encryptAesCBC(algorithm, key, data) {\n const cipher = crypto__default.createCipheriv(`aes-${key.algorithm.length}-cbc`, key.data, new Uint8Array(algorithm.iv));\n let enc = cipher.update(data);\n enc = Buffer.concat([enc, cipher.final()]);\n const res = new Uint8Array(enc).buffer;\n return res;\n }\n static async decryptAesCBC(algorithm, key, data) {\n const decipher = crypto__default.createDecipheriv(`aes-${key.algorithm.length}-cbc`, key.data, new Uint8Array(algorithm.iv));\n let dec = decipher.update(data);\n dec = Buffer.concat([dec, decipher.final()]);\n return new Uint8Array(dec).buffer;\n }\n static async encryptAesCTR(algorithm, key, data) {\n const cipher = crypto__default.createCipheriv(`aes-${key.algorithm.length}-ctr`, key.data, Buffer.from(algorithm.counter));\n let enc = cipher.update(data);\n enc = Buffer.concat([enc, cipher.final()]);\n const res = new Uint8Array(enc).buffer;\n return res;\n }\n static async decryptAesCTR(algorithm, key, data) {\n const decipher = crypto__default.createDecipheriv(`aes-${key.algorithm.length}-ctr`, key.data, new Uint8Array(algorithm.counter));\n let dec = decipher.update(data);\n dec = Buffer.concat([dec, decipher.final()]);\n return new Uint8Array(dec).buffer;\n }\n static async encryptAesGCM(algorithm, key, data) {\n const cipher = crypto__default.createCipheriv(`aes-${key.algorithm.length}-gcm`, key.data, Buffer.from(algorithm.iv), {\n authTagLength: (algorithm.tagLength || 128) >> 3,\n });\n if (algorithm.additionalData) {\n cipher.setAAD(Buffer.from(algorithm.additionalData));\n }\n let enc = cipher.update(data);\n enc = Buffer.concat([enc, cipher.final(), cipher.getAuthTag()]);\n const res = new Uint8Array(enc).buffer;\n return res;\n }\n static async decryptAesGCM(algorithm, key, data) {\n const decipher = crypto__default.createDecipheriv(`aes-${key.algorithm.length}-gcm`, key.data, new Uint8Array(algorithm.iv));\n const tagLength = (algorithm.tagLength || 128) >> 3;\n const enc = data.slice(0, data.length - tagLength);\n const tag = data.slice(data.length - tagLength);\n if (algorithm.additionalData) {\n decipher.setAAD(Buffer.from(algorithm.additionalData));\n }\n decipher.setAuthTag(tag);\n let dec = decipher.update(enc);\n dec = Buffer.concat([dec, decipher.final()]);\n return new Uint8Array(dec).buffer;\n }\n static async encryptAesKW(algorithm, key, data) {\n const cipher = crypto__default.createCipheriv(`id-aes${key.algorithm.length}-wrap`, key.data, this.AES_KW_IV);\n let enc = cipher.update(data);\n enc = Buffer.concat([enc, cipher.final()]);\n return new Uint8Array(enc).buffer;\n }\n static async decryptAesKW(algorithm, key, data) {\n const decipher = crypto__default.createDecipheriv(`id-aes${key.algorithm.length}-wrap`, key.data, this.AES_KW_IV);\n let dec = decipher.update(data);\n dec = Buffer.concat([dec, decipher.final()]);\n return new Uint8Array(dec).buffer;\n }\n static async encryptAesECB(algorithm, key, data) {\n const cipher = crypto__default.createCipheriv(`aes-${key.algorithm.length}-ecb`, key.data, new Uint8Array(0));\n let enc = cipher.update(data);\n enc = Buffer.concat([enc, cipher.final()]);\n const res = new Uint8Array(enc).buffer;\n return res;\n }\n static async decryptAesECB(algorithm, key, data) {\n const decipher = crypto__default.createDecipheriv(`aes-${key.algorithm.length}-ecb`, key.data, new Uint8Array(0));\n let dec = decipher.update(data);\n dec = Buffer.concat([dec, decipher.final()]);\n return new Uint8Array(dec).buffer;\n }\n}\nAesCrypto.AES_KW_IV = Buffer.from(\"A6A6A6A6A6A6A6A6\", \"hex\");\n\nconst keyStorage = new WeakMap();\nfunction getCryptoKey(key) {\n const res = keyStorage.get(key);\n if (!res) {\n throw new core.OperationError(\"Cannot get CryptoKey from secure storage\");\n }\n return res;\n}\nfunction setCryptoKey(value) {\n const key = core.CryptoKey.create(value.algorithm, value.type, value.extractable, value.usages);\n Object.freeze(key);\n keyStorage.set(key, value);\n return key;\n}\n\nclass AesCbcProvider extends core.AesCbcProvider {\n async onGenerateKey(algorithm, extractable, keyUsages) {\n const key = await AesCrypto.generateKey({\n name: this.name,\n length: algorithm.length,\n }, extractable, keyUsages);\n return setCryptoKey(key);\n }\n async onEncrypt(algorithm, key, data) {\n return AesCrypto.encrypt(algorithm, getCryptoKey(key), new Uint8Array(data));\n }\n async onDecrypt(algorithm, key, data) {\n return AesCrypto.decrypt(algorithm, getCryptoKey(key), new Uint8Array(data));\n }\n async onExportKey(format, key) {\n return AesCrypto.exportKey(format, getCryptoKey(key));\n }\n async onImportKey(format, keyData, algorithm, extractable, keyUsages) {\n const key = await AesCrypto.importKey(format, keyData, { name: algorithm.name }, extractable, keyUsages);\n return setCryptoKey(key);\n }\n checkCryptoKey(key, keyUsage) {\n super.checkCryptoKey(key, keyUsage);\n if (!(getCryptoKey(key) instanceof AesCryptoKey)) {\n throw new TypeError(\"key: Is not a AesCryptoKey\");\n }\n }\n}\n\nconst zero = Buffer.from([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);\nconst rb = Buffer.from([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135]);\nconst blockSize = 16;\nfunction bitShiftLeft(buffer) {\n const shifted = Buffer.alloc(buffer.length);\n const last = buffer.length - 1;\n for (let index = 0; index < last; index++) {\n shifted[index] = buffer[index] << 1;\n if (buffer[index + 1] & 0x80) {\n shifted[index] += 0x01;\n }\n }\n shifted[last] = buffer[last] << 1;\n return shifted;\n}\nfunction xor(a, b) {\n const length = Math.min(a.length, b.length);\n const output = Buffer.alloc(length);\n for (let index = 0; index < length; index++) {\n output[index] = a[index] ^ b[index];\n }\n return output;\n}\nfunction aes(key, message) {\n const cipher = crypto.createCipheriv(`aes${key.length << 3}`, key, zero);\n const result = cipher.update(message);\n cipher.final();\n return result;\n}\nfunction getMessageBlock(message, blockIndex) {\n const block = Buffer.alloc(blockSize);\n const start = blockIndex * blockSize;\n const end = start + blockSize;\n message.copy(block, 0, start, end);\n return block;\n}\nfunction getPaddedMessageBlock(message, blockIndex) {\n const block = Buffer.alloc(blockSize);\n const start = blockIndex * blockSize;\n const end = message.length;\n block.fill(0);\n message.copy(block, 0, start, end);\n block[end - start] = 0x80;\n return block;\n}\nfunction generateSubkeys(key) {\n const l = aes(key, zero);\n let subkey1 = bitShiftLeft(l);\n if (l[0] & 0x80) {\n subkey1 = xor(subkey1, rb);\n }\n let subkey2 = bitShiftLeft(subkey1);\n if (subkey1[0] & 0x80) {\n subkey2 = xor(subkey2, rb);\n }\n return { subkey1, subkey2 };\n}\nfunction aesCmac(key, message) {\n const subkeys = generateSubkeys(key);\n let blockCount = Math.ceil(message.length / blockSize);\n let lastBlockCompleteFlag;\n let lastBlock;\n if (blockCount === 0) {\n blockCount = 1;\n lastBlockCompleteFlag = false;\n }\n else {\n lastBlockCompleteFlag = (message.length % blockSize === 0);\n }\n const lastBlockIndex = blockCount - 1;\n if (lastBlockCompleteFlag) {\n lastBlock = xor(getMessageBlock(message, lastBlockIndex), subkeys.subkey1);\n }\n else {\n lastBlock = xor(getPaddedMessageBlock(message, lastBlockIndex), subkeys.subkey2);\n }\n let x = zero;\n let y;\n for (let index = 0; index < lastBlockIndex; index++) {\n y = xor(x, getMessageBlock(message, index));\n x = aes(key, y);\n }\n y = xor(lastBlock, x);\n return aes(key, y);\n}\nclass AesCmacProvider extends core.AesCmacProvider {\n async onGenerateKey(algorithm, extractable, keyUsages) {\n const key = await AesCrypto.generateKey({\n name: this.name,\n length: algorithm.length,\n }, extractable, keyUsages);\n return setCryptoKey(key);\n }\n async onSign(algorithm, key, data) {\n const result = aesCmac(getCryptoKey(key).data, Buffer.from(data));\n return new Uint8Array(result).buffer;\n }\n async onVerify(algorithm, key, signature, data) {\n const signature2 = await this.sign(algorithm, key, data);\n return Buffer.from(signature).compare(Buffer.from(signature2)) === 0;\n }\n async onExportKey(format, key) {\n return AesCrypto.exportKey(format, getCryptoKey(key));\n }\n async onImportKey(format, keyData, algorithm, extractable, keyUsages) {\n const res = await AesCrypto.importKey(format, keyData, { name: algorithm.name }, extractable, keyUsages);\n return setCryptoKey(res);\n }\n checkCryptoKey(key, keyUsage) {\n super.checkCryptoKey(key, keyUsage);\n if (!(getCryptoKey(key) instanceof AesCryptoKey)) {\n throw new TypeError(\"key: Is not a AesCryptoKey\");\n }\n }\n}\n\nclass AesCtrProvider extends core.AesCtrProvider {\n async onGenerateKey(algorithm, extractable, keyUsages) {\n const key = await AesCrypto.generateKey({\n name: this.name,\n length: algorithm.length,\n }, extractable, keyUsages);\n return setCryptoKey(key);\n }\n async onEncrypt(algorithm, key, data) {\n return AesCrypto.encrypt(algorithm, getCryptoKey(key), new Uint8Array(data));\n }\n async onDecrypt(algorithm, key, data) {\n return AesCrypto.decrypt(algorithm, getCryptoKey(key), new Uint8Array(data));\n }\n async onExportKey(format, key) {\n return AesCrypto.exportKey(format, getCryptoKey(key));\n }\n async onImportKey(format, keyData, algorithm, extractable, keyUsages) {\n const res = await AesCrypto.importKey(format, keyData, { name: algorithm.name }, extractable, keyUsages);\n return setCryptoKey(res);\n }\n checkCryptoKey(key, keyUsage) {\n super.checkCryptoKey(key, keyUsage);\n if (!(getCryptoKey(key) instanceof AesCryptoKey)) {\n throw new TypeError(\"key: Is not a AesCryptoKey\");\n }\n }\n}\n\nclass AesGcmProvider extends core.AesGcmProvider {\n async onGenerateKey(algorithm, extractable, keyUsages) {\n const key = await AesCrypto.generateKey({\n name: this.name,\n length: algorithm.length,\n }, extractable, keyUsages);\n return setCryptoKey(key);\n }\n async onEncrypt(algorithm, key, data) {\n return AesCrypto.encrypt(algorithm, getCryptoKey(key), new Uint8Array(data));\n }\n async onDecrypt(algorithm, key, data) {\n return AesCrypto.decrypt(algorithm, getCryptoKey(key), new Uint8Array(data));\n }\n async onExportKey(format, key) {\n return AesCrypto.exportKey(format, getCryptoKey(key));\n }\n async onImportKey(format, keyData, algorithm, extractable, keyUsages) {\n const res = await AesCrypto.importKey(format, keyData, { name: algorithm.name }, extractable, keyUsages);\n return setCryptoKey(res);\n }\n checkCryptoKey(key, keyUsage) {\n super.checkCryptoKey(key, keyUsage);\n if (!(getCryptoKey(key) instanceof AesCryptoKey)) {\n throw new TypeError(\"key: Is not a AesCryptoKey\");\n }\n }\n}\n\nclass AesKwProvider extends core.AesKwProvider {\n async onGenerateKey(algorithm, extractable, keyUsages) {\n const res = await AesCrypto.generateKey({\n name: this.name,\n length: algorithm.length,\n }, extractable, keyUsages);\n return setCryptoKey(res);\n }\n async onExportKey(format, key) {\n return AesCrypto.exportKey(format, getCryptoKey(key));\n }\n async onImportKey(format, keyData, algorithm, extractable, keyUsages) {\n const res = await AesCrypto.importKey(format, keyData, { name: algorithm.name }, extractable, keyUsages);\n return setCryptoKey(res);\n }\n async onEncrypt(algorithm, key, data) {\n return AesCrypto.encrypt(algorithm, getCryptoKey(key), new Uint8Array(data));\n }\n async onDecrypt(algorithm, key, data) {\n return AesCrypto.decrypt(algorithm, getCryptoKey(key), new Uint8Array(data));\n }\n checkCryptoKey(key, keyUsage) {\n super.checkCryptoKey(key, keyUsage);\n if (!(getCryptoKey(key) instanceof AesCryptoKey)) {\n throw new TypeError(\"key: Is not a AesCryptoKey\");\n }\n }\n}\n\nclass AesEcbProvider extends core.AesEcbProvider {\n async onGenerateKey(algorithm, extractable, keyUsages) {\n const key = await AesCrypto.generateKey({\n name: this.name,\n length: algorithm.length,\n }, extractable, keyUsages);\n return setCryptoKey(key);\n }\n async onEncrypt(algorithm, key, data) {\n return AesCrypto.encrypt(algorithm, getCryptoKey(key), new Uint8Array(data));\n }\n async onDecrypt(algorithm, key, data) {\n return AesCrypto.decrypt(algorithm, getCryptoKey(key), new Uint8Array(data));\n }\n async onExportKey(format, key) {\n return AesCrypto.exportKey(format, getCryptoKey(key));\n }\n async onImportKey(format, keyData, algorithm, extractable, keyUsages) {\n const res = await AesCrypto.importKey(format, keyData, { name: algorithm.name }, extractable, keyUsages);\n return setCryptoKey(res);\n }\n checkCryptoKey(key, keyUsage) {\n super.checkCryptoKey(key, keyUsage);\n if (!(getCryptoKey(key) instanceof AesCryptoKey)) {\n throw new TypeError(\"key: Is not a AesCryptoKey\");\n }\n }\n}\n\nclass DesCryptoKey extends SymmetricKey {\n get alg() {\n switch (this.algorithm.name.toUpperCase()) {\n case \"DES-CBC\":\n return `DES-CBC`;\n case \"DES-EDE3-CBC\":\n return `3DES-CBC`;\n default:\n throw new core.AlgorithmError(\"Unsupported algorithm name\");\n }\n }\n set alg(value) {\n }\n}\n__decorate([\n JsonProp({ name: \"k\", converter: JsonBase64UrlConverter })\n], DesCryptoKey.prototype, \"data\", void 0);\n\nclass DesCrypto {\n static async generateKey(algorithm, extractable, keyUsages) {\n const key = new DesCryptoKey();\n key.algorithm = algorithm;\n key.extractable = extractable;\n key.usages = keyUsages;\n key.data = crypto__default.randomBytes(algorithm.length >> 3);\n return key;\n }\n static async exportKey(format, key) {\n switch (format.toLowerCase()) {\n case \"jwk\":\n return JsonSerializer.toJSON(key);\n case \"raw\":\n return new Uint8Array(key.data).buffer;\n default:\n throw new core.OperationError(\"format: Must be 'jwk' or 'raw'\");\n }\n }\n static async importKey(format, keyData, algorithm, extractable, keyUsages) {\n let key;\n switch (format.toLowerCase()) {\n case \"jwk\":\n key = JsonParser.fromJSON(keyData, { targetSchema: DesCryptoKey });\n break;\n case \"raw\":\n key = new DesCryptoKey();\n key.data = Buffer.from(keyData);\n break;\n default:\n throw new core.OperationError(\"format: Must be 'jwk' or 'raw'\");\n }\n key.algorithm = algorithm;\n key.extractable = extractable;\n key.usages = keyUsages;\n return key;\n }\n static async encrypt(algorithm, key, data) {\n switch (algorithm.name.toUpperCase()) {\n case \"DES-CBC\":\n return this.encryptDesCBC(algorithm, key, Buffer.from(data));\n case \"DES-EDE3-CBC\":\n return this.encryptDesEDE3CBC(algorithm, key, Buffer.from(data));\n default:\n throw new core.OperationError(\"algorithm: Is not recognized\");\n }\n }\n static async decrypt(algorithm, key, data) {\n if (!(key instanceof DesCryptoKey)) {\n throw new Error(\"key: Is not DesCryptoKey\");\n }\n switch (algorithm.name.toUpperCase()) {\n case \"DES-CBC\":\n return this.decryptDesCBC(algorithm, key, Buffer.from(data));\n case \"DES-EDE3-CBC\":\n return this.decryptDesEDE3CBC(algorithm, key, Buffer.from(data));\n default:\n throw new core.OperationError(\"algorithm: Is not recognized\");\n }\n }\n static async encryptDesCBC(algorithm, key, data) {\n const cipher = crypto__default.createCipheriv(`des-cbc`, key.data, new Uint8Array(algorithm.iv));\n let enc = cipher.update(data);\n enc = Buffer.concat([enc, cipher.final()]);\n const res = new Uint8Array(enc).buffer;\n return res;\n }\n static async decryptDesCBC(algorithm, key, data) {\n const decipher = crypto__default.createDecipheriv(`des-cbc`, key.data, new Uint8Array(algorithm.iv));\n let dec = decipher.update(data);\n dec = Buffer.concat([dec, decipher.final()]);\n return new Uint8Array(dec).buffer;\n }\n static async encryptDesEDE3CBC(algorithm, key, data) {\n const cipher = crypto__default.createCipheriv(`des-ede3-cbc`, key.data, Buffer.from(algorithm.iv));\n let enc = cipher.update(data);\n enc = Buffer.concat([enc, cipher.final()]);\n const res = new Uint8Array(enc).buffer;\n return res;\n }\n static async decryptDesEDE3CBC(algorithm, key, data) {\n const decipher = crypto__default.createDecipheriv(`des-ede3-cbc`, key.data, new Uint8Array(algorithm.iv));\n let dec = decipher.update(data);\n dec = Buffer.concat([dec, decipher.final()]);\n return new Uint8Array(dec).buffer;\n }\n}\n\nclass DesCbcProvider extends core.DesProvider {\n constructor() {\n super(...arguments);\n this.keySizeBits = 64;\n this.ivSize = 8;\n this.name = \"DES-CBC\";\n }\n async onGenerateKey(algorithm, extractable, keyUsages) {\n const key = await DesCrypto.generateKey({\n name: this.name,\n length: this.keySizeBits,\n }, extractable, keyUsages);\n return setCryptoKey(key);\n }\n async onEncrypt(algorithm, key, data) {\n return DesCrypto.encrypt(algorithm, getCryptoKey(key), new Uint8Array(data));\n }\n async onDecrypt(algorithm, key, data) {\n return DesCrypto.decrypt(algorithm, getCryptoKey(key), new Uint8Array(data));\n }\n async onExportKey(format, key) {\n return DesCrypto.exportKey(format, getCryptoKey(key));\n }\n async onImportKey(format, keyData, algorithm, extractable, keyUsages) {\n const key = await DesCrypto.importKey(format, keyData, { name: this.name, length: this.keySizeBits }, extractable, keyUsages);\n if (key.data.length !== (this.keySizeBits >> 3)) {\n throw new core.OperationError(\"keyData: Wrong key size\");\n }\n return setCryptoKey(key);\n }\n checkCryptoKey(key, keyUsage) {\n super.checkCryptoKey(key, keyUsage);\n if (!(getCryptoKey(key) instanceof DesCryptoKey)) {\n throw new TypeError(\"key: Is not a DesCryptoKey\");\n }\n }\n}\n\nclass DesEde3CbcProvider extends core.DesProvider {\n constructor() {\n super(...arguments);\n this.keySizeBits = 192;\n this.ivSize = 8;\n this.name = \"DES-EDE3-CBC\";\n }\n async onGenerateKey(algorithm, extractable, keyUsages) {\n const key = await DesCrypto.generateKey({\n name: this.name,\n length: this.keySizeBits,\n }, extractable, keyUsages);\n return setCryptoKey(key);\n }\n async onEncrypt(algorithm, key, data) {\n return DesCrypto.encrypt(algorithm, getCryptoKey(key), new Uint8Array(data));\n }\n async onDecrypt(algorithm, key, data) {\n return DesCrypto.decrypt(algorithm, getCryptoKey(key), new Uint8Array(data));\n }\n async onExportKey(format, key) {\n return DesCrypto.exportKey(format, getCryptoKey(key));\n }\n async onImportKey(format, keyData, algorithm, extractable, keyUsages) {\n const key = await DesCrypto.importKey(format, keyData, { name: this.name, length: this.keySizeBits }, extractable, keyUsages);\n if (key.data.length !== (this.keySizeBits >> 3)) {\n throw new core.OperationError(\"keyData: Wrong key size\");\n }\n return setCryptoKey(key);\n }\n checkCryptoKey(key, keyUsage) {\n super.checkCryptoKey(key, keyUsage);\n if (!(getCryptoKey(key) instanceof DesCryptoKey)) {\n throw new TypeError(\"key: Is not a DesCryptoKey\");\n }\n }\n}\n\nfunction getJwkAlgorithm(algorithm) {\n switch (algorithm.name.toUpperCase()) {\n case \"RSA-OAEP\": {\n const mdSize = /(\\d+)$/.exec(algorithm.hash.name)[1];\n return `RSA-OAEP${mdSize !== \"1\" ? `-${mdSize}` : \"\"}`;\n }\n case \"RSASSA-PKCS1-V1_5\":\n return `RS${/(\\d+)$/.exec(algorithm.hash.name)[1]}`;\n case \"RSA-PSS\":\n return `PS${/(\\d+)$/.exec(algorithm.hash.name)[1]}`;\n case \"RSA-PKCS1\":\n return `RS1`;\n default:\n throw new core.OperationError(\"algorithm: Is not recognized\");\n }\n}\n\nclass RsaPrivateKey extends AsymmetricKey {\n constructor() {\n super(...arguments);\n this.type = \"private\";\n }\n getKey() {\n const keyInfo = AsnParser.parse(this.data, core.asn1.PrivateKeyInfo);\n return AsnParser.parse(keyInfo.privateKey, core.asn1.RsaPrivateKey);\n }\n toJSON() {\n const key = this.getKey();\n const json = {\n kty: \"RSA\",\n alg: getJwkAlgorithm(this.algorithm),\n key_ops: this.usages,\n ext: this.extractable,\n };\n return Object.assign(json, JsonSerializer.toJSON(key));\n }\n fromJSON(json) {\n const key = JsonParser.fromJSON(json, { targetSchema: core.asn1.RsaPrivateKey });\n const keyInfo = new core.asn1.PrivateKeyInfo();\n keyInfo.privateKeyAlgorithm.algorithm = \"1.2.840.113549.1.1.1\";\n keyInfo.privateKeyAlgorithm.parameters = null;\n keyInfo.privateKey = AsnSerializer.serialize(key);\n this.data = Buffer.from(AsnSerializer.serialize(keyInfo));\n }\n}\n\nclass RsaPublicKey extends AsymmetricKey {\n constructor() {\n super(...arguments);\n this.type = \"public\";\n }\n getKey() {\n const keyInfo = AsnParser.parse(this.data, core.asn1.PublicKeyInfo);\n return AsnParser.parse(keyInfo.publicKey, core.asn1.RsaPublicKey);\n }\n toJSON() {\n const key = this.getKey();\n const json = {\n kty: \"RSA\",\n alg: getJwkAlgorithm(this.algorithm),\n key_ops: this.usages,\n ext: this.extractable,\n };\n return Object.assign(json, JsonSerializer.toJSON(key));\n }\n fromJSON(json) {\n const key = JsonParser.fromJSON(json, { targetSchema: core.asn1.RsaPublicKey });\n const keyInfo = new core.asn1.PublicKeyInfo();\n keyInfo.publicKeyAlgorithm.algorithm = \"1.2.840.113549.1.1.1\";\n keyInfo.publicKeyAlgorithm.parameters = null;\n keyInfo.publicKey = AsnSerializer.serialize(key);\n this.data = Buffer.from(AsnSerializer.serialize(keyInfo));\n }\n}\n\nclass RsaCrypto {\n static async generateKey(algorithm, extractable, keyUsages) {\n const privateKey = new RsaPrivateKey();\n privateKey.algorithm = algorithm;\n privateKey.extractable = extractable;\n privateKey.usages = keyUsages.filter((usage) => this.privateKeyUsages.indexOf(usage) !== -1);\n const publicKey = new RsaPublicKey();\n publicKey.algorithm = algorithm;\n publicKey.extractable = true;\n publicKey.usages = keyUsages.filter((usage) => this.publicKeyUsages.indexOf(usage) !== -1);\n const publicExponent = Buffer.concat([\n Buffer.alloc(4 - algorithm.publicExponent.byteLength, 0),\n Buffer.from(algorithm.publicExponent),\n ]).readInt32BE(0);\n const keys = crypto__default.generateKeyPairSync(\"rsa\", {\n modulusLength: algorithm.modulusLength,\n publicExponent,\n publicKeyEncoding: {\n format: \"der\",\n type: \"spki\",\n },\n privateKeyEncoding: {\n format: \"der\",\n type: \"pkcs8\",\n },\n });\n privateKey.data = keys.privateKey;\n publicKey.data = keys.publicKey;\n const res = {\n privateKey,\n publicKey,\n };\n return res;\n }\n static async exportKey(format, key) {\n switch (format.toLowerCase()) {\n case \"jwk\":\n return JsonSerializer.toJSON(key);\n case \"pkcs8\":\n case \"spki\":\n return new Uint8Array(key.data).buffer;\n default:\n throw new core.OperationError(\"format: Must be 'jwk', 'pkcs8' or 'spki'\");\n }\n }\n static async importKey(format, keyData, algorithm, extractable, keyUsages) {\n switch (format.toLowerCase()) {\n case \"jwk\": {\n const jwk = keyData;\n if (jwk.d) {\n const asnKey = JsonParser.fromJSON(keyData, { targetSchema: core.asn1.RsaPrivateKey });\n return this.importPrivateKey(asnKey, algorithm, extractable, keyUsages);\n }\n else {\n const asnKey = JsonParser.fromJSON(keyData, { targetSchema: core.asn1.RsaPublicKey });\n return this.importPublicKey(asnKey, algorithm, extractable, keyUsages);\n }\n }\n case \"spki\": {\n const keyInfo = AsnParser.parse(new Uint8Array(keyData), core.asn1.PublicKeyInfo);\n const asnKey = AsnParser.parse(keyInfo.publicKey, core.asn1.RsaPublicKey);\n return this.importPublicKey(asnKey, algorithm, extractable, keyUsages);\n }\n case \"pkcs8\": {\n const keyInfo = AsnParser.parse(new Uint8Array(keyData), core.asn1.PrivateKeyInfo);\n const asnKey = AsnParser.parse(keyInfo.privateKey, core.asn1.RsaPrivateKey);\n return this.importPrivateKey(asnKey, algorithm, extractable, keyUsages);\n }\n default:\n throw new core.OperationError(\"format: Must be 'jwk', 'pkcs8' or 'spki'\");\n }\n }\n static async sign(algorithm, key, data) {\n switch (algorithm.name.toUpperCase()) {\n case \"RSA-PSS\":\n case \"RSASSA-PKCS1-V1_5\":\n return this.signRsa(algorithm, key, data);\n default:\n throw new core.OperationError(\"algorithm: Is not recognized\");\n }\n }\n static async verify(algorithm, key, signature, data) {\n switch (algorithm.name.toUpperCase()) {\n case \"RSA-PSS\":\n case \"RSASSA-PKCS1-V1_5\":\n return this.verifySSA(algorithm, key, data, signature);\n default:\n throw new core.OperationError(\"algorithm: Is not recognized\");\n }\n }\n static async encrypt(algorithm, key, data) {\n switch (algorithm.name.toUpperCase()) {\n case \"RSA-OAEP\":\n return this.encryptOAEP(algorithm, key, data);\n default:\n throw new core.OperationError(\"algorithm: Is not recognized\");\n }\n }\n static async decrypt(algorithm, key, data) {\n switch (algorithm.name.toUpperCase()) {\n case \"RSA-OAEP\":\n return this.decryptOAEP(algorithm, key, data);\n default:\n throw new core.OperationError(\"algorithm: Is not recognized\");\n }\n }\n static importPrivateKey(asnKey, algorithm, extractable, keyUsages) {\n const keyInfo = new core.asn1.PrivateKeyInfo();\n keyInfo.privateKeyAlgorithm.algorithm = \"1.2.840.113549.1.1.1\";\n keyInfo.privateKeyAlgorithm.parameters = null;\n keyInfo.privateKey = AsnSerializer.serialize(asnKey);\n const key = new RsaPrivateKey();\n key.data = Buffer.from(AsnSerializer.serialize(keyInfo));\n key.algorithm = Object.assign({}, algorithm);\n key.algorithm.publicExponent = new Uint8Array(asnKey.publicExponent);\n key.algorithm.modulusLength = asnKey.modulus.byteLength << 3;\n key.extractable = extractable;\n key.usages = keyUsages;\n return key;\n }\n static importPublicKey(asnKey, algorithm, extractable, keyUsages) {\n const keyInfo = new core.asn1.PublicKeyInfo();\n keyInfo.publicKeyAlgorithm.algorithm = \"1.2.840.113549.1.1.1\";\n keyInfo.publicKeyAlgorithm.parameters = null;\n keyInfo.publicKey = AsnSerializer.serialize(asnKey);\n const key = new RsaPublicKey();\n key.data = Buffer.from(AsnSerializer.serialize(keyInfo));\n key.algorithm = Object.assign({}, algorithm);\n key.algorithm.publicExponent = new Uint8Array(asnKey.publicExponent);\n key.algorithm.modulusLength = asnKey.modulus.byteLength << 3;\n key.extractable = extractable;\n key.usages = keyUsages;\n return key;\n }\n static getCryptoAlgorithm(alg) {\n switch (alg.hash.name.toUpperCase()) {\n case \"SHA-1\":\n return \"RSA-SHA1\";\n case \"SHA-256\":\n return \"RSA-SHA256\";\n case \"SHA-384\":\n return \"RSA-SHA384\";\n case \"SHA-512\":\n return \"RSA-SHA512\";\n case \"SHA3-256\":\n return \"RSA-SHA3-256\";\n case \"SHA3-384\":\n return \"RSA-SHA3-384\";\n case \"SHA3-512\":\n return \"RSA-SHA3-512\";\n default:\n throw new core.OperationError(\"algorithm.hash: Is not recognized\");\n }\n }\n static signRsa(algorithm, key, data) {\n const cryptoAlg = this.getCryptoAlgorithm(key.algorithm);\n const signer = crypto__default.createSign(cryptoAlg);\n signer.update(Buffer.from(data));\n if (!key.pem) {\n key.pem = `-----BEGIN PRIVATE KEY-----\\n${key.data.toString(\"base64\")}\\n-----END PRIVATE KEY-----`;\n }\n const options = {\n key: key.pem,\n };\n if (algorithm.name.toUpperCase() === \"RSA-PSS\") {\n options.padding = crypto__default.constants.RSA_PKCS1_PSS_PADDING;\n options.saltLength = algorithm.saltLength;\n }\n const signature = signer.sign(options);\n return new Uint8Array(signature).buffer;\n }\n static verifySSA(algorithm, key, data, signature) {\n const cryptoAlg = this.getCryptoAlgorithm(key.algorithm);\n const signer = crypto__default.createVerify(cryptoAlg);\n signer.update(Buffer.from(data));\n if (!key.pem) {\n key.pem = `-----BEGIN PUBLIC KEY-----\\n${key.data.toString(\"base64\")}\\n-----END PUBLIC KEY-----`;\n }\n const options = {\n key: key.pem,\n };\n if (algorithm.name.toUpperCase() === \"RSA-PSS\") {\n options.padding = crypto__default.constants.RSA_PKCS1_PSS_PADDING;\n options.saltLength = algorithm.saltLength;\n }\n const ok = signer.verify(options, signature);\n return ok;\n }\n static encryptOAEP(algorithm, key, data) {\n const options = {\n key: `-----BEGIN PUBLIC KEY-----\\n${key.data.toString(\"base64\")}\\n-----END PUBLIC KEY-----`,\n padding: crypto__default.constants.RSA_PKCS1_OAEP_PADDING,\n };\n if (algorithm.label) ;\n return new Uint8Array(crypto__default.publicEncrypt(options, data)).buffer;\n }\n static decryptOAEP(algorithm, key, data) {\n const options = {\n key: `-----BEGIN PRIVATE KEY-----\\n${key.data.toString(\"base64\")}\\n-----END PRIVATE KEY-----`,\n padding: crypto__default.constants.RSA_PKCS1_OAEP_PADDING,\n };\n if (algorithm.label) ;\n return new Uint8Array(crypto__default.privateDecrypt(options, data)).buffer;\n }\n}\nRsaCrypto.publicKeyUsages = [\"verify\", \"encrypt\", \"wrapKey\"];\nRsaCrypto.privateKeyUsages = [\"sign\", \"decrypt\", \"unwrapKey\"];\n\nclass RsaSsaProvider extends core.RsaSsaProvider {\n constructor() {\n super(...arguments);\n this.hashAlgorithms = [\n \"SHA-1\", \"SHA-256\", \"SHA-384\", \"SHA-512\",\n \"shake128\", \"shake256\",\n \"SHA3-256\", \"SHA3-384\", \"SHA3-512\"\n ];\n }\n async onGenerateKey(algorithm, extractable, keyUsages) {\n const keys = await RsaCrypto.generateKey({\n ...algorithm,\n name: this.name,\n }, extractable, keyUsages);\n return {\n privateKey: setCryptoKey(keys.privateKey),\n publicKey: setCryptoKey(keys.publicKey),\n };\n }\n async onSign(algorithm, key, data) {\n return RsaCrypto.sign(algorithm, getCryptoKey(key), new Uint8Array(data));\n }\n async onVerify(algorithm, key, signature, data) {\n return RsaCrypto.verify(algorithm, getCryptoKey(key), new Uint8Array(signature), new Uint8Array(data));\n }\n async onExportKey(format, key) {\n return RsaCrypto.exportKey(format, getCryptoKey(key));\n }\n async onImportKey(format, keyData, algorithm, extractable, keyUsages) {\n const key = await RsaCrypto.importKey(format, keyData, { ...algorithm, name: this.name }, extractable, keyUsages);\n return setCryptoKey(key);\n }\n checkCryptoKey(key, keyUsage) {\n super.checkCryptoKey(key, keyUsage);\n const internalKey = getCryptoKey(key);\n if (!(internalKey instanceof RsaPrivateKey || internalKey instanceof RsaPublicKey)) {\n throw new TypeError(\"key: Is not RSA CryptoKey\");\n }\n }\n}\n\nclass RsaPssProvider extends core.RsaPssProvider {\n constructor() {\n super(...arguments);\n this.hashAlgorithms = [\n \"SHA-1\", \"SHA-256\", \"SHA-384\", \"SHA-512\",\n \"shake128\", \"shake256\",\n \"SHA3-256\", \"SHA3-384\", \"SHA3-512\"\n ];\n }\n async onGenerateKey(algorithm, extractable, keyUsages) {\n const keys = await RsaCrypto.generateKey({\n ...algorithm,\n name: this.name,\n }, extractable, keyUsages);\n return {\n privateKey: setCryptoKey(keys.privateKey),\n publicKey: setCryptoKey(keys.publicKey),\n };\n }\n async onSign(algorithm, key, data) {\n return RsaCrypto.sign(algorithm, getCryptoKey(key), new Uint8Array(data));\n }\n async onVerify(algorithm, key, signature, data) {\n return RsaCrypto.verify(algorithm, getCryptoKey(key), new Uint8Array(signature), new Uint8Array(data));\n }\n async onExportKey(format, key) {\n return RsaCrypto.exportKey(format, getCryptoKey(key));\n }\n async onImportKey(format, keyData, algorithm, extractable, keyUsages) {\n const key = await RsaCrypto.importKey(format, keyData, { ...algorithm, name: this.name }, extractable, keyUsages);\n return setCryptoKey(key);\n }\n checkCryptoKey(key, keyUsage) {\n super.checkCryptoKey(key, keyUsage);\n const internalKey = getCryptoKey(key);\n if (!(internalKey instanceof RsaPrivateKey || internalKey instanceof RsaPublicKey)) {\n throw new TypeError(\"key: Is not RSA CryptoKey\");\n }\n }\n}\n\nclass ShaCrypto {\n static size(algorithm) {\n switch (algorithm.name.toUpperCase()) {\n case \"SHA-1\":\n return 160;\n case \"SHA-256\":\n case \"SHA3-256\":\n return 256;\n case \"SHA-384\":\n case \"SHA3-384\":\n return 384;\n case \"SHA-512\":\n case \"SHA3-512\":\n return 512;\n default:\n throw new Error(\"Unrecognized name\");\n }\n }\n static getAlgorithmName(algorithm) {\n switch (algorithm.name.toUpperCase()) {\n case \"SHA-1\":\n return \"sha1\";\n case \"SHA-256\":\n return \"sha256\";\n case \"SHA-384\":\n return \"sha384\";\n case \"SHA-512\":\n return \"sha512\";\n case \"SHA3-256\":\n return \"sha3-256\";\n case \"SHA3-384\":\n return \"sha3-384\";\n case \"SHA3-512\":\n return \"sha3-512\";\n default:\n throw new Error(\"Unrecognized name\");\n }\n }\n static digest(algorithm, data) {\n const hashAlg = this.getAlgorithmName(algorithm);\n const hash = crypto__default.createHash(hashAlg)\n .update(Buffer.from(data)).digest();\n return new Uint8Array(hash).buffer;\n }\n}\n\nclass RsaOaepProvider extends core.RsaOaepProvider {\n async onGenerateKey(algorithm, extractable, keyUsages) {\n const keys = await RsaCrypto.generateKey({\n ...algorithm,\n name: this.name,\n }, extractable, keyUsages);\n return {\n privateKey: setCryptoKey(keys.privateKey),\n publicKey: setCryptoKey(keys.publicKey),\n };\n }\n async onEncrypt(algorithm, key, data) {\n const internalKey = getCryptoKey(key);\n const dataView = new Uint8Array(data);\n const keySize = Math.ceil(internalKey.algorithm.modulusLength >> 3);\n const hashSize = ShaCrypto.size(internalKey.algorithm.hash) >> 3;\n const dataLength = dataView.byteLength;\n const psLength = keySize - dataLength - 2 * hashSize - 2;\n if (dataLength > keySize - 2 * hashSize - 2) {\n throw new Error(\"Data too large\");\n }\n const message = new Uint8Array(keySize);\n const seed = message.subarray(1, hashSize + 1);\n const dataBlock = message.subarray(hashSize + 1);\n dataBlock.set(dataView, hashSize + psLength + 1);\n const labelHash = crypto__default.createHash(internalKey.algorithm.hash.name.replace(\"-\", \"\"))\n .update(core.BufferSourceConverter.toUint8Array(algorithm.label || new Uint8Array(0)))\n .digest();\n dataBlock.set(labelHash, 0);\n dataBlock[hashSize + psLength] = 1;\n crypto__default.randomFillSync(seed);\n const dataBlockMask = this.mgf1(internalKey.algorithm.hash, seed, dataBlock.length);\n for (let i = 0; i < dataBlock.length; i++) {\n dataBlock[i] ^= dataBlockMask[i];\n }\n const seedMask = this.mgf1(internalKey.algorithm.hash, dataBlock, seed.length);\n for (let i = 0; i < seed.length; i++) {\n seed[i] ^= seedMask[i];\n }\n if (!internalKey.pem) {\n internalKey.pem = `-----BEGIN PUBLIC KEY-----\\n${internalKey.data.toString(\"base64\")}\\n-----END PUBLIC KEY-----`;\n }\n const pkcs0 = crypto__default.publicEncrypt({\n key: internalKey.pem,\n padding: crypto__default.constants.RSA_NO_PADDING,\n }, Buffer.from(message));\n return new Uint8Array(pkcs0).buffer;\n }\n async onDecrypt(algorithm, key, data) {\n const internalKey = getCryptoKey(key);\n const keySize = Math.ceil(internalKey.algorithm.modulusLength >> 3);\n const hashSize = ShaCrypto.size(internalKey.algorithm.hash) >> 3;\n const dataLength = data.byteLength;\n if (dataLength !== keySize) {\n throw new Error(\"Bad data\");\n }\n if (!internalKey.pem) {\n internalKey.pem = `-----BEGIN PRIVATE KEY-----\\n${internalKey.data.toString(\"base64\")}\\n-----END PRIVATE KEY-----`;\n }\n let pkcs0 = crypto__default.privateDecrypt({\n key: internalKey.pem,\n padding: crypto__default.constants.RSA_NO_PADDING,\n }, Buffer.from(data));\n const z = pkcs0[0];\n const seed = pkcs0.subarray(1, hashSize + 1);\n const dataBlock = pkcs0.subarray(hashSize + 1);\n if (z !== 0) {\n throw new Error(\"Decryption failed\");\n }\n const seedMask = this.mgf1(internalKey.algorithm.hash, dataBlock, seed.length);\n for (let i = 0; i < seed.length; i++) {\n seed[i] ^= seedMask[i];\n }\n const dataBlockMask = this.mgf1(internalKey.algorithm.hash, seed, dataBlock.length);\n for (let i = 0; i < dataBlock.length; i++) {\n dataBlock[i] ^= dataBlockMask[i];\n }\n const labelHash = crypto__default.createHash(internalKey.algorithm.hash.name.replace(\"-\", \"\"))\n .update(core.BufferSourceConverter.toUint8Array(algorithm.label || new Uint8Array(0)))\n .digest();\n for (let i = 0; i < hashSize; i++) {\n if (labelHash[i] !== dataBlock[i]) {\n throw new Error(\"Decryption failed\");\n }\n }\n let psEnd = hashSize;\n for (; psEnd < dataBlock.length; psEnd++) {\n const psz = dataBlock[psEnd];\n if (psz === 1) {\n break;\n }\n if (psz !== 0) {\n throw new Error(\"Decryption failed\");\n }\n }\n if (psEnd === dataBlock.length) {\n throw new Error(\"Decryption failed\");\n }\n pkcs0 = dataBlock.subarray(psEnd + 1);\n return new Uint8Array(pkcs0).buffer;\n }\n async onExportKey(format, key) {\n return RsaCrypto.exportKey(format, getCryptoKey(key));\n }\n async onImportKey(format, keyData, algorithm, extractable, keyUsages) {\n const key = await RsaCrypto.importKey(format, keyData, { ...algorithm, name: this.name }, extractable, keyUsages);\n return setCryptoKey(key);\n }\n checkCryptoKey(key, keyUsage) {\n super.checkCryptoKey(key, keyUsage);\n const internalKey = getCryptoKey(key);\n if (!(internalKey instanceof RsaPrivateKey || internalKey instanceof RsaPublicKey)) {\n throw new TypeError(\"key: Is not RSA CryptoKey\");\n }\n }\n mgf1(algorithm, seed, length = 0) {\n const hashSize = ShaCrypto.size(algorithm) >> 3;\n const mask = new Uint8Array(length);\n const counter = new Uint8Array(4);\n const chunks = Math.ceil(length / hashSize);\n for (let i = 0; i < chunks; i++) {\n counter[0] = i >>> 24;\n counter[1] = (i >>> 16) & 255;\n counter[2] = (i >>> 8) & 255;\n counter[3] = i & 255;\n const submask = mask.subarray(i * hashSize);\n let chunk = crypto__default.createHash(algorithm.name.replace(\"-\", \"\"))\n .update(seed)\n .update(counter)\n .digest();\n if (chunk.length > submask.length) {\n chunk = chunk.subarray(0, submask.length);\n }\n submask.set(chunk);\n }\n return mask;\n }\n}\n\nclass RsaEsProvider extends core.ProviderCrypto {\n constructor() {\n super(...arguments);\n this.name = \"RSAES-PKCS1-v1_5\";\n this.usages = {\n publicKey: [\"encrypt\", \"wrapKey\"],\n privateKey: [\"decrypt\", \"unwrapKey\"],\n };\n }\n async onGenerateKey(algorithm, extractable, keyUsages) {\n const keys = await RsaCrypto.generateKey({\n ...algorithm,\n name: this.name,\n }, extractable, keyUsages);\n return {\n privateKey: setCryptoKey(keys.privateKey),\n publicKey: setCryptoKey(keys.publicKey),\n };\n }\n checkGenerateKeyParams(algorithm) {\n this.checkRequiredProperty(algorithm, \"publicExponent\");\n if (!(algorithm.publicExponent && algorithm.publicExponent instanceof Uint8Array)) {\n throw new TypeError(\"publicExponent: Missing or not a Uint8Array\");\n }\n const publicExponent = Convert.ToBase64(algorithm.publicExponent);\n if (!(publicExponent === \"Aw==\" || publicExponent === \"AQAB\")) {\n throw new TypeError(\"publicExponent: Must be [3] or [1,0,1]\");\n }\n this.checkRequiredProperty(algorithm, \"modulusLength\");\n switch (algorithm.modulusLength) {\n case 1024:\n case 2048:\n case 4096:\n break;\n default:\n throw new TypeError(\"modulusLength: Must be 1024, 2048, or 4096\");\n }\n }\n async onEncrypt(algorithm, key, data) {\n const options = this.toCryptoOptions(key);\n const enc = crypto.publicEncrypt(options, new Uint8Array(data));\n return new Uint8Array(enc).buffer;\n }\n async onDecrypt(algorithm, key, data) {\n const options = this.toCryptoOptions(key);\n const dec = crypto.privateDecrypt(options, new Uint8Array(data));\n return new Uint8Array(dec).buffer;\n }\n async onExportKey(format, key) {\n return RsaCrypto.exportKey(format, getCryptoKey(key));\n }\n async onImportKey(format, keyData, algorithm, extractable, keyUsages) {\n const key = await RsaCrypto.importKey(format, keyData, { ...algorithm, name: this.name }, extractable, keyUsages);\n return setCryptoKey(key);\n }\n checkCryptoKey(key, keyUsage) {\n super.checkCryptoKey(key, keyUsage);\n const internalKey = getCryptoKey(key);\n if (!(internalKey instanceof RsaPrivateKey || internalKey instanceof RsaPublicKey)) {\n throw new TypeError(\"key: Is not RSA CryptoKey\");\n }\n }\n toCryptoOptions(key) {\n const type = key.type.toUpperCase();\n return {\n key: `-----BEGIN ${type} KEY-----\\n${getCryptoKey(key).data.toString(\"base64\")}\\n-----END ${type} KEY-----`,\n padding: crypto.constants.RSA_PKCS1_PADDING,\n };\n }\n}\n\nconst namedOIDs = {\n \"1.2.840.10045.3.1.7\": \"P-256\",\n \"P-256\": \"1.2.840.10045.3.1.7\",\n \"1.3.132.0.34\": \"P-384\",\n \"P-384\": \"1.3.132.0.34\",\n \"1.3.132.0.35\": \"P-521\",\n \"P-521\": \"1.3.132.0.35\",\n \"1.3.132.0.10\": \"K-256\",\n \"K-256\": \"1.3.132.0.10\",\n \"brainpoolP160r1\": \"1.3.36.3.3.2.8.1.1.1\",\n \"1.3.36.3.3.2.8.1.1.1\": \"brainpoolP160r1\",\n \"brainpoolP160t1\": \"1.3.36.3.3.2.8.1.1.2\",\n \"1.3.36.3.3.2.8.1.1.2\": \"brainpoolP160t1\",\n \"brainpoolP192r1\": \"1.3.36.3.3.2.8.1.1.3\",\n \"1.3.36.3.3.2.8.1.1.3\": \"brainpoolP192r1\",\n \"brainpoolP192t1\": \"1.3.36.3.3.2.8.1.1.4\",\n \"1.3.36.3.3.2.8.1.1.4\": \"brainpoolP192t1\",\n \"brainpoolP224r1\": \"1.3.36.3.3.2.8.1.1.5\",\n \"1.3.36.3.3.2.8.1.1.5\": \"brainpoolP224r1\",\n \"brainpoolP224t1\": \"1.3.36.3.3.2.8.1.1.6\",\n \"1.3.36.3.3.2.8.1.1.6\": \"brainpoolP224t1\",\n \"brainpoolP256r1\": \"1.3.36.3.3.2.8.1.1.7\",\n \"1.3.36.3.3.2.8.1.1.7\": \"brainpoolP256r1\",\n \"brainpoolP256t1\": \"1.3.36.3.3.2.8.1.1.8\",\n \"1.3.36.3.3.2.8.1.1.8\": \"brainpoolP256t1\",\n \"brainpoolP320r1\": \"1.3.36.3.3.2.8.1.1.9\",\n \"1.3.36.3.3.2.8.1.1.9\": \"brainpoolP320r1\",\n \"brainpoolP320t1\": \"1.3.36.3.3.2.8.1.1.10\",\n \"1.3.36.3.3.2.8.1.1.10\": \"brainpoolP320t1\",\n \"brainpoolP384r1\": \"1.3.36.3.3.2.8.1.1.11\",\n \"1.3.36.3.3.2.8.1.1.11\": \"brainpoolP384r1\",\n \"brainpoolP384t1\": \"1.3.36.3.3.2.8.1.1.12\",\n \"1.3.36.3.3.2.8.1.1.12\": \"brainpoolP384t1\",\n \"brainpoolP512r1\": \"1.3.36.3.3.2.8.1.1.13\",\n \"1.3.36.3.3.2.8.1.1.13\": \"brainpoolP512r1\",\n \"brainpoolP512t1\": \"1.3.36.3.3.2.8.1.1.14\",\n \"1.3.36.3.3.2.8.1.1.14\": \"brainpoolP512t1\",\n};\nfunction getOidByNamedCurve$1(namedCurve) {\n const oid = namedOIDs[namedCurve];\n if (!oid) {\n throw new core.OperationError(`Cannot convert WebCrypto named curve '${namedCurve}' to OID`);\n }\n return oid;\n}\n\nclass EcPrivateKey extends AsymmetricKey {\n constructor() {\n super(...arguments);\n this.type = \"private\";\n }\n getKey() {\n const keyInfo = AsnParser.parse(this.data, core.asn1.PrivateKeyInfo);\n return AsnParser.parse(keyInfo.privateKey, core.asn1.EcPrivateKey);\n }\n toJSON() {\n const key = this.getKey();\n const json = {\n kty: \"EC\",\n crv: this.algorithm.namedCurve,\n key_ops: this.usages,\n ext: this.extractable,\n };\n return Object.assign(json, JsonSerializer.toJSON(key));\n }\n fromJSON(json) {\n if (!json.crv) {\n throw new core.OperationError(`Cannot get named curve from JWK. Property 'crv' is required`);\n }\n const keyInfo = new core.asn1.PrivateKeyInfo();\n keyInfo.privateKeyAlgorithm.algorithm = \"1.2.840.10045.2.1\";\n keyInfo.privateKeyAlgorithm.parameters = AsnSerializer.serialize(new core.asn1.ObjectIdentifier(getOidByNamedCurve$1(json.crv)));\n const key = JsonParser.fromJSON(json, { targetSchema: core.asn1.EcPrivateKey });\n keyInfo.privateKey = AsnSerializer.serialize(key);\n this.data = Buffer.from(AsnSerializer.serialize(keyInfo));\n return this;\n }\n}\n\nclass EcPublicKey extends AsymmetricKey {\n constructor() {\n super(...arguments);\n this.type = \"public\";\n }\n getKey() {\n const keyInfo = AsnParser.parse(this.data, core.asn1.PublicKeyInfo);\n return new core.asn1.EcPublicKey(keyInfo.publicKey);\n }\n toJSON() {\n const key = this.getKey();\n const json = {\n kty: \"EC\",\n crv: this.algorithm.namedCurve,\n key_ops: this.usages,\n ext: this.extractable,\n };\n return Object.assign(json, JsonSerializer.toJSON(key));\n }\n fromJSON(json) {\n if (!json.crv) {\n throw new core.OperationError(`Cannot get named curve from JWK. Property 'crv' is required`);\n }\n const key = JsonParser.fromJSON(json, { targetSchema: core.asn1.EcPublicKey });\n const keyInfo = new core.asn1.PublicKeyInfo();\n keyInfo.publicKeyAlgorithm.algorithm = \"1.2.840.10045.2.1\";\n keyInfo.publicKeyAlgorithm.parameters = AsnSerializer.serialize(new core.asn1.ObjectIdentifier(getOidByNamedCurve$1(json.crv)));\n keyInfo.publicKey = AsnSerializer.toASN(key).valueHex;\n this.data = Buffer.from(AsnSerializer.serialize(keyInfo));\n return this;\n }\n}\n\nclass Sha1Provider extends core.ProviderCrypto {\n constructor() {\n super(...arguments);\n this.name = \"SHA-1\";\n this.usages = [];\n }\n async onDigest(algorithm, data) {\n return ShaCrypto.digest(algorithm, data);\n }\n}\n\nclass Sha256Provider extends core.ProviderCrypto {\n constructor() {\n super(...arguments);\n this.name = \"SHA-256\";\n this.usages = [];\n }\n async onDigest(algorithm, data) {\n return ShaCrypto.digest(algorithm, data);\n }\n}\n\nclass Sha384Provider extends core.ProviderCrypto {\n constructor() {\n super(...arguments);\n this.name = \"SHA-384\";\n this.usages = [];\n }\n async onDigest(algorithm, data) {\n return ShaCrypto.digest(algorithm, data);\n }\n}\n\nclass Sha512Provider extends core.ProviderCrypto {\n constructor() {\n super(...arguments);\n this.name = \"SHA-512\";\n this.usages = [];\n }\n async onDigest(algorithm, data) {\n return ShaCrypto.digest(algorithm, data);\n }\n}\n\nclass Sha3256Provider extends core.ProviderCrypto {\n constructor() {\n super(...arguments);\n this.name = \"SHA3-256\";\n this.usages = [];\n }\n async onDigest(algorithm, data) {\n return ShaCrypto.digest(algorithm, data);\n }\n}\n\nclass Sha3384Provider extends core.ProviderCrypto {\n constructor() {\n super(...arguments);\n this.name = \"SHA3-384\";\n this.usages = [];\n }\n async onDigest(algorithm, data) {\n return ShaCrypto.digest(algorithm, data);\n }\n}\n\nclass Sha3512Provider extends core.ProviderCrypto {\n constructor() {\n super(...arguments);\n this.name = \"SHA3-512\";\n this.usages = [];\n }\n async onDigest(algorithm, data) {\n return ShaCrypto.digest(algorithm, data);\n }\n}\n\nclass EcCrypto {\n static async generateKey(algorithm, extractable, keyUsages) {\n const privateKey = new EcPrivateKey();\n privateKey.algorithm = algorithm;\n privateKey.extractable = extractable;\n privateKey.usages = keyUsages.filter((usage) => this.privateKeyUsages.indexOf(usage) !== -1);\n const publicKey = new EcPublicKey();\n publicKey.algorithm = algorithm;\n publicKey.extractable = true;\n publicKey.usages = keyUsages.filter((usage) => this.publicKeyUsages.indexOf(usage) !== -1);\n const keys = crypto__default.generateKeyPairSync(\"ec\", {\n namedCurve: this.getOpenSSLNamedCurve(algorithm.namedCurve),\n publicKeyEncoding: {\n format: \"der\",\n type: \"spki\",\n },\n privateKeyEncoding: {\n format: \"der\",\n type: \"pkcs8\",\n },\n });\n privateKey.data = keys.privateKey;\n publicKey.data = keys.publicKey;\n const res = {\n privateKey,\n publicKey,\n };\n return res;\n }\n static async sign(algorithm, key, data) {\n const cryptoAlg = ShaCrypto.getAlgorithmName(algorithm.hash);\n const signer = crypto__default.createSign(cryptoAlg);\n signer.update(Buffer.from(data));\n if (!key.pem) {\n key.pem = `-----BEGIN PRIVATE KEY-----\\n${key.data.toString(\"base64\")}\\n-----END PRIVATE KEY-----`;\n }\n const options = {\n key: key.pem,\n };\n const signature = signer.sign(options);\n const ecSignature = AsnParser.parse(signature, core.asn1.EcDsaSignature);\n const signatureRaw = core.EcUtils.encodeSignature(ecSignature, core.EcCurves.get(key.algorithm.namedCurve).size);\n return signatureRaw.buffer;\n }\n static async verify(algorithm, key, signature, data) {\n const cryptoAlg = ShaCrypto.getAlgorithmName(algorithm.hash);\n const signer = crypto__default.createVerify(cryptoAlg);\n signer.update(Buffer.from(data));\n if (!key.pem) {\n key.pem = `-----BEGIN PUBLIC KEY-----\\n${key.data.toString(\"base64\")}\\n-----END PUBLIC KEY-----`;\n }\n const options = {\n key: key.pem,\n };\n const ecSignature = new core.asn1.EcDsaSignature();\n const namedCurve = core.EcCurves.get(key.algorithm.namedCurve);\n const signaturePoint = core.EcUtils.decodeSignature(signature, namedCurve.size);\n ecSignature.r = BufferSourceConverter.toArrayBuffer(signaturePoint.r);\n ecSignature.s = BufferSourceConverter.toArrayBuffer(signaturePoint.s);\n const ecSignatureRaw = Buffer.from(AsnSerializer.serialize(ecSignature));\n const ok = signer.verify(options, ecSignatureRaw);\n return ok;\n }\n static async deriveBits(algorithm, baseKey, length) {\n const cryptoAlg = this.getOpenSSLNamedCurve(baseKey.algorithm.namedCurve);\n const ecdh = crypto__default.createECDH(cryptoAlg);\n const asnPrivateKey = AsnParser.parse(baseKey.data, core.asn1.PrivateKeyInfo);\n const asnEcPrivateKey = AsnParser.parse(asnPrivateKey.privateKey, core.asn1.EcPrivateKey);\n ecdh.setPrivateKey(Buffer.from(asnEcPrivateKey.privateKey));\n const asnPublicKey = AsnParser.parse(algorithm.public.data, core.asn1.PublicKeyInfo);\n const bits = ecdh.computeSecret(Buffer.from(asnPublicKey.publicKey));\n if (length === null) {\n return bits;\n }\n return new Uint8Array(bits).buffer.slice(0, length >> 3);\n }\n static async exportKey(format, key) {\n switch (format.toLowerCase()) {\n case \"jwk\":\n return JsonSerializer.toJSON(key);\n case \"pkcs8\":\n case \"spki\":\n return new Uint8Array(key.data).buffer;\n case \"raw\": {\n const publicKeyInfo = AsnParser.parse(key.data, core.asn1.PublicKeyInfo);\n return publicKeyInfo.publicKey;\n }\n default:\n throw new core.OperationError(\"format: Must be 'jwk', 'raw', pkcs8' or 'spki'\");\n }\n }\n static async importKey(format, keyData, algorithm, extractable, keyUsages) {\n switch (format.toLowerCase()) {\n case \"jwk\": {\n const jwk = keyData;\n if (jwk.d) {\n const asnKey = JsonParser.fromJSON(keyData, { targetSchema: core.asn1.EcPrivateKey });\n return this.importPrivateKey(asnKey, algorithm, extractable, keyUsages);\n }\n else {\n const asnKey = JsonParser.fromJSON(keyData, { targetSchema: core.asn1.EcPublicKey });\n return this.importPublicKey(asnKey, algorithm, extractable, keyUsages);\n }\n }\n case \"raw\": {\n const asnKey = new core.asn1.EcPublicKey(keyData);\n return this.importPublicKey(asnKey, algorithm, extractable, keyUsages);\n }\n case \"spki\": {\n const keyInfo = AsnParser.parse(new Uint8Array(keyData), core.asn1.PublicKeyInfo);\n const asnKey = new core.asn1.EcPublicKey(keyInfo.publicKey);\n this.assertKeyParameters(keyInfo.publicKeyAlgorithm.parameters, algorithm.namedCurve);\n return this.importPublicKey(asnKey, algorithm, extractable, keyUsages);\n }\n case \"pkcs8\": {\n const keyInfo = AsnParser.parse(new Uint8Array(keyData), core.asn1.PrivateKeyInfo);\n const asnKey = AsnParser.parse(keyInfo.privateKey, core.asn1.EcPrivateKey);\n this.assertKeyParameters(keyInfo.privateKeyAlgorithm.parameters, algorithm.namedCurve);\n return this.importPrivateKey(asnKey, algorithm, extractable, keyUsages);\n }\n default:\n throw new core.OperationError(\"format: Must be 'jwk', 'raw', 'pkcs8' or 'spki'\");\n }\n }\n static assertKeyParameters(parameters, namedCurve) {\n if (!parameters) {\n throw new core.CryptoError(\"Key info doesn't have required parameters\");\n }\n let namedCurveIdentifier = \"\";\n try {\n namedCurveIdentifier = AsnParser.parse(parameters, core.asn1.ObjectIdentifier).value;\n }\n catch (e) {\n throw new core.CryptoError(\"Cannot read key info parameters\");\n }\n if (getOidByNamedCurve$1(namedCurve) !== namedCurveIdentifier) {\n throw new core.CryptoError(\"Key info parameter doesn't match to named curve\");\n }\n }\n static async importPrivateKey(asnKey, algorithm, extractable, keyUsages) {\n const keyInfo = new core.asn1.PrivateKeyInfo();\n keyInfo.privateKeyAlgorithm.algorithm = \"1.2.840.10045.2.1\";\n keyInfo.privateKeyAlgorithm.parameters = AsnSerializer.serialize(new core.asn1.ObjectIdentifier(getOidByNamedCurve$1(algorithm.namedCurve)));\n keyInfo.privateKey = AsnSerializer.serialize(asnKey);\n const key = new EcPrivateKey();\n key.data = Buffer.from(AsnSerializer.serialize(keyInfo));\n key.algorithm = Object.assign({}, algorithm);\n key.extractable = extractable;\n key.usages = keyUsages;\n return key;\n }\n static async importPublicKey(asnKey, algorithm, extractable, keyUsages) {\n const keyInfo = new core.asn1.PublicKeyInfo();\n keyInfo.publicKeyAlgorithm.algorithm = \"1.2.840.10045.2.1\";\n const namedCurve = getOidByNamedCurve$1(algorithm.namedCurve);\n keyInfo.publicKeyAlgorithm.parameters = AsnSerializer.serialize(new core.asn1.ObjectIdentifier(namedCurve));\n keyInfo.publicKey = asnKey.value;\n const key = new EcPublicKey();\n key.data = Buffer.from(AsnSerializer.serialize(keyInfo));\n key.algorithm = Object.assign({}, algorithm);\n key.extractable = extractable;\n key.usages = keyUsages;\n return key;\n }\n static getOpenSSLNamedCurve(curve) {\n switch (curve.toUpperCase()) {\n case \"P-256\":\n return \"prime256v1\";\n case \"K-256\":\n return \"secp256k1\";\n case \"P-384\":\n return \"secp384r1\";\n case \"P-521\":\n return \"secp521r1\";\n default:\n return curve;\n }\n }\n}\nEcCrypto.publicKeyUsages = [\"verify\"];\nEcCrypto.privateKeyUsages = [\"sign\", \"deriveKey\", \"deriveBits\"];\n\nclass EcdsaProvider extends core.EcdsaProvider {\n constructor() {\n super(...arguments);\n this.namedCurves = core.EcCurves.names;\n this.hashAlgorithms = [\n \"SHA-1\", \"SHA-256\", \"SHA-384\", \"SHA-512\",\n \"shake128\", \"shake256\",\n \"SHA3-256\", \"SHA3-384\", \"SHA3-512\"\n ];\n }\n async onGenerateKey(algorithm, extractable, keyUsages) {\n const keys = await EcCrypto.generateKey({\n ...algorithm,\n name: this.name,\n }, extractable, keyUsages);\n return {\n privateKey: setCryptoKey(keys.privateKey),\n publicKey: setCryptoKey(keys.publicKey),\n };\n }\n async onSign(algorithm, key, data) {\n return EcCrypto.sign(algorithm, getCryptoKey(key), new Uint8Array(data));\n }\n async onVerify(algorithm, key, signature, data) {\n return EcCrypto.verify(algorithm, getCryptoKey(key), new Uint8Array(signature), new Uint8Array(data));\n }\n async onExportKey(format, key) {\n return EcCrypto.exportKey(format, getCryptoKey(key));\n }\n async onImportKey(format, keyData, algorithm, extractable, keyUsages) {\n const key = await EcCrypto.importKey(format, keyData, { ...algorithm, name: this.name }, extractable, keyUsages);\n return setCryptoKey(key);\n }\n checkCryptoKey(key, keyUsage) {\n super.checkCryptoKey(key, keyUsage);\n const internalKey = getCryptoKey(key);\n if (!(internalKey instanceof EcPrivateKey || internalKey instanceof EcPublicKey)) {\n throw new TypeError(\"key: Is not EC CryptoKey\");\n }\n }\n}\n\nclass EcdhProvider extends core.EcdhProvider {\n constructor() {\n super(...arguments);\n this.namedCurves = core.EcCurves.names;\n }\n async onGenerateKey(algorithm, extractable, keyUsages) {\n const keys = await EcCrypto.generateKey({\n ...algorithm,\n name: this.name,\n }, extractable, keyUsages);\n return {\n privateKey: setCryptoKey(keys.privateKey),\n publicKey: setCryptoKey(keys.publicKey),\n };\n }\n async onExportKey(format, key) {\n return EcCrypto.exportKey(format, getCryptoKey(key));\n }\n async onImportKey(format, keyData, algorithm, extractable, keyUsages) {\n const key = await EcCrypto.importKey(format, keyData, { ...algorithm, name: this.name }, extractable, keyUsages);\n return setCryptoKey(key);\n }\n checkCryptoKey(key, keyUsage) {\n super.checkCryptoKey(key, keyUsage);\n const internalKey = getCryptoKey(key);\n if (!(internalKey instanceof EcPrivateKey || internalKey instanceof EcPublicKey)) {\n throw new TypeError(\"key: Is not EC CryptoKey\");\n }\n }\n async onDeriveBits(algorithm, baseKey, length) {\n const bits = await EcCrypto.deriveBits({ ...algorithm, public: getCryptoKey(algorithm.public) }, getCryptoKey(baseKey), length);\n return bits;\n }\n}\n\nconst edOIDs = {\n [core.asn1.idEd448]: \"Ed448\",\n \"ed448\": core.asn1.idEd448,\n [core.asn1.idX448]: \"X448\",\n \"x448\": core.asn1.idX448,\n [core.asn1.idEd25519]: \"Ed25519\",\n \"ed25519\": core.asn1.idEd25519,\n [core.asn1.idX25519]: \"X25519\",\n \"x25519\": core.asn1.idX25519,\n};\nfunction getOidByNamedCurve(namedCurve) {\n const oid = edOIDs[namedCurve.toLowerCase()];\n if (!oid) {\n throw new core.OperationError(`Cannot convert WebCrypto named curve '${namedCurve}' to OID`);\n }\n return oid;\n}\n\nclass EdPrivateKey extends AsymmetricKey {\n constructor() {\n super(...arguments);\n this.type = \"private\";\n }\n getKey() {\n const keyInfo = AsnParser.parse(this.data, core.asn1.PrivateKeyInfo);\n return AsnParser.parse(keyInfo.privateKey, core.asn1.CurvePrivateKey);\n }\n toJSON() {\n const key = this.getKey();\n const json = {\n kty: \"OKP\",\n crv: this.algorithm.namedCurve,\n key_ops: this.usages,\n ext: this.extractable,\n };\n return Object.assign(json, JsonSerializer.toJSON(key));\n }\n fromJSON(json) {\n if (!json.crv) {\n throw new core.OperationError(`Cannot get named curve from JWK. Property 'crv' is required`);\n }\n const keyInfo = new core.asn1.PrivateKeyInfo();\n keyInfo.privateKeyAlgorithm.algorithm = getOidByNamedCurve(json.crv);\n const key = JsonParser.fromJSON(json, { targetSchema: core.asn1.CurvePrivateKey });\n keyInfo.privateKey = AsnSerializer.serialize(key);\n this.data = Buffer.from(AsnSerializer.serialize(keyInfo));\n return this;\n }\n}\n\nclass EdPublicKey extends AsymmetricKey {\n constructor() {\n super(...arguments);\n this.type = \"public\";\n }\n getKey() {\n const keyInfo = AsnParser.parse(this.data, core.asn1.PublicKeyInfo);\n return keyInfo.publicKey;\n }\n toJSON() {\n const key = this.getKey();\n const json = {\n kty: \"OKP\",\n crv: this.algorithm.namedCurve,\n key_ops: this.usages,\n ext: this.extractable,\n };\n return Object.assign(json, {\n x: Convert.ToBase64Url(key)\n });\n }\n fromJSON(json) {\n if (!json.crv) {\n throw new core.OperationError(`Cannot get named curve from JWK. Property 'crv' is required`);\n }\n if (!json.x) {\n throw new core.OperationError(`Cannot get property from JWK. Property 'x' is required`);\n }\n const keyInfo = new core.asn1.PublicKeyInfo();\n keyInfo.publicKeyAlgorithm.algorithm = getOidByNamedCurve(json.crv);\n keyInfo.publicKey = Convert.FromBase64Url(json.x);\n this.data = Buffer.from(AsnSerializer.serialize(keyInfo));\n return this;\n }\n}\n\nclass EdCrypto {\n static async generateKey(algorithm, extractable, keyUsages) {\n const privateKey = new EdPrivateKey();\n privateKey.algorithm = algorithm;\n privateKey.extractable = extractable;\n privateKey.usages = keyUsages.filter((usage) => this.privateKeyUsages.indexOf(usage) !== -1);\n const publicKey = new EdPublicKey();\n publicKey.algorithm = algorithm;\n publicKey.extractable = true;\n publicKey.usages = keyUsages.filter((usage) => this.publicKeyUsages.indexOf(usage) !== -1);\n const type = algorithm.namedCurve.toLowerCase();\n const keys = crypto__default.generateKeyPairSync(type, {\n publicKeyEncoding: {\n format: \"der\",\n type: \"spki\",\n },\n privateKeyEncoding: {\n format: \"der\",\n type: \"pkcs8\",\n },\n });\n privateKey.data = keys.privateKey;\n publicKey.data = keys.publicKey;\n const res = {\n privateKey,\n publicKey,\n };\n return res;\n }\n static async sign(algorithm, key, data) {\n if (!key.pem) {\n key.pem = `-----BEGIN PRIVATE KEY-----\\n${key.data.toString(\"base64\")}\\n-----END PRIVATE KEY-----`;\n }\n const options = {\n key: key.pem,\n };\n const signature = crypto__default.sign(null, Buffer.from(data), options);\n return core.BufferSourceConverter.toArrayBuffer(signature);\n }\n static async verify(algorithm, key, signature, data) {\n if (!key.pem) {\n key.pem = `-----BEGIN PUBLIC KEY-----\\n${key.data.toString(\"base64\")}\\n-----END PUBLIC KEY-----`;\n }\n const options = {\n key: key.pem,\n };\n const ok = crypto__default.verify(null, Buffer.from(data), options, Buffer.from(signature));\n return ok;\n }\n static async deriveBits(algorithm, baseKey, length) {\n const publicKey = crypto__default.createPublicKey({\n key: algorithm.public.data,\n format: \"der\",\n type: \"spki\",\n });\n const privateKey = crypto__default.createPrivateKey({\n key: baseKey.data,\n format: \"der\",\n type: \"pkcs8\",\n });\n const bits = crypto__default.diffieHellman({\n publicKey,\n privateKey,\n });\n return new Uint8Array(bits).buffer.slice(0, length >> 3);\n }\n static async exportKey(format, key) {\n switch (format.toLowerCase()) {\n case \"jwk\":\n return JsonSerializer.toJSON(key);\n case \"pkcs8\":\n case \"spki\":\n return new Uint8Array(key.data).buffer;\n case \"raw\": {\n const publicKeyInfo = AsnParser.parse(key.data, core.asn1.PublicKeyInfo);\n return publicKeyInfo.publicKey;\n }\n default:\n throw new core.OperationError(\"format: Must be 'jwk', 'raw', pkcs8' or 'spki'\");\n }\n }\n static async importKey(format, keyData, algorithm, extractable, keyUsages) {\n switch (format.toLowerCase()) {\n case \"jwk\": {\n const jwk = keyData;\n if (jwk.d) {\n const asnKey = JsonParser.fromJSON(keyData, { targetSchema: core.asn1.CurvePrivateKey });\n return this.importPrivateKey(asnKey, algorithm, extractable, keyUsages);\n }\n else {\n if (!jwk.x) {\n throw new TypeError(\"keyData: Cannot get required 'x' filed\");\n }\n return this.importPublicKey(Convert.FromBase64Url(jwk.x), algorithm, extractable, keyUsages);\n }\n }\n case \"raw\": {\n return this.importPublicKey(keyData, algorithm, extractable, keyUsages);\n }\n case \"spki\": {\n const keyInfo = AsnParser.parse(new Uint8Array(keyData), core.asn1.PublicKeyInfo);\n return this.importPublicKey(keyInfo.publicKey, algorithm, extractable, keyUsages);\n }\n case \"pkcs8\": {\n const keyInfo = AsnParser.parse(new Uint8Array(keyData), core.asn1.PrivateKeyInfo);\n const asnKey = AsnParser.parse(keyInfo.privateKey, core.asn1.CurvePrivateKey);\n return this.importPrivateKey(asnKey, algorithm, extractable, keyUsages);\n }\n default:\n throw new core.OperationError(\"format: Must be 'jwk', 'raw', 'pkcs8' or 'spki'\");\n }\n }\n static importPrivateKey(asnKey, algorithm, extractable, keyUsages) {\n const key = new EdPrivateKey();\n key.fromJSON({\n crv: algorithm.namedCurve,\n d: Convert.ToBase64Url(asnKey.d),\n });\n key.algorithm = Object.assign({}, algorithm);\n key.extractable = extractable;\n key.usages = keyUsages;\n return key;\n }\n static async importPublicKey(asnKey, algorithm, extractable, keyUsages) {\n const key = new EdPublicKey();\n key.fromJSON({\n crv: algorithm.namedCurve,\n x: Convert.ToBase64Url(asnKey),\n });\n key.algorithm = Object.assign({}, algorithm);\n key.extractable = extractable;\n key.usages = keyUsages;\n return key;\n }\n}\nEdCrypto.publicKeyUsages = [\"verify\"];\nEdCrypto.privateKeyUsages = [\"sign\", \"deriveKey\", \"deriveBits\"];\n\nclass EdDsaProvider extends core.EdDsaProvider {\n async onGenerateKey(algorithm, extractable, keyUsages) {\n const keys = await EdCrypto.generateKey({\n name: this.name,\n namedCurve: algorithm.namedCurve.replace(/^ed/i, \"Ed\"),\n }, extractable, keyUsages);\n return {\n privateKey: setCryptoKey(keys.privateKey),\n publicKey: setCryptoKey(keys.publicKey),\n };\n }\n async onSign(algorithm, key, data) {\n return EdCrypto.sign(algorithm, getCryptoKey(key), new Uint8Array(data));\n }\n async onVerify(algorithm, key, signature, data) {\n return EdCrypto.verify(algorithm, getCryptoKey(key), new Uint8Array(signature), new Uint8Array(data));\n }\n async onExportKey(format, key) {\n return EdCrypto.exportKey(format, getCryptoKey(key));\n }\n async onImportKey(format, keyData, algorithm, extractable, keyUsages) {\n const key = await EdCrypto.importKey(format, keyData, { ...algorithm, name: this.name }, extractable, keyUsages);\n return setCryptoKey(key);\n }\n}\n\nclass EcdhEsProvider extends core.EcdhEsProvider {\n async onGenerateKey(algorithm, extractable, keyUsages) {\n const keys = await EdCrypto.generateKey({\n name: this.name,\n namedCurve: algorithm.namedCurve.toUpperCase(),\n }, extractable, keyUsages);\n return {\n privateKey: setCryptoKey(keys.privateKey),\n publicKey: setCryptoKey(keys.publicKey),\n };\n }\n async onDeriveBits(algorithm, baseKey, length) {\n const bits = await EdCrypto.deriveBits({ ...algorithm, public: getCryptoKey(algorithm.public) }, getCryptoKey(baseKey), length);\n return bits;\n }\n async onExportKey(format, key) {\n return EdCrypto.exportKey(format, getCryptoKey(key));\n }\n async onImportKey(format, keyData, algorithm, extractable, keyUsages) {\n const key = await EdCrypto.importKey(format, keyData, { ...algorithm, name: this.name }, extractable, keyUsages);\n return setCryptoKey(key);\n }\n}\n\nclass PbkdfCryptoKey extends CryptoKey {\n}\n\nclass Pbkdf2Provider extends core.Pbkdf2Provider {\n async onDeriveBits(algorithm, baseKey, length) {\n return new Promise((resolve, reject) => {\n const salt = core.BufferSourceConverter.toArrayBuffer(algorithm.salt);\n const hash = algorithm.hash.name.replace(\"-\", \"\");\n crypto__default.pbkdf2(getCryptoKey(baseKey).data, Buffer.from(salt), algorithm.iterations, length >> 3, hash, (err, derivedBits) => {\n if (err) {\n reject(err);\n }\n else {\n resolve(new Uint8Array(derivedBits).buffer);\n }\n });\n });\n }\n async onImportKey(format, keyData, algorithm, extractable, keyUsages) {\n if (format === \"raw\") {\n const key = new PbkdfCryptoKey();\n key.data = Buffer.from(keyData);\n key.algorithm = { name: this.name };\n key.extractable = false;\n key.usages = keyUsages;\n return setCryptoKey(key);\n }\n throw new core.OperationError(\"format: Must be 'raw'\");\n }\n checkCryptoKey(key, keyUsage) {\n super.checkCryptoKey(key, keyUsage);\n if (!(getCryptoKey(key) instanceof PbkdfCryptoKey)) {\n throw new TypeError(\"key: Is not PBKDF CryptoKey\");\n }\n }\n}\n\nclass HmacCryptoKey extends CryptoKey {\n get alg() {\n const hash = this.algorithm.hash.name.toUpperCase();\n return `HS${hash.replace(\"SHA-\", \"\")}`;\n }\n set alg(value) {\n }\n}\n__decorate([\n JsonProp({ name: \"k\", converter: JsonBase64UrlConverter })\n], HmacCryptoKey.prototype, \"data\", void 0);\n\nclass HmacProvider extends core.HmacProvider {\n async onGenerateKey(algorithm, extractable, keyUsages) {\n const length = (algorithm.length || this.getDefaultLength(algorithm.hash.name)) >> 3 << 3;\n const key = new HmacCryptoKey();\n key.algorithm = {\n ...algorithm,\n length,\n name: this.name,\n };\n key.extractable = extractable;\n key.usages = keyUsages;\n key.data = crypto__default.randomBytes(length >> 3);\n return setCryptoKey(key);\n }\n async onSign(algorithm, key, data) {\n const cryptoAlg = ShaCrypto.getAlgorithmName(key.algorithm.hash);\n const hmac = crypto__default.createHmac(cryptoAlg, getCryptoKey(key).data)\n .update(Buffer.from(data)).digest();\n return new Uint8Array(hmac).buffer;\n }\n async onVerify(algorithm, key, signature, data) {\n const cryptoAlg = ShaCrypto.getAlgorithmName(key.algorithm.hash);\n const hmac = crypto__default.createHmac(cryptoAlg, getCryptoKey(key).data)\n .update(Buffer.from(data)).digest();\n return hmac.compare(Buffer.from(signature)) === 0;\n }\n async onImportKey(format, keyData, algorithm, extractable, keyUsages) {\n let key;\n switch (format.toLowerCase()) {\n case \"jwk\":\n key = JsonParser.fromJSON(keyData, { targetSchema: HmacCryptoKey });\n break;\n case \"raw\":\n key = new HmacCryptoKey();\n key.data = Buffer.from(keyData);\n break;\n default:\n throw new core.OperationError(\"format: Must be 'jwk' or 'raw'\");\n }\n key.algorithm = {\n hash: { name: algorithm.hash.name },\n name: this.name,\n length: key.data.length << 3,\n };\n key.extractable = extractable;\n key.usages = keyUsages;\n return setCryptoKey(key);\n }\n async onExportKey(format, key) {\n switch (format.toLowerCase()) {\n case \"jwk\":\n return JsonSerializer.toJSON(getCryptoKey(key));\n case \"raw\":\n return new Uint8Array(getCryptoKey(key).data).buffer;\n default:\n throw new core.OperationError(\"format: Must be 'jwk' or 'raw'\");\n }\n }\n checkCryptoKey(key, keyUsage) {\n super.checkCryptoKey(key, keyUsage);\n if (!(getCryptoKey(key) instanceof HmacCryptoKey)) {\n throw new TypeError(\"key: Is not HMAC CryptoKey\");\n }\n }\n}\n\nclass HkdfCryptoKey extends CryptoKey {\n}\n\nclass HkdfProvider extends core.HkdfProvider {\n async onImportKey(format, keyData, algorithm, extractable, keyUsages) {\n if (format.toLowerCase() !== \"raw\") {\n throw new core.OperationError(\"Operation not supported\");\n }\n const key = new HkdfCryptoKey();\n key.data = Buffer.from(keyData);\n key.algorithm = { name: this.name };\n key.extractable = extractable;\n key.usages = keyUsages;\n return setCryptoKey(key);\n }\n async onDeriveBits(params, baseKey, length) {\n const hash = params.hash.name.replace(\"-\", \"\");\n const hashLength = crypto__default.createHash(hash).digest().length;\n const byteLength = length / 8;\n const info = BufferSourceConverter$1.toUint8Array(params.info);\n const PRK = crypto__default.createHmac(hash, BufferSourceConverter$1.toUint8Array(params.salt))\n .update(BufferSourceConverter$1.toUint8Array(getCryptoKey(baseKey).data))\n .digest();\n const blocks = [Buffer.alloc(0)];\n const blockCount = Math.ceil(byteLength / hashLength) + 1;\n for (let i = 1; i < blockCount; ++i) {\n blocks.push(crypto__default.createHmac(hash, PRK)\n .update(Buffer.concat([blocks[i - 1], info, Buffer.from([i])]))\n .digest());\n }\n return Buffer.concat(blocks).slice(0, byteLength);\n }\n checkCryptoKey(key, keyUsage) {\n super.checkCryptoKey(key, keyUsage);\n if (!(getCryptoKey(key) instanceof HkdfCryptoKey)) {\n throw new TypeError(\"key: Is not HKDF CryptoKey\");\n }\n }\n}\n\nclass ShakeCrypto {\n static digest(algorithm, data) {\n const hash = crypto__default.createHash(algorithm.name.toLowerCase(), { outputLength: algorithm.length })\n .update(Buffer.from(data)).digest();\n return new Uint8Array(hash).buffer;\n }\n}\n\nclass Shake128Provider extends core.Shake128Provider {\n async onDigest(algorithm, data) {\n return ShakeCrypto.digest(algorithm, data);\n }\n}\n\nclass Shake256Provider extends core.Shake256Provider {\n async onDigest(algorithm, data) {\n return ShakeCrypto.digest(algorithm, data);\n }\n}\n\nclass SubtleCrypto extends core.SubtleCrypto {\n constructor() {\n var _a;\n super();\n this.providers.set(new AesCbcProvider());\n this.providers.set(new AesCtrProvider());\n this.providers.set(new AesGcmProvider());\n this.providers.set(new AesCmacProvider());\n this.providers.set(new AesKwProvider());\n this.providers.set(new AesEcbProvider());\n const ciphers = crypto.getCiphers();\n if (ciphers.includes(\"des-cbc\")) {\n this.providers.set(new DesCbcProvider());\n }\n this.providers.set(new DesEde3CbcProvider());\n this.providers.set(new RsaSsaProvider());\n this.providers.set(new RsaPssProvider());\n this.providers.set(new RsaOaepProvider());\n this.providers.set(new RsaEsProvider());\n this.providers.set(new EcdsaProvider());\n this.providers.set(new EcdhProvider());\n this.providers.set(new Sha1Provider());\n this.providers.set(new Sha256Provider());\n this.providers.set(new Sha384Provider());\n this.providers.set(new Sha512Provider());\n this.providers.set(new Pbkdf2Provider());\n this.providers.set(new HmacProvider());\n this.providers.set(new HkdfProvider());\n const nodeMajorVersion = (_a = /^v(\\d+)/.exec(process.version)) === null || _a === void 0 ? void 0 : _a[1];\n if (nodeMajorVersion && parseInt(nodeMajorVersion, 10) >= 12) {\n this.providers.set(new Shake128Provider());\n this.providers.set(new Shake256Provider());\n }\n const hashes = crypto.getHashes();\n if (hashes.includes(\"sha3-256\")) {\n this.providers.set(new Sha3256Provider());\n }\n if (hashes.includes(\"sha3-384\")) {\n this.providers.set(new Sha3384Provider());\n }\n if (hashes.includes(\"sha3-512\")) {\n this.providers.set(new Sha3512Provider());\n }\n if (nodeMajorVersion && parseInt(nodeMajorVersion, 10) >= 14) {\n this.providers.set(new EdDsaProvider());\n this.providers.set(new EcdhEsProvider());\n }\n }\n}\n\nclass Crypto extends core.Crypto {\n constructor() {\n super(...arguments);\n this.subtle = new SubtleCrypto();\n }\n getRandomValues(array) {\n if (!ArrayBuffer.isView(array)) {\n throw new TypeError(\"Failed to execute 'getRandomValues' on 'Crypto': parameter 1 is not of type 'ArrayBufferView'\");\n }\n const buffer = Buffer.from(array.buffer, array.byteOffset, array.byteLength);\n crypto__default.randomFillSync(buffer);\n return array;\n }\n}\n\nexport { Crypto };\n","/*!\n * Copyright (c) 2014, GMO GlobalSign\n * Copyright (c) 2015-2022, Peculiar Ventures\n * All rights reserved.\n * \n * Author 2014-2019, Yury Strozhevsky\n * \n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * \n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * \n * * Redistributions in binary form must reproduce the above copyright notice, this\n * list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * \n * * Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n */\n\nimport * as pvtsutils from 'pvtsutils';\nimport * as pvutils from 'pvutils';\n\nfunction assertBigInt() {\r\n if (typeof BigInt === \"undefined\") {\r\n throw new Error(\"BigInt is not defined. Your environment doesn't implement BigInt.\");\r\n }\r\n}\r\nfunction concat(buffers) {\r\n let outputLength = 0;\r\n let prevLength = 0;\r\n for (let i = 0; i < buffers.length; i++) {\r\n const buffer = buffers[i];\r\n outputLength += buffer.byteLength;\r\n }\r\n const retView = new Uint8Array(outputLength);\r\n for (let i = 0; i < buffers.length; i++) {\r\n const buffer = buffers[i];\r\n retView.set(new Uint8Array(buffer), prevLength);\r\n prevLength += buffer.byteLength;\r\n }\r\n return retView.buffer;\r\n}\r\nfunction checkBufferParams(baseBlock, inputBuffer, inputOffset, inputLength) {\r\n if (!(inputBuffer instanceof Uint8Array)) {\r\n baseBlock.error = \"Wrong parameter: inputBuffer must be 'Uint8Array'\";\r\n return false;\r\n }\r\n if (!inputBuffer.byteLength) {\r\n baseBlock.error = \"Wrong parameter: inputBuffer has zero length\";\r\n return false;\r\n }\r\n if (inputOffset < 0) {\r\n baseBlock.error = \"Wrong parameter: inputOffset less than zero\";\r\n return false;\r\n }\r\n if (inputLength < 0) {\r\n baseBlock.error = \"Wrong parameter: inputLength less than zero\";\r\n return false;\r\n }\r\n if ((inputBuffer.byteLength - inputOffset - inputLength) < 0) {\r\n baseBlock.error = \"End of input reached before message was fully decoded (inconsistent offset and length values)\";\r\n return false;\r\n }\r\n return true;\r\n}\n\nclass ViewWriter {\r\n constructor() {\r\n this.items = [];\r\n }\r\n write(buf) {\r\n this.items.push(buf);\r\n }\r\n final() {\r\n return concat(this.items);\r\n }\r\n}\n\nconst powers2 = [new Uint8Array([1])];\r\nconst digitsString = \"0123456789\";\r\nconst NAME = \"name\";\r\nconst VALUE_HEX_VIEW = \"valueHexView\";\r\nconst IS_HEX_ONLY = \"isHexOnly\";\r\nconst ID_BLOCK = \"idBlock\";\r\nconst TAG_CLASS = \"tagClass\";\r\nconst TAG_NUMBER = \"tagNumber\";\r\nconst IS_CONSTRUCTED = \"isConstructed\";\r\nconst FROM_BER = \"fromBER\";\r\nconst TO_BER = \"toBER\";\r\nconst LOCAL = \"local\";\r\nconst EMPTY_STRING = \"\";\r\nconst EMPTY_BUFFER = new ArrayBuffer(0);\r\nconst EMPTY_VIEW = new Uint8Array(0);\r\nconst END_OF_CONTENT_NAME = \"EndOfContent\";\r\nconst OCTET_STRING_NAME = \"OCTET STRING\";\r\nconst BIT_STRING_NAME = \"BIT STRING\";\n\nfunction HexBlock(BaseClass) {\r\n var _a;\r\n return _a = class Some extends BaseClass {\r\n constructor(...args) {\r\n var _a;\r\n super(...args);\r\n const params = args[0] || {};\r\n this.isHexOnly = (_a = params.isHexOnly) !== null && _a !== void 0 ? _a : false;\r\n this.valueHexView = params.valueHex ? pvtsutils.BufferSourceConverter.toUint8Array(params.valueHex) : EMPTY_VIEW;\r\n }\r\n get valueHex() {\r\n return this.valueHexView.slice().buffer;\r\n }\r\n set valueHex(value) {\r\n this.valueHexView = new Uint8Array(value);\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n const view = inputBuffer instanceof ArrayBuffer ? new Uint8Array(inputBuffer) : inputBuffer;\r\n if (!checkBufferParams(this, view, inputOffset, inputLength)) {\r\n return -1;\r\n }\r\n const endLength = inputOffset + inputLength;\r\n this.valueHexView = view.subarray(inputOffset, endLength);\r\n if (!this.valueHexView.length) {\r\n this.warnings.push(\"Zero buffer length\");\r\n return inputOffset;\r\n }\r\n this.blockLength = inputLength;\r\n return endLength;\r\n }\r\n toBER(sizeOnly = false) {\r\n if (!this.isHexOnly) {\r\n this.error = \"Flag 'isHexOnly' is not set, abort\";\r\n return EMPTY_BUFFER;\r\n }\r\n if (sizeOnly) {\r\n return new ArrayBuffer(this.valueHexView.byteLength);\r\n }\r\n return (this.valueHexView.byteLength === this.valueHexView.buffer.byteLength)\r\n ? this.valueHexView.buffer\r\n : this.valueHexView.slice().buffer;\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n isHexOnly: this.isHexOnly,\r\n valueHex: pvtsutils.Convert.ToHex(this.valueHexView),\r\n };\r\n }\r\n },\r\n _a.NAME = \"hexBlock\",\r\n _a;\r\n}\n\nclass LocalBaseBlock {\r\n constructor({ blockLength = 0, error = EMPTY_STRING, warnings = [], valueBeforeDecode = EMPTY_VIEW, } = {}) {\r\n this.blockLength = blockLength;\r\n this.error = error;\r\n this.warnings = warnings;\r\n this.valueBeforeDecodeView = pvtsutils.BufferSourceConverter.toUint8Array(valueBeforeDecode);\r\n }\r\n static blockName() {\r\n return this.NAME;\r\n }\r\n get valueBeforeDecode() {\r\n return this.valueBeforeDecodeView.slice().buffer;\r\n }\r\n set valueBeforeDecode(value) {\r\n this.valueBeforeDecodeView = new Uint8Array(value);\r\n }\r\n toJSON() {\r\n return {\r\n blockName: this.constructor.NAME,\r\n blockLength: this.blockLength,\r\n error: this.error,\r\n warnings: this.warnings,\r\n valueBeforeDecode: pvtsutils.Convert.ToHex(this.valueBeforeDecodeView),\r\n };\r\n }\r\n}\r\nLocalBaseBlock.NAME = \"baseBlock\";\n\nclass ValueBlock extends LocalBaseBlock {\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n throw TypeError(\"User need to make a specific function in a class which extends 'ValueBlock'\");\r\n }\r\n toBER(sizeOnly, writer) {\r\n throw TypeError(\"User need to make a specific function in a class which extends 'ValueBlock'\");\r\n }\r\n}\r\nValueBlock.NAME = \"valueBlock\";\n\nclass LocalIdentificationBlock extends HexBlock(LocalBaseBlock) {\r\n constructor({ idBlock = {}, } = {}) {\r\n var _a, _b, _c, _d;\r\n super();\r\n if (idBlock) {\r\n this.isHexOnly = (_a = idBlock.isHexOnly) !== null && _a !== void 0 ? _a : false;\r\n this.valueHexView = idBlock.valueHex ? pvtsutils.BufferSourceConverter.toUint8Array(idBlock.valueHex) : EMPTY_VIEW;\r\n this.tagClass = (_b = idBlock.tagClass) !== null && _b !== void 0 ? _b : -1;\r\n this.tagNumber = (_c = idBlock.tagNumber) !== null && _c !== void 0 ? _c : -1;\r\n this.isConstructed = (_d = idBlock.isConstructed) !== null && _d !== void 0 ? _d : false;\r\n }\r\n else {\r\n this.tagClass = -1;\r\n this.tagNumber = -1;\r\n this.isConstructed = false;\r\n }\r\n }\r\n toBER(sizeOnly = false) {\r\n let firstOctet = 0;\r\n switch (this.tagClass) {\r\n case 1:\r\n firstOctet |= 0x00;\r\n break;\r\n case 2:\r\n firstOctet |= 0x40;\r\n break;\r\n case 3:\r\n firstOctet |= 0x80;\r\n break;\r\n case 4:\r\n firstOctet |= 0xC0;\r\n break;\r\n default:\r\n this.error = \"Unknown tag class\";\r\n return EMPTY_BUFFER;\r\n }\r\n if (this.isConstructed)\r\n firstOctet |= 0x20;\r\n if (this.tagNumber < 31 && !this.isHexOnly) {\r\n const retView = new Uint8Array(1);\r\n if (!sizeOnly) {\r\n let number = this.tagNumber;\r\n number &= 0x1F;\r\n firstOctet |= number;\r\n retView[0] = firstOctet;\r\n }\r\n return retView.buffer;\r\n }\r\n if (!this.isHexOnly) {\r\n const encodedBuf = pvutils.utilToBase(this.tagNumber, 7);\r\n const encodedView = new Uint8Array(encodedBuf);\r\n const size = encodedBuf.byteLength;\r\n const retView = new Uint8Array(size + 1);\r\n retView[0] = (firstOctet | 0x1F);\r\n if (!sizeOnly) {\r\n for (let i = 0; i < (size - 1); i++)\r\n retView[i + 1] = encodedView[i] | 0x80;\r\n retView[size] = encodedView[size - 1];\r\n }\r\n return retView.buffer;\r\n }\r\n const retView = new Uint8Array(this.valueHexView.byteLength + 1);\r\n retView[0] = (firstOctet | 0x1F);\r\n if (!sizeOnly) {\r\n const curView = this.valueHexView;\r\n for (let i = 0; i < (curView.length - 1); i++)\r\n retView[i + 1] = curView[i] | 0x80;\r\n retView[this.valueHexView.byteLength] = curView[curView.length - 1];\r\n }\r\n return retView.buffer;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n const inputView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\r\n if (!checkBufferParams(this, inputView, inputOffset, inputLength)) {\r\n return -1;\r\n }\r\n const intBuffer = inputView.subarray(inputOffset, inputOffset + inputLength);\r\n if (intBuffer.length === 0) {\r\n this.error = \"Zero buffer length\";\r\n return -1;\r\n }\r\n const tagClassMask = intBuffer[0] & 0xC0;\r\n switch (tagClassMask) {\r\n case 0x00:\r\n this.tagClass = (1);\r\n break;\r\n case 0x40:\r\n this.tagClass = (2);\r\n break;\r\n case 0x80:\r\n this.tagClass = (3);\r\n break;\r\n case 0xC0:\r\n this.tagClass = (4);\r\n break;\r\n default:\r\n this.error = \"Unknown tag class\";\r\n return -1;\r\n }\r\n this.isConstructed = (intBuffer[0] & 0x20) === 0x20;\r\n this.isHexOnly = false;\r\n const tagNumberMask = intBuffer[0] & 0x1F;\r\n if (tagNumberMask !== 0x1F) {\r\n this.tagNumber = (tagNumberMask);\r\n this.blockLength = 1;\r\n }\r\n else {\r\n let count = 1;\r\n let intTagNumberBuffer = this.valueHexView = new Uint8Array(255);\r\n let tagNumberBufferMaxLength = 255;\r\n while (intBuffer[count] & 0x80) {\r\n intTagNumberBuffer[count - 1] = intBuffer[count] & 0x7F;\r\n count++;\r\n if (count >= intBuffer.length) {\r\n this.error = \"End of input reached before message was fully decoded\";\r\n return -1;\r\n }\r\n if (count === tagNumberBufferMaxLength) {\r\n tagNumberBufferMaxLength += 255;\r\n const tempBufferView = new Uint8Array(tagNumberBufferMaxLength);\r\n for (let i = 0; i < intTagNumberBuffer.length; i++)\r\n tempBufferView[i] = intTagNumberBuffer[i];\r\n intTagNumberBuffer = this.valueHexView = new Uint8Array(tagNumberBufferMaxLength);\r\n }\r\n }\r\n this.blockLength = (count + 1);\r\n intTagNumberBuffer[count - 1] = intBuffer[count] & 0x7F;\r\n const tempBufferView = new Uint8Array(count);\r\n for (let i = 0; i < count; i++)\r\n tempBufferView[i] = intTagNumberBuffer[i];\r\n intTagNumberBuffer = this.valueHexView = new Uint8Array(count);\r\n intTagNumberBuffer.set(tempBufferView);\r\n if (this.blockLength <= 9)\r\n this.tagNumber = pvutils.utilFromBase(intTagNumberBuffer, 7);\r\n else {\r\n this.isHexOnly = true;\r\n this.warnings.push(\"Tag too long, represented as hex-coded\");\r\n }\r\n }\r\n if (((this.tagClass === 1)) &&\r\n (this.isConstructed)) {\r\n switch (this.tagNumber) {\r\n case 1:\r\n case 2:\r\n case 5:\r\n case 6:\r\n case 9:\r\n case 13:\r\n case 14:\r\n case 23:\r\n case 24:\r\n case 31:\r\n case 32:\r\n case 33:\r\n case 34:\r\n this.error = \"Constructed encoding used for primitive type\";\r\n return -1;\r\n }\r\n }\r\n return (inputOffset + this.blockLength);\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n tagClass: this.tagClass,\r\n tagNumber: this.tagNumber,\r\n isConstructed: this.isConstructed,\r\n };\r\n }\r\n}\r\nLocalIdentificationBlock.NAME = \"identificationBlock\";\n\nclass LocalLengthBlock extends LocalBaseBlock {\r\n constructor({ lenBlock = {}, } = {}) {\r\n var _a, _b, _c;\r\n super();\r\n this.isIndefiniteForm = (_a = lenBlock.isIndefiniteForm) !== null && _a !== void 0 ? _a : false;\r\n this.longFormUsed = (_b = lenBlock.longFormUsed) !== null && _b !== void 0 ? _b : false;\r\n this.length = (_c = lenBlock.length) !== null && _c !== void 0 ? _c : 0;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n const view = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\r\n if (!checkBufferParams(this, view, inputOffset, inputLength)) {\r\n return -1;\r\n }\r\n const intBuffer = view.subarray(inputOffset, inputOffset + inputLength);\r\n if (intBuffer.length === 0) {\r\n this.error = \"Zero buffer length\";\r\n return -1;\r\n }\r\n if (intBuffer[0] === 0xFF) {\r\n this.error = \"Length block 0xFF is reserved by standard\";\r\n return -1;\r\n }\r\n this.isIndefiniteForm = intBuffer[0] === 0x80;\r\n if (this.isIndefiniteForm) {\r\n this.blockLength = 1;\r\n return (inputOffset + this.blockLength);\r\n }\r\n this.longFormUsed = !!(intBuffer[0] & 0x80);\r\n if (this.longFormUsed === false) {\r\n this.length = (intBuffer[0]);\r\n this.blockLength = 1;\r\n return (inputOffset + this.blockLength);\r\n }\r\n const count = intBuffer[0] & 0x7F;\r\n if (count > 8) {\r\n this.error = \"Too big integer\";\r\n return -1;\r\n }\r\n if ((count + 1) > intBuffer.length) {\r\n this.error = \"End of input reached before message was fully decoded\";\r\n return -1;\r\n }\r\n const lenOffset = inputOffset + 1;\r\n const lengthBufferView = view.subarray(lenOffset, lenOffset + count);\r\n if (lengthBufferView[count - 1] === 0x00)\r\n this.warnings.push(\"Needlessly long encoded length\");\r\n this.length = pvutils.utilFromBase(lengthBufferView, 8);\r\n if (this.longFormUsed && (this.length <= 127))\r\n this.warnings.push(\"Unnecessary usage of long length form\");\r\n this.blockLength = count + 1;\r\n return (inputOffset + this.blockLength);\r\n }\r\n toBER(sizeOnly = false) {\r\n let retBuf;\r\n let retView;\r\n if (this.length > 127)\r\n this.longFormUsed = true;\r\n if (this.isIndefiniteForm) {\r\n retBuf = new ArrayBuffer(1);\r\n if (sizeOnly === false) {\r\n retView = new Uint8Array(retBuf);\r\n retView[0] = 0x80;\r\n }\r\n return retBuf;\r\n }\r\n if (this.longFormUsed) {\r\n const encodedBuf = pvutils.utilToBase(this.length, 8);\r\n if (encodedBuf.byteLength > 127) {\r\n this.error = \"Too big length\";\r\n return (EMPTY_BUFFER);\r\n }\r\n retBuf = new ArrayBuffer(encodedBuf.byteLength + 1);\r\n if (sizeOnly)\r\n return retBuf;\r\n const encodedView = new Uint8Array(encodedBuf);\r\n retView = new Uint8Array(retBuf);\r\n retView[0] = encodedBuf.byteLength | 0x80;\r\n for (let i = 0; i < encodedBuf.byteLength; i++)\r\n retView[i + 1] = encodedView[i];\r\n return retBuf;\r\n }\r\n retBuf = new ArrayBuffer(1);\r\n if (sizeOnly === false) {\r\n retView = new Uint8Array(retBuf);\r\n retView[0] = this.length;\r\n }\r\n return retBuf;\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n isIndefiniteForm: this.isIndefiniteForm,\r\n longFormUsed: this.longFormUsed,\r\n length: this.length,\r\n };\r\n }\r\n}\r\nLocalLengthBlock.NAME = \"lengthBlock\";\n\nconst typeStore = {};\n\nclass BaseBlock extends LocalBaseBlock {\r\n constructor({ name = EMPTY_STRING, optional = false, primitiveSchema, ...parameters } = {}, valueBlockType) {\r\n super(parameters);\r\n this.name = name;\r\n this.optional = optional;\r\n if (primitiveSchema) {\r\n this.primitiveSchema = primitiveSchema;\r\n }\r\n this.idBlock = new LocalIdentificationBlock(parameters);\r\n this.lenBlock = new LocalLengthBlock(parameters);\r\n this.valueBlock = valueBlockType ? new valueBlockType(parameters) : new ValueBlock(parameters);\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n const resultOffset = this.valueBlock.fromBER(inputBuffer, inputOffset, (this.lenBlock.isIndefiniteForm) ? inputLength : this.lenBlock.length);\r\n if (resultOffset === -1) {\r\n this.error = this.valueBlock.error;\r\n return resultOffset;\r\n }\r\n if (!this.idBlock.error.length)\r\n this.blockLength += this.idBlock.blockLength;\r\n if (!this.lenBlock.error.length)\r\n this.blockLength += this.lenBlock.blockLength;\r\n if (!this.valueBlock.error.length)\r\n this.blockLength += this.valueBlock.blockLength;\r\n return resultOffset;\r\n }\r\n toBER(sizeOnly, writer) {\r\n const _writer = writer || new ViewWriter();\r\n if (!writer) {\r\n prepareIndefiniteForm(this);\r\n }\r\n const idBlockBuf = this.idBlock.toBER(sizeOnly);\r\n _writer.write(idBlockBuf);\r\n if (this.lenBlock.isIndefiniteForm) {\r\n _writer.write(new Uint8Array([0x80]).buffer);\r\n this.valueBlock.toBER(sizeOnly, _writer);\r\n _writer.write(new ArrayBuffer(2));\r\n }\r\n else {\r\n const valueBlockBuf = this.valueBlock.toBER(sizeOnly);\r\n this.lenBlock.length = valueBlockBuf.byteLength;\r\n const lenBlockBuf = this.lenBlock.toBER(sizeOnly);\r\n _writer.write(lenBlockBuf);\r\n _writer.write(valueBlockBuf);\r\n }\r\n if (!writer) {\r\n return _writer.final();\r\n }\r\n return EMPTY_BUFFER;\r\n }\r\n toJSON() {\r\n const object = {\r\n ...super.toJSON(),\r\n idBlock: this.idBlock.toJSON(),\r\n lenBlock: this.lenBlock.toJSON(),\r\n valueBlock: this.valueBlock.toJSON(),\r\n name: this.name,\r\n optional: this.optional,\r\n };\r\n if (this.primitiveSchema)\r\n object.primitiveSchema = this.primitiveSchema.toJSON();\r\n return object;\r\n }\r\n toString(encoding = \"ascii\") {\r\n if (encoding === \"ascii\") {\r\n return this.onAsciiEncoding();\r\n }\r\n return pvtsutils.Convert.ToHex(this.toBER());\r\n }\r\n onAsciiEncoding() {\r\n return `${this.constructor.NAME} : ${pvtsutils.Convert.ToHex(this.valueBlock.valueBeforeDecodeView)}`;\r\n }\r\n isEqual(other) {\r\n if (this === other) {\r\n return true;\r\n }\r\n if (!(other instanceof this.constructor)) {\r\n return false;\r\n }\r\n const thisRaw = this.toBER();\r\n const otherRaw = other.toBER();\r\n return pvutils.isEqualBuffer(thisRaw, otherRaw);\r\n }\r\n}\r\nBaseBlock.NAME = \"BaseBlock\";\r\nfunction prepareIndefiniteForm(baseBlock) {\r\n if (baseBlock instanceof typeStore.Constructed) {\r\n for (const value of baseBlock.valueBlock.value) {\r\n if (prepareIndefiniteForm(value)) {\r\n baseBlock.lenBlock.isIndefiniteForm = true;\r\n }\r\n }\r\n }\r\n return !!baseBlock.lenBlock.isIndefiniteForm;\r\n}\n\nclass BaseStringBlock extends BaseBlock {\r\n constructor({ value = EMPTY_STRING, ...parameters } = {}, stringValueBlockType) {\r\n super(parameters, stringValueBlockType);\r\n if (value) {\r\n this.fromString(value);\r\n }\r\n }\r\n getValue() {\r\n return this.valueBlock.value;\r\n }\r\n setValue(value) {\r\n this.valueBlock.value = value;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n const resultOffset = this.valueBlock.fromBER(inputBuffer, inputOffset, (this.lenBlock.isIndefiniteForm) ? inputLength : this.lenBlock.length);\r\n if (resultOffset === -1) {\r\n this.error = this.valueBlock.error;\r\n return resultOffset;\r\n }\r\n this.fromBuffer(this.valueBlock.valueHexView);\r\n if (!this.idBlock.error.length)\r\n this.blockLength += this.idBlock.blockLength;\r\n if (!this.lenBlock.error.length)\r\n this.blockLength += this.lenBlock.blockLength;\r\n if (!this.valueBlock.error.length)\r\n this.blockLength += this.valueBlock.blockLength;\r\n return resultOffset;\r\n }\r\n onAsciiEncoding() {\r\n return `${this.constructor.NAME} : '${this.valueBlock.value}'`;\r\n }\r\n}\r\nBaseStringBlock.NAME = \"BaseStringBlock\";\n\nclass LocalPrimitiveValueBlock extends HexBlock(ValueBlock) {\r\n constructor({ isHexOnly = true, ...parameters } = {}) {\r\n super(parameters);\r\n this.isHexOnly = isHexOnly;\r\n }\r\n}\r\nLocalPrimitiveValueBlock.NAME = \"PrimitiveValueBlock\";\n\nvar _a$w;\r\nclass Primitive extends BaseBlock {\r\n constructor(parameters = {}) {\r\n super(parameters, LocalPrimitiveValueBlock);\r\n this.idBlock.isConstructed = false;\r\n }\r\n}\r\n_a$w = Primitive;\r\n(() => {\r\n typeStore.Primitive = _a$w;\r\n})();\r\nPrimitive.NAME = \"PRIMITIVE\";\n\nfunction localChangeType(inputObject, newType) {\r\n if (inputObject instanceof newType) {\r\n return inputObject;\r\n }\r\n const newObject = new newType();\r\n newObject.idBlock = inputObject.idBlock;\r\n newObject.lenBlock = inputObject.lenBlock;\r\n newObject.warnings = inputObject.warnings;\r\n newObject.valueBeforeDecodeView = inputObject.valueBeforeDecodeView;\r\n return newObject;\r\n}\r\nfunction localFromBER(inputBuffer, inputOffset = 0, inputLength = inputBuffer.length) {\r\n const incomingOffset = inputOffset;\r\n let returnObject = new BaseBlock({}, ValueBlock);\r\n const baseBlock = new LocalBaseBlock();\r\n if (!checkBufferParams(baseBlock, inputBuffer, inputOffset, inputLength)) {\r\n returnObject.error = baseBlock.error;\r\n return {\r\n offset: -1,\r\n result: returnObject\r\n };\r\n }\r\n const intBuffer = inputBuffer.subarray(inputOffset, inputOffset + inputLength);\r\n if (!intBuffer.length) {\r\n returnObject.error = \"Zero buffer length\";\r\n return {\r\n offset: -1,\r\n result: returnObject\r\n };\r\n }\r\n let resultOffset = returnObject.idBlock.fromBER(inputBuffer, inputOffset, inputLength);\r\n if (returnObject.idBlock.warnings.length) {\r\n returnObject.warnings.concat(returnObject.idBlock.warnings);\r\n }\r\n if (resultOffset === -1) {\r\n returnObject.error = returnObject.idBlock.error;\r\n return {\r\n offset: -1,\r\n result: returnObject\r\n };\r\n }\r\n inputOffset = resultOffset;\r\n inputLength -= returnObject.idBlock.blockLength;\r\n resultOffset = returnObject.lenBlock.fromBER(inputBuffer, inputOffset, inputLength);\r\n if (returnObject.lenBlock.warnings.length) {\r\n returnObject.warnings.concat(returnObject.lenBlock.warnings);\r\n }\r\n if (resultOffset === -1) {\r\n returnObject.error = returnObject.lenBlock.error;\r\n return {\r\n offset: -1,\r\n result: returnObject\r\n };\r\n }\r\n inputOffset = resultOffset;\r\n inputLength -= returnObject.lenBlock.blockLength;\r\n if (!returnObject.idBlock.isConstructed &&\r\n returnObject.lenBlock.isIndefiniteForm) {\r\n returnObject.error = \"Indefinite length form used for primitive encoding form\";\r\n return {\r\n offset: -1,\r\n result: returnObject\r\n };\r\n }\r\n let newASN1Type = BaseBlock;\r\n switch (returnObject.idBlock.tagClass) {\r\n case 1:\r\n if ((returnObject.idBlock.tagNumber >= 37) &&\r\n (returnObject.idBlock.isHexOnly === false)) {\r\n returnObject.error = \"UNIVERSAL 37 and upper tags are reserved by ASN.1 standard\";\r\n return {\r\n offset: -1,\r\n result: returnObject\r\n };\r\n }\r\n switch (returnObject.idBlock.tagNumber) {\r\n case 0:\r\n if ((returnObject.idBlock.isConstructed) &&\r\n (returnObject.lenBlock.length > 0)) {\r\n returnObject.error = \"Type [UNIVERSAL 0] is reserved\";\r\n return {\r\n offset: -1,\r\n result: returnObject\r\n };\r\n }\r\n newASN1Type = typeStore.EndOfContent;\r\n break;\r\n case 1:\r\n newASN1Type = typeStore.Boolean;\r\n break;\r\n case 2:\r\n newASN1Type = typeStore.Integer;\r\n break;\r\n case 3:\r\n newASN1Type = typeStore.BitString;\r\n break;\r\n case 4:\r\n newASN1Type = typeStore.OctetString;\r\n break;\r\n case 5:\r\n newASN1Type = typeStore.Null;\r\n break;\r\n case 6:\r\n newASN1Type = typeStore.ObjectIdentifier;\r\n break;\r\n case 10:\r\n newASN1Type = typeStore.Enumerated;\r\n break;\r\n case 12:\r\n newASN1Type = typeStore.Utf8String;\r\n break;\r\n case 13:\r\n newASN1Type = typeStore.RelativeObjectIdentifier;\r\n break;\r\n case 14:\r\n newASN1Type = typeStore.TIME;\r\n break;\r\n case 15:\r\n returnObject.error = \"[UNIVERSAL 15] is reserved by ASN.1 standard\";\r\n return {\r\n offset: -1,\r\n result: returnObject\r\n };\r\n case 16:\r\n newASN1Type = typeStore.Sequence;\r\n break;\r\n case 17:\r\n newASN1Type = typeStore.Set;\r\n break;\r\n case 18:\r\n newASN1Type = typeStore.NumericString;\r\n break;\r\n case 19:\r\n newASN1Type = typeStore.PrintableString;\r\n break;\r\n case 20:\r\n newASN1Type = typeStore.TeletexString;\r\n break;\r\n case 21:\r\n newASN1Type = typeStore.VideotexString;\r\n break;\r\n case 22:\r\n newASN1Type = typeStore.IA5String;\r\n break;\r\n case 23:\r\n newASN1Type = typeStore.UTCTime;\r\n break;\r\n case 24:\r\n newASN1Type = typeStore.GeneralizedTime;\r\n break;\r\n case 25:\r\n newASN1Type = typeStore.GraphicString;\r\n break;\r\n case 26:\r\n newASN1Type = typeStore.VisibleString;\r\n break;\r\n case 27:\r\n newASN1Type = typeStore.GeneralString;\r\n break;\r\n case 28:\r\n newASN1Type = typeStore.UniversalString;\r\n break;\r\n case 29:\r\n newASN1Type = typeStore.CharacterString;\r\n break;\r\n case 30:\r\n newASN1Type = typeStore.BmpString;\r\n break;\r\n case 31:\r\n newASN1Type = typeStore.DATE;\r\n break;\r\n case 32:\r\n newASN1Type = typeStore.TimeOfDay;\r\n break;\r\n case 33:\r\n newASN1Type = typeStore.DateTime;\r\n break;\r\n case 34:\r\n newASN1Type = typeStore.Duration;\r\n break;\r\n default: {\r\n const newObject = returnObject.idBlock.isConstructed\r\n ? new typeStore.Constructed()\r\n : new typeStore.Primitive();\r\n newObject.idBlock = returnObject.idBlock;\r\n newObject.lenBlock = returnObject.lenBlock;\r\n newObject.warnings = returnObject.warnings;\r\n returnObject = newObject;\r\n }\r\n }\r\n break;\r\n case 2:\r\n case 3:\r\n case 4:\r\n default: {\r\n newASN1Type = returnObject.idBlock.isConstructed\r\n ? typeStore.Constructed\r\n : typeStore.Primitive;\r\n }\r\n }\r\n returnObject = localChangeType(returnObject, newASN1Type);\r\n resultOffset = returnObject.fromBER(inputBuffer, inputOffset, returnObject.lenBlock.isIndefiniteForm ? inputLength : returnObject.lenBlock.length);\r\n returnObject.valueBeforeDecodeView = inputBuffer.subarray(incomingOffset, incomingOffset + returnObject.blockLength);\r\n return {\r\n offset: resultOffset,\r\n result: returnObject\r\n };\r\n}\r\nfunction fromBER(inputBuffer) {\r\n if (!inputBuffer.byteLength) {\r\n const result = new BaseBlock({}, ValueBlock);\r\n result.error = \"Input buffer has zero length\";\r\n return {\r\n offset: -1,\r\n result\r\n };\r\n }\r\n return localFromBER(pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer).slice(), 0, inputBuffer.byteLength);\r\n}\n\nfunction checkLen(indefiniteLength, length) {\r\n if (indefiniteLength) {\r\n return 1;\r\n }\r\n return length;\r\n}\r\nclass LocalConstructedValueBlock extends ValueBlock {\r\n constructor({ value = [], isIndefiniteForm = false, ...parameters } = {}) {\r\n super(parameters);\r\n this.value = value;\r\n this.isIndefiniteForm = isIndefiniteForm;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n const view = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\r\n if (!checkBufferParams(this, view, inputOffset, inputLength)) {\r\n return -1;\r\n }\r\n this.valueBeforeDecodeView = view.subarray(inputOffset, inputOffset + inputLength);\r\n if (this.valueBeforeDecodeView.length === 0) {\r\n this.warnings.push(\"Zero buffer length\");\r\n return inputOffset;\r\n }\r\n let currentOffset = inputOffset;\r\n while (checkLen(this.isIndefiniteForm, inputLength) > 0) {\r\n const returnObject = localFromBER(view, currentOffset, inputLength);\r\n if (returnObject.offset === -1) {\r\n this.error = returnObject.result.error;\r\n this.warnings.concat(returnObject.result.warnings);\r\n return -1;\r\n }\r\n currentOffset = returnObject.offset;\r\n this.blockLength += returnObject.result.blockLength;\r\n inputLength -= returnObject.result.blockLength;\r\n this.value.push(returnObject.result);\r\n if (this.isIndefiniteForm && returnObject.result.constructor.NAME === END_OF_CONTENT_NAME) {\r\n break;\r\n }\r\n }\r\n if (this.isIndefiniteForm) {\r\n if (this.value[this.value.length - 1].constructor.NAME === END_OF_CONTENT_NAME) {\r\n this.value.pop();\r\n }\r\n else {\r\n this.warnings.push(\"No EndOfContent block encoded\");\r\n }\r\n }\r\n return currentOffset;\r\n }\r\n toBER(sizeOnly, writer) {\r\n const _writer = writer || new ViewWriter();\r\n for (let i = 0; i < this.value.length; i++) {\r\n this.value[i].toBER(sizeOnly, _writer);\r\n }\r\n if (!writer) {\r\n return _writer.final();\r\n }\r\n return EMPTY_BUFFER;\r\n }\r\n toJSON() {\r\n const object = {\r\n ...super.toJSON(),\r\n isIndefiniteForm: this.isIndefiniteForm,\r\n value: [],\r\n };\r\n for (const value of this.value) {\r\n object.value.push(value.toJSON());\r\n }\r\n return object;\r\n }\r\n}\r\nLocalConstructedValueBlock.NAME = \"ConstructedValueBlock\";\n\nvar _a$v;\r\nclass Constructed extends BaseBlock {\r\n constructor(parameters = {}) {\r\n super(parameters, LocalConstructedValueBlock);\r\n this.idBlock.isConstructed = true;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n this.valueBlock.isIndefiniteForm = this.lenBlock.isIndefiniteForm;\r\n const resultOffset = this.valueBlock.fromBER(inputBuffer, inputOffset, (this.lenBlock.isIndefiniteForm) ? inputLength : this.lenBlock.length);\r\n if (resultOffset === -1) {\r\n this.error = this.valueBlock.error;\r\n return resultOffset;\r\n }\r\n if (!this.idBlock.error.length)\r\n this.blockLength += this.idBlock.blockLength;\r\n if (!this.lenBlock.error.length)\r\n this.blockLength += this.lenBlock.blockLength;\r\n if (!this.valueBlock.error.length)\r\n this.blockLength += this.valueBlock.blockLength;\r\n return resultOffset;\r\n }\r\n onAsciiEncoding() {\r\n const values = [];\r\n for (const value of this.valueBlock.value) {\r\n values.push(value.toString(\"ascii\").split(\"\\n\").map(o => ` ${o}`).join(\"\\n\"));\r\n }\r\n const blockName = this.idBlock.tagClass === 3\r\n ? `[${this.idBlock.tagNumber}]`\r\n : this.constructor.NAME;\r\n return values.length\r\n ? `${blockName} :\\n${values.join(\"\\n\")}`\r\n : `${blockName} :`;\r\n }\r\n}\r\n_a$v = Constructed;\r\n(() => {\r\n typeStore.Constructed = _a$v;\r\n})();\r\nConstructed.NAME = \"CONSTRUCTED\";\n\nclass LocalEndOfContentValueBlock extends ValueBlock {\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n return inputOffset;\r\n }\r\n toBER(sizeOnly) {\r\n return EMPTY_BUFFER;\r\n }\r\n}\r\nLocalEndOfContentValueBlock.override = \"EndOfContentValueBlock\";\n\nvar _a$u;\r\nclass EndOfContent extends BaseBlock {\r\n constructor(parameters = {}) {\r\n super(parameters, LocalEndOfContentValueBlock);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 0;\r\n }\r\n}\r\n_a$u = EndOfContent;\r\n(() => {\r\n typeStore.EndOfContent = _a$u;\r\n})();\r\nEndOfContent.NAME = END_OF_CONTENT_NAME;\n\nvar _a$t;\r\nclass Null extends BaseBlock {\r\n constructor(parameters = {}) {\r\n super(parameters, ValueBlock);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 5;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n if (this.lenBlock.length > 0)\r\n this.warnings.push(\"Non-zero length of value block for Null type\");\r\n if (!this.idBlock.error.length)\r\n this.blockLength += this.idBlock.blockLength;\r\n if (!this.lenBlock.error.length)\r\n this.blockLength += this.lenBlock.blockLength;\r\n this.blockLength += inputLength;\r\n if ((inputOffset + inputLength) > inputBuffer.byteLength) {\r\n this.error = \"End of input reached before message was fully decoded (inconsistent offset and length values)\";\r\n return -1;\r\n }\r\n return (inputOffset + inputLength);\r\n }\r\n toBER(sizeOnly, writer) {\r\n const retBuf = new ArrayBuffer(2);\r\n if (!sizeOnly) {\r\n const retView = new Uint8Array(retBuf);\r\n retView[0] = 0x05;\r\n retView[1] = 0x00;\r\n }\r\n if (writer) {\r\n writer.write(retBuf);\r\n }\r\n return retBuf;\r\n }\r\n onAsciiEncoding() {\r\n return `${this.constructor.NAME}`;\r\n }\r\n}\r\n_a$t = Null;\r\n(() => {\r\n typeStore.Null = _a$t;\r\n})();\r\nNull.NAME = \"NULL\";\n\nclass LocalBooleanValueBlock extends HexBlock(ValueBlock) {\r\n constructor({ value, ...parameters } = {}) {\r\n super(parameters);\r\n if (parameters.valueHex) {\r\n this.valueHexView = pvtsutils.BufferSourceConverter.toUint8Array(parameters.valueHex);\r\n }\r\n else {\r\n this.valueHexView = new Uint8Array(1);\r\n }\r\n if (value) {\r\n this.value = value;\r\n }\r\n }\r\n get value() {\r\n for (const octet of this.valueHexView) {\r\n if (octet > 0) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n set value(value) {\r\n this.valueHexView[0] = value ? 0xFF : 0x00;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n const inputView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\r\n if (!checkBufferParams(this, inputView, inputOffset, inputLength)) {\r\n return -1;\r\n }\r\n this.valueHexView = inputView.subarray(inputOffset, inputOffset + inputLength);\r\n if (inputLength > 1)\r\n this.warnings.push(\"Boolean value encoded in more then 1 octet\");\r\n this.isHexOnly = true;\r\n pvutils.utilDecodeTC.call(this);\r\n this.blockLength = inputLength;\r\n return (inputOffset + inputLength);\r\n }\r\n toBER() {\r\n return this.valueHexView.slice();\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n value: this.value,\r\n };\r\n }\r\n}\r\nLocalBooleanValueBlock.NAME = \"BooleanValueBlock\";\n\nvar _a$s;\r\nclass Boolean extends BaseBlock {\r\n constructor(parameters = {}) {\r\n super(parameters, LocalBooleanValueBlock);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 1;\r\n }\r\n getValue() {\r\n return this.valueBlock.value;\r\n }\r\n setValue(value) {\r\n this.valueBlock.value = value;\r\n }\r\n onAsciiEncoding() {\r\n return `${this.constructor.NAME} : ${this.getValue}`;\r\n }\r\n}\r\n_a$s = Boolean;\r\n(() => {\r\n typeStore.Boolean = _a$s;\r\n})();\r\nBoolean.NAME = \"BOOLEAN\";\n\nclass LocalOctetStringValueBlock extends HexBlock(LocalConstructedValueBlock) {\r\n constructor({ isConstructed = false, ...parameters } = {}) {\r\n super(parameters);\r\n this.isConstructed = isConstructed;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n let resultOffset = 0;\r\n if (this.isConstructed) {\r\n this.isHexOnly = false;\r\n resultOffset = LocalConstructedValueBlock.prototype.fromBER.call(this, inputBuffer, inputOffset, inputLength);\r\n if (resultOffset === -1)\r\n return resultOffset;\r\n for (let i = 0; i < this.value.length; i++) {\r\n const currentBlockName = this.value[i].constructor.NAME;\r\n if (currentBlockName === END_OF_CONTENT_NAME) {\r\n if (this.isIndefiniteForm)\r\n break;\r\n else {\r\n this.error = \"EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only\";\r\n return -1;\r\n }\r\n }\r\n if (currentBlockName !== OCTET_STRING_NAME) {\r\n this.error = \"OCTET STRING may consists of OCTET STRINGs only\";\r\n return -1;\r\n }\r\n }\r\n }\r\n else {\r\n this.isHexOnly = true;\r\n resultOffset = super.fromBER(inputBuffer, inputOffset, inputLength);\r\n this.blockLength = inputLength;\r\n }\r\n return resultOffset;\r\n }\r\n toBER(sizeOnly, writer) {\r\n if (this.isConstructed)\r\n return LocalConstructedValueBlock.prototype.toBER.call(this, sizeOnly, writer);\r\n return sizeOnly\r\n ? new ArrayBuffer(this.valueHexView.byteLength)\r\n : this.valueHexView.slice().buffer;\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n isConstructed: this.isConstructed,\r\n };\r\n }\r\n}\r\nLocalOctetStringValueBlock.NAME = \"OctetStringValueBlock\";\n\nvar _a$r;\r\nclass OctetString extends BaseBlock {\r\n constructor({ idBlock = {}, lenBlock = {}, ...parameters } = {}) {\r\n var _b, _c;\r\n (_b = parameters.isConstructed) !== null && _b !== void 0 ? _b : (parameters.isConstructed = !!((_c = parameters.value) === null || _c === void 0 ? void 0 : _c.length));\r\n super({\r\n idBlock: {\r\n isConstructed: parameters.isConstructed,\r\n ...idBlock,\r\n },\r\n lenBlock: {\r\n ...lenBlock,\r\n isIndefiniteForm: !!parameters.isIndefiniteForm,\r\n },\r\n ...parameters,\r\n }, LocalOctetStringValueBlock);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 4;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n this.valueBlock.isConstructed = this.idBlock.isConstructed;\r\n this.valueBlock.isIndefiniteForm = this.lenBlock.isIndefiniteForm;\r\n if (inputLength === 0) {\r\n if (this.idBlock.error.length === 0)\r\n this.blockLength += this.idBlock.blockLength;\r\n if (this.lenBlock.error.length === 0)\r\n this.blockLength += this.lenBlock.blockLength;\r\n return inputOffset;\r\n }\r\n if (!this.valueBlock.isConstructed) {\r\n const view = inputBuffer instanceof ArrayBuffer ? new Uint8Array(inputBuffer) : inputBuffer;\r\n const buf = view.subarray(inputOffset, inputOffset + inputLength);\r\n try {\r\n if (buf.byteLength) {\r\n const asn = localFromBER(buf, 0, buf.byteLength);\r\n if (asn.offset !== -1 && asn.offset === inputLength) {\r\n this.valueBlock.value = [asn.result];\r\n }\r\n }\r\n }\r\n catch (e) {\r\n }\r\n }\r\n return super.fromBER(inputBuffer, inputOffset, inputLength);\r\n }\r\n onAsciiEncoding() {\r\n if (this.valueBlock.isConstructed || (this.valueBlock.value && this.valueBlock.value.length)) {\r\n return Constructed.prototype.onAsciiEncoding.call(this);\r\n }\r\n return `${this.constructor.NAME} : ${pvtsutils.Convert.ToHex(this.valueBlock.valueHexView)}`;\r\n }\r\n getValue() {\r\n if (!this.idBlock.isConstructed) {\r\n return this.valueBlock.valueHexView.slice().buffer;\r\n }\r\n const array = [];\r\n for (const content of this.valueBlock.value) {\r\n if (content instanceof OctetString) {\r\n array.push(content.valueBlock.valueHexView);\r\n }\r\n }\r\n return pvtsutils.BufferSourceConverter.concat(array);\r\n }\r\n}\r\n_a$r = OctetString;\r\n(() => {\r\n typeStore.OctetString = _a$r;\r\n})();\r\nOctetString.NAME = OCTET_STRING_NAME;\n\nclass LocalBitStringValueBlock extends HexBlock(LocalConstructedValueBlock) {\r\n constructor({ unusedBits = 0, isConstructed = false, ...parameters } = {}) {\r\n super(parameters);\r\n this.unusedBits = unusedBits;\r\n this.isConstructed = isConstructed;\r\n this.blockLength = this.valueHexView.byteLength;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n if (!inputLength) {\r\n return inputOffset;\r\n }\r\n let resultOffset = -1;\r\n if (this.isConstructed) {\r\n resultOffset = LocalConstructedValueBlock.prototype.fromBER.call(this, inputBuffer, inputOffset, inputLength);\r\n if (resultOffset === -1)\r\n return resultOffset;\r\n for (const value of this.value) {\r\n const currentBlockName = value.constructor.NAME;\r\n if (currentBlockName === END_OF_CONTENT_NAME) {\r\n if (this.isIndefiniteForm)\r\n break;\r\n else {\r\n this.error = \"EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only\";\r\n return -1;\r\n }\r\n }\r\n if (currentBlockName !== BIT_STRING_NAME) {\r\n this.error = \"BIT STRING may consists of BIT STRINGs only\";\r\n return -1;\r\n }\r\n const valueBlock = value.valueBlock;\r\n if ((this.unusedBits > 0) && (valueBlock.unusedBits > 0)) {\r\n this.error = \"Using of \\\"unused bits\\\" inside constructive BIT STRING allowed for least one only\";\r\n return -1;\r\n }\r\n this.unusedBits = valueBlock.unusedBits;\r\n }\r\n return resultOffset;\r\n }\r\n const inputView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\r\n if (!checkBufferParams(this, inputView, inputOffset, inputLength)) {\r\n return -1;\r\n }\r\n const intBuffer = inputView.subarray(inputOffset, inputOffset + inputLength);\r\n this.unusedBits = intBuffer[0];\r\n if (this.unusedBits > 7) {\r\n this.error = \"Unused bits for BitString must be in range 0-7\";\r\n return -1;\r\n }\r\n if (!this.unusedBits) {\r\n const buf = intBuffer.subarray(1);\r\n try {\r\n if (buf.byteLength) {\r\n const asn = localFromBER(buf, 0, buf.byteLength);\r\n if (asn.offset !== -1 && asn.offset === (inputLength - 1)) {\r\n this.value = [asn.result];\r\n }\r\n }\r\n }\r\n catch (e) {\r\n }\r\n }\r\n this.valueHexView = intBuffer.subarray(1);\r\n this.blockLength = intBuffer.length;\r\n return (inputOffset + inputLength);\r\n }\r\n toBER(sizeOnly, writer) {\r\n if (this.isConstructed) {\r\n return LocalConstructedValueBlock.prototype.toBER.call(this, sizeOnly, writer);\r\n }\r\n if (sizeOnly) {\r\n return new ArrayBuffer(this.valueHexView.byteLength + 1);\r\n }\r\n if (!this.valueHexView.byteLength) {\r\n return EMPTY_BUFFER;\r\n }\r\n const retView = new Uint8Array(this.valueHexView.length + 1);\r\n retView[0] = this.unusedBits;\r\n retView.set(this.valueHexView, 1);\r\n return retView.buffer;\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n unusedBits: this.unusedBits,\r\n isConstructed: this.isConstructed,\r\n };\r\n }\r\n}\r\nLocalBitStringValueBlock.NAME = \"BitStringValueBlock\";\n\nvar _a$q;\r\nclass BitString extends BaseBlock {\r\n constructor({ idBlock = {}, lenBlock = {}, ...parameters } = {}) {\r\n var _b, _c;\r\n (_b = parameters.isConstructed) !== null && _b !== void 0 ? _b : (parameters.isConstructed = !!((_c = parameters.value) === null || _c === void 0 ? void 0 : _c.length));\r\n super({\r\n idBlock: {\r\n isConstructed: parameters.isConstructed,\r\n ...idBlock,\r\n },\r\n lenBlock: {\r\n ...lenBlock,\r\n isIndefiniteForm: !!parameters.isIndefiniteForm,\r\n },\r\n ...parameters,\r\n }, LocalBitStringValueBlock);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 3;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n this.valueBlock.isConstructed = this.idBlock.isConstructed;\r\n this.valueBlock.isIndefiniteForm = this.lenBlock.isIndefiniteForm;\r\n return super.fromBER(inputBuffer, inputOffset, inputLength);\r\n }\r\n onAsciiEncoding() {\r\n if (this.valueBlock.isConstructed || (this.valueBlock.value && this.valueBlock.value.length)) {\r\n return Constructed.prototype.onAsciiEncoding.call(this);\r\n }\r\n else {\r\n const bits = [];\r\n const valueHex = this.valueBlock.valueHexView;\r\n for (const byte of valueHex) {\r\n bits.push(byte.toString(2).padStart(8, \"0\"));\r\n }\r\n const bitsStr = bits.join(\"\");\r\n return `${this.constructor.NAME} : ${bitsStr.substring(0, bitsStr.length - this.valueBlock.unusedBits)}`;\r\n }\r\n }\r\n}\r\n_a$q = BitString;\r\n(() => {\r\n typeStore.BitString = _a$q;\r\n})();\r\nBitString.NAME = BIT_STRING_NAME;\n\nvar _a$p;\r\nfunction viewAdd(first, second) {\r\n const c = new Uint8Array([0]);\r\n const firstView = new Uint8Array(first);\r\n const secondView = new Uint8Array(second);\r\n let firstViewCopy = firstView.slice(0);\r\n const firstViewCopyLength = firstViewCopy.length - 1;\r\n const secondViewCopy = secondView.slice(0);\r\n const secondViewCopyLength = secondViewCopy.length - 1;\r\n let value = 0;\r\n const max = (secondViewCopyLength < firstViewCopyLength) ? firstViewCopyLength : secondViewCopyLength;\r\n let counter = 0;\r\n for (let i = max; i >= 0; i--, counter++) {\r\n switch (true) {\r\n case (counter < secondViewCopy.length):\r\n value = firstViewCopy[firstViewCopyLength - counter] + secondViewCopy[secondViewCopyLength - counter] + c[0];\r\n break;\r\n default:\r\n value = firstViewCopy[firstViewCopyLength - counter] + c[0];\r\n }\r\n c[0] = value / 10;\r\n switch (true) {\r\n case (counter >= firstViewCopy.length):\r\n firstViewCopy = pvutils.utilConcatView(new Uint8Array([value % 10]), firstViewCopy);\r\n break;\r\n default:\r\n firstViewCopy[firstViewCopyLength - counter] = value % 10;\r\n }\r\n }\r\n if (c[0] > 0)\r\n firstViewCopy = pvutils.utilConcatView(c, firstViewCopy);\r\n return firstViewCopy;\r\n}\r\nfunction power2(n) {\r\n if (n >= powers2.length) {\r\n for (let p = powers2.length; p <= n; p++) {\r\n const c = new Uint8Array([0]);\r\n let digits = (powers2[p - 1]).slice(0);\r\n for (let i = (digits.length - 1); i >= 0; i--) {\r\n const newValue = new Uint8Array([(digits[i] << 1) + c[0]]);\r\n c[0] = newValue[0] / 10;\r\n digits[i] = newValue[0] % 10;\r\n }\r\n if (c[0] > 0)\r\n digits = pvutils.utilConcatView(c, digits);\r\n powers2.push(digits);\r\n }\r\n }\r\n return powers2[n];\r\n}\r\nfunction viewSub(first, second) {\r\n let b = 0;\r\n const firstView = new Uint8Array(first);\r\n const secondView = new Uint8Array(second);\r\n const firstViewCopy = firstView.slice(0);\r\n const firstViewCopyLength = firstViewCopy.length - 1;\r\n const secondViewCopy = secondView.slice(0);\r\n const secondViewCopyLength = secondViewCopy.length - 1;\r\n let value;\r\n let counter = 0;\r\n for (let i = secondViewCopyLength; i >= 0; i--, counter++) {\r\n value = firstViewCopy[firstViewCopyLength - counter] - secondViewCopy[secondViewCopyLength - counter] - b;\r\n switch (true) {\r\n case (value < 0):\r\n b = 1;\r\n firstViewCopy[firstViewCopyLength - counter] = value + 10;\r\n break;\r\n default:\r\n b = 0;\r\n firstViewCopy[firstViewCopyLength - counter] = value;\r\n }\r\n }\r\n if (b > 0) {\r\n for (let i = (firstViewCopyLength - secondViewCopyLength + 1); i >= 0; i--, counter++) {\r\n value = firstViewCopy[firstViewCopyLength - counter] - b;\r\n if (value < 0) {\r\n b = 1;\r\n firstViewCopy[firstViewCopyLength - counter] = value + 10;\r\n }\r\n else {\r\n b = 0;\r\n firstViewCopy[firstViewCopyLength - counter] = value;\r\n break;\r\n }\r\n }\r\n }\r\n return firstViewCopy.slice();\r\n}\r\nclass LocalIntegerValueBlock extends HexBlock(ValueBlock) {\r\n constructor({ value, ...parameters } = {}) {\r\n super(parameters);\r\n this._valueDec = 0;\r\n if (parameters.valueHex) {\r\n this.setValueHex();\r\n }\r\n if (value !== undefined) {\r\n this.valueDec = value;\r\n }\r\n }\r\n setValueHex() {\r\n if (this.valueHexView.length >= 4) {\r\n this.warnings.push(\"Too big Integer for decoding, hex only\");\r\n this.isHexOnly = true;\r\n this._valueDec = 0;\r\n }\r\n else {\r\n this.isHexOnly = false;\r\n if (this.valueHexView.length > 0) {\r\n this._valueDec = pvutils.utilDecodeTC.call(this);\r\n }\r\n }\r\n }\r\n set valueDec(v) {\r\n this._valueDec = v;\r\n this.isHexOnly = false;\r\n this.valueHexView = new Uint8Array(pvutils.utilEncodeTC(v));\r\n }\r\n get valueDec() {\r\n return this._valueDec;\r\n }\r\n fromDER(inputBuffer, inputOffset, inputLength, expectedLength = 0) {\r\n const offset = this.fromBER(inputBuffer, inputOffset, inputLength);\r\n if (offset === -1)\r\n return offset;\r\n const view = this.valueHexView;\r\n if ((view[0] === 0x00) && ((view[1] & 0x80) !== 0)) {\r\n this.valueHexView = view.subarray(1);\r\n }\r\n else {\r\n if (expectedLength !== 0) {\r\n if (view.length < expectedLength) {\r\n if ((expectedLength - view.length) > 1)\r\n expectedLength = view.length + 1;\r\n this.valueHexView = view.subarray(expectedLength - view.length);\r\n }\r\n }\r\n }\r\n return offset;\r\n }\r\n toDER(sizeOnly = false) {\r\n const view = this.valueHexView;\r\n switch (true) {\r\n case ((view[0] & 0x80) !== 0):\r\n {\r\n const updatedView = new Uint8Array(this.valueHexView.length + 1);\r\n updatedView[0] = 0x00;\r\n updatedView.set(view, 1);\r\n this.valueHexView = updatedView;\r\n }\r\n break;\r\n case ((view[0] === 0x00) && ((view[1] & 0x80) === 0)):\r\n {\r\n this.valueHexView = this.valueHexView.subarray(1);\r\n }\r\n break;\r\n }\r\n return this.toBER(sizeOnly);\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n const resultOffset = super.fromBER(inputBuffer, inputOffset, inputLength);\r\n if (resultOffset === -1) {\r\n return resultOffset;\r\n }\r\n this.setValueHex();\r\n return resultOffset;\r\n }\r\n toBER(sizeOnly) {\r\n return sizeOnly\r\n ? new ArrayBuffer(this.valueHexView.length)\r\n : this.valueHexView.slice().buffer;\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n valueDec: this.valueDec,\r\n };\r\n }\r\n toString() {\r\n const firstBit = (this.valueHexView.length * 8) - 1;\r\n let digits = new Uint8Array((this.valueHexView.length * 8) / 3);\r\n let bitNumber = 0;\r\n let currentByte;\r\n const asn1View = this.valueHexView;\r\n let result = \"\";\r\n let flag = false;\r\n for (let byteNumber = (asn1View.byteLength - 1); byteNumber >= 0; byteNumber--) {\r\n currentByte = asn1View[byteNumber];\r\n for (let i = 0; i < 8; i++) {\r\n if ((currentByte & 1) === 1) {\r\n switch (bitNumber) {\r\n case firstBit:\r\n digits = viewSub(power2(bitNumber), digits);\r\n result = \"-\";\r\n break;\r\n default:\r\n digits = viewAdd(digits, power2(bitNumber));\r\n }\r\n }\r\n bitNumber++;\r\n currentByte >>= 1;\r\n }\r\n }\r\n for (let i = 0; i < digits.length; i++) {\r\n if (digits[i])\r\n flag = true;\r\n if (flag)\r\n result += digitsString.charAt(digits[i]);\r\n }\r\n if (flag === false)\r\n result += digitsString.charAt(0);\r\n return result;\r\n }\r\n}\r\n_a$p = LocalIntegerValueBlock;\r\nLocalIntegerValueBlock.NAME = \"IntegerValueBlock\";\r\n(() => {\r\n Object.defineProperty(_a$p.prototype, \"valueHex\", {\r\n set: function (v) {\r\n this.valueHexView = new Uint8Array(v);\r\n this.setValueHex();\r\n },\r\n get: function () {\r\n return this.valueHexView.slice().buffer;\r\n },\r\n });\r\n})();\n\nvar _a$o;\r\nclass Integer extends BaseBlock {\r\n constructor(parameters = {}) {\r\n super(parameters, LocalIntegerValueBlock);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 2;\r\n }\r\n toBigInt() {\r\n assertBigInt();\r\n return BigInt(this.valueBlock.toString());\r\n }\r\n static fromBigInt(value) {\r\n assertBigInt();\r\n const bigIntValue = BigInt(value);\r\n const writer = new ViewWriter();\r\n const hex = bigIntValue.toString(16).replace(/^-/, \"\");\r\n const view = new Uint8Array(pvtsutils.Convert.FromHex(hex));\r\n if (bigIntValue < 0) {\r\n const first = new Uint8Array(view.length + (view[0] & 0x80 ? 1 : 0));\r\n first[0] |= 0x80;\r\n const firstInt = BigInt(`0x${pvtsutils.Convert.ToHex(first)}`);\r\n const secondInt = firstInt + bigIntValue;\r\n const second = pvtsutils.BufferSourceConverter.toUint8Array(pvtsutils.Convert.FromHex(secondInt.toString(16)));\r\n second[0] |= 0x80;\r\n writer.write(second);\r\n }\r\n else {\r\n if (view[0] & 0x80) {\r\n writer.write(new Uint8Array([0]));\r\n }\r\n writer.write(view);\r\n }\r\n const res = new Integer({\r\n valueHex: writer.final(),\r\n });\r\n return res;\r\n }\r\n convertToDER() {\r\n const integer = new Integer({ valueHex: this.valueBlock.valueHexView });\r\n integer.valueBlock.toDER();\r\n return integer;\r\n }\r\n convertFromDER() {\r\n return new Integer({\r\n valueHex: this.valueBlock.valueHexView[0] === 0\r\n ? this.valueBlock.valueHexView.subarray(1)\r\n : this.valueBlock.valueHexView,\r\n });\r\n }\r\n onAsciiEncoding() {\r\n return `${this.constructor.NAME} : ${this.valueBlock.toString()}`;\r\n }\r\n}\r\n_a$o = Integer;\r\n(() => {\r\n typeStore.Integer = _a$o;\r\n})();\r\nInteger.NAME = \"INTEGER\";\n\nvar _a$n;\r\nclass Enumerated extends Integer {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 10;\r\n }\r\n}\r\n_a$n = Enumerated;\r\n(() => {\r\n typeStore.Enumerated = _a$n;\r\n})();\r\nEnumerated.NAME = \"ENUMERATED\";\n\nclass LocalSidValueBlock extends HexBlock(ValueBlock) {\r\n constructor({ valueDec = -1, isFirstSid = false, ...parameters } = {}) {\r\n super(parameters);\r\n this.valueDec = valueDec;\r\n this.isFirstSid = isFirstSid;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n if (!inputLength) {\r\n return inputOffset;\r\n }\r\n const inputView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\r\n if (!checkBufferParams(this, inputView, inputOffset, inputLength)) {\r\n return -1;\r\n }\r\n const intBuffer = inputView.subarray(inputOffset, inputOffset + inputLength);\r\n this.valueHexView = new Uint8Array(inputLength);\r\n for (let i = 0; i < inputLength; i++) {\r\n this.valueHexView[i] = intBuffer[i] & 0x7F;\r\n this.blockLength++;\r\n if ((intBuffer[i] & 0x80) === 0x00)\r\n break;\r\n }\r\n const tempView = new Uint8Array(this.blockLength);\r\n for (let i = 0; i < this.blockLength; i++) {\r\n tempView[i] = this.valueHexView[i];\r\n }\r\n this.valueHexView = tempView;\r\n if ((intBuffer[this.blockLength - 1] & 0x80) !== 0x00) {\r\n this.error = \"End of input reached before message was fully decoded\";\r\n return -1;\r\n }\r\n if (this.valueHexView[0] === 0x00)\r\n this.warnings.push(\"Needlessly long format of SID encoding\");\r\n if (this.blockLength <= 8)\r\n this.valueDec = pvutils.utilFromBase(this.valueHexView, 7);\r\n else {\r\n this.isHexOnly = true;\r\n this.warnings.push(\"Too big SID for decoding, hex only\");\r\n }\r\n return (inputOffset + this.blockLength);\r\n }\r\n set valueBigInt(value) {\r\n assertBigInt();\r\n let bits = BigInt(value).toString(2);\r\n while (bits.length % 7) {\r\n bits = \"0\" + bits;\r\n }\r\n const bytes = new Uint8Array(bits.length / 7);\r\n for (let i = 0; i < bytes.length; i++) {\r\n bytes[i] = parseInt(bits.slice(i * 7, i * 7 + 7), 2) + (i + 1 < bytes.length ? 0x80 : 0);\r\n }\r\n this.fromBER(bytes.buffer, 0, bytes.length);\r\n }\r\n toBER(sizeOnly) {\r\n if (this.isHexOnly) {\r\n if (sizeOnly)\r\n return (new ArrayBuffer(this.valueHexView.byteLength));\r\n const curView = this.valueHexView;\r\n const retView = new Uint8Array(this.blockLength);\r\n for (let i = 0; i < (this.blockLength - 1); i++)\r\n retView[i] = curView[i] | 0x80;\r\n retView[this.blockLength - 1] = curView[this.blockLength - 1];\r\n return retView.buffer;\r\n }\r\n const encodedBuf = pvutils.utilToBase(this.valueDec, 7);\r\n if (encodedBuf.byteLength === 0) {\r\n this.error = \"Error during encoding SID value\";\r\n return EMPTY_BUFFER;\r\n }\r\n const retView = new Uint8Array(encodedBuf.byteLength);\r\n if (!sizeOnly) {\r\n const encodedView = new Uint8Array(encodedBuf);\r\n const len = encodedBuf.byteLength - 1;\r\n for (let i = 0; i < len; i++)\r\n retView[i] = encodedView[i] | 0x80;\r\n retView[len] = encodedView[len];\r\n }\r\n return retView;\r\n }\r\n toString() {\r\n let result = \"\";\r\n if (this.isHexOnly)\r\n result = pvtsutils.Convert.ToHex(this.valueHexView);\r\n else {\r\n if (this.isFirstSid) {\r\n let sidValue = this.valueDec;\r\n if (this.valueDec <= 39)\r\n result = \"0.\";\r\n else {\r\n if (this.valueDec <= 79) {\r\n result = \"1.\";\r\n sidValue -= 40;\r\n }\r\n else {\r\n result = \"2.\";\r\n sidValue -= 80;\r\n }\r\n }\r\n result += sidValue.toString();\r\n }\r\n else\r\n result = this.valueDec.toString();\r\n }\r\n return result;\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n valueDec: this.valueDec,\r\n isFirstSid: this.isFirstSid,\r\n };\r\n }\r\n}\r\nLocalSidValueBlock.NAME = \"sidBlock\";\n\nclass LocalObjectIdentifierValueBlock extends ValueBlock {\r\n constructor({ value = EMPTY_STRING, ...parameters } = {}) {\r\n super(parameters);\r\n this.value = [];\r\n if (value) {\r\n this.fromString(value);\r\n }\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n let resultOffset = inputOffset;\r\n while (inputLength > 0) {\r\n const sidBlock = new LocalSidValueBlock();\r\n resultOffset = sidBlock.fromBER(inputBuffer, resultOffset, inputLength);\r\n if (resultOffset === -1) {\r\n this.blockLength = 0;\r\n this.error = sidBlock.error;\r\n return resultOffset;\r\n }\r\n if (this.value.length === 0)\r\n sidBlock.isFirstSid = true;\r\n this.blockLength += sidBlock.blockLength;\r\n inputLength -= sidBlock.blockLength;\r\n this.value.push(sidBlock);\r\n }\r\n return resultOffset;\r\n }\r\n toBER(sizeOnly) {\r\n const retBuffers = [];\r\n for (let i = 0; i < this.value.length; i++) {\r\n const valueBuf = this.value[i].toBER(sizeOnly);\r\n if (valueBuf.byteLength === 0) {\r\n this.error = this.value[i].error;\r\n return EMPTY_BUFFER;\r\n }\r\n retBuffers.push(valueBuf);\r\n }\r\n return concat(retBuffers);\r\n }\r\n fromString(string) {\r\n this.value = [];\r\n let pos1 = 0;\r\n let pos2 = 0;\r\n let sid = \"\";\r\n let flag = false;\r\n do {\r\n pos2 = string.indexOf(\".\", pos1);\r\n if (pos2 === -1)\r\n sid = string.substring(pos1);\r\n else\r\n sid = string.substring(pos1, pos2);\r\n pos1 = pos2 + 1;\r\n if (flag) {\r\n const sidBlock = this.value[0];\r\n let plus = 0;\r\n switch (sidBlock.valueDec) {\r\n case 0:\r\n break;\r\n case 1:\r\n plus = 40;\r\n break;\r\n case 2:\r\n plus = 80;\r\n break;\r\n default:\r\n this.value = [];\r\n return;\r\n }\r\n const parsedSID = parseInt(sid, 10);\r\n if (isNaN(parsedSID))\r\n return;\r\n sidBlock.valueDec = parsedSID + plus;\r\n flag = false;\r\n }\r\n else {\r\n const sidBlock = new LocalSidValueBlock();\r\n if (sid > Number.MAX_SAFE_INTEGER) {\r\n assertBigInt();\r\n const sidValue = BigInt(sid);\r\n sidBlock.valueBigInt = sidValue;\r\n }\r\n else {\r\n sidBlock.valueDec = parseInt(sid, 10);\r\n if (isNaN(sidBlock.valueDec))\r\n return;\r\n }\r\n if (!this.value.length) {\r\n sidBlock.isFirstSid = true;\r\n flag = true;\r\n }\r\n this.value.push(sidBlock);\r\n }\r\n } while (pos2 !== -1);\r\n }\r\n toString() {\r\n let result = \"\";\r\n let isHexOnly = false;\r\n for (let i = 0; i < this.value.length; i++) {\r\n isHexOnly = this.value[i].isHexOnly;\r\n let sidStr = this.value[i].toString();\r\n if (i !== 0)\r\n result = `${result}.`;\r\n if (isHexOnly) {\r\n sidStr = `{${sidStr}}`;\r\n if (this.value[i].isFirstSid)\r\n result = `2.{${sidStr} - 80}`;\r\n else\r\n result += sidStr;\r\n }\r\n else\r\n result += sidStr;\r\n }\r\n return result;\r\n }\r\n toJSON() {\r\n const object = {\r\n ...super.toJSON(),\r\n value: this.toString(),\r\n sidArray: [],\r\n };\r\n for (let i = 0; i < this.value.length; i++) {\r\n object.sidArray.push(this.value[i].toJSON());\r\n }\r\n return object;\r\n }\r\n}\r\nLocalObjectIdentifierValueBlock.NAME = \"ObjectIdentifierValueBlock\";\n\nvar _a$m;\r\nclass ObjectIdentifier extends BaseBlock {\r\n constructor(parameters = {}) {\r\n super(parameters, LocalObjectIdentifierValueBlock);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 6;\r\n }\r\n getValue() {\r\n return this.valueBlock.toString();\r\n }\r\n setValue(value) {\r\n this.valueBlock.fromString(value);\r\n }\r\n onAsciiEncoding() {\r\n return `${this.constructor.NAME} : ${this.valueBlock.toString() || \"empty\"}`;\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n value: this.getValue(),\r\n };\r\n }\r\n}\r\n_a$m = ObjectIdentifier;\r\n(() => {\r\n typeStore.ObjectIdentifier = _a$m;\r\n})();\r\nObjectIdentifier.NAME = \"OBJECT IDENTIFIER\";\n\nclass LocalRelativeSidValueBlock extends HexBlock(LocalBaseBlock) {\r\n constructor({ valueDec = 0, ...parameters } = {}) {\r\n super(parameters);\r\n this.valueDec = valueDec;\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n if (inputLength === 0)\r\n return inputOffset;\r\n const inputView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\r\n if (!checkBufferParams(this, inputView, inputOffset, inputLength))\r\n return -1;\r\n const intBuffer = inputView.subarray(inputOffset, inputOffset + inputLength);\r\n this.valueHexView = new Uint8Array(inputLength);\r\n for (let i = 0; i < inputLength; i++) {\r\n this.valueHexView[i] = intBuffer[i] & 0x7F;\r\n this.blockLength++;\r\n if ((intBuffer[i] & 0x80) === 0x00)\r\n break;\r\n }\r\n const tempView = new Uint8Array(this.blockLength);\r\n for (let i = 0; i < this.blockLength; i++)\r\n tempView[i] = this.valueHexView[i];\r\n this.valueHexView = tempView;\r\n if ((intBuffer[this.blockLength - 1] & 0x80) !== 0x00) {\r\n this.error = \"End of input reached before message was fully decoded\";\r\n return -1;\r\n }\r\n if (this.valueHexView[0] === 0x00)\r\n this.warnings.push(\"Needlessly long format of SID encoding\");\r\n if (this.blockLength <= 8)\r\n this.valueDec = pvutils.utilFromBase(this.valueHexView, 7);\r\n else {\r\n this.isHexOnly = true;\r\n this.warnings.push(\"Too big SID for decoding, hex only\");\r\n }\r\n return (inputOffset + this.blockLength);\r\n }\r\n toBER(sizeOnly) {\r\n if (this.isHexOnly) {\r\n if (sizeOnly)\r\n return (new ArrayBuffer(this.valueHexView.byteLength));\r\n const curView = this.valueHexView;\r\n const retView = new Uint8Array(this.blockLength);\r\n for (let i = 0; i < (this.blockLength - 1); i++)\r\n retView[i] = curView[i] | 0x80;\r\n retView[this.blockLength - 1] = curView[this.blockLength - 1];\r\n return retView.buffer;\r\n }\r\n const encodedBuf = pvutils.utilToBase(this.valueDec, 7);\r\n if (encodedBuf.byteLength === 0) {\r\n this.error = \"Error during encoding SID value\";\r\n return EMPTY_BUFFER;\r\n }\r\n const retView = new Uint8Array(encodedBuf.byteLength);\r\n if (!sizeOnly) {\r\n const encodedView = new Uint8Array(encodedBuf);\r\n const len = encodedBuf.byteLength - 1;\r\n for (let i = 0; i < len; i++)\r\n retView[i] = encodedView[i] | 0x80;\r\n retView[len] = encodedView[len];\r\n }\r\n return retView.buffer;\r\n }\r\n toString() {\r\n let result = \"\";\r\n if (this.isHexOnly)\r\n result = pvtsutils.Convert.ToHex(this.valueHexView);\r\n else {\r\n result = this.valueDec.toString();\r\n }\r\n return result;\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n valueDec: this.valueDec,\r\n };\r\n }\r\n}\r\nLocalRelativeSidValueBlock.NAME = \"relativeSidBlock\";\n\nclass LocalRelativeObjectIdentifierValueBlock extends ValueBlock {\r\n constructor({ value = EMPTY_STRING, ...parameters } = {}) {\r\n super(parameters);\r\n this.value = [];\r\n if (value) {\r\n this.fromString(value);\r\n }\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n let resultOffset = inputOffset;\r\n while (inputLength > 0) {\r\n const sidBlock = new LocalRelativeSidValueBlock();\r\n resultOffset = sidBlock.fromBER(inputBuffer, resultOffset, inputLength);\r\n if (resultOffset === -1) {\r\n this.blockLength = 0;\r\n this.error = sidBlock.error;\r\n return resultOffset;\r\n }\r\n this.blockLength += sidBlock.blockLength;\r\n inputLength -= sidBlock.blockLength;\r\n this.value.push(sidBlock);\r\n }\r\n return resultOffset;\r\n }\r\n toBER(sizeOnly, writer) {\r\n const retBuffers = [];\r\n for (let i = 0; i < this.value.length; i++) {\r\n const valueBuf = this.value[i].toBER(sizeOnly);\r\n if (valueBuf.byteLength === 0) {\r\n this.error = this.value[i].error;\r\n return EMPTY_BUFFER;\r\n }\r\n retBuffers.push(valueBuf);\r\n }\r\n return concat(retBuffers);\r\n }\r\n fromString(string) {\r\n this.value = [];\r\n let pos1 = 0;\r\n let pos2 = 0;\r\n let sid = \"\";\r\n do {\r\n pos2 = string.indexOf(\".\", pos1);\r\n if (pos2 === -1)\r\n sid = string.substring(pos1);\r\n else\r\n sid = string.substring(pos1, pos2);\r\n pos1 = pos2 + 1;\r\n const sidBlock = new LocalRelativeSidValueBlock();\r\n sidBlock.valueDec = parseInt(sid, 10);\r\n if (isNaN(sidBlock.valueDec))\r\n return true;\r\n this.value.push(sidBlock);\r\n } while (pos2 !== -1);\r\n return true;\r\n }\r\n toString() {\r\n let result = \"\";\r\n let isHexOnly = false;\r\n for (let i = 0; i < this.value.length; i++) {\r\n isHexOnly = this.value[i].isHexOnly;\r\n let sidStr = this.value[i].toString();\r\n if (i !== 0)\r\n result = `${result}.`;\r\n if (isHexOnly) {\r\n sidStr = `{${sidStr}}`;\r\n result += sidStr;\r\n }\r\n else\r\n result += sidStr;\r\n }\r\n return result;\r\n }\r\n toJSON() {\r\n const object = {\r\n ...super.toJSON(),\r\n value: this.toString(),\r\n sidArray: [],\r\n };\r\n for (let i = 0; i < this.value.length; i++)\r\n object.sidArray.push(this.value[i].toJSON());\r\n return object;\r\n }\r\n}\r\nLocalRelativeObjectIdentifierValueBlock.NAME = \"RelativeObjectIdentifierValueBlock\";\n\nvar _a$l;\r\nclass RelativeObjectIdentifier extends BaseBlock {\r\n constructor(parameters = {}) {\r\n super(parameters, LocalRelativeObjectIdentifierValueBlock);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 13;\r\n }\r\n getValue() {\r\n return this.valueBlock.toString();\r\n }\r\n setValue(value) {\r\n this.valueBlock.fromString(value);\r\n }\r\n onAsciiEncoding() {\r\n return `${this.constructor.NAME} : ${this.valueBlock.toString() || \"empty\"}`;\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n value: this.getValue(),\r\n };\r\n }\r\n}\r\n_a$l = RelativeObjectIdentifier;\r\n(() => {\r\n typeStore.RelativeObjectIdentifier = _a$l;\r\n})();\r\nRelativeObjectIdentifier.NAME = \"RelativeObjectIdentifier\";\n\nvar _a$k;\r\nclass Sequence extends Constructed {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 16;\r\n }\r\n}\r\n_a$k = Sequence;\r\n(() => {\r\n typeStore.Sequence = _a$k;\r\n})();\r\nSequence.NAME = \"SEQUENCE\";\n\nvar _a$j;\r\nclass Set extends Constructed {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 17;\r\n }\r\n}\r\n_a$j = Set;\r\n(() => {\r\n typeStore.Set = _a$j;\r\n})();\r\nSet.NAME = \"SET\";\n\nclass LocalStringValueBlock extends HexBlock(ValueBlock) {\r\n constructor({ ...parameters } = {}) {\r\n super(parameters);\r\n this.isHexOnly = true;\r\n this.value = EMPTY_STRING;\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n value: this.value,\r\n };\r\n }\r\n}\r\nLocalStringValueBlock.NAME = \"StringValueBlock\";\n\nclass LocalSimpleStringValueBlock extends LocalStringValueBlock {\r\n}\r\nLocalSimpleStringValueBlock.NAME = \"SimpleStringValueBlock\";\n\nclass LocalSimpleStringBlock extends BaseStringBlock {\r\n constructor({ ...parameters } = {}) {\r\n super(parameters, LocalSimpleStringValueBlock);\r\n }\r\n fromBuffer(inputBuffer) {\r\n this.valueBlock.value = String.fromCharCode.apply(null, pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer));\r\n }\r\n fromString(inputString) {\r\n const strLen = inputString.length;\r\n const view = this.valueBlock.valueHexView = new Uint8Array(strLen);\r\n for (let i = 0; i < strLen; i++)\r\n view[i] = inputString.charCodeAt(i);\r\n this.valueBlock.value = inputString;\r\n }\r\n}\r\nLocalSimpleStringBlock.NAME = \"SIMPLE STRING\";\n\nclass LocalUtf8StringValueBlock extends LocalSimpleStringBlock {\r\n fromBuffer(inputBuffer) {\r\n this.valueBlock.valueHexView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\r\n try {\r\n this.valueBlock.value = pvtsutils.Convert.ToUtf8String(inputBuffer);\r\n }\r\n catch (ex) {\r\n this.warnings.push(`Error during \"decodeURIComponent\": ${ex}, using raw string`);\r\n this.valueBlock.value = pvtsutils.Convert.ToBinary(inputBuffer);\r\n }\r\n }\r\n fromString(inputString) {\r\n this.valueBlock.valueHexView = new Uint8Array(pvtsutils.Convert.FromUtf8String(inputString));\r\n this.valueBlock.value = inputString;\r\n }\r\n}\r\nLocalUtf8StringValueBlock.NAME = \"Utf8StringValueBlock\";\n\nvar _a$i;\r\nclass Utf8String extends LocalUtf8StringValueBlock {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 12;\r\n }\r\n}\r\n_a$i = Utf8String;\r\n(() => {\r\n typeStore.Utf8String = _a$i;\r\n})();\r\nUtf8String.NAME = \"UTF8String\";\n\nclass LocalBmpStringValueBlock extends LocalSimpleStringBlock {\r\n fromBuffer(inputBuffer) {\r\n this.valueBlock.value = pvtsutils.Convert.ToUtf16String(inputBuffer);\r\n this.valueBlock.valueHexView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer);\r\n }\r\n fromString(inputString) {\r\n this.valueBlock.value = inputString;\r\n this.valueBlock.valueHexView = new Uint8Array(pvtsutils.Convert.FromUtf16String(inputString));\r\n }\r\n}\r\nLocalBmpStringValueBlock.NAME = \"BmpStringValueBlock\";\n\nvar _a$h;\r\nclass BmpString extends LocalBmpStringValueBlock {\r\n constructor({ ...parameters } = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 30;\r\n }\r\n}\r\n_a$h = BmpString;\r\n(() => {\r\n typeStore.BmpString = _a$h;\r\n})();\r\nBmpString.NAME = \"BMPString\";\n\nclass LocalUniversalStringValueBlock extends LocalSimpleStringBlock {\r\n fromBuffer(inputBuffer) {\r\n const copyBuffer = ArrayBuffer.isView(inputBuffer) ? inputBuffer.slice().buffer : inputBuffer.slice(0);\r\n const valueView = new Uint8Array(copyBuffer);\r\n for (let i = 0; i < valueView.length; i += 4) {\r\n valueView[i] = valueView[i + 3];\r\n valueView[i + 1] = valueView[i + 2];\r\n valueView[i + 2] = 0x00;\r\n valueView[i + 3] = 0x00;\r\n }\r\n this.valueBlock.value = String.fromCharCode.apply(null, new Uint32Array(copyBuffer));\r\n }\r\n fromString(inputString) {\r\n const strLength = inputString.length;\r\n const valueHexView = this.valueBlock.valueHexView = new Uint8Array(strLength * 4);\r\n for (let i = 0; i < strLength; i++) {\r\n const codeBuf = pvutils.utilToBase(inputString.charCodeAt(i), 8);\r\n const codeView = new Uint8Array(codeBuf);\r\n if (codeView.length > 4)\r\n continue;\r\n const dif = 4 - codeView.length;\r\n for (let j = (codeView.length - 1); j >= 0; j--)\r\n valueHexView[i * 4 + j + dif] = codeView[j];\r\n }\r\n this.valueBlock.value = inputString;\r\n }\r\n}\r\nLocalUniversalStringValueBlock.NAME = \"UniversalStringValueBlock\";\n\nvar _a$g;\r\nclass UniversalString extends LocalUniversalStringValueBlock {\r\n constructor({ ...parameters } = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 28;\r\n }\r\n}\r\n_a$g = UniversalString;\r\n(() => {\r\n typeStore.UniversalString = _a$g;\r\n})();\r\nUniversalString.NAME = \"UniversalString\";\n\nvar _a$f;\r\nclass NumericString extends LocalSimpleStringBlock {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 18;\r\n }\r\n}\r\n_a$f = NumericString;\r\n(() => {\r\n typeStore.NumericString = _a$f;\r\n})();\r\nNumericString.NAME = \"NumericString\";\n\nvar _a$e;\r\nclass PrintableString extends LocalSimpleStringBlock {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 19;\r\n }\r\n}\r\n_a$e = PrintableString;\r\n(() => {\r\n typeStore.PrintableString = _a$e;\r\n})();\r\nPrintableString.NAME = \"PrintableString\";\n\nvar _a$d;\r\nclass TeletexString extends LocalSimpleStringBlock {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 20;\r\n }\r\n}\r\n_a$d = TeletexString;\r\n(() => {\r\n typeStore.TeletexString = _a$d;\r\n})();\r\nTeletexString.NAME = \"TeletexString\";\n\nvar _a$c;\r\nclass VideotexString extends LocalSimpleStringBlock {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 21;\r\n }\r\n}\r\n_a$c = VideotexString;\r\n(() => {\r\n typeStore.VideotexString = _a$c;\r\n})();\r\nVideotexString.NAME = \"VideotexString\";\n\nvar _a$b;\r\nclass IA5String extends LocalSimpleStringBlock {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 22;\r\n }\r\n}\r\n_a$b = IA5String;\r\n(() => {\r\n typeStore.IA5String = _a$b;\r\n})();\r\nIA5String.NAME = \"IA5String\";\n\nvar _a$a;\r\nclass GraphicString extends LocalSimpleStringBlock {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 25;\r\n }\r\n}\r\n_a$a = GraphicString;\r\n(() => {\r\n typeStore.GraphicString = _a$a;\r\n})();\r\nGraphicString.NAME = \"GraphicString\";\n\nvar _a$9;\r\nclass VisibleString extends LocalSimpleStringBlock {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 26;\r\n }\r\n}\r\n_a$9 = VisibleString;\r\n(() => {\r\n typeStore.VisibleString = _a$9;\r\n})();\r\nVisibleString.NAME = \"VisibleString\";\n\nvar _a$8;\r\nclass GeneralString extends LocalSimpleStringBlock {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 27;\r\n }\r\n}\r\n_a$8 = GeneralString;\r\n(() => {\r\n typeStore.GeneralString = _a$8;\r\n})();\r\nGeneralString.NAME = \"GeneralString\";\n\nvar _a$7;\r\nclass CharacterString extends LocalSimpleStringBlock {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 29;\r\n }\r\n}\r\n_a$7 = CharacterString;\r\n(() => {\r\n typeStore.CharacterString = _a$7;\r\n})();\r\nCharacterString.NAME = \"CharacterString\";\n\nvar _a$6;\r\nclass UTCTime extends VisibleString {\r\n constructor({ value, valueDate, ...parameters } = {}) {\r\n super(parameters);\r\n this.year = 0;\r\n this.month = 0;\r\n this.day = 0;\r\n this.hour = 0;\r\n this.minute = 0;\r\n this.second = 0;\r\n if (value) {\r\n this.fromString(value);\r\n this.valueBlock.valueHexView = new Uint8Array(value.length);\r\n for (let i = 0; i < value.length; i++)\r\n this.valueBlock.valueHexView[i] = value.charCodeAt(i);\r\n }\r\n if (valueDate) {\r\n this.fromDate(valueDate);\r\n this.valueBlock.valueHexView = new Uint8Array(this.toBuffer());\r\n }\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 23;\r\n }\r\n fromBuffer(inputBuffer) {\r\n this.fromString(String.fromCharCode.apply(null, pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer)));\r\n }\r\n toBuffer() {\r\n const str = this.toString();\r\n const buffer = new ArrayBuffer(str.length);\r\n const view = new Uint8Array(buffer);\r\n for (let i = 0; i < str.length; i++)\r\n view[i] = str.charCodeAt(i);\r\n return buffer;\r\n }\r\n fromDate(inputDate) {\r\n this.year = inputDate.getUTCFullYear();\r\n this.month = inputDate.getUTCMonth() + 1;\r\n this.day = inputDate.getUTCDate();\r\n this.hour = inputDate.getUTCHours();\r\n this.minute = inputDate.getUTCMinutes();\r\n this.second = inputDate.getUTCSeconds();\r\n }\r\n toDate() {\r\n return (new Date(Date.UTC(this.year, this.month - 1, this.day, this.hour, this.minute, this.second)));\r\n }\r\n fromString(inputString) {\r\n const parser = /(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})Z/ig;\r\n const parserArray = parser.exec(inputString);\r\n if (parserArray === null) {\r\n this.error = \"Wrong input string for conversion\";\r\n return;\r\n }\r\n const year = parseInt(parserArray[1], 10);\r\n if (year >= 50)\r\n this.year = 1900 + year;\r\n else\r\n this.year = 2000 + year;\r\n this.month = parseInt(parserArray[2], 10);\r\n this.day = parseInt(parserArray[3], 10);\r\n this.hour = parseInt(parserArray[4], 10);\r\n this.minute = parseInt(parserArray[5], 10);\r\n this.second = parseInt(parserArray[6], 10);\r\n }\r\n toString(encoding = \"iso\") {\r\n if (encoding === \"iso\") {\r\n const outputArray = new Array(7);\r\n outputArray[0] = pvutils.padNumber(((this.year < 2000) ? (this.year - 1900) : (this.year - 2000)), 2);\r\n outputArray[1] = pvutils.padNumber(this.month, 2);\r\n outputArray[2] = pvutils.padNumber(this.day, 2);\r\n outputArray[3] = pvutils.padNumber(this.hour, 2);\r\n outputArray[4] = pvutils.padNumber(this.minute, 2);\r\n outputArray[5] = pvutils.padNumber(this.second, 2);\r\n outputArray[6] = \"Z\";\r\n return outputArray.join(\"\");\r\n }\r\n return super.toString(encoding);\r\n }\r\n onAsciiEncoding() {\r\n return `${this.constructor.NAME} : ${this.toDate().toISOString()}`;\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n year: this.year,\r\n month: this.month,\r\n day: this.day,\r\n hour: this.hour,\r\n minute: this.minute,\r\n second: this.second,\r\n };\r\n }\r\n}\r\n_a$6 = UTCTime;\r\n(() => {\r\n typeStore.UTCTime = _a$6;\r\n})();\r\nUTCTime.NAME = \"UTCTime\";\n\nvar _a$5;\r\nclass GeneralizedTime extends UTCTime {\r\n constructor(parameters = {}) {\r\n var _b;\r\n super(parameters);\r\n (_b = this.millisecond) !== null && _b !== void 0 ? _b : (this.millisecond = 0);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 24;\r\n }\r\n fromDate(inputDate) {\r\n super.fromDate(inputDate);\r\n this.millisecond = inputDate.getUTCMilliseconds();\r\n }\r\n toDate() {\r\n return (new Date(Date.UTC(this.year, this.month - 1, this.day, this.hour, this.minute, this.second, this.millisecond)));\r\n }\r\n fromString(inputString) {\r\n let isUTC = false;\r\n let timeString = \"\";\r\n let dateTimeString = \"\";\r\n let fractionPart = 0;\r\n let parser;\r\n let hourDifference = 0;\r\n let minuteDifference = 0;\r\n if (inputString[inputString.length - 1] === \"Z\") {\r\n timeString = inputString.substring(0, inputString.length - 1);\r\n isUTC = true;\r\n }\r\n else {\r\n const number = new Number(inputString[inputString.length - 1]);\r\n if (isNaN(number.valueOf()))\r\n throw new Error(\"Wrong input string for conversion\");\r\n timeString = inputString;\r\n }\r\n if (isUTC) {\r\n if (timeString.indexOf(\"+\") !== -1)\r\n throw new Error(\"Wrong input string for conversion\");\r\n if (timeString.indexOf(\"-\") !== -1)\r\n throw new Error(\"Wrong input string for conversion\");\r\n }\r\n else {\r\n let multiplier = 1;\r\n let differencePosition = timeString.indexOf(\"+\");\r\n let differenceString = \"\";\r\n if (differencePosition === -1) {\r\n differencePosition = timeString.indexOf(\"-\");\r\n multiplier = -1;\r\n }\r\n if (differencePosition !== -1) {\r\n differenceString = timeString.substring(differencePosition + 1);\r\n timeString = timeString.substring(0, differencePosition);\r\n if ((differenceString.length !== 2) && (differenceString.length !== 4))\r\n throw new Error(\"Wrong input string for conversion\");\r\n let number = parseInt(differenceString.substring(0, 2), 10);\r\n if (isNaN(number.valueOf()))\r\n throw new Error(\"Wrong input string for conversion\");\r\n hourDifference = multiplier * number;\r\n if (differenceString.length === 4) {\r\n number = parseInt(differenceString.substring(2, 4), 10);\r\n if (isNaN(number.valueOf()))\r\n throw new Error(\"Wrong input string for conversion\");\r\n minuteDifference = multiplier * number;\r\n }\r\n }\r\n }\r\n let fractionPointPosition = timeString.indexOf(\".\");\r\n if (fractionPointPosition === -1)\r\n fractionPointPosition = timeString.indexOf(\",\");\r\n if (fractionPointPosition !== -1) {\r\n const fractionPartCheck = new Number(`0${timeString.substring(fractionPointPosition)}`);\r\n if (isNaN(fractionPartCheck.valueOf()))\r\n throw new Error(\"Wrong input string for conversion\");\r\n fractionPart = fractionPartCheck.valueOf();\r\n dateTimeString = timeString.substring(0, fractionPointPosition);\r\n }\r\n else\r\n dateTimeString = timeString;\r\n switch (true) {\r\n case (dateTimeString.length === 8):\r\n parser = /(\\d{4})(\\d{2})(\\d{2})/ig;\r\n if (fractionPointPosition !== -1)\r\n throw new Error(\"Wrong input string for conversion\");\r\n break;\r\n case (dateTimeString.length === 10):\r\n parser = /(\\d{4})(\\d{2})(\\d{2})(\\d{2})/ig;\r\n if (fractionPointPosition !== -1) {\r\n let fractionResult = 60 * fractionPart;\r\n this.minute = Math.floor(fractionResult);\r\n fractionResult = 60 * (fractionResult - this.minute);\r\n this.second = Math.floor(fractionResult);\r\n fractionResult = 1000 * (fractionResult - this.second);\r\n this.millisecond = Math.floor(fractionResult);\r\n }\r\n break;\r\n case (dateTimeString.length === 12):\r\n parser = /(\\d{4})(\\d{2})(\\d{2})(\\d{2})(\\d{2})/ig;\r\n if (fractionPointPosition !== -1) {\r\n let fractionResult = 60 * fractionPart;\r\n this.second = Math.floor(fractionResult);\r\n fractionResult = 1000 * (fractionResult - this.second);\r\n this.millisecond = Math.floor(fractionResult);\r\n }\r\n break;\r\n case (dateTimeString.length === 14):\r\n parser = /(\\d{4})(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})/ig;\r\n if (fractionPointPosition !== -1) {\r\n const fractionResult = 1000 * fractionPart;\r\n this.millisecond = Math.floor(fractionResult);\r\n }\r\n break;\r\n default:\r\n throw new Error(\"Wrong input string for conversion\");\r\n }\r\n const parserArray = parser.exec(dateTimeString);\r\n if (parserArray === null)\r\n throw new Error(\"Wrong input string for conversion\");\r\n for (let j = 1; j < parserArray.length; j++) {\r\n switch (j) {\r\n case 1:\r\n this.year = parseInt(parserArray[j], 10);\r\n break;\r\n case 2:\r\n this.month = parseInt(parserArray[j], 10);\r\n break;\r\n case 3:\r\n this.day = parseInt(parserArray[j], 10);\r\n break;\r\n case 4:\r\n this.hour = parseInt(parserArray[j], 10) + hourDifference;\r\n break;\r\n case 5:\r\n this.minute = parseInt(parserArray[j], 10) + minuteDifference;\r\n break;\r\n case 6:\r\n this.second = parseInt(parserArray[j], 10);\r\n break;\r\n default:\r\n throw new Error(\"Wrong input string for conversion\");\r\n }\r\n }\r\n if (isUTC === false) {\r\n const tempDate = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\r\n this.year = tempDate.getUTCFullYear();\r\n this.month = tempDate.getUTCMonth();\r\n this.day = tempDate.getUTCDay();\r\n this.hour = tempDate.getUTCHours();\r\n this.minute = tempDate.getUTCMinutes();\r\n this.second = tempDate.getUTCSeconds();\r\n this.millisecond = tempDate.getUTCMilliseconds();\r\n }\r\n }\r\n toString(encoding = \"iso\") {\r\n if (encoding === \"iso\") {\r\n const outputArray = [];\r\n outputArray.push(pvutils.padNumber(this.year, 4));\r\n outputArray.push(pvutils.padNumber(this.month, 2));\r\n outputArray.push(pvutils.padNumber(this.day, 2));\r\n outputArray.push(pvutils.padNumber(this.hour, 2));\r\n outputArray.push(pvutils.padNumber(this.minute, 2));\r\n outputArray.push(pvutils.padNumber(this.second, 2));\r\n if (this.millisecond !== 0) {\r\n outputArray.push(\".\");\r\n outputArray.push(pvutils.padNumber(this.millisecond, 3));\r\n }\r\n outputArray.push(\"Z\");\r\n return outputArray.join(\"\");\r\n }\r\n return super.toString(encoding);\r\n }\r\n toJSON() {\r\n return {\r\n ...super.toJSON(),\r\n millisecond: this.millisecond,\r\n };\r\n }\r\n}\r\n_a$5 = GeneralizedTime;\r\n(() => {\r\n typeStore.GeneralizedTime = _a$5;\r\n})();\r\nGeneralizedTime.NAME = \"GeneralizedTime\";\n\nvar _a$4;\r\nclass DATE extends Utf8String {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 31;\r\n }\r\n}\r\n_a$4 = DATE;\r\n(() => {\r\n typeStore.DATE = _a$4;\r\n})();\r\nDATE.NAME = \"DATE\";\n\nvar _a$3;\r\nclass TimeOfDay extends Utf8String {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 32;\r\n }\r\n}\r\n_a$3 = TimeOfDay;\r\n(() => {\r\n typeStore.TimeOfDay = _a$3;\r\n})();\r\nTimeOfDay.NAME = \"TimeOfDay\";\n\nvar _a$2;\r\nclass DateTime extends Utf8String {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 33;\r\n }\r\n}\r\n_a$2 = DateTime;\r\n(() => {\r\n typeStore.DateTime = _a$2;\r\n})();\r\nDateTime.NAME = \"DateTime\";\n\nvar _a$1;\r\nclass Duration extends Utf8String {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 34;\r\n }\r\n}\r\n_a$1 = Duration;\r\n(() => {\r\n typeStore.Duration = _a$1;\r\n})();\r\nDuration.NAME = \"Duration\";\n\nvar _a;\r\nclass TIME extends Utf8String {\r\n constructor(parameters = {}) {\r\n super(parameters);\r\n this.idBlock.tagClass = 1;\r\n this.idBlock.tagNumber = 14;\r\n }\r\n}\r\n_a = TIME;\r\n(() => {\r\n typeStore.TIME = _a;\r\n})();\r\nTIME.NAME = \"TIME\";\n\nclass Any {\r\n constructor({ name = EMPTY_STRING, optional = false, } = {}) {\r\n this.name = name;\r\n this.optional = optional;\r\n }\r\n}\n\nclass Choice extends Any {\r\n constructor({ value = [], ...parameters } = {}) {\r\n super(parameters);\r\n this.value = value;\r\n }\r\n}\n\nclass Repeated extends Any {\r\n constructor({ value = new Any(), local = false, ...parameters } = {}) {\r\n super(parameters);\r\n this.value = value;\r\n this.local = local;\r\n }\r\n}\n\nclass RawData {\r\n constructor({ data = EMPTY_VIEW } = {}) {\r\n this.dataView = pvtsutils.BufferSourceConverter.toUint8Array(data);\r\n }\r\n get data() {\r\n return this.dataView.slice().buffer;\r\n }\r\n set data(value) {\r\n this.dataView = pvtsutils.BufferSourceConverter.toUint8Array(value);\r\n }\r\n fromBER(inputBuffer, inputOffset, inputLength) {\r\n const endLength = inputOffset + inputLength;\r\n this.dataView = pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer).subarray(inputOffset, endLength);\r\n return endLength;\r\n }\r\n toBER(sizeOnly) {\r\n return this.dataView.slice().buffer;\r\n }\r\n}\n\nfunction compareSchema(root, inputData, inputSchema) {\r\n if (inputSchema instanceof Choice) {\r\n for (let j = 0; j < inputSchema.value.length; j++) {\r\n const result = compareSchema(root, inputData, inputSchema.value[j]);\r\n if (result.verified) {\r\n return {\r\n verified: true,\r\n result: root\r\n };\r\n }\r\n }\r\n {\r\n const _result = {\r\n verified: false,\r\n result: {\r\n error: \"Wrong values for Choice type\"\r\n },\r\n };\r\n if (inputSchema.hasOwnProperty(NAME))\r\n _result.name = inputSchema.name;\r\n return _result;\r\n }\r\n }\r\n if (inputSchema instanceof Any) {\r\n if (inputSchema.hasOwnProperty(NAME))\r\n root[inputSchema.name] = inputData;\r\n return {\r\n verified: true,\r\n result: root\r\n };\r\n }\r\n if ((root instanceof Object) === false) {\r\n return {\r\n verified: false,\r\n result: { error: \"Wrong root object\" }\r\n };\r\n }\r\n if ((inputData instanceof Object) === false) {\r\n return {\r\n verified: false,\r\n result: { error: \"Wrong ASN.1 data\" }\r\n };\r\n }\r\n if ((inputSchema instanceof Object) === false) {\r\n return {\r\n verified: false,\r\n result: { error: \"Wrong ASN.1 schema\" }\r\n };\r\n }\r\n if ((ID_BLOCK in inputSchema) === false) {\r\n return {\r\n verified: false,\r\n result: { error: \"Wrong ASN.1 schema\" }\r\n };\r\n }\r\n if ((FROM_BER in inputSchema.idBlock) === false) {\r\n return {\r\n verified: false,\r\n result: { error: \"Wrong ASN.1 schema\" }\r\n };\r\n }\r\n if ((TO_BER in inputSchema.idBlock) === false) {\r\n return {\r\n verified: false,\r\n result: { error: \"Wrong ASN.1 schema\" }\r\n };\r\n }\r\n const encodedId = inputSchema.idBlock.toBER(false);\r\n if (encodedId.byteLength === 0) {\r\n return {\r\n verified: false,\r\n result: { error: \"Error encoding idBlock for ASN.1 schema\" }\r\n };\r\n }\r\n const decodedOffset = inputSchema.idBlock.fromBER(encodedId, 0, encodedId.byteLength);\r\n if (decodedOffset === -1) {\r\n return {\r\n verified: false,\r\n result: { error: \"Error decoding idBlock for ASN.1 schema\" }\r\n };\r\n }\r\n if (inputSchema.idBlock.hasOwnProperty(TAG_CLASS) === false) {\r\n return {\r\n verified: false,\r\n result: { error: \"Wrong ASN.1 schema\" }\r\n };\r\n }\r\n if (inputSchema.idBlock.tagClass !== inputData.idBlock.tagClass) {\r\n return {\r\n verified: false,\r\n result: root\r\n };\r\n }\r\n if (inputSchema.idBlock.hasOwnProperty(TAG_NUMBER) === false) {\r\n return {\r\n verified: false,\r\n result: { error: \"Wrong ASN.1 schema\" }\r\n };\r\n }\r\n if (inputSchema.idBlock.tagNumber !== inputData.idBlock.tagNumber) {\r\n return {\r\n verified: false,\r\n result: root\r\n };\r\n }\r\n if (inputSchema.idBlock.hasOwnProperty(IS_CONSTRUCTED) === false) {\r\n return {\r\n verified: false,\r\n result: { error: \"Wrong ASN.1 schema\" }\r\n };\r\n }\r\n if (inputSchema.idBlock.isConstructed !== inputData.idBlock.isConstructed) {\r\n return {\r\n verified: false,\r\n result: root\r\n };\r\n }\r\n if (!(IS_HEX_ONLY in inputSchema.idBlock)) {\r\n return {\r\n verified: false,\r\n result: { error: \"Wrong ASN.1 schema\" }\r\n };\r\n }\r\n if (inputSchema.idBlock.isHexOnly !== inputData.idBlock.isHexOnly) {\r\n return {\r\n verified: false,\r\n result: root\r\n };\r\n }\r\n if (inputSchema.idBlock.isHexOnly) {\r\n if ((VALUE_HEX_VIEW in inputSchema.idBlock) === false) {\r\n return {\r\n verified: false,\r\n result: { error: \"Wrong ASN.1 schema\" }\r\n };\r\n }\r\n const schemaView = inputSchema.idBlock.valueHexView;\r\n const asn1View = inputData.idBlock.valueHexView;\r\n if (schemaView.length !== asn1View.length) {\r\n return {\r\n verified: false,\r\n result: root\r\n };\r\n }\r\n for (let i = 0; i < schemaView.length; i++) {\r\n if (schemaView[i] !== asn1View[1]) {\r\n return {\r\n verified: false,\r\n result: root\r\n };\r\n }\r\n }\r\n }\r\n if (inputSchema.name) {\r\n inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\r\n if (inputSchema.name)\r\n root[inputSchema.name] = inputData;\r\n }\r\n if (inputSchema instanceof typeStore.Constructed) {\r\n let admission = 0;\r\n let result = {\r\n verified: false,\r\n result: {\r\n error: \"Unknown error\",\r\n }\r\n };\r\n let maxLength = inputSchema.valueBlock.value.length;\r\n if (maxLength > 0) {\r\n if (inputSchema.valueBlock.value[0] instanceof Repeated) {\r\n maxLength = inputData.valueBlock.value.length;\r\n }\r\n }\r\n if (maxLength === 0) {\r\n return {\r\n verified: true,\r\n result: root\r\n };\r\n }\r\n if ((inputData.valueBlock.value.length === 0) &&\r\n (inputSchema.valueBlock.value.length !== 0)) {\r\n let _optional = true;\r\n for (let i = 0; i < inputSchema.valueBlock.value.length; i++)\r\n _optional = _optional && (inputSchema.valueBlock.value[i].optional || false);\r\n if (_optional) {\r\n return {\r\n verified: true,\r\n result: root\r\n };\r\n }\r\n if (inputSchema.name) {\r\n inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\r\n if (inputSchema.name)\r\n delete root[inputSchema.name];\r\n }\r\n root.error = \"Inconsistent object length\";\r\n return {\r\n verified: false,\r\n result: root\r\n };\r\n }\r\n for (let i = 0; i < maxLength; i++) {\r\n if ((i - admission) >= inputData.valueBlock.value.length) {\r\n if (inputSchema.valueBlock.value[i].optional === false) {\r\n const _result = {\r\n verified: false,\r\n result: root\r\n };\r\n root.error = \"Inconsistent length between ASN.1 data and schema\";\r\n if (inputSchema.name) {\r\n inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\r\n if (inputSchema.name) {\r\n delete root[inputSchema.name];\r\n _result.name = inputSchema.name;\r\n }\r\n }\r\n return _result;\r\n }\r\n }\r\n else {\r\n if (inputSchema.valueBlock.value[0] instanceof Repeated) {\r\n result = compareSchema(root, inputData.valueBlock.value[i], inputSchema.valueBlock.value[0].value);\r\n if (result.verified === false) {\r\n if (inputSchema.valueBlock.value[0].optional)\r\n admission++;\r\n else {\r\n if (inputSchema.name) {\r\n inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\r\n if (inputSchema.name)\r\n delete root[inputSchema.name];\r\n }\r\n return result;\r\n }\r\n }\r\n if ((NAME in inputSchema.valueBlock.value[0]) && (inputSchema.valueBlock.value[0].name.length > 0)) {\r\n let arrayRoot = {};\r\n if ((LOCAL in inputSchema.valueBlock.value[0]) && (inputSchema.valueBlock.value[0].local))\r\n arrayRoot = inputData;\r\n else\r\n arrayRoot = root;\r\n if (typeof arrayRoot[inputSchema.valueBlock.value[0].name] === \"undefined\")\r\n arrayRoot[inputSchema.valueBlock.value[0].name] = [];\r\n arrayRoot[inputSchema.valueBlock.value[0].name].push(inputData.valueBlock.value[i]);\r\n }\r\n }\r\n else {\r\n result = compareSchema(root, inputData.valueBlock.value[i - admission], inputSchema.valueBlock.value[i]);\r\n if (result.verified === false) {\r\n if (inputSchema.valueBlock.value[i].optional)\r\n admission++;\r\n else {\r\n if (inputSchema.name) {\r\n inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\r\n if (inputSchema.name)\r\n delete root[inputSchema.name];\r\n }\r\n return result;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (result.verified === false) {\r\n const _result = {\r\n verified: false,\r\n result: root\r\n };\r\n if (inputSchema.name) {\r\n inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\r\n if (inputSchema.name) {\r\n delete root[inputSchema.name];\r\n _result.name = inputSchema.name;\r\n }\r\n }\r\n return _result;\r\n }\r\n return {\r\n verified: true,\r\n result: root\r\n };\r\n }\r\n if (inputSchema.primitiveSchema &&\r\n (VALUE_HEX_VIEW in inputData.valueBlock)) {\r\n const asn1 = localFromBER(inputData.valueBlock.valueHexView);\r\n if (asn1.offset === -1) {\r\n const _result = {\r\n verified: false,\r\n result: asn1.result\r\n };\r\n if (inputSchema.name) {\r\n inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\r\n if (inputSchema.name) {\r\n delete root[inputSchema.name];\r\n _result.name = inputSchema.name;\r\n }\r\n }\r\n return _result;\r\n }\r\n return compareSchema(root, asn1.result, inputSchema.primitiveSchema);\r\n }\r\n return {\r\n verified: true,\r\n result: root\r\n };\r\n}\r\nfunction verifySchema(inputBuffer, inputSchema) {\r\n if ((inputSchema instanceof Object) === false) {\r\n return {\r\n verified: false,\r\n result: { error: \"Wrong ASN.1 schema type\" }\r\n };\r\n }\r\n const asn1 = localFromBER(pvtsutils.BufferSourceConverter.toUint8Array(inputBuffer));\r\n if (asn1.offset === -1) {\r\n return {\r\n verified: false,\r\n result: asn1.result\r\n };\r\n }\r\n return compareSchema(asn1.result, asn1.result, inputSchema);\r\n}\n\nexport { Any, BaseBlock, BaseStringBlock, BitString, BmpString, Boolean, CharacterString, Choice, Constructed, DATE, DateTime, Duration, EndOfContent, Enumerated, GeneralString, GeneralizedTime, GraphicString, HexBlock, IA5String, Integer, Null, NumericString, ObjectIdentifier, OctetString, Primitive, PrintableString, RawData, RelativeObjectIdentifier, Repeated, Sequence, Set, TIME, TeletexString, TimeOfDay, UTCTime, UniversalString, Utf8String, ValueBlock, VideotexString, ViewWriter, VisibleString, compareSchema, fromBER, verifySchema };\n","/*!\n * MIT License\n * \n * Copyright (c) 2017-2022 Peculiar Ventures, LLC\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * \n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n * \n */\n\n'use strict';\n\nconst ARRAY_BUFFER_NAME = \"[object ArrayBuffer]\";\nclass BufferSourceConverter {\n static isArrayBuffer(data) {\n return Object.prototype.toString.call(data) === ARRAY_BUFFER_NAME;\n }\n static toArrayBuffer(data) {\n if (this.isArrayBuffer(data)) {\n return data;\n }\n if (data.byteLength === data.buffer.byteLength) {\n return data.buffer;\n }\n if (data.byteOffset === 0 && data.byteLength === data.buffer.byteLength) {\n return data.buffer;\n }\n return this.toUint8Array(data.buffer)\n .slice(data.byteOffset, data.byteOffset + data.byteLength)\n .buffer;\n }\n static toUint8Array(data) {\n return this.toView(data, Uint8Array);\n }\n static toView(data, type) {\n if (data.constructor === type) {\n return data;\n }\n if (this.isArrayBuffer(data)) {\n return new type(data);\n }\n if (this.isArrayBufferView(data)) {\n return new type(data.buffer, data.byteOffset, data.byteLength);\n }\n throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n static isBufferSource(data) {\n return this.isArrayBufferView(data)\n || this.isArrayBuffer(data);\n }\n static isArrayBufferView(data) {\n return ArrayBuffer.isView(data)\n || (data && this.isArrayBuffer(data.buffer));\n }\n static isEqual(a, b) {\n const aView = BufferSourceConverter.toUint8Array(a);\n const bView = BufferSourceConverter.toUint8Array(b);\n if (aView.length !== bView.byteLength) {\n return false;\n }\n for (let i = 0; i < aView.length; i++) {\n if (aView[i] !== bView[i]) {\n return false;\n }\n }\n return true;\n }\n static concat(...args) {\n let buffers;\n if (Array.isArray(args[0]) && !(args[1] instanceof Function)) {\n buffers = args[0];\n }\n else if (Array.isArray(args[0]) && args[1] instanceof Function) {\n buffers = args[0];\n }\n else {\n if (args[args.length - 1] instanceof Function) {\n buffers = args.slice(0, args.length - 1);\n }\n else {\n buffers = args;\n }\n }\n let size = 0;\n for (const buffer of buffers) {\n size += buffer.byteLength;\n }\n const res = new Uint8Array(size);\n let offset = 0;\n for (const buffer of buffers) {\n const view = this.toUint8Array(buffer);\n res.set(view, offset);\n offset += view.length;\n }\n if (args[args.length - 1] instanceof Function) {\n return this.toView(res, args[args.length - 1]);\n }\n return res.buffer;\n }\n}\n\nconst STRING_TYPE = \"string\";\nconst HEX_REGEX = /^[0-9a-f]+$/i;\nconst BASE64_REGEX = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;\nconst BASE64URL_REGEX = /^[a-zA-Z0-9-_]+$/;\nclass Utf8Converter {\n static fromString(text) {\n const s = unescape(encodeURIComponent(text));\n const uintArray = new Uint8Array(s.length);\n for (let i = 0; i < s.length; i++) {\n uintArray[i] = s.charCodeAt(i);\n }\n return uintArray.buffer;\n }\n static toString(buffer) {\n const buf = BufferSourceConverter.toUint8Array(buffer);\n let encodedString = \"\";\n for (let i = 0; i < buf.length; i++) {\n encodedString += String.fromCharCode(buf[i]);\n }\n const decodedString = decodeURIComponent(escape(encodedString));\n return decodedString;\n }\n}\nclass Utf16Converter {\n static toString(buffer, littleEndian = false) {\n const arrayBuffer = BufferSourceConverter.toArrayBuffer(buffer);\n const dataView = new DataView(arrayBuffer);\n let res = \"\";\n for (let i = 0; i < arrayBuffer.byteLength; i += 2) {\n const code = dataView.getUint16(i, littleEndian);\n res += String.fromCharCode(code);\n }\n return res;\n }\n static fromString(text, littleEndian = false) {\n const res = new ArrayBuffer(text.length * 2);\n const dataView = new DataView(res);\n for (let i = 0; i < text.length; i++) {\n dataView.setUint16(i * 2, text.charCodeAt(i), littleEndian);\n }\n return res;\n }\n}\nclass Convert {\n static isHex(data) {\n return typeof data === STRING_TYPE\n && HEX_REGEX.test(data);\n }\n static isBase64(data) {\n return typeof data === STRING_TYPE\n && BASE64_REGEX.test(data);\n }\n static isBase64Url(data) {\n return typeof data === STRING_TYPE\n && BASE64URL_REGEX.test(data);\n }\n static ToString(buffer, enc = \"utf8\") {\n const buf = BufferSourceConverter.toUint8Array(buffer);\n switch (enc.toLowerCase()) {\n case \"utf8\":\n return this.ToUtf8String(buf);\n case \"binary\":\n return this.ToBinary(buf);\n case \"hex\":\n return this.ToHex(buf);\n case \"base64\":\n return this.ToBase64(buf);\n case \"base64url\":\n return this.ToBase64Url(buf);\n case \"utf16le\":\n return Utf16Converter.toString(buf, true);\n case \"utf16\":\n case \"utf16be\":\n return Utf16Converter.toString(buf);\n default:\n throw new Error(`Unknown type of encoding '${enc}'`);\n }\n }\n static FromString(str, enc = \"utf8\") {\n if (!str) {\n return new ArrayBuffer(0);\n }\n switch (enc.toLowerCase()) {\n case \"utf8\":\n return this.FromUtf8String(str);\n case \"binary\":\n return this.FromBinary(str);\n case \"hex\":\n return this.FromHex(str);\n case \"base64\":\n return this.FromBase64(str);\n case \"base64url\":\n return this.FromBase64Url(str);\n case \"utf16le\":\n return Utf16Converter.fromString(str, true);\n case \"utf16\":\n case \"utf16be\":\n return Utf16Converter.fromString(str);\n default:\n throw new Error(`Unknown type of encoding '${enc}'`);\n }\n }\n static ToBase64(buffer) {\n const buf = BufferSourceConverter.toUint8Array(buffer);\n if (typeof btoa !== \"undefined\") {\n const binary = this.ToString(buf, \"binary\");\n return btoa(binary);\n }\n else {\n return Buffer.from(buf).toString(\"base64\");\n }\n }\n static FromBase64(base64) {\n const formatted = this.formatString(base64);\n if (!formatted) {\n return new ArrayBuffer(0);\n }\n if (!Convert.isBase64(formatted)) {\n throw new TypeError(\"Argument 'base64Text' is not Base64 encoded\");\n }\n if (typeof atob !== \"undefined\") {\n return this.FromBinary(atob(formatted));\n }\n else {\n return new Uint8Array(Buffer.from(formatted, \"base64\")).buffer;\n }\n }\n static FromBase64Url(base64url) {\n const formatted = this.formatString(base64url);\n if (!formatted) {\n return new ArrayBuffer(0);\n }\n if (!Convert.isBase64Url(formatted)) {\n throw new TypeError(\"Argument 'base64url' is not Base64Url encoded\");\n }\n return this.FromBase64(this.Base64Padding(formatted.replace(/\\-/g, \"+\").replace(/\\_/g, \"/\")));\n }\n static ToBase64Url(data) {\n return this.ToBase64(data).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/\\=/g, \"\");\n }\n static FromUtf8String(text, encoding = Convert.DEFAULT_UTF8_ENCODING) {\n switch (encoding) {\n case \"ascii\":\n return this.FromBinary(text);\n case \"utf8\":\n return Utf8Converter.fromString(text);\n case \"utf16\":\n case \"utf16be\":\n return Utf16Converter.fromString(text);\n case \"utf16le\":\n case \"usc2\":\n return Utf16Converter.fromString(text, true);\n default:\n throw new Error(`Unknown type of encoding '${encoding}'`);\n }\n }\n static ToUtf8String(buffer, encoding = Convert.DEFAULT_UTF8_ENCODING) {\n switch (encoding) {\n case \"ascii\":\n return this.ToBinary(buffer);\n case \"utf8\":\n return Utf8Converter.toString(buffer);\n case \"utf16\":\n case \"utf16be\":\n return Utf16Converter.toString(buffer);\n case \"utf16le\":\n case \"usc2\":\n return Utf16Converter.toString(buffer, true);\n default:\n throw new Error(`Unknown type of encoding '${encoding}'`);\n }\n }\n static FromBinary(text) {\n const stringLength = text.length;\n const resultView = new Uint8Array(stringLength);\n for (let i = 0; i < stringLength; i++) {\n resultView[i] = text.charCodeAt(i);\n }\n return resultView.buffer;\n }\n static ToBinary(buffer) {\n const buf = BufferSourceConverter.toUint8Array(buffer);\n let res = \"\";\n for (let i = 0; i < buf.length; i++) {\n res += String.fromCharCode(buf[i]);\n }\n return res;\n }\n static ToHex(buffer) {\n const buf = BufferSourceConverter.toUint8Array(buffer);\n let result = \"\";\n const len = buf.length;\n for (let i = 0; i < len; i++) {\n const byte = buf[i];\n if (byte < 16) {\n result += \"0\";\n }\n result += byte.toString(16);\n }\n return result;\n }\n static FromHex(hexString) {\n let formatted = this.formatString(hexString);\n if (!formatted) {\n return new ArrayBuffer(0);\n }\n if (!Convert.isHex(formatted)) {\n throw new TypeError(\"Argument 'hexString' is not HEX encoded\");\n }\n if (formatted.length % 2) {\n formatted = `0${formatted}`;\n }\n const res = new Uint8Array(formatted.length / 2);\n for (let i = 0; i < formatted.length; i = i + 2) {\n const c = formatted.slice(i, i + 2);\n res[i / 2] = parseInt(c, 16);\n }\n return res.buffer;\n }\n static ToUtf16String(buffer, littleEndian = false) {\n return Utf16Converter.toString(buffer, littleEndian);\n }\n static FromUtf16String(text, littleEndian = false) {\n return Utf16Converter.fromString(text, littleEndian);\n }\n static Base64Padding(base64) {\n const padCount = 4 - (base64.length % 4);\n if (padCount < 4) {\n for (let i = 0; i < padCount; i++) {\n base64 += \"=\";\n }\n }\n return base64;\n }\n static formatString(data) {\n return (data === null || data === void 0 ? void 0 : data.replace(/[\\n\\r\\t ]/g, \"\")) || \"\";\n }\n}\nConvert.DEFAULT_UTF8_ENCODING = \"utf8\";\n\nfunction assign(target, ...sources) {\n const res = arguments[0];\n for (let i = 1; i < arguments.length; i++) {\n const obj = arguments[i];\n for (const prop in obj) {\n res[prop] = obj[prop];\n }\n }\n return res;\n}\nfunction combine(...buf) {\n const totalByteLength = buf.map((item) => item.byteLength).reduce((prev, cur) => prev + cur);\n const res = new Uint8Array(totalByteLength);\n let currentPos = 0;\n buf.map((item) => new Uint8Array(item)).forEach((arr) => {\n for (const item2 of arr) {\n res[currentPos++] = item2;\n }\n });\n return res.buffer;\n}\nfunction isEqual(bytes1, bytes2) {\n if (!(bytes1 && bytes2)) {\n return false;\n }\n if (bytes1.byteLength !== bytes2.byteLength) {\n return false;\n }\n const b1 = new Uint8Array(bytes1);\n const b2 = new Uint8Array(bytes2);\n for (let i = 0; i < bytes1.byteLength; i++) {\n if (b1[i] !== b2[i]) {\n return false;\n }\n }\n return true;\n}\n\nexports.BufferSourceConverter = BufferSourceConverter;\nexports.Convert = Convert;\nexports.assign = assign;\nexports.combine = combine;\nexports.isEqual = isEqual;\n","/*!\n Copyright (c) Peculiar Ventures, LLC\n*/\n\nfunction getUTCDate(date) {\r\n return new Date(date.getTime() + (date.getTimezoneOffset() * 60000));\r\n}\r\nfunction getParametersValue(parameters, name, defaultValue) {\r\n var _a;\r\n if ((parameters instanceof Object) === false) {\r\n return defaultValue;\r\n }\r\n return (_a = parameters[name]) !== null && _a !== void 0 ? _a : defaultValue;\r\n}\r\nfunction bufferToHexCodes(inputBuffer, inputOffset = 0, inputLength = (inputBuffer.byteLength - inputOffset), insertSpace = false) {\r\n let result = \"\";\r\n for (const item of (new Uint8Array(inputBuffer, inputOffset, inputLength))) {\r\n const str = item.toString(16).toUpperCase();\r\n if (str.length === 1) {\r\n result += \"0\";\r\n }\r\n result += str;\r\n if (insertSpace) {\r\n result += \" \";\r\n }\r\n }\r\n return result.trim();\r\n}\r\nfunction checkBufferParams(baseBlock, inputBuffer, inputOffset, inputLength) {\r\n if (!(inputBuffer instanceof ArrayBuffer)) {\r\n baseBlock.error = \"Wrong parameter: inputBuffer must be \\\"ArrayBuffer\\\"\";\r\n return false;\r\n }\r\n if (!inputBuffer.byteLength) {\r\n baseBlock.error = \"Wrong parameter: inputBuffer has zero length\";\r\n return false;\r\n }\r\n if (inputOffset < 0) {\r\n baseBlock.error = \"Wrong parameter: inputOffset less than zero\";\r\n return false;\r\n }\r\n if (inputLength < 0) {\r\n baseBlock.error = \"Wrong parameter: inputLength less than zero\";\r\n return false;\r\n }\r\n if ((inputBuffer.byteLength - inputOffset - inputLength) < 0) {\r\n baseBlock.error = \"End of input reached before message was fully decoded (inconsistent offset and length values)\";\r\n return false;\r\n }\r\n return true;\r\n}\r\nfunction utilFromBase(inputBuffer, inputBase) {\r\n let result = 0;\r\n if (inputBuffer.length === 1) {\r\n return inputBuffer[0];\r\n }\r\n for (let i = (inputBuffer.length - 1); i >= 0; i--) {\r\n result += inputBuffer[(inputBuffer.length - 1) - i] * Math.pow(2, inputBase * i);\r\n }\r\n return result;\r\n}\r\nfunction utilToBase(value, base, reserved = (-1)) {\r\n const internalReserved = reserved;\r\n let internalValue = value;\r\n let result = 0;\r\n let biggest = Math.pow(2, base);\r\n for (let i = 1; i < 8; i++) {\r\n if (value < biggest) {\r\n let retBuf;\r\n if (internalReserved < 0) {\r\n retBuf = new ArrayBuffer(i);\r\n result = i;\r\n }\r\n else {\r\n if (internalReserved < i) {\r\n return (new ArrayBuffer(0));\r\n }\r\n retBuf = new ArrayBuffer(internalReserved);\r\n result = internalReserved;\r\n }\r\n const retView = new Uint8Array(retBuf);\r\n for (let j = (i - 1); j >= 0; j--) {\r\n const basis = Math.pow(2, j * base);\r\n retView[result - j - 1] = Math.floor(internalValue / basis);\r\n internalValue -= (retView[result - j - 1]) * basis;\r\n }\r\n return retBuf;\r\n }\r\n biggest *= Math.pow(2, base);\r\n }\r\n return new ArrayBuffer(0);\r\n}\r\nfunction utilConcatBuf(...buffers) {\r\n let outputLength = 0;\r\n let prevLength = 0;\r\n for (const buffer of buffers) {\r\n outputLength += buffer.byteLength;\r\n }\r\n const retBuf = new ArrayBuffer(outputLength);\r\n const retView = new Uint8Array(retBuf);\r\n for (const buffer of buffers) {\r\n retView.set(new Uint8Array(buffer), prevLength);\r\n prevLength += buffer.byteLength;\r\n }\r\n return retBuf;\r\n}\r\nfunction utilConcatView(...views) {\r\n let outputLength = 0;\r\n let prevLength = 0;\r\n for (const view of views) {\r\n outputLength += view.length;\r\n }\r\n const retBuf = new ArrayBuffer(outputLength);\r\n const retView = new Uint8Array(retBuf);\r\n for (const view of views) {\r\n retView.set(view, prevLength);\r\n prevLength += view.length;\r\n }\r\n return retView;\r\n}\r\nfunction utilDecodeTC() {\r\n const buf = new Uint8Array(this.valueHex);\r\n if (this.valueHex.byteLength >= 2) {\r\n const condition1 = (buf[0] === 0xFF) && (buf[1] & 0x80);\r\n const condition2 = (buf[0] === 0x00) && ((buf[1] & 0x80) === 0x00);\r\n if (condition1 || condition2) {\r\n this.warnings.push(\"Needlessly long format\");\r\n }\r\n }\r\n const bigIntBuffer = new ArrayBuffer(this.valueHex.byteLength);\r\n const bigIntView = new Uint8Array(bigIntBuffer);\r\n for (let i = 0; i < this.valueHex.byteLength; i++) {\r\n bigIntView[i] = 0;\r\n }\r\n bigIntView[0] = (buf[0] & 0x80);\r\n const bigInt = utilFromBase(bigIntView, 8);\r\n const smallIntBuffer = new ArrayBuffer(this.valueHex.byteLength);\r\n const smallIntView = new Uint8Array(smallIntBuffer);\r\n for (let j = 0; j < this.valueHex.byteLength; j++) {\r\n smallIntView[j] = buf[j];\r\n }\r\n smallIntView[0] &= 0x7F;\r\n const smallInt = utilFromBase(smallIntView, 8);\r\n return (smallInt - bigInt);\r\n}\r\nfunction utilEncodeTC(value) {\r\n const modValue = (value < 0) ? (value * (-1)) : value;\r\n let bigInt = 128;\r\n for (let i = 1; i < 8; i++) {\r\n if (modValue <= bigInt) {\r\n if (value < 0) {\r\n const smallInt = bigInt - modValue;\r\n const retBuf = utilToBase(smallInt, 8, i);\r\n const retView = new Uint8Array(retBuf);\r\n retView[0] |= 0x80;\r\n return retBuf;\r\n }\r\n let retBuf = utilToBase(modValue, 8, i);\r\n let retView = new Uint8Array(retBuf);\r\n if (retView[0] & 0x80) {\r\n const tempBuf = retBuf.slice(0);\r\n const tempView = new Uint8Array(tempBuf);\r\n retBuf = new ArrayBuffer(retBuf.byteLength + 1);\r\n retView = new Uint8Array(retBuf);\r\n for (let k = 0; k < tempBuf.byteLength; k++) {\r\n retView[k + 1] = tempView[k];\r\n }\r\n retView[0] = 0x00;\r\n }\r\n return retBuf;\r\n }\r\n bigInt *= Math.pow(2, 8);\r\n }\r\n return (new ArrayBuffer(0));\r\n}\r\nfunction isEqualBuffer(inputBuffer1, inputBuffer2) {\r\n if (inputBuffer1.byteLength !== inputBuffer2.byteLength) {\r\n return false;\r\n }\r\n const view1 = new Uint8Array(inputBuffer1);\r\n const view2 = new Uint8Array(inputBuffer2);\r\n for (let i = 0; i < view1.length; i++) {\r\n if (view1[i] !== view2[i]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction padNumber(inputNumber, fullLength) {\r\n const str = inputNumber.toString(10);\r\n if (fullLength < str.length) {\r\n return \"\";\r\n }\r\n const dif = fullLength - str.length;\r\n const padding = new Array(dif);\r\n for (let i = 0; i < dif; i++) {\r\n padding[i] = \"0\";\r\n }\r\n const paddingString = padding.join(\"\");\r\n return paddingString.concat(str);\r\n}\r\nconst base64Template = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\r\nconst base64UrlTemplate = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=\";\r\nfunction toBase64(input, useUrlTemplate = false, skipPadding = false, skipLeadingZeros = false) {\r\n let i = 0;\r\n let flag1 = 0;\r\n let flag2 = 0;\r\n let output = \"\";\r\n const template = (useUrlTemplate) ? base64UrlTemplate : base64Template;\r\n if (skipLeadingZeros) {\r\n let nonZeroPosition = 0;\r\n for (let i = 0; i < input.length; i++) {\r\n if (input.charCodeAt(i) !== 0) {\r\n nonZeroPosition = i;\r\n break;\r\n }\r\n }\r\n input = input.slice(nonZeroPosition);\r\n }\r\n while (i < input.length) {\r\n const chr1 = input.charCodeAt(i++);\r\n if (i >= input.length) {\r\n flag1 = 1;\r\n }\r\n const chr2 = input.charCodeAt(i++);\r\n if (i >= input.length) {\r\n flag2 = 1;\r\n }\r\n const chr3 = input.charCodeAt(i++);\r\n const enc1 = chr1 >> 2;\r\n const enc2 = ((chr1 & 0x03) << 4) | (chr2 >> 4);\r\n let enc3 = ((chr2 & 0x0F) << 2) | (chr3 >> 6);\r\n let enc4 = chr3 & 0x3F;\r\n if (flag1 === 1) {\r\n enc3 = enc4 = 64;\r\n }\r\n else {\r\n if (flag2 === 1) {\r\n enc4 = 64;\r\n }\r\n }\r\n if (skipPadding) {\r\n if (enc3 === 64) {\r\n output += `${template.charAt(enc1)}${template.charAt(enc2)}`;\r\n }\r\n else {\r\n if (enc4 === 64) {\r\n output += `${template.charAt(enc1)}${template.charAt(enc2)}${template.charAt(enc3)}`;\r\n }\r\n else {\r\n output += `${template.charAt(enc1)}${template.charAt(enc2)}${template.charAt(enc3)}${template.charAt(enc4)}`;\r\n }\r\n }\r\n }\r\n else {\r\n output += `${template.charAt(enc1)}${template.charAt(enc2)}${template.charAt(enc3)}${template.charAt(enc4)}`;\r\n }\r\n }\r\n return output;\r\n}\r\nfunction fromBase64(input, useUrlTemplate = false, cutTailZeros = false) {\r\n const template = (useUrlTemplate) ? base64UrlTemplate : base64Template;\r\n function indexOf(toSearch) {\r\n for (let i = 0; i < 64; i++) {\r\n if (template.charAt(i) === toSearch)\r\n return i;\r\n }\r\n return 64;\r\n }\r\n function test(incoming) {\r\n return ((incoming === 64) ? 0x00 : incoming);\r\n }\r\n let i = 0;\r\n let output = \"\";\r\n while (i < input.length) {\r\n const enc1 = indexOf(input.charAt(i++));\r\n const enc2 = (i >= input.length) ? 0x00 : indexOf(input.charAt(i++));\r\n const enc3 = (i >= input.length) ? 0x00 : indexOf(input.charAt(i++));\r\n const enc4 = (i >= input.length) ? 0x00 : indexOf(input.charAt(i++));\r\n const chr1 = (test(enc1) << 2) | (test(enc2) >> 4);\r\n const chr2 = ((test(enc2) & 0x0F) << 4) | (test(enc3) >> 2);\r\n const chr3 = ((test(enc3) & 0x03) << 6) | test(enc4);\r\n output += String.fromCharCode(chr1);\r\n if (enc3 !== 64) {\r\n output += String.fromCharCode(chr2);\r\n }\r\n if (enc4 !== 64) {\r\n output += String.fromCharCode(chr3);\r\n }\r\n }\r\n if (cutTailZeros) {\r\n const outputLength = output.length;\r\n let nonZeroStart = (-1);\r\n for (let i = (outputLength - 1); i >= 0; i--) {\r\n if (output.charCodeAt(i) !== 0) {\r\n nonZeroStart = i;\r\n break;\r\n }\r\n }\r\n if (nonZeroStart !== (-1)) {\r\n output = output.slice(0, nonZeroStart + 1);\r\n }\r\n else {\r\n output = \"\";\r\n }\r\n }\r\n return output;\r\n}\r\nfunction arrayBufferToString(buffer) {\r\n let resultString = \"\";\r\n const view = new Uint8Array(buffer);\r\n for (const element of view) {\r\n resultString += String.fromCharCode(element);\r\n }\r\n return resultString;\r\n}\r\nfunction stringToArrayBuffer(str) {\r\n const stringLength = str.length;\r\n const resultBuffer = new ArrayBuffer(stringLength);\r\n const resultView = new Uint8Array(resultBuffer);\r\n for (let i = 0; i < stringLength; i++) {\r\n resultView[i] = str.charCodeAt(i);\r\n }\r\n return resultBuffer;\r\n}\r\nconst log2 = Math.log(2);\r\nfunction nearestPowerOf2(length) {\r\n const base = (Math.log(length) / log2);\r\n const floor = Math.floor(base);\r\n const round = Math.round(base);\r\n return ((floor === round) ? floor : round);\r\n}\r\nfunction clearProps(object, propsArray) {\r\n for (const prop of propsArray) {\r\n delete object[prop];\r\n }\r\n}\n\nexport { arrayBufferToString, bufferToHexCodes, checkBufferParams, clearProps, fromBase64, getParametersValue, getUTCDate, isEqualBuffer, nearestPowerOf2, padNumber, stringToArrayBuffer, toBase64, utilConcatBuf, utilConcatView, utilDecodeTC, utilEncodeTC, utilFromBase, utilToBase };\n","/* eslint-env node */\n'use strict';\n\n// SDP helpers.\nconst SDPUtils = {};\n\n// Generate an alphanumeric identifier for cname or mids.\n// TODO: use UUIDs instead? https://gist.github.com/jed/982883\nSDPUtils.generateIdentifier = function() {\n return Math.random().toString(36).substring(2, 12);\n};\n\n// The RTCP CNAME used by all peerconnections from the same JS.\nSDPUtils.localCName = SDPUtils.generateIdentifier();\n\n// Splits SDP into lines, dealing with both CRLF and LF.\nSDPUtils.splitLines = function(blob) {\n return blob.trim().split('\\n').map(line => line.trim());\n};\n// Splits SDP into sessionpart and mediasections. Ensures CRLF.\nSDPUtils.splitSections = function(blob) {\n const parts = blob.split('\\nm=');\n return parts.map((part, index) => (index > 0 ?\n 'm=' + part : part).trim() + '\\r\\n');\n};\n\n// Returns the session description.\nSDPUtils.getDescription = function(blob) {\n const sections = SDPUtils.splitSections(blob);\n return sections && sections[0];\n};\n\n// Returns the individual media sections.\nSDPUtils.getMediaSections = function(blob) {\n const sections = SDPUtils.splitSections(blob);\n sections.shift();\n return sections;\n};\n\n// Returns lines that start with a certain prefix.\nSDPUtils.matchPrefix = function(blob, prefix) {\n return SDPUtils.splitLines(blob).filter(line => line.indexOf(prefix) === 0);\n};\n\n// Parses an ICE candidate line. Sample input:\n// candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8\n// rport 55996\"\n// Input can be prefixed with a=.\nSDPUtils.parseCandidate = function(line) {\n let parts;\n // Parse both variants.\n if (line.indexOf('a=candidate:') === 0) {\n parts = line.substring(12).split(' ');\n } else {\n parts = line.substring(10).split(' ');\n }\n\n const candidate = {\n foundation: parts[0],\n component: {1: 'rtp', 2: 'rtcp'}[parts[1]] || parts[1],\n protocol: parts[2].toLowerCase(),\n priority: parseInt(parts[3], 10),\n ip: parts[4],\n address: parts[4], // address is an alias for ip.\n port: parseInt(parts[5], 10),\n // skip parts[6] == 'typ'\n type: parts[7],\n };\n\n for (let i = 8; i < parts.length; i += 2) {\n switch (parts[i]) {\n case 'raddr':\n candidate.relatedAddress = parts[i + 1];\n break;\n case 'rport':\n candidate.relatedPort = parseInt(parts[i + 1], 10);\n break;\n case 'tcptype':\n candidate.tcpType = parts[i + 1];\n break;\n case 'ufrag':\n candidate.ufrag = parts[i + 1]; // for backward compatibility.\n candidate.usernameFragment = parts[i + 1];\n break;\n default: // extension handling, in particular ufrag. Don't overwrite.\n if (candidate[parts[i]] === undefined) {\n candidate[parts[i]] = parts[i + 1];\n }\n break;\n }\n }\n return candidate;\n};\n\n// Translates a candidate object into SDP candidate attribute.\n// This does not include the a= prefix!\nSDPUtils.writeCandidate = function(candidate) {\n const sdp = [];\n sdp.push(candidate.foundation);\n\n const component = candidate.component;\n if (component === 'rtp') {\n sdp.push(1);\n } else if (component === 'rtcp') {\n sdp.push(2);\n } else {\n sdp.push(component);\n }\n sdp.push(candidate.protocol.toUpperCase());\n sdp.push(candidate.priority);\n sdp.push(candidate.address || candidate.ip);\n sdp.push(candidate.port);\n\n const type = candidate.type;\n sdp.push('typ');\n sdp.push(type);\n if (type !== 'host' && candidate.relatedAddress &&\n candidate.relatedPort) {\n sdp.push('raddr');\n sdp.push(candidate.relatedAddress);\n sdp.push('rport');\n sdp.push(candidate.relatedPort);\n }\n if (candidate.tcpType && candidate.protocol.toLowerCase() === 'tcp') {\n sdp.push('tcptype');\n sdp.push(candidate.tcpType);\n }\n if (candidate.usernameFragment || candidate.ufrag) {\n sdp.push('ufrag');\n sdp.push(candidate.usernameFragment || candidate.ufrag);\n }\n return 'candidate:' + sdp.join(' ');\n};\n\n// Parses an ice-options line, returns an array of option tags.\n// Sample input:\n// a=ice-options:foo bar\nSDPUtils.parseIceOptions = function(line) {\n return line.substring(14).split(' ');\n};\n\n// Parses a rtpmap line, returns RTCRtpCoddecParameters. Sample input:\n// a=rtpmap:111 opus/48000/2\nSDPUtils.parseRtpMap = function(line) {\n let parts = line.substring(9).split(' ');\n const parsed = {\n payloadType: parseInt(parts.shift(), 10), // was: id\n };\n\n parts = parts[0].split('/');\n\n parsed.name = parts[0];\n parsed.clockRate = parseInt(parts[1], 10); // was: clockrate\n parsed.channels = parts.length === 3 ? parseInt(parts[2], 10) : 1;\n // legacy alias, got renamed back to channels in ORTC.\n parsed.numChannels = parsed.channels;\n return parsed;\n};\n\n// Generates a rtpmap line from RTCRtpCodecCapability or\n// RTCRtpCodecParameters.\nSDPUtils.writeRtpMap = function(codec) {\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n const channels = codec.channels || codec.numChannels || 1;\n return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate +\n (channels !== 1 ? '/' + channels : '') + '\\r\\n';\n};\n\n// Parses a extmap line (headerextension from RFC 5285). Sample input:\n// a=extmap:2 urn:ietf:params:rtp-hdrext:toffset\n// a=extmap:2/sendonly urn:ietf:params:rtp-hdrext:toffset\nSDPUtils.parseExtmap = function(line) {\n const parts = line.substring(9).split(' ');\n return {\n id: parseInt(parts[0], 10),\n direction: parts[0].indexOf('/') > 0 ? parts[0].split('/')[1] : 'sendrecv',\n uri: parts[1],\n attributes: parts.slice(2).join(' '),\n };\n};\n\n// Generates an extmap line from RTCRtpHeaderExtensionParameters or\n// RTCRtpHeaderExtension.\nSDPUtils.writeExtmap = function(headerExtension) {\n return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) +\n (headerExtension.direction && headerExtension.direction !== 'sendrecv'\n ? '/' + headerExtension.direction\n : '') +\n ' ' + headerExtension.uri +\n (headerExtension.attributes ? ' ' + headerExtension.attributes : '') +\n '\\r\\n';\n};\n\n// Parses a fmtp line, returns dictionary. Sample input:\n// a=fmtp:96 vbr=on;cng=on\n// Also deals with vbr=on; cng=on\nSDPUtils.parseFmtp = function(line) {\n const parsed = {};\n let kv;\n const parts = line.substring(line.indexOf(' ') + 1).split(';');\n for (let j = 0; j < parts.length; j++) {\n kv = parts[j].trim().split('=');\n parsed[kv[0].trim()] = kv[1];\n }\n return parsed;\n};\n\n// Generates a fmtp line from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeFmtp = function(codec) {\n let line = '';\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.parameters && Object.keys(codec.parameters).length) {\n const params = [];\n Object.keys(codec.parameters).forEach(param => {\n if (codec.parameters[param] !== undefined) {\n params.push(param + '=' + codec.parameters[param]);\n } else {\n params.push(param);\n }\n });\n line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\\r\\n';\n }\n return line;\n};\n\n// Parses a rtcp-fb line, returns RTCPRtcpFeedback object. Sample input:\n// a=rtcp-fb:98 nack rpsi\nSDPUtils.parseRtcpFb = function(line) {\n const parts = line.substring(line.indexOf(' ') + 1).split(' ');\n return {\n type: parts.shift(),\n parameter: parts.join(' '),\n };\n};\n\n// Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeRtcpFb = function(codec) {\n let lines = '';\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.rtcpFeedback && codec.rtcpFeedback.length) {\n // FIXME: special handling for trr-int?\n codec.rtcpFeedback.forEach(fb => {\n lines += 'a=rtcp-fb:' + pt + ' ' + fb.type +\n (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') +\n '\\r\\n';\n });\n }\n return lines;\n};\n\n// Parses a RFC 5576 ssrc media attribute. Sample input:\n// a=ssrc:3735928559 cname:something\nSDPUtils.parseSsrcMedia = function(line) {\n const sp = line.indexOf(' ');\n const parts = {\n ssrc: parseInt(line.substring(7, sp), 10),\n };\n const colon = line.indexOf(':', sp);\n if (colon > -1) {\n parts.attribute = line.substring(sp + 1, colon);\n parts.value = line.substring(colon + 1);\n } else {\n parts.attribute = line.substring(sp + 1);\n }\n return parts;\n};\n\n// Parse a ssrc-group line (see RFC 5576). Sample input:\n// a=ssrc-group:semantics 12 34\nSDPUtils.parseSsrcGroup = function(line) {\n const parts = line.substring(13).split(' ');\n return {\n semantics: parts.shift(),\n ssrcs: parts.map(ssrc => parseInt(ssrc, 10)),\n };\n};\n\n// Extracts the MID (RFC 5888) from a media section.\n// Returns the MID or undefined if no mid line was found.\nSDPUtils.getMid = function(mediaSection) {\n const mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:')[0];\n if (mid) {\n return mid.substring(6);\n }\n};\n\n// Parses a fingerprint line for DTLS-SRTP.\nSDPUtils.parseFingerprint = function(line) {\n const parts = line.substring(14).split(' ');\n return {\n algorithm: parts[0].toLowerCase(), // algorithm is case-sensitive in Edge.\n value: parts[1].toUpperCase(), // the definition is upper-case in RFC 4572.\n };\n};\n\n// Extracts DTLS parameters from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the fingerprint line as input. See also getIceParameters.\nSDPUtils.getDtlsParameters = function(mediaSection, sessionpart) {\n const lines = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=fingerprint:');\n // Note: a=setup line is ignored since we use the 'auto' role in Edge.\n return {\n role: 'auto',\n fingerprints: lines.map(SDPUtils.parseFingerprint),\n };\n};\n\n// Serializes DTLS parameters to SDP.\nSDPUtils.writeDtlsParameters = function(params, setupType) {\n let sdp = 'a=setup:' + setupType + '\\r\\n';\n params.fingerprints.forEach(fp => {\n sdp += 'a=fingerprint:' + fp.algorithm + ' ' + fp.value + '\\r\\n';\n });\n return sdp;\n};\n\n// Parses a=crypto lines into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members\nSDPUtils.parseCryptoLine = function(line) {\n const parts = line.substring(9).split(' ');\n return {\n tag: parseInt(parts[0], 10),\n cryptoSuite: parts[1],\n keyParams: parts[2],\n sessionParams: parts.slice(3),\n };\n};\n\nSDPUtils.writeCryptoLine = function(parameters) {\n return 'a=crypto:' + parameters.tag + ' ' +\n parameters.cryptoSuite + ' ' +\n (typeof parameters.keyParams === 'object'\n ? SDPUtils.writeCryptoKeyParams(parameters.keyParams)\n : parameters.keyParams) +\n (parameters.sessionParams ? ' ' + parameters.sessionParams.join(' ') : '') +\n '\\r\\n';\n};\n\n// Parses the crypto key parameters into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam*\nSDPUtils.parseCryptoKeyParams = function(keyParams) {\n if (keyParams.indexOf('inline:') !== 0) {\n return null;\n }\n const parts = keyParams.substring(7).split('|');\n return {\n keyMethod: 'inline',\n keySalt: parts[0],\n lifeTime: parts[1],\n mkiValue: parts[2] ? parts[2].split(':')[0] : undefined,\n mkiLength: parts[2] ? parts[2].split(':')[1] : undefined,\n };\n};\n\nSDPUtils.writeCryptoKeyParams = function(keyParams) {\n return keyParams.keyMethod + ':'\n + keyParams.keySalt +\n (keyParams.lifeTime ? '|' + keyParams.lifeTime : '') +\n (keyParams.mkiValue && keyParams.mkiLength\n ? '|' + keyParams.mkiValue + ':' + keyParams.mkiLength\n : '');\n};\n\n// Extracts all SDES parameters.\nSDPUtils.getCryptoParameters = function(mediaSection, sessionpart) {\n const lines = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=crypto:');\n return lines.map(SDPUtils.parseCryptoLine);\n};\n\n// Parses ICE information from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the ice-ufrag and ice-pwd lines as input.\nSDPUtils.getIceParameters = function(mediaSection, sessionpart) {\n const ufrag = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=ice-ufrag:')[0];\n const pwd = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=ice-pwd:')[0];\n if (!(ufrag && pwd)) {\n return null;\n }\n return {\n usernameFragment: ufrag.substring(12),\n password: pwd.substring(10),\n };\n};\n\n// Serializes ICE parameters to SDP.\nSDPUtils.writeIceParameters = function(params) {\n let sdp = 'a=ice-ufrag:' + params.usernameFragment + '\\r\\n' +\n 'a=ice-pwd:' + params.password + '\\r\\n';\n if (params.iceLite) {\n sdp += 'a=ice-lite\\r\\n';\n }\n return sdp;\n};\n\n// Parses the SDP media section and returns RTCRtpParameters.\nSDPUtils.parseRtpParameters = function(mediaSection) {\n const description = {\n codecs: [],\n headerExtensions: [],\n fecMechanisms: [],\n rtcp: [],\n };\n const lines = SDPUtils.splitLines(mediaSection);\n const mline = lines[0].split(' ');\n description.profile = mline[2];\n for (let i = 3; i < mline.length; i++) { // find all codecs from mline[3..]\n const pt = mline[i];\n const rtpmapline = SDPUtils.matchPrefix(\n mediaSection, 'a=rtpmap:' + pt + ' ')[0];\n if (rtpmapline) {\n const codec = SDPUtils.parseRtpMap(rtpmapline);\n const fmtps = SDPUtils.matchPrefix(\n mediaSection, 'a=fmtp:' + pt + ' ');\n // Only the first a=fmtp: is considered.\n codec.parameters = fmtps.length ? SDPUtils.parseFmtp(fmtps[0]) : {};\n codec.rtcpFeedback = SDPUtils.matchPrefix(\n mediaSection, 'a=rtcp-fb:' + pt + ' ')\n .map(SDPUtils.parseRtcpFb);\n description.codecs.push(codec);\n // parse FEC mechanisms from rtpmap lines.\n switch (codec.name.toUpperCase()) {\n case 'RED':\n case 'ULPFEC':\n description.fecMechanisms.push(codec.name.toUpperCase());\n break;\n default: // only RED and ULPFEC are recognized as FEC mechanisms.\n break;\n }\n }\n }\n SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(line => {\n description.headerExtensions.push(SDPUtils.parseExtmap(line));\n });\n const wildcardRtcpFb = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-fb:* ')\n .map(SDPUtils.parseRtcpFb);\n description.codecs.forEach(codec => {\n wildcardRtcpFb.forEach(fb=> {\n const duplicate = codec.rtcpFeedback.find(existingFeedback => {\n return existingFeedback.type === fb.type &&\n existingFeedback.parameter === fb.parameter;\n });\n if (!duplicate) {\n codec.rtcpFeedback.push(fb);\n }\n });\n });\n // FIXME: parse rtcp.\n return description;\n};\n\n// Generates parts of the SDP media section describing the capabilities /\n// parameters.\nSDPUtils.writeRtpDescription = function(kind, caps) {\n let sdp = '';\n\n // Build the mline.\n sdp += 'm=' + kind + ' ';\n sdp += caps.codecs.length > 0 ? '9' : '0'; // reject if no codecs.\n sdp += ' ' + (caps.profile || 'UDP/TLS/RTP/SAVPF') + ' ';\n sdp += caps.codecs.map(codec => {\n if (codec.preferredPayloadType !== undefined) {\n return codec.preferredPayloadType;\n }\n return codec.payloadType;\n }).join(' ') + '\\r\\n';\n\n sdp += 'c=IN IP4 0.0.0.0\\r\\n';\n sdp += 'a=rtcp:9 IN IP4 0.0.0.0\\r\\n';\n\n // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb.\n caps.codecs.forEach(codec => {\n sdp += SDPUtils.writeRtpMap(codec);\n sdp += SDPUtils.writeFmtp(codec);\n sdp += SDPUtils.writeRtcpFb(codec);\n });\n let maxptime = 0;\n caps.codecs.forEach(codec => {\n if (codec.maxptime > maxptime) {\n maxptime = codec.maxptime;\n }\n });\n if (maxptime > 0) {\n sdp += 'a=maxptime:' + maxptime + '\\r\\n';\n }\n\n if (caps.headerExtensions) {\n caps.headerExtensions.forEach(extension => {\n sdp += SDPUtils.writeExtmap(extension);\n });\n }\n // FIXME: write fecMechanisms.\n return sdp;\n};\n\n// Parses the SDP media section and returns an array of\n// RTCRtpEncodingParameters.\nSDPUtils.parseRtpEncodingParameters = function(mediaSection) {\n const encodingParameters = [];\n const description = SDPUtils.parseRtpParameters(mediaSection);\n const hasRed = description.fecMechanisms.indexOf('RED') !== -1;\n const hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1;\n\n // filter a=ssrc:... cname:, ignore PlanB-msid\n const ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(line => SDPUtils.parseSsrcMedia(line))\n .filter(parts => parts.attribute === 'cname');\n const primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc;\n let secondarySsrc;\n\n const flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID')\n .map(line => {\n const parts = line.substring(17).split(' ');\n return parts.map(part => parseInt(part, 10));\n });\n if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) {\n secondarySsrc = flows[0][1];\n }\n\n description.codecs.forEach(codec => {\n if (codec.name.toUpperCase() === 'RTX' && codec.parameters.apt) {\n let encParam = {\n ssrc: primarySsrc,\n codecPayloadType: parseInt(codec.parameters.apt, 10),\n };\n if (primarySsrc && secondarySsrc) {\n encParam.rtx = {ssrc: secondarySsrc};\n }\n encodingParameters.push(encParam);\n if (hasRed) {\n encParam = JSON.parse(JSON.stringify(encParam));\n encParam.fec = {\n ssrc: primarySsrc,\n mechanism: hasUlpfec ? 'red+ulpfec' : 'red',\n };\n encodingParameters.push(encParam);\n }\n }\n });\n if (encodingParameters.length === 0 && primarySsrc) {\n encodingParameters.push({\n ssrc: primarySsrc,\n });\n }\n\n // we support both b=AS and b=TIAS but interpret AS as TIAS.\n let bandwidth = SDPUtils.matchPrefix(mediaSection, 'b=');\n if (bandwidth.length) {\n if (bandwidth[0].indexOf('b=TIAS:') === 0) {\n bandwidth = parseInt(bandwidth[0].substring(7), 10);\n } else if (bandwidth[0].indexOf('b=AS:') === 0) {\n // use formula from JSEP to convert b=AS to TIAS value.\n bandwidth = parseInt(bandwidth[0].substring(5), 10) * 1000 * 0.95\n - (50 * 40 * 8);\n } else {\n bandwidth = undefined;\n }\n encodingParameters.forEach(params => {\n params.maxBitrate = bandwidth;\n });\n }\n return encodingParameters;\n};\n\n// parses http://draft.ortc.org/#rtcrtcpparameters*\nSDPUtils.parseRtcpParameters = function(mediaSection) {\n const rtcpParameters = {};\n\n // Gets the first SSRC. Note that with RTX there might be multiple\n // SSRCs.\n const remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(line => SDPUtils.parseSsrcMedia(line))\n .filter(obj => obj.attribute === 'cname')[0];\n if (remoteSsrc) {\n rtcpParameters.cname = remoteSsrc.value;\n rtcpParameters.ssrc = remoteSsrc.ssrc;\n }\n\n // Edge uses the compound attribute instead of reducedSize\n // compound is !reducedSize\n const rsize = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-rsize');\n rtcpParameters.reducedSize = rsize.length > 0;\n rtcpParameters.compound = rsize.length === 0;\n\n // parses the rtcp-mux attrіbute.\n // Note that Edge does not support unmuxed RTCP.\n const mux = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-mux');\n rtcpParameters.mux = mux.length > 0;\n\n return rtcpParameters;\n};\n\nSDPUtils.writeRtcpParameters = function(rtcpParameters) {\n let sdp = '';\n if (rtcpParameters.reducedSize) {\n sdp += 'a=rtcp-rsize\\r\\n';\n }\n if (rtcpParameters.mux) {\n sdp += 'a=rtcp-mux\\r\\n';\n }\n if (rtcpParameters.ssrc !== undefined && rtcpParameters.cname) {\n sdp += 'a=ssrc:' + rtcpParameters.ssrc +\n ' cname:' + rtcpParameters.cname + '\\r\\n';\n }\n return sdp;\n};\n\n\n// parses either a=msid: or a=ssrc:... msid lines and returns\n// the id of the MediaStream and MediaStreamTrack.\nSDPUtils.parseMsid = function(mediaSection) {\n let parts;\n const spec = SDPUtils.matchPrefix(mediaSection, 'a=msid:');\n if (spec.length === 1) {\n parts = spec[0].substring(7).split(' ');\n return {stream: parts[0], track: parts[1]};\n }\n const planB = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(line => SDPUtils.parseSsrcMedia(line))\n .filter(msidParts => msidParts.attribute === 'msid');\n if (planB.length > 0) {\n parts = planB[0].value.split(' ');\n return {stream: parts[0], track: parts[1]};\n }\n};\n\n// SCTP\n// parses draft-ietf-mmusic-sctp-sdp-26 first and falls back\n// to draft-ietf-mmusic-sctp-sdp-05\nSDPUtils.parseSctpDescription = function(mediaSection) {\n const mline = SDPUtils.parseMLine(mediaSection);\n const maxSizeLine = SDPUtils.matchPrefix(mediaSection, 'a=max-message-size:');\n let maxMessageSize;\n if (maxSizeLine.length > 0) {\n maxMessageSize = parseInt(maxSizeLine[0].substring(19), 10);\n }\n if (isNaN(maxMessageSize)) {\n maxMessageSize = 65536;\n }\n const sctpPort = SDPUtils.matchPrefix(mediaSection, 'a=sctp-port:');\n if (sctpPort.length > 0) {\n return {\n port: parseInt(sctpPort[0].substring(12), 10),\n protocol: mline.fmt,\n maxMessageSize,\n };\n }\n const sctpMapLines = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:');\n if (sctpMapLines.length > 0) {\n const parts = sctpMapLines[0]\n .substring(10)\n .split(' ');\n return {\n port: parseInt(parts[0], 10),\n protocol: parts[1],\n maxMessageSize,\n };\n }\n};\n\n// SCTP\n// outputs the draft-ietf-mmusic-sctp-sdp-26 version that all browsers\n// support by now receiving in this format, unless we originally parsed\n// as the draft-ietf-mmusic-sctp-sdp-05 format (indicated by the m-line\n// protocol of DTLS/SCTP -- without UDP/ or TCP/)\nSDPUtils.writeSctpDescription = function(media, sctp) {\n let output = [];\n if (media.protocol !== 'DTLS/SCTP') {\n output = [\n 'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.protocol + '\\r\\n',\n 'c=IN IP4 0.0.0.0\\r\\n',\n 'a=sctp-port:' + sctp.port + '\\r\\n',\n ];\n } else {\n output = [\n 'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.port + '\\r\\n',\n 'c=IN IP4 0.0.0.0\\r\\n',\n 'a=sctpmap:' + sctp.port + ' ' + sctp.protocol + ' 65535\\r\\n',\n ];\n }\n if (sctp.maxMessageSize !== undefined) {\n output.push('a=max-message-size:' + sctp.maxMessageSize + '\\r\\n');\n }\n return output.join('');\n};\n\n// Generate a session ID for SDP.\n// https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1\n// recommends using a cryptographically random +ve 64-bit value\n// but right now this should be acceptable and within the right range\nSDPUtils.generateSessionId = function() {\n return Math.random().toString().substr(2, 22);\n};\n\n// Write boiler plate for start of SDP\n// sessId argument is optional - if not supplied it will\n// be generated randomly\n// sessVersion is optional and defaults to 2\n// sessUser is optional and defaults to 'thisisadapterortc'\nSDPUtils.writeSessionBoilerplate = function(sessId, sessVer, sessUser) {\n let sessionId;\n const version = sessVer !== undefined ? sessVer : 2;\n if (sessId) {\n sessionId = sessId;\n } else {\n sessionId = SDPUtils.generateSessionId();\n }\n const user = sessUser || 'thisisadapterortc';\n // FIXME: sess-id should be an NTP timestamp.\n return 'v=0\\r\\n' +\n 'o=' + user + ' ' + sessionId + ' ' + version +\n ' IN IP4 127.0.0.1\\r\\n' +\n 's=-\\r\\n' +\n 't=0 0\\r\\n';\n};\n\n// Gets the direction from the mediaSection or the sessionpart.\nSDPUtils.getDirection = function(mediaSection, sessionpart) {\n // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv.\n const lines = SDPUtils.splitLines(mediaSection);\n for (let i = 0; i < lines.length; i++) {\n switch (lines[i]) {\n case 'a=sendrecv':\n case 'a=sendonly':\n case 'a=recvonly':\n case 'a=inactive':\n return lines[i].substring(2);\n default:\n // FIXME: What should happen here?\n }\n }\n if (sessionpart) {\n return SDPUtils.getDirection(sessionpart);\n }\n return 'sendrecv';\n};\n\nSDPUtils.getKind = function(mediaSection) {\n const lines = SDPUtils.splitLines(mediaSection);\n const mline = lines[0].split(' ');\n return mline[0].substring(2);\n};\n\nSDPUtils.isRejected = function(mediaSection) {\n return mediaSection.split(' ', 2)[1] === '0';\n};\n\nSDPUtils.parseMLine = function(mediaSection) {\n const lines = SDPUtils.splitLines(mediaSection);\n const parts = lines[0].substring(2).split(' ');\n return {\n kind: parts[0],\n port: parseInt(parts[1], 10),\n protocol: parts[2],\n fmt: parts.slice(3).join(' '),\n };\n};\n\nSDPUtils.parseOLine = function(mediaSection) {\n const line = SDPUtils.matchPrefix(mediaSection, 'o=')[0];\n const parts = line.substring(2).split(' ');\n return {\n username: parts[0],\n sessionId: parts[1],\n sessionVersion: parseInt(parts[2], 10),\n netType: parts[3],\n addressType: parts[4],\n address: parts[5],\n };\n};\n\n// a very naive interpretation of a valid SDP.\nSDPUtils.isValidSDP = function(blob) {\n if (typeof blob !== 'string' || blob.length === 0) {\n return false;\n }\n const lines = SDPUtils.splitLines(blob);\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].length < 2 || lines[i].charAt(1) !== '=') {\n return false;\n }\n // TODO: check the modifier a bit more.\n }\n return true;\n};\n\n// Expose public methods.\nif (typeof module === 'object') {\n module.exports = SDPUtils;\n}\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n function next() {\r\n while (env.stack.length) {\r\n var rec = env.stack.pop();\r\n try {\r\n var result = rec.dispose && rec.dispose.call(rec.value);\r\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n};\r\n","/*!\n Copyright (c) Peculiar Ventures, LLC\n*/\n\nimport { Convert, BufferSourceConverter, combine } from 'pvtsutils';\nexport { BufferSourceConverter } from 'pvtsutils';\nimport { AsnProp, AsnPropTypes, AsnType, AsnTypeTypes, AsnIntegerConverter, AsnSerializer, AsnConvert } from '@peculiar/asn1-schema';\nimport { __decorate } from 'tslib';\nimport { JsonProp, JsonPropTypes } from '@peculiar/json-schema';\nimport * as asn1 from 'asn1js';\n\nclass CryptoError extends Error {\n}\n\nclass AlgorithmError extends CryptoError {\n}\n\nclass UnsupportedOperationError extends CryptoError {\n constructor(methodName) {\n super(`Unsupported operation: ${methodName ? `${methodName}` : \"\"}`);\n }\n}\n\nclass OperationError extends CryptoError {\n}\n\nclass RequiredPropertyError extends CryptoError {\n constructor(propName) {\n super(`${propName}: Missing required property`);\n }\n}\n\nclass PemConverter {\n static toArrayBuffer(pem) {\n const base64 = pem\n .replace(/-{5}(BEGIN|END) .*-{5}/g, \"\")\n .replace(\"\\r\", \"\")\n .replace(\"\\n\", \"\");\n return Convert.FromBase64(base64);\n }\n static toUint8Array(pem) {\n const bytes = this.toArrayBuffer(pem);\n return new Uint8Array(bytes);\n }\n static fromBufferSource(buffer, tag) {\n const base64 = Convert.ToBase64(buffer);\n let sliced;\n let offset = 0;\n const rows = [];\n while (offset < base64.length) {\n sliced = base64.slice(offset, offset + 64);\n if (sliced.length) {\n rows.push(sliced);\n }\n else {\n break;\n }\n offset += 64;\n }\n const upperCaseTag = tag.toUpperCase();\n return `-----BEGIN ${upperCaseTag}-----\\n${rows.join(\"\\n\")}\\n-----END ${upperCaseTag}-----`;\n }\n static isPEM(data) {\n return /-----BEGIN .+-----[A-Za-z0-9+/+=\\s\\n]+-----END .+-----/i.test(data);\n }\n static getTagName(pem) {\n if (!this.isPEM(pem)) {\n throw new Error(\"Bad parameter. Incoming data is not right PEM\");\n }\n const res = /-----BEGIN (.+)-----/.exec(pem);\n if (!res) {\n throw new Error(\"Cannot get tag from PEM\");\n }\n return res[1];\n }\n static hasTagName(pem, tagName) {\n const tag = this.getTagName(pem);\n return tagName.toLowerCase() === tag.toLowerCase();\n }\n static isCertificate(pem) {\n return this.hasTagName(pem, \"certificate\");\n }\n static isCertificateRequest(pem) {\n return this.hasTagName(pem, \"certificate request\");\n }\n static isCRL(pem) {\n return this.hasTagName(pem, \"x509 crl\");\n }\n static isPublicKey(pem) {\n return this.hasTagName(pem, \"public key\");\n }\n}\n\nfunction isJWK(data) {\n return typeof data === \"object\" && \"kty\" in data;\n}\n\nclass ProviderCrypto {\n async digest(...args) {\n this.checkDigest.apply(this, args);\n return this.onDigest.apply(this, args);\n }\n checkDigest(algorithm, _data) {\n this.checkAlgorithmName(algorithm);\n }\n async onDigest(_algorithm, _data) {\n throw new UnsupportedOperationError(\"digest\");\n }\n async generateKey(...args) {\n this.checkGenerateKey.apply(this, args);\n return this.onGenerateKey.apply(this, args);\n }\n checkGenerateKey(algorithm, _extractable, keyUsages, ..._args) {\n this.checkAlgorithmName(algorithm);\n this.checkGenerateKeyParams(algorithm);\n if (!(keyUsages && keyUsages.length)) {\n throw new TypeError(`Usages cannot be empty when creating a key.`);\n }\n let allowedUsages;\n if (Array.isArray(this.usages)) {\n allowedUsages = this.usages;\n }\n else {\n allowedUsages = this.usages.privateKey.concat(this.usages.publicKey);\n }\n this.checkKeyUsages(keyUsages, allowedUsages);\n }\n checkGenerateKeyParams(_algorithm) {\n }\n async onGenerateKey(_algorithm, _extractable, _keyUsages, ..._args) {\n throw new UnsupportedOperationError(\"generateKey\");\n }\n async sign(...args) {\n this.checkSign.apply(this, args);\n return this.onSign.apply(this, args);\n }\n checkSign(algorithm, key, _data, ..._args) {\n this.checkAlgorithmName(algorithm);\n this.checkAlgorithmParams(algorithm);\n this.checkCryptoKey(key, \"sign\");\n }\n async onSign(_algorithm, _key, _data, ..._args) {\n throw new UnsupportedOperationError(\"sign\");\n }\n async verify(...args) {\n this.checkVerify.apply(this, args);\n return this.onVerify.apply(this, args);\n }\n checkVerify(algorithm, key, _signature, _data, ..._args) {\n this.checkAlgorithmName(algorithm);\n this.checkAlgorithmParams(algorithm);\n this.checkCryptoKey(key, \"verify\");\n }\n async onVerify(_algorithm, _key, _signature, _data, ..._args) {\n throw new UnsupportedOperationError(\"verify\");\n }\n async encrypt(...args) {\n this.checkEncrypt.apply(this, args);\n return this.onEncrypt.apply(this, args);\n }\n checkEncrypt(algorithm, key, _data, options = {}, ..._args) {\n this.checkAlgorithmName(algorithm);\n this.checkAlgorithmParams(algorithm);\n this.checkCryptoKey(key, options.keyUsage ? \"encrypt\" : void 0);\n }\n async onEncrypt(_algorithm, _key, _data, ..._args) {\n throw new UnsupportedOperationError(\"encrypt\");\n }\n async decrypt(...args) {\n this.checkDecrypt.apply(this, args);\n return this.onDecrypt.apply(this, args);\n }\n checkDecrypt(algorithm, key, _data, options = {}, ..._args) {\n this.checkAlgorithmName(algorithm);\n this.checkAlgorithmParams(algorithm);\n this.checkCryptoKey(key, options.keyUsage ? \"decrypt\" : void 0);\n }\n async onDecrypt(_algorithm, _key, _data, ..._args) {\n throw new UnsupportedOperationError(\"decrypt\");\n }\n async deriveBits(...args) {\n this.checkDeriveBits.apply(this, args);\n return this.onDeriveBits.apply(this, args);\n }\n checkDeriveBits(algorithm, baseKey, length, options = {}, ..._args) {\n this.checkAlgorithmName(algorithm);\n this.checkAlgorithmParams(algorithm);\n this.checkCryptoKey(baseKey, options.keyUsage ? \"deriveBits\" : void 0);\n if (length % 8 !== 0) {\n throw new OperationError(\"length: Is not multiple of 8\");\n }\n }\n async onDeriveBits(_algorithm, _baseKey, _length, ..._args) {\n throw new UnsupportedOperationError(\"deriveBits\");\n }\n async exportKey(...args) {\n this.checkExportKey.apply(this, args);\n return this.onExportKey.apply(this, args);\n }\n checkExportKey(format, key, ..._args) {\n this.checkKeyFormat(format);\n this.checkCryptoKey(key);\n if (!key.extractable) {\n throw new CryptoError(\"key: Is not extractable\");\n }\n }\n async onExportKey(_format, _key, ..._args) {\n throw new UnsupportedOperationError(\"exportKey\");\n }\n async importKey(...args) {\n this.checkImportKey.apply(this, args);\n return this.onImportKey.apply(this, args);\n }\n checkImportKey(format, keyData, algorithm, _extractable, keyUsages, ..._args) {\n this.checkKeyFormat(format);\n this.checkKeyData(format, keyData);\n this.checkAlgorithmName(algorithm);\n this.checkImportParams(algorithm);\n if (Array.isArray(this.usages)) {\n this.checkKeyUsages(keyUsages, this.usages);\n }\n }\n async onImportKey(_format, _keyData, _algorithm, _extractable, _keyUsages, ..._args) {\n throw new UnsupportedOperationError(\"importKey\");\n }\n checkAlgorithmName(algorithm) {\n if (algorithm.name.toLowerCase() !== this.name.toLowerCase()) {\n throw new AlgorithmError(\"Unrecognized name\");\n }\n }\n checkAlgorithmParams(_algorithm) {\n }\n checkDerivedKeyParams(_algorithm) {\n }\n checkKeyUsages(usages, allowed) {\n for (const usage of usages) {\n if (allowed.indexOf(usage) === -1) {\n throw new TypeError(\"Cannot create a key using the specified key usages\");\n }\n }\n }\n checkCryptoKey(key, keyUsage) {\n this.checkAlgorithmName(key.algorithm);\n if (keyUsage && key.usages.indexOf(keyUsage) === -1) {\n throw new CryptoError(`key does not match that of operation`);\n }\n }\n checkRequiredProperty(data, propName) {\n if (!(propName in data)) {\n throw new RequiredPropertyError(propName);\n }\n }\n checkHashAlgorithm(algorithm, hashAlgorithms) {\n for (const item of hashAlgorithms) {\n if (item.toLowerCase() === algorithm.name.toLowerCase()) {\n return;\n }\n }\n throw new OperationError(`hash: Must be one of ${hashAlgorithms.join(\", \")}`);\n }\n checkImportParams(_algorithm) {\n }\n checkKeyFormat(format) {\n switch (format) {\n case \"raw\":\n case \"pkcs8\":\n case \"spki\":\n case \"jwk\":\n break;\n default:\n throw new TypeError(\"format: Is invalid value. Must be 'jwk', 'raw', 'spki', or 'pkcs8'\");\n }\n }\n checkKeyData(format, keyData) {\n if (!keyData) {\n throw new TypeError(\"keyData: Cannot be empty on empty on key importing\");\n }\n if (format === \"jwk\") {\n if (!isJWK(keyData)) {\n throw new TypeError(\"keyData: Is not JsonWebToken\");\n }\n }\n else if (!BufferSourceConverter.isBufferSource(keyData)) {\n throw new TypeError(\"keyData: Is not ArrayBufferView or ArrayBuffer\");\n }\n }\n prepareData(data) {\n return BufferSourceConverter.toArrayBuffer(data);\n }\n}\n\nclass AesProvider extends ProviderCrypto {\n checkGenerateKeyParams(algorithm) {\n this.checkRequiredProperty(algorithm, \"length\");\n if (typeof algorithm.length !== \"number\") {\n throw new TypeError(\"length: Is not of type Number\");\n }\n switch (algorithm.length) {\n case 128:\n case 192:\n case 256:\n break;\n default:\n throw new TypeError(\"length: Must be 128, 192, or 256\");\n }\n }\n checkDerivedKeyParams(algorithm) {\n this.checkGenerateKeyParams(algorithm);\n }\n}\n\nclass AesCbcProvider extends AesProvider {\n constructor() {\n super(...arguments);\n this.name = \"AES-CBC\";\n this.usages = [\"encrypt\", \"decrypt\", \"wrapKey\", \"unwrapKey\"];\n }\n checkAlgorithmParams(algorithm) {\n this.checkRequiredProperty(algorithm, \"iv\");\n if (!(algorithm.iv instanceof ArrayBuffer || ArrayBuffer.isView(algorithm.iv))) {\n throw new TypeError(\"iv: Is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n if (algorithm.iv.byteLength !== 16) {\n throw new TypeError(\"iv: Must have length 16 bytes\");\n }\n }\n}\n\nclass AesCmacProvider extends AesProvider {\n constructor() {\n super(...arguments);\n this.name = \"AES-CMAC\";\n this.usages = [\"sign\", \"verify\"];\n }\n checkAlgorithmParams(algorithm) {\n this.checkRequiredProperty(algorithm, \"length\");\n if (typeof algorithm.length !== \"number\") {\n throw new TypeError(\"length: Is not a Number\");\n }\n if (algorithm.length < 1) {\n throw new OperationError(\"length: Must be more than 0\");\n }\n }\n}\n\nclass AesCtrProvider extends AesProvider {\n constructor() {\n super(...arguments);\n this.name = \"AES-CTR\";\n this.usages = [\"encrypt\", \"decrypt\", \"wrapKey\", \"unwrapKey\"];\n }\n checkAlgorithmParams(algorithm) {\n this.checkRequiredProperty(algorithm, \"counter\");\n if (!(algorithm.counter instanceof ArrayBuffer || ArrayBuffer.isView(algorithm.counter))) {\n throw new TypeError(\"counter: Is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n if (algorithm.counter.byteLength !== 16) {\n throw new TypeError(\"iv: Must have length 16 bytes\");\n }\n this.checkRequiredProperty(algorithm, \"length\");\n if (typeof algorithm.length !== \"number\") {\n throw new TypeError(\"length: Is not a Number\");\n }\n if (algorithm.length < 1) {\n throw new OperationError(\"length: Must be more than 0\");\n }\n }\n}\n\nclass AesEcbProvider extends AesProvider {\n constructor() {\n super(...arguments);\n this.name = \"AES-ECB\";\n this.usages = [\"encrypt\", \"decrypt\", \"wrapKey\", \"unwrapKey\"];\n }\n}\n\nclass AesGcmProvider extends AesProvider {\n constructor() {\n super(...arguments);\n this.name = \"AES-GCM\";\n this.usages = [\"encrypt\", \"decrypt\", \"wrapKey\", \"unwrapKey\"];\n }\n checkAlgorithmParams(algorithm) {\n this.checkRequiredProperty(algorithm, \"iv\");\n if (!(algorithm.iv instanceof ArrayBuffer || ArrayBuffer.isView(algorithm.iv))) {\n throw new TypeError(\"iv: Is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n if (algorithm.iv.byteLength < 1) {\n throw new OperationError(\"iv: Must have length more than 0 and less than 2^64 - 1\");\n }\n if (!(\"tagLength\" in algorithm)) {\n algorithm.tagLength = 128;\n }\n switch (algorithm.tagLength) {\n case 32:\n case 64:\n case 96:\n case 104:\n case 112:\n case 120:\n case 128:\n break;\n default:\n throw new OperationError(\"tagLength: Must be one of 32, 64, 96, 104, 112, 120 or 128\");\n }\n }\n}\n\nclass AesKwProvider extends AesProvider {\n constructor() {\n super(...arguments);\n this.name = \"AES-KW\";\n this.usages = [\"wrapKey\", \"unwrapKey\"];\n }\n}\n\nclass DesProvider extends ProviderCrypto {\n constructor() {\n super(...arguments);\n this.usages = [\"encrypt\", \"decrypt\", \"wrapKey\", \"unwrapKey\"];\n }\n checkAlgorithmParams(algorithm) {\n if (this.ivSize) {\n this.checkRequiredProperty(algorithm, \"iv\");\n if (!(algorithm.iv instanceof ArrayBuffer || ArrayBuffer.isView(algorithm.iv))) {\n throw new TypeError(\"iv: Is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n if (algorithm.iv.byteLength !== this.ivSize) {\n throw new TypeError(`iv: Must have length ${this.ivSize} bytes`);\n }\n }\n }\n checkGenerateKeyParams(algorithm) {\n this.checkRequiredProperty(algorithm, \"length\");\n if (typeof algorithm.length !== \"number\") {\n throw new TypeError(\"length: Is not of type Number\");\n }\n if (algorithm.length !== this.keySizeBits) {\n throw new OperationError(`algorithm.length: Must be ${this.keySizeBits}`);\n }\n }\n checkDerivedKeyParams(algorithm) {\n this.checkGenerateKeyParams(algorithm);\n }\n}\n\nclass RsaProvider extends ProviderCrypto {\n constructor() {\n super(...arguments);\n this.hashAlgorithms = [\"SHA-1\", \"SHA-256\", \"SHA-384\", \"SHA-512\"];\n }\n checkGenerateKeyParams(algorithm) {\n this.checkRequiredProperty(algorithm, \"hash\");\n this.checkHashAlgorithm(algorithm.hash, this.hashAlgorithms);\n this.checkRequiredProperty(algorithm, \"publicExponent\");\n if (!(algorithm.publicExponent && algorithm.publicExponent instanceof Uint8Array)) {\n throw new TypeError(\"publicExponent: Missing or not a Uint8Array\");\n }\n const publicExponent = Convert.ToBase64(algorithm.publicExponent);\n if (!(publicExponent === \"Aw==\" || publicExponent === \"AQAB\")) {\n throw new TypeError(\"publicExponent: Must be [3] or [1,0,1]\");\n }\n this.checkRequiredProperty(algorithm, \"modulusLength\");\n if (algorithm.modulusLength % 8\n || algorithm.modulusLength < 256\n || algorithm.modulusLength > 16384) {\n throw new TypeError(\"The modulus length must be a multiple of 8 bits and >= 256 and <= 16384\");\n }\n }\n checkImportParams(algorithm) {\n this.checkRequiredProperty(algorithm, \"hash\");\n this.checkHashAlgorithm(algorithm.hash, this.hashAlgorithms);\n }\n}\n\nclass RsaSsaProvider extends RsaProvider {\n constructor() {\n super(...arguments);\n this.name = \"RSASSA-PKCS1-v1_5\";\n this.usages = {\n privateKey: [\"sign\"],\n publicKey: [\"verify\"],\n };\n }\n}\n\nclass RsaPssProvider extends RsaProvider {\n constructor() {\n super(...arguments);\n this.name = \"RSA-PSS\";\n this.usages = {\n privateKey: [\"sign\"],\n publicKey: [\"verify\"],\n };\n }\n checkAlgorithmParams(algorithm) {\n this.checkRequiredProperty(algorithm, \"saltLength\");\n if (typeof algorithm.saltLength !== \"number\") {\n throw new TypeError(\"saltLength: Is not a Number\");\n }\n if (algorithm.saltLength < 0) {\n throw new RangeError(\"saltLength: Must be positive number\");\n }\n }\n}\n\nclass RsaOaepProvider extends RsaProvider {\n constructor() {\n super(...arguments);\n this.name = \"RSA-OAEP\";\n this.usages = {\n privateKey: [\"decrypt\", \"unwrapKey\"],\n publicKey: [\"encrypt\", \"wrapKey\"],\n };\n }\n checkAlgorithmParams(algorithm) {\n if (algorithm.label\n && !(algorithm.label instanceof ArrayBuffer || ArrayBuffer.isView(algorithm.label))) {\n throw new TypeError(\"label: Is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n }\n}\n\nclass EllipticProvider extends ProviderCrypto {\n checkGenerateKeyParams(algorithm) {\n this.checkRequiredProperty(algorithm, \"namedCurve\");\n this.checkNamedCurve(algorithm.namedCurve);\n }\n checkNamedCurve(namedCurve) {\n for (const item of this.namedCurves) {\n if (item.toLowerCase() === namedCurve.toLowerCase()) {\n return;\n }\n }\n throw new OperationError(`namedCurve: Must be one of ${this.namedCurves.join(\", \")}`);\n }\n}\n\nclass EcdsaProvider extends EllipticProvider {\n constructor() {\n super(...arguments);\n this.name = \"ECDSA\";\n this.hashAlgorithms = [\"SHA-1\", \"SHA-256\", \"SHA-384\", \"SHA-512\"];\n this.usages = {\n privateKey: [\"sign\"],\n publicKey: [\"verify\"],\n };\n this.namedCurves = [\"P-256\", \"P-384\", \"P-521\", \"K-256\"];\n }\n checkAlgorithmParams(algorithm) {\n this.checkRequiredProperty(algorithm, \"hash\");\n this.checkHashAlgorithm(algorithm.hash, this.hashAlgorithms);\n }\n}\n\nconst KEY_TYPES = [\"secret\", \"private\", \"public\"];\nclass CryptoKey {\n static create(algorithm, type, extractable, usages) {\n const key = new this();\n key.algorithm = algorithm;\n key.type = type;\n key.extractable = extractable;\n key.usages = usages;\n return key;\n }\n static isKeyType(data) {\n return KEY_TYPES.indexOf(data) !== -1;\n }\n get [Symbol.toStringTag]() {\n return \"CryptoKey\";\n }\n}\n\nclass EcdhProvider extends EllipticProvider {\n constructor() {\n super(...arguments);\n this.name = \"ECDH\";\n this.usages = {\n privateKey: [\"deriveBits\", \"deriveKey\"],\n publicKey: [],\n };\n this.namedCurves = [\"P-256\", \"P-384\", \"P-521\", \"K-256\"];\n }\n checkAlgorithmParams(algorithm) {\n this.checkRequiredProperty(algorithm, \"public\");\n if (!(algorithm.public instanceof CryptoKey)) {\n throw new TypeError(\"public: Is not a CryptoKey\");\n }\n if (algorithm.public.type !== \"public\") {\n throw new OperationError(\"public: Is not a public key\");\n }\n if (algorithm.public.algorithm.name !== this.name) {\n throw new OperationError(`public: Is not ${this.name} key`);\n }\n }\n}\n\nclass EcdhEsProvider extends EcdhProvider {\n constructor() {\n super(...arguments);\n this.name = \"ECDH-ES\";\n this.namedCurves = [\"X25519\", \"X448\"];\n }\n}\n\nclass EdDsaProvider extends EllipticProvider {\n constructor() {\n super(...arguments);\n this.name = \"EdDSA\";\n this.usages = {\n privateKey: [\"sign\"],\n publicKey: [\"verify\"],\n };\n this.namedCurves = [\"Ed25519\", \"Ed448\"];\n }\n}\n\nlet ObjectIdentifier = class ObjectIdentifier {\n constructor(value) {\n if (value) {\n this.value = value;\n }\n }\n};\n__decorate([\n AsnProp({ type: AsnPropTypes.ObjectIdentifier })\n], ObjectIdentifier.prototype, \"value\", void 0);\nObjectIdentifier = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], ObjectIdentifier);\n\nclass AlgorithmIdentifier {\n constructor(params) {\n Object.assign(this, params);\n }\n}\n__decorate([\n AsnProp({\n type: AsnPropTypes.ObjectIdentifier,\n })\n], AlgorithmIdentifier.prototype, \"algorithm\", void 0);\n__decorate([\n AsnProp({\n type: AsnPropTypes.Any,\n optional: true,\n })\n], AlgorithmIdentifier.prototype, \"parameters\", void 0);\n\nclass PrivateKeyInfo {\n constructor() {\n this.version = 0;\n this.privateKeyAlgorithm = new AlgorithmIdentifier();\n this.privateKey = new ArrayBuffer(0);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer })\n], PrivateKeyInfo.prototype, \"version\", void 0);\n__decorate([\n AsnProp({ type: AlgorithmIdentifier })\n], PrivateKeyInfo.prototype, \"privateKeyAlgorithm\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.OctetString })\n], PrivateKeyInfo.prototype, \"privateKey\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Any, optional: true })\n], PrivateKeyInfo.prototype, \"attributes\", void 0);\n\nclass PublicKeyInfo {\n constructor() {\n this.publicKeyAlgorithm = new AlgorithmIdentifier();\n this.publicKey = new ArrayBuffer(0);\n }\n}\n__decorate([\n AsnProp({ type: AlgorithmIdentifier })\n], PublicKeyInfo.prototype, \"publicKeyAlgorithm\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.BitString })\n], PublicKeyInfo.prototype, \"publicKey\", void 0);\n\nconst JsonBase64UrlArrayBufferConverter = {\n fromJSON: (value) => Convert.FromBase64Url(value),\n toJSON: (value) => Convert.ToBase64Url(new Uint8Array(value)),\n};\n\nconst AsnIntegerArrayBufferConverter = {\n fromASN: (value) => {\n const valueHex = value.valueBlock.valueHex;\n return !(new Uint8Array(valueHex)[0])\n ? value.valueBlock.valueHex.slice(1)\n : value.valueBlock.valueHex;\n },\n toASN: (value) => {\n const valueHex = new Uint8Array(value)[0] > 127\n ? combine(new Uint8Array([0]).buffer, value)\n : value;\n return new asn1.Integer({ valueHex });\n },\n};\n\nvar index$3 = /*#__PURE__*/Object.freeze({\n __proto__: null,\n AsnIntegerArrayBufferConverter: AsnIntegerArrayBufferConverter,\n JsonBase64UrlArrayBufferConverter: JsonBase64UrlArrayBufferConverter\n});\n\nclass RsaPrivateKey {\n constructor() {\n this.version = 0;\n this.modulus = new ArrayBuffer(0);\n this.publicExponent = new ArrayBuffer(0);\n this.privateExponent = new ArrayBuffer(0);\n this.prime1 = new ArrayBuffer(0);\n this.prime2 = new ArrayBuffer(0);\n this.exponent1 = new ArrayBuffer(0);\n this.exponent2 = new ArrayBuffer(0);\n this.coefficient = new ArrayBuffer(0);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer, converter: AsnIntegerConverter })\n], RsaPrivateKey.prototype, \"version\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer, converter: AsnIntegerArrayBufferConverter }),\n JsonProp({ name: \"n\", converter: JsonBase64UrlArrayBufferConverter })\n], RsaPrivateKey.prototype, \"modulus\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer, converter: AsnIntegerArrayBufferConverter }),\n JsonProp({ name: \"e\", converter: JsonBase64UrlArrayBufferConverter })\n], RsaPrivateKey.prototype, \"publicExponent\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer, converter: AsnIntegerArrayBufferConverter }),\n JsonProp({ name: \"d\", converter: JsonBase64UrlArrayBufferConverter })\n], RsaPrivateKey.prototype, \"privateExponent\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer, converter: AsnIntegerArrayBufferConverter }),\n JsonProp({ name: \"p\", converter: JsonBase64UrlArrayBufferConverter })\n], RsaPrivateKey.prototype, \"prime1\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer, converter: AsnIntegerArrayBufferConverter }),\n JsonProp({ name: \"q\", converter: JsonBase64UrlArrayBufferConverter })\n], RsaPrivateKey.prototype, \"prime2\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer, converter: AsnIntegerArrayBufferConverter }),\n JsonProp({ name: \"dp\", converter: JsonBase64UrlArrayBufferConverter })\n], RsaPrivateKey.prototype, \"exponent1\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer, converter: AsnIntegerArrayBufferConverter }),\n JsonProp({ name: \"dq\", converter: JsonBase64UrlArrayBufferConverter })\n], RsaPrivateKey.prototype, \"exponent2\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer, converter: AsnIntegerArrayBufferConverter }),\n JsonProp({ name: \"qi\", converter: JsonBase64UrlArrayBufferConverter })\n], RsaPrivateKey.prototype, \"coefficient\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Any, optional: true })\n], RsaPrivateKey.prototype, \"otherPrimeInfos\", void 0);\n\nclass RsaPublicKey {\n constructor() {\n this.modulus = new ArrayBuffer(0);\n this.publicExponent = new ArrayBuffer(0);\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer, converter: AsnIntegerArrayBufferConverter }),\n JsonProp({ name: \"n\", converter: JsonBase64UrlArrayBufferConverter })\n], RsaPublicKey.prototype, \"modulus\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer, converter: AsnIntegerArrayBufferConverter }),\n JsonProp({ name: \"e\", converter: JsonBase64UrlArrayBufferConverter })\n], RsaPublicKey.prototype, \"publicExponent\", void 0);\n\nlet EcPublicKey = class EcPublicKey {\n constructor(value) {\n this.value = new ArrayBuffer(0);\n if (value) {\n this.value = value;\n }\n }\n toJSON() {\n let bytes = new Uint8Array(this.value);\n if (bytes[0] !== 0x04) {\n throw new CryptoError(\"Wrong ECPoint. Current version supports only Uncompressed (0x04) point\");\n }\n bytes = new Uint8Array(this.value.slice(1));\n const size = bytes.length / 2;\n const offset = 0;\n const json = {\n x: Convert.ToBase64Url(bytes.buffer.slice(offset, offset + size)),\n y: Convert.ToBase64Url(bytes.buffer.slice(offset + size, offset + size + size)),\n };\n return json;\n }\n fromJSON(json) {\n if (!(\"x\" in json)) {\n throw new Error(\"x: Missing required property\");\n }\n if (!(\"y\" in json)) {\n throw new Error(\"y: Missing required property\");\n }\n const x = Convert.FromBase64Url(json.x);\n const y = Convert.FromBase64Url(json.y);\n const value = combine(new Uint8Array([0x04]).buffer, x, y);\n this.value = new Uint8Array(value).buffer;\n return this;\n }\n};\n__decorate([\n AsnProp({ type: AsnPropTypes.OctetString })\n], EcPublicKey.prototype, \"value\", void 0);\nEcPublicKey = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], EcPublicKey);\n\nclass EcPrivateKey {\n constructor() {\n this.version = 1;\n this.privateKey = new ArrayBuffer(0);\n }\n fromJSON(json) {\n if (!(\"d\" in json)) {\n throw new Error(\"d: Missing required property\");\n }\n this.privateKey = Convert.FromBase64Url(json.d);\n if (\"x\" in json) {\n const publicKey = new EcPublicKey();\n publicKey.fromJSON(json);\n const asn = AsnSerializer.toASN(publicKey);\n if (\"valueHex\" in asn.valueBlock) {\n this.publicKey = asn.valueBlock.valueHex;\n }\n }\n return this;\n }\n toJSON() {\n const jwk = {};\n jwk.d = Convert.ToBase64Url(this.privateKey);\n if (this.publicKey) {\n Object.assign(jwk, new EcPublicKey(this.publicKey).toJSON());\n }\n return jwk;\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer, converter: AsnIntegerConverter })\n], EcPrivateKey.prototype, \"version\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.OctetString })\n], EcPrivateKey.prototype, \"privateKey\", void 0);\n__decorate([\n AsnProp({ context: 0, type: AsnPropTypes.Any, optional: true })\n], EcPrivateKey.prototype, \"parameters\", void 0);\n__decorate([\n AsnProp({ context: 1, type: AsnPropTypes.BitString, optional: true })\n], EcPrivateKey.prototype, \"publicKey\", void 0);\n\nconst AsnIntegerWithoutPaddingConverter = {\n fromASN: (value) => {\n const bytes = new Uint8Array(value.valueBlock.valueHex);\n return (bytes[0] === 0)\n ? bytes.buffer.slice(1)\n : bytes.buffer;\n },\n toASN: (value) => {\n const bytes = new Uint8Array(value);\n if (bytes[0] > 127) {\n const newValue = new Uint8Array(bytes.length + 1);\n newValue.set(bytes, 1);\n return new asn1.Integer({ valueHex: newValue.buffer });\n }\n return new asn1.Integer({ valueHex: value });\n },\n};\n\nvar index$2 = /*#__PURE__*/Object.freeze({\n __proto__: null,\n AsnIntegerWithoutPaddingConverter: AsnIntegerWithoutPaddingConverter\n});\n\nclass EcUtils {\n static decodePoint(data, pointSize) {\n const view = BufferSourceConverter.toUint8Array(data);\n if ((view.length === 0) || (view[0] !== 4)) {\n throw new Error(\"Only uncompressed point format supported\");\n }\n const n = (view.length - 1) / 2;\n if (n !== (Math.ceil(pointSize / 8))) {\n throw new Error(\"Point does not match field size\");\n }\n const xb = view.slice(1, n + 1);\n const yb = view.slice(n + 1, n + 1 + n);\n return { x: xb, y: yb };\n }\n static encodePoint(point, pointSize) {\n const size = Math.ceil(pointSize / 8);\n if (point.x.byteLength !== size || point.y.byteLength !== size) {\n throw new Error(\"X,Y coordinates don't match point size criteria\");\n }\n const x = BufferSourceConverter.toUint8Array(point.x);\n const y = BufferSourceConverter.toUint8Array(point.y);\n const res = new Uint8Array(size * 2 + 1);\n res[0] = 4;\n res.set(x, 1);\n res.set(y, size + 1);\n return res;\n }\n static getSize(pointSize) {\n return Math.ceil(pointSize / 8);\n }\n static encodeSignature(signature, pointSize) {\n const size = this.getSize(pointSize);\n const r = BufferSourceConverter.toUint8Array(signature.r);\n const s = BufferSourceConverter.toUint8Array(signature.s);\n const res = new Uint8Array(size * 2);\n res.set(this.padStart(r, size));\n res.set(this.padStart(s, size), size);\n return res;\n }\n static decodeSignature(data, pointSize) {\n const size = this.getSize(pointSize);\n const view = BufferSourceConverter.toUint8Array(data);\n if (view.length !== (size * 2)) {\n throw new Error(\"Incorrect size of the signature\");\n }\n const r = view.slice(0, size);\n const s = view.slice(size);\n return {\n r: this.trimStart(r),\n s: this.trimStart(s),\n };\n }\n static trimStart(data) {\n let i = 0;\n while ((i < data.length - 1) && (data[i] === 0)) {\n i++;\n }\n if (i === 0) {\n return data;\n }\n return data.slice(i, data.length);\n }\n static padStart(data, size) {\n if (size === data.length) {\n return data;\n }\n const res = new Uint8Array(size);\n res.set(data, size - data.length);\n return res;\n }\n}\n\nclass EcDsaSignature {\n constructor() {\n this.r = new ArrayBuffer(0);\n this.s = new ArrayBuffer(0);\n }\n static fromWebCryptoSignature(value) {\n const pointSize = value.byteLength / 2;\n const point = EcUtils.decodeSignature(value, pointSize * 8);\n const ecSignature = new EcDsaSignature();\n ecSignature.r = BufferSourceConverter.toArrayBuffer(point.r);\n ecSignature.s = BufferSourceConverter.toArrayBuffer(point.s);\n return ecSignature;\n }\n toWebCryptoSignature(pointSize) {\n pointSize !== null && pointSize !== void 0 ? pointSize : (pointSize = Math.max(this.r.byteLength, this.s.byteLength) * 8);\n const signature = EcUtils.encodeSignature(this, pointSize);\n return signature.buffer;\n }\n}\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer, converter: AsnIntegerWithoutPaddingConverter })\n], EcDsaSignature.prototype, \"r\", void 0);\n__decorate([\n AsnProp({ type: AsnPropTypes.Integer, converter: AsnIntegerWithoutPaddingConverter })\n], EcDsaSignature.prototype, \"s\", void 0);\n\nclass OneAsymmetricKey extends PrivateKeyInfo {\n}\n__decorate([\n AsnProp({ context: 1, implicit: true, type: AsnPropTypes.BitString, optional: true })\n], OneAsymmetricKey.prototype, \"publicKey\", void 0);\n\nlet EdPrivateKey = class EdPrivateKey {\n constructor() {\n this.value = new ArrayBuffer(0);\n }\n fromJSON(json) {\n if (!json.d) {\n throw new Error(\"d: Missing required property\");\n }\n this.value = Convert.FromBase64Url(json.d);\n return this;\n }\n toJSON() {\n const jwk = {\n d: Convert.ToBase64Url(this.value),\n };\n return jwk;\n }\n};\n__decorate([\n AsnProp({ type: AsnPropTypes.OctetString })\n], EdPrivateKey.prototype, \"value\", void 0);\nEdPrivateKey = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], EdPrivateKey);\n\nlet EdPublicKey = class EdPublicKey {\n constructor(value) {\n this.value = new ArrayBuffer(0);\n if (value) {\n this.value = value;\n }\n }\n toJSON() {\n const json = {\n x: Convert.ToBase64Url(this.value),\n };\n return json;\n }\n fromJSON(json) {\n if (!(\"x\" in json)) {\n throw new Error(\"x: Missing required property\");\n }\n this.value = Convert.FromBase64Url(json.x);\n return this;\n }\n};\n__decorate([\n AsnProp({ type: AsnPropTypes.BitString })\n], EdPublicKey.prototype, \"value\", void 0);\nEdPublicKey = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], EdPublicKey);\n\nlet CurvePrivateKey = class CurvePrivateKey {\n};\n__decorate([\n AsnProp({ type: AsnPropTypes.OctetString }),\n JsonProp({ type: JsonPropTypes.String, converter: JsonBase64UrlArrayBufferConverter })\n], CurvePrivateKey.prototype, \"d\", void 0);\nCurvePrivateKey = __decorate([\n AsnType({ type: AsnTypeTypes.Choice })\n], CurvePrivateKey);\n\nconst idSecp256r1 = \"1.2.840.10045.3.1.7\";\nconst idEllipticCurve = \"1.3.132.0\";\nconst idSecp384r1 = `${idEllipticCurve}.34`;\nconst idSecp521r1 = `${idEllipticCurve}.35`;\nconst idSecp256k1 = `${idEllipticCurve}.10`;\nconst idVersionOne = \"1.3.36.3.3.2.8.1.1\";\nconst idBrainpoolP160r1 = `${idVersionOne}.1`;\nconst idBrainpoolP160t1 = `${idVersionOne}.2`;\nconst idBrainpoolP192r1 = `${idVersionOne}.3`;\nconst idBrainpoolP192t1 = `${idVersionOne}.4`;\nconst idBrainpoolP224r1 = `${idVersionOne}.5`;\nconst idBrainpoolP224t1 = `${idVersionOne}.6`;\nconst idBrainpoolP256r1 = `${idVersionOne}.7`;\nconst idBrainpoolP256t1 = `${idVersionOne}.8`;\nconst idBrainpoolP320r1 = `${idVersionOne}.9`;\nconst idBrainpoolP320t1 = `${idVersionOne}.10`;\nconst idBrainpoolP384r1 = `${idVersionOne}.11`;\nconst idBrainpoolP384t1 = `${idVersionOne}.12`;\nconst idBrainpoolP512r1 = `${idVersionOne}.13`;\nconst idBrainpoolP512t1 = `${idVersionOne}.14`;\nconst idX25519 = \"1.3.101.110\";\nconst idX448 = \"1.3.101.111\";\nconst idEd25519 = \"1.3.101.112\";\nconst idEd448 = \"1.3.101.113\";\n\nvar index$1 = /*#__PURE__*/Object.freeze({\n __proto__: null,\n AlgorithmIdentifier: AlgorithmIdentifier,\n get CurvePrivateKey () { return CurvePrivateKey; },\n EcDsaSignature: EcDsaSignature,\n EcPrivateKey: EcPrivateKey,\n get EcPublicKey () { return EcPublicKey; },\n get EdPrivateKey () { return EdPrivateKey; },\n get EdPublicKey () { return EdPublicKey; },\n get ObjectIdentifier () { return ObjectIdentifier; },\n OneAsymmetricKey: OneAsymmetricKey,\n PrivateKeyInfo: PrivateKeyInfo,\n PublicKeyInfo: PublicKeyInfo,\n RsaPrivateKey: RsaPrivateKey,\n RsaPublicKey: RsaPublicKey,\n converters: index$2,\n idBrainpoolP160r1: idBrainpoolP160r1,\n idBrainpoolP160t1: idBrainpoolP160t1,\n idBrainpoolP192r1: idBrainpoolP192r1,\n idBrainpoolP192t1: idBrainpoolP192t1,\n idBrainpoolP224r1: idBrainpoolP224r1,\n idBrainpoolP224t1: idBrainpoolP224t1,\n idBrainpoolP256r1: idBrainpoolP256r1,\n idBrainpoolP256t1: idBrainpoolP256t1,\n idBrainpoolP320r1: idBrainpoolP320r1,\n idBrainpoolP320t1: idBrainpoolP320t1,\n idBrainpoolP384r1: idBrainpoolP384r1,\n idBrainpoolP384t1: idBrainpoolP384t1,\n idBrainpoolP512r1: idBrainpoolP512r1,\n idBrainpoolP512t1: idBrainpoolP512t1,\n idEd25519: idEd25519,\n idEd448: idEd448,\n idEllipticCurve: idEllipticCurve,\n idSecp256k1: idSecp256k1,\n idSecp256r1: idSecp256r1,\n idSecp384r1: idSecp384r1,\n idSecp521r1: idSecp521r1,\n idVersionOne: idVersionOne,\n idX25519: idX25519,\n idX448: idX448\n});\n\nclass EcCurves {\n constructor() { }\n static register(item) {\n const oid = new ObjectIdentifier();\n oid.value = item.id;\n const raw = AsnConvert.serialize(oid);\n this.items.push({\n ...item,\n raw,\n });\n this.names.push(item.name);\n }\n static find(nameOrId) {\n nameOrId = nameOrId.toUpperCase();\n for (const item of this.items) {\n if (item.name.toUpperCase() === nameOrId || item.id.toUpperCase() === nameOrId) {\n return item;\n }\n }\n return null;\n }\n static get(nameOrId) {\n const res = this.find(nameOrId);\n if (!res) {\n throw new Error(`Unsupported EC named curve '${nameOrId}'`);\n }\n return res;\n }\n}\nEcCurves.items = [];\nEcCurves.names = [];\nEcCurves.register({ name: \"P-256\", id: idSecp256r1, size: 256 });\nEcCurves.register({ name: \"P-384\", id: idSecp384r1, size: 384 });\nEcCurves.register({ name: \"P-521\", id: idSecp521r1, size: 521 });\nEcCurves.register({ name: \"K-256\", id: idSecp256k1, size: 256 });\nEcCurves.register({ name: \"brainpoolP160r1\", id: idBrainpoolP160r1, size: 160 });\nEcCurves.register({ name: \"brainpoolP160t1\", id: idBrainpoolP160t1, size: 160 });\nEcCurves.register({ name: \"brainpoolP192r1\", id: idBrainpoolP192r1, size: 192 });\nEcCurves.register({ name: \"brainpoolP192t1\", id: idBrainpoolP192t1, size: 192 });\nEcCurves.register({ name: \"brainpoolP224r1\", id: idBrainpoolP224r1, size: 224 });\nEcCurves.register({ name: \"brainpoolP224t1\", id: idBrainpoolP224t1, size: 224 });\nEcCurves.register({ name: \"brainpoolP256r1\", id: idBrainpoolP256r1, size: 256 });\nEcCurves.register({ name: \"brainpoolP256t1\", id: idBrainpoolP256t1, size: 256 });\nEcCurves.register({ name: \"brainpoolP320r1\", id: idBrainpoolP320r1, size: 320 });\nEcCurves.register({ name: \"brainpoolP320t1\", id: idBrainpoolP320t1, size: 320 });\nEcCurves.register({ name: \"brainpoolP384r1\", id: idBrainpoolP384r1, size: 384 });\nEcCurves.register({ name: \"brainpoolP384t1\", id: idBrainpoolP384t1, size: 384 });\nEcCurves.register({ name: \"brainpoolP512r1\", id: idBrainpoolP512r1, size: 512 });\nEcCurves.register({ name: \"brainpoolP512t1\", id: idBrainpoolP512t1, size: 512 });\n\nclass HmacProvider extends ProviderCrypto {\n constructor() {\n super(...arguments);\n this.name = \"HMAC\";\n this.hashAlgorithms = [\"SHA-1\", \"SHA-256\", \"SHA-384\", \"SHA-512\"];\n this.usages = [\"sign\", \"verify\"];\n }\n getDefaultLength(algName) {\n switch (algName.toUpperCase()) {\n case \"SHA-1\":\n case \"SHA-256\":\n case \"SHA-384\":\n case \"SHA-512\":\n return 512;\n default:\n throw new Error(`Unknown algorithm name '${algName}'`);\n }\n }\n checkGenerateKeyParams(algorithm) {\n this.checkRequiredProperty(algorithm, \"hash\");\n this.checkHashAlgorithm(algorithm.hash, this.hashAlgorithms);\n if (\"length\" in algorithm) {\n if (typeof algorithm.length !== \"number\") {\n throw new TypeError(\"length: Is not a Number\");\n }\n if (algorithm.length < 1) {\n throw new RangeError(\"length: Number is out of range\");\n }\n }\n }\n checkImportParams(algorithm) {\n this.checkRequiredProperty(algorithm, \"hash\");\n this.checkHashAlgorithm(algorithm.hash, this.hashAlgorithms);\n }\n}\n\nclass Pbkdf2Provider extends ProviderCrypto {\n constructor() {\n super(...arguments);\n this.name = \"PBKDF2\";\n this.hashAlgorithms = [\"SHA-1\", \"SHA-256\", \"SHA-384\", \"SHA-512\"];\n this.usages = [\"deriveBits\", \"deriveKey\"];\n }\n checkAlgorithmParams(algorithm) {\n this.checkRequiredProperty(algorithm, \"hash\");\n this.checkHashAlgorithm(algorithm.hash, this.hashAlgorithms);\n this.checkRequiredProperty(algorithm, \"salt\");\n if (!(algorithm.salt instanceof ArrayBuffer || ArrayBuffer.isView(algorithm.salt))) {\n throw new TypeError(\"salt: Is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n this.checkRequiredProperty(algorithm, \"iterations\");\n if (typeof algorithm.iterations !== \"number\") {\n throw new TypeError(\"iterations: Is not a Number\");\n }\n if (algorithm.iterations < 1) {\n throw new TypeError(\"iterations: Is less than 1\");\n }\n }\n checkImportKey(format, keyData, algorithm, extractable, keyUsages, ...args) {\n super.checkImportKey(format, keyData, algorithm, extractable, keyUsages, ...args);\n if (extractable) {\n throw new SyntaxError(\"extractable: Must be 'false'\");\n }\n }\n}\n\nclass HkdfProvider extends ProviderCrypto {\n constructor() {\n super(...arguments);\n this.name = \"HKDF\";\n this.hashAlgorithms = [\"SHA-1\", \"SHA-256\", \"SHA-384\", \"SHA-512\"];\n this.usages = [\"deriveKey\", \"deriveBits\"];\n }\n checkAlgorithmParams(algorithm) {\n this.checkRequiredProperty(algorithm, \"hash\");\n this.checkHashAlgorithm(algorithm.hash, this.hashAlgorithms);\n this.checkRequiredProperty(algorithm, \"salt\");\n if (!BufferSourceConverter.isBufferSource(algorithm.salt)) {\n throw new TypeError(\"salt: Is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n this.checkRequiredProperty(algorithm, \"info\");\n if (!BufferSourceConverter.isBufferSource(algorithm.info)) {\n throw new TypeError(\"salt: Is not of type '(ArrayBuffer or ArrayBufferView)'\");\n }\n }\n checkImportKey(format, keyData, algorithm, extractable, keyUsages, ...args) {\n super.checkImportKey(format, keyData, algorithm, extractable, keyUsages, ...args);\n if (extractable) {\n throw new SyntaxError(\"extractable: Must be 'false'\");\n }\n }\n}\n\nclass ShakeProvider extends ProviderCrypto {\n constructor() {\n super(...arguments);\n this.usages = [];\n this.defaultLength = 0;\n }\n digest(...args) {\n args[0] = { length: this.defaultLength, ...args[0] };\n return super.digest.apply(this, args);\n }\n checkDigest(algorithm, data) {\n super.checkDigest(algorithm, data);\n const length = algorithm.length || 0;\n if (typeof length !== \"number\") {\n throw new TypeError(\"length: Is not a Number\");\n }\n if (length < 0) {\n throw new TypeError(\"length: Is negative\");\n }\n }\n}\n\nclass Shake128Provider extends ShakeProvider {\n constructor() {\n super(...arguments);\n this.name = \"shake128\";\n this.defaultLength = 16;\n }\n}\n\nclass Shake256Provider extends ShakeProvider {\n constructor() {\n super(...arguments);\n this.name = \"shake256\";\n this.defaultLength = 32;\n }\n}\n\nclass Crypto {\n get [Symbol.toStringTag]() {\n return \"Crypto\";\n }\n randomUUID() {\n const b = this.getRandomValues(new Uint8Array(16));\n b[6] = (b[6] & 0x0f) | 0x40;\n b[8] = (b[8] & 0x3f) | 0x80;\n const uuid = Convert.ToHex(b).toLowerCase();\n return `${uuid.substring(0, 8)}-${uuid.substring(8, 12)}-${uuid.substring(12, 16)}-${uuid.substring(16, 20)}-${uuid.substring(20)}`;\n }\n}\n\nclass ProviderStorage {\n constructor() {\n this.items = {};\n }\n get(algorithmName) {\n return this.items[algorithmName.toLowerCase()] || null;\n }\n set(provider) {\n this.items[provider.name.toLowerCase()] = provider;\n }\n removeAt(algorithmName) {\n const provider = this.get(algorithmName.toLowerCase());\n if (provider) {\n delete this.items[algorithmName];\n }\n return provider;\n }\n has(name) {\n return !!this.get(name);\n }\n get length() {\n return Object.keys(this.items).length;\n }\n get algorithms() {\n const algorithms = [];\n for (const key in this.items) {\n const provider = this.items[key];\n algorithms.push(provider.name);\n }\n return algorithms.sort();\n }\n}\n\nclass SubtleCrypto {\n constructor() {\n this.providers = new ProviderStorage();\n }\n static isHashedAlgorithm(data) {\n return data\n && typeof data === \"object\"\n && \"name\" in data\n && \"hash\" in data\n ? true\n : false;\n }\n get [Symbol.toStringTag]() {\n return \"SubtleCrypto\";\n }\n async digest(...args) {\n this.checkRequiredArguments(args, 2, \"digest\");\n const [algorithm, data, ...params] = args;\n const preparedAlgorithm = this.prepareAlgorithm(algorithm);\n const preparedData = BufferSourceConverter.toArrayBuffer(data);\n const provider = this.getProvider(preparedAlgorithm.name);\n const result = await provider.digest(preparedAlgorithm, preparedData, ...params);\n return result;\n }\n async generateKey(...args) {\n this.checkRequiredArguments(args, 3, \"generateKey\");\n const [algorithm, extractable, keyUsages, ...params] = args;\n const preparedAlgorithm = this.prepareAlgorithm(algorithm);\n const provider = this.getProvider(preparedAlgorithm.name);\n const result = await provider.generateKey({ ...preparedAlgorithm, name: provider.name }, extractable, keyUsages, ...params);\n return result;\n }\n async sign(...args) {\n this.checkRequiredArguments(args, 3, \"sign\");\n const [algorithm, key, data, ...params] = args;\n this.checkCryptoKey(key);\n const preparedAlgorithm = this.prepareAlgorithm(algorithm);\n const preparedData = BufferSourceConverter.toArrayBuffer(data);\n const provider = this.getProvider(preparedAlgorithm.name);\n const result = await provider.sign({ ...preparedAlgorithm, name: provider.name }, key, preparedData, ...params);\n return result;\n }\n async verify(...args) {\n this.checkRequiredArguments(args, 4, \"verify\");\n const [algorithm, key, signature, data, ...params] = args;\n this.checkCryptoKey(key);\n const preparedAlgorithm = this.prepareAlgorithm(algorithm);\n const preparedData = BufferSourceConverter.toArrayBuffer(data);\n const preparedSignature = BufferSourceConverter.toArrayBuffer(signature);\n const provider = this.getProvider(preparedAlgorithm.name);\n const result = await provider.verify({ ...preparedAlgorithm, name: provider.name }, key, preparedSignature, preparedData, ...params);\n return result;\n }\n async encrypt(...args) {\n this.checkRequiredArguments(args, 3, \"encrypt\");\n const [algorithm, key, data, ...params] = args;\n this.checkCryptoKey(key);\n const preparedAlgorithm = this.prepareAlgorithm(algorithm);\n const preparedData = BufferSourceConverter.toArrayBuffer(data);\n const provider = this.getProvider(preparedAlgorithm.name);\n const result = await provider.encrypt({ ...preparedAlgorithm, name: provider.name }, key, preparedData, { keyUsage: true }, ...params);\n return result;\n }\n async decrypt(...args) {\n this.checkRequiredArguments(args, 3, \"decrypt\");\n const [algorithm, key, data, ...params] = args;\n this.checkCryptoKey(key);\n const preparedAlgorithm = this.prepareAlgorithm(algorithm);\n const preparedData = BufferSourceConverter.toArrayBuffer(data);\n const provider = this.getProvider(preparedAlgorithm.name);\n const result = await provider.decrypt({ ...preparedAlgorithm, name: provider.name }, key, preparedData, { keyUsage: true }, ...params);\n return result;\n }\n async deriveBits(...args) {\n this.checkRequiredArguments(args, 3, \"deriveBits\");\n const [algorithm, baseKey, length, ...params] = args;\n this.checkCryptoKey(baseKey);\n const preparedAlgorithm = this.prepareAlgorithm(algorithm);\n const provider = this.getProvider(preparedAlgorithm.name);\n const result = await provider.deriveBits({ ...preparedAlgorithm, name: provider.name }, baseKey, length, { keyUsage: true }, ...params);\n return result;\n }\n async deriveKey(...args) {\n this.checkRequiredArguments(args, 5, \"deriveKey\");\n const [algorithm, baseKey, derivedKeyType, extractable, keyUsages, ...params] = args;\n const preparedDerivedKeyType = this.prepareAlgorithm(derivedKeyType);\n const importProvider = this.getProvider(preparedDerivedKeyType.name);\n importProvider.checkDerivedKeyParams(preparedDerivedKeyType);\n const preparedAlgorithm = this.prepareAlgorithm(algorithm);\n const provider = this.getProvider(preparedAlgorithm.name);\n provider.checkCryptoKey(baseKey, \"deriveKey\");\n const derivedBits = await provider.deriveBits({ ...preparedAlgorithm, name: provider.name }, baseKey, derivedKeyType.length || 512, { keyUsage: false }, ...params);\n return this.importKey(\"raw\", derivedBits, derivedKeyType, extractable, keyUsages, ...params);\n }\n async exportKey(...args) {\n this.checkRequiredArguments(args, 2, \"exportKey\");\n const [format, key, ...params] = args;\n this.checkCryptoKey(key);\n const provider = this.getProvider(key.algorithm.name);\n const result = await provider.exportKey(format, key, ...params);\n return result;\n }\n async importKey(...args) {\n this.checkRequiredArguments(args, 5, \"importKey\");\n const [format, keyData, algorithm, extractable, keyUsages, ...params] = args;\n const preparedAlgorithm = this.prepareAlgorithm(algorithm);\n const provider = this.getProvider(preparedAlgorithm.name);\n if ([\"pkcs8\", \"spki\", \"raw\"].indexOf(format) !== -1) {\n const preparedData = BufferSourceConverter.toArrayBuffer(keyData);\n return provider.importKey(format, preparedData, { ...preparedAlgorithm, name: provider.name }, extractable, keyUsages, ...params);\n }\n else {\n if (!keyData.kty) {\n throw new TypeError(\"keyData: Is not JSON\");\n }\n }\n return provider.importKey(format, keyData, { ...preparedAlgorithm, name: provider.name }, extractable, keyUsages, ...params);\n }\n async wrapKey(format, key, wrappingKey, wrapAlgorithm, ...args) {\n let keyData = await this.exportKey(format, key, ...args);\n if (format === \"jwk\") {\n const json = JSON.stringify(keyData);\n keyData = Convert.FromUtf8String(json);\n }\n const preparedAlgorithm = this.prepareAlgorithm(wrapAlgorithm);\n const preparedData = BufferSourceConverter.toArrayBuffer(keyData);\n const provider = this.getProvider(preparedAlgorithm.name);\n return provider.encrypt({ ...preparedAlgorithm, name: provider.name }, wrappingKey, preparedData, { keyUsage: false }, ...args);\n }\n async unwrapKey(format, wrappedKey, unwrappingKey, unwrapAlgorithm, unwrappedKeyAlgorithm, extractable, keyUsages, ...args) {\n const preparedAlgorithm = this.prepareAlgorithm(unwrapAlgorithm);\n const preparedData = BufferSourceConverter.toArrayBuffer(wrappedKey);\n const provider = this.getProvider(preparedAlgorithm.name);\n let keyData = await provider.decrypt({ ...preparedAlgorithm, name: provider.name }, unwrappingKey, preparedData, { keyUsage: false }, ...args);\n if (format === \"jwk\") {\n try {\n keyData = JSON.parse(Convert.ToUtf8String(keyData));\n }\n catch (e) {\n const error = new TypeError(\"wrappedKey: Is not a JSON\");\n error.internal = e;\n throw error;\n }\n }\n return this.importKey(format, keyData, unwrappedKeyAlgorithm, extractable, keyUsages, ...args);\n }\n checkRequiredArguments(args, size, methodName) {\n if (args.length < size) {\n throw new TypeError(`Failed to execute '${methodName}' on 'SubtleCrypto': ${size} arguments required, but only ${args.length} present`);\n }\n }\n prepareAlgorithm(algorithm) {\n if (typeof algorithm === \"string\") {\n return {\n name: algorithm,\n };\n }\n if (SubtleCrypto.isHashedAlgorithm(algorithm)) {\n const preparedAlgorithm = { ...algorithm };\n preparedAlgorithm.hash = this.prepareAlgorithm(algorithm.hash);\n return preparedAlgorithm;\n }\n return { ...algorithm };\n }\n getProvider(name) {\n const provider = this.providers.get(name);\n if (!provider) {\n throw new AlgorithmError(\"Unrecognized name\");\n }\n return provider;\n }\n checkCryptoKey(key) {\n if (!(key instanceof CryptoKey)) {\n throw new TypeError(`Key is not of type 'CryptoKey'`);\n }\n }\n}\n\nvar index = /*#__PURE__*/Object.freeze({\n __proto__: null,\n converters: index$3\n});\n\nconst REQUIRED_FIELDS = [\"crv\", \"e\", \"k\", \"kty\", \"n\", \"x\", \"y\"];\nclass JwkUtils {\n static async thumbprint(hash, jwk, crypto) {\n const data = this.format(jwk, true);\n return crypto.subtle.digest(hash, Convert.FromBinary(JSON.stringify(data)));\n }\n static format(jwk, remove = false) {\n let res = Object.entries(jwk);\n if (remove) {\n res = res.filter(o => REQUIRED_FIELDS.includes(o[0]));\n }\n res = res.sort(([keyA], [keyB]) => keyA > keyB ? 1 : keyA < keyB ? -1 : 0);\n return Object.fromEntries(res);\n }\n}\n\nexport { AesCbcProvider, AesCmacProvider, AesCtrProvider, AesEcbProvider, AesGcmProvider, AesKwProvider, AesProvider, AlgorithmError, Crypto, CryptoError, CryptoKey, DesProvider, EcCurves, EcUtils, EcdhEsProvider, EcdhProvider, EcdsaProvider, EdDsaProvider, EllipticProvider, HkdfProvider, HmacProvider, JwkUtils, OperationError, Pbkdf2Provider, PemConverter, ProviderCrypto, ProviderStorage, RequiredPropertyError, RsaOaepProvider, RsaProvider, RsaPssProvider, RsaSsaProvider, Shake128Provider, Shake256Provider, ShakeProvider, SubtleCrypto, UnsupportedOperationError, index$1 as asn1, isJWK, index as json };\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n\n'use strict';\n\nimport {adapterFactory} from './adapter_factory.js';\n\nconst adapter =\n adapterFactory({window: typeof window === 'undefined' ? undefined : window});\nexport default adapter;\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\nimport * as utils from './utils';\n\n// Browser shims.\nimport * as chromeShim from './chrome/chrome_shim';\nimport * as firefoxShim from './firefox/firefox_shim';\nimport * as safariShim from './safari/safari_shim';\nimport * as commonShim from './common_shim';\nimport * as sdp from 'sdp';\n\n// Shimming starts here.\nexport function adapterFactory({window} = {}, options = {\n shimChrome: true,\n shimFirefox: true,\n shimSafari: true,\n}) {\n // Utils.\n const logging = utils.log;\n const browserDetails = utils.detectBrowser(window);\n\n const adapter = {\n browserDetails,\n commonShim,\n extractVersion: utils.extractVersion,\n disableLog: utils.disableLog,\n disableWarnings: utils.disableWarnings,\n // Expose sdp as a convenience. For production apps include directly.\n sdp,\n };\n\n // Shim browser if found.\n switch (browserDetails.browser) {\n case 'chrome':\n if (!chromeShim || !chromeShim.shimPeerConnection ||\n !options.shimChrome) {\n logging('Chrome shim is not included in this adapter release.');\n return adapter;\n }\n if (browserDetails.version === null) {\n logging('Chrome shim can not determine version, not shimming.');\n return adapter;\n }\n logging('adapter.js shimming chrome.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = chromeShim;\n\n // Must be called before shimPeerConnection.\n commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails);\n commonShim.shimParameterlessSetLocalDescription(window, browserDetails);\n\n chromeShim.shimGetUserMedia(window, browserDetails);\n chromeShim.shimMediaStream(window, browserDetails);\n chromeShim.shimPeerConnection(window, browserDetails);\n chromeShim.shimOnTrack(window, browserDetails);\n chromeShim.shimAddTrackRemoveTrack(window, browserDetails);\n chromeShim.shimGetSendersWithDtmf(window, browserDetails);\n chromeShim.shimGetStats(window, browserDetails);\n chromeShim.shimSenderReceiverGetStats(window, browserDetails);\n chromeShim.fixNegotiationNeeded(window, browserDetails);\n\n commonShim.shimRTCIceCandidate(window, browserDetails);\n commonShim.shimRTCIceCandidateRelayProtocol(window, browserDetails);\n commonShim.shimConnectionState(window, browserDetails);\n commonShim.shimMaxMessageSize(window, browserDetails);\n commonShim.shimSendThrowTypeError(window, browserDetails);\n commonShim.removeExtmapAllowMixed(window, browserDetails);\n break;\n case 'firefox':\n if (!firefoxShim || !firefoxShim.shimPeerConnection ||\n !options.shimFirefox) {\n logging('Firefox shim is not included in this adapter release.');\n return adapter;\n }\n logging('adapter.js shimming firefox.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = firefoxShim;\n\n // Must be called before shimPeerConnection.\n commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails);\n commonShim.shimParameterlessSetLocalDescription(window, browserDetails);\n\n firefoxShim.shimGetUserMedia(window, browserDetails);\n firefoxShim.shimPeerConnection(window, browserDetails);\n firefoxShim.shimOnTrack(window, browserDetails);\n firefoxShim.shimRemoveStream(window, browserDetails);\n firefoxShim.shimSenderGetStats(window, browserDetails);\n firefoxShim.shimReceiverGetStats(window, browserDetails);\n firefoxShim.shimRTCDataChannel(window, browserDetails);\n firefoxShim.shimAddTransceiver(window, browserDetails);\n firefoxShim.shimGetParameters(window, browserDetails);\n firefoxShim.shimCreateOffer(window, browserDetails);\n firefoxShim.shimCreateAnswer(window, browserDetails);\n\n commonShim.shimRTCIceCandidate(window, browserDetails);\n commonShim.shimConnectionState(window, browserDetails);\n commonShim.shimMaxMessageSize(window, browserDetails);\n commonShim.shimSendThrowTypeError(window, browserDetails);\n break;\n case 'safari':\n if (!safariShim || !options.shimSafari) {\n logging('Safari shim is not included in this adapter release.');\n return adapter;\n }\n logging('adapter.js shimming safari.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = safariShim;\n\n // Must be called before shimCallbackAPI.\n commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails);\n commonShim.shimParameterlessSetLocalDescription(window, browserDetails);\n\n safariShim.shimRTCIceServerUrls(window, browserDetails);\n safariShim.shimCreateOfferLegacy(window, browserDetails);\n safariShim.shimCallbacksAPI(window, browserDetails);\n safariShim.shimLocalStreamsAPI(window, browserDetails);\n safariShim.shimRemoteStreamsAPI(window, browserDetails);\n safariShim.shimTrackEventTransceiver(window, browserDetails);\n safariShim.shimGetUserMedia(window, browserDetails);\n safariShim.shimAudioContext(window, browserDetails);\n\n commonShim.shimRTCIceCandidate(window, browserDetails);\n commonShim.shimRTCIceCandidateRelayProtocol(window, browserDetails);\n commonShim.shimMaxMessageSize(window, browserDetails);\n commonShim.shimSendThrowTypeError(window, browserDetails);\n commonShim.removeExtmapAllowMixed(window, browserDetails);\n break;\n default:\n logging('Unsupported browser!');\n break;\n }\n\n return adapter;\n}\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\nimport * as utils from '../utils.js';\n\nexport {shimGetUserMedia} from './getusermedia';\nexport {shimGetDisplayMedia} from './getdisplaymedia';\n\nexport function shimMediaStream(window) {\n window.MediaStream = window.MediaStream || window.webkitMediaStream;\n}\n\nexport function shimOnTrack(window) {\n if (typeof window === 'object' && window.RTCPeerConnection && !('ontrack' in\n window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'ontrack', {\n get() {\n return this._ontrack;\n },\n set(f) {\n if (this._ontrack) {\n this.removeEventListener('track', this._ontrack);\n }\n this.addEventListener('track', this._ontrack = f);\n },\n enumerable: true,\n configurable: true\n });\n const origSetRemoteDescription =\n window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription() {\n if (!this._ontrackpoly) {\n this._ontrackpoly = (e) => {\n // onaddstream does not fire when a track is added to an existing\n // stream. But stream.onaddtrack is implemented so we use that.\n e.stream.addEventListener('addtrack', te => {\n let receiver;\n if (window.RTCPeerConnection.prototype.getReceivers) {\n receiver = this.getReceivers()\n .find(r => r.track && r.track.id === te.track.id);\n } else {\n receiver = {track: te.track};\n }\n\n const event = new Event('track');\n event.track = te.track;\n event.receiver = receiver;\n event.transceiver = {receiver};\n event.streams = [e.stream];\n this.dispatchEvent(event);\n });\n e.stream.getTracks().forEach(track => {\n let receiver;\n if (window.RTCPeerConnection.prototype.getReceivers) {\n receiver = this.getReceivers()\n .find(r => r.track && r.track.id === track.id);\n } else {\n receiver = {track};\n }\n const event = new Event('track');\n event.track = track;\n event.receiver = receiver;\n event.transceiver = {receiver};\n event.streams = [e.stream];\n this.dispatchEvent(event);\n });\n };\n this.addEventListener('addstream', this._ontrackpoly);\n }\n return origSetRemoteDescription.apply(this, arguments);\n };\n } else {\n // even if RTCRtpTransceiver is in window, it is only used and\n // emitted in unified-plan. Unfortunately this means we need\n // to unconditionally wrap the event.\n utils.wrapPeerConnectionEvent(window, 'track', e => {\n if (!e.transceiver) {\n Object.defineProperty(e, 'transceiver',\n {value: {receiver: e.receiver}});\n }\n return e;\n });\n }\n}\n\nexport function shimGetSendersWithDtmf(window) {\n // Overrides addTrack/removeTrack, depends on shimAddTrackRemoveTrack.\n if (typeof window === 'object' && window.RTCPeerConnection &&\n !('getSenders' in window.RTCPeerConnection.prototype) &&\n 'createDTMFSender' in window.RTCPeerConnection.prototype) {\n const shimSenderWithDtmf = function(pc, track) {\n return {\n track,\n get dtmf() {\n if (this._dtmf === undefined) {\n if (track.kind === 'audio') {\n this._dtmf = pc.createDTMFSender(track);\n } else {\n this._dtmf = null;\n }\n }\n return this._dtmf;\n },\n _pc: pc\n };\n };\n\n // augment addTrack when getSenders is not available.\n if (!window.RTCPeerConnection.prototype.getSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n this._senders = this._senders || [];\n return this._senders.slice(); // return a copy of the internal state.\n };\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, stream) {\n let sender = origAddTrack.apply(this, arguments);\n if (!sender) {\n sender = shimSenderWithDtmf(this, track);\n this._senders.push(sender);\n }\n return sender;\n };\n\n const origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n window.RTCPeerConnection.prototype.removeTrack =\n function removeTrack(sender) {\n origRemoveTrack.apply(this, arguments);\n const idx = this._senders.indexOf(sender);\n if (idx !== -1) {\n this._senders.splice(idx, 1);\n }\n };\n }\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._senders = this._senders || [];\n origAddStream.apply(this, [stream]);\n stream.getTracks().forEach(track => {\n this._senders.push(shimSenderWithDtmf(this, track));\n });\n };\n\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n this._senders = this._senders || [];\n origRemoveStream.apply(this, [stream]);\n\n stream.getTracks().forEach(track => {\n const sender = this._senders.find(s => s.track === track);\n if (sender) { // remove sender\n this._senders.splice(this._senders.indexOf(sender), 1);\n }\n });\n };\n } else if (typeof window === 'object' && window.RTCPeerConnection &&\n 'getSenders' in window.RTCPeerConnection.prototype &&\n 'createDTMFSender' in window.RTCPeerConnection.prototype &&\n window.RTCRtpSender &&\n !('dtmf' in window.RTCRtpSender.prototype)) {\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n\n Object.defineProperty(window.RTCRtpSender.prototype, 'dtmf', {\n get() {\n if (this._dtmf === undefined) {\n if (this.track.kind === 'audio') {\n this._dtmf = this._pc.createDTMFSender(this.track);\n } else {\n this._dtmf = null;\n }\n }\n return this._dtmf;\n }\n });\n }\n}\n\nexport function shimGetStats(window) {\n if (!window.RTCPeerConnection) {\n return;\n }\n\n const origGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n const [selector, onSucc, onErr] = arguments;\n\n // If selector is a function then we are in the old style stats so just\n // pass back the original getStats format to avoid breaking old users.\n if (arguments.length > 0 && typeof selector === 'function') {\n return origGetStats.apply(this, arguments);\n }\n\n // When spec-style getStats is supported, return those when called with\n // either no arguments or the selector argument is null.\n if (origGetStats.length === 0 && (arguments.length === 0 ||\n typeof selector !== 'function')) {\n return origGetStats.apply(this, []);\n }\n\n const fixChromeStats_ = function(response) {\n const standardReport = {};\n const reports = response.result();\n reports.forEach(report => {\n const standardStats = {\n id: report.id,\n timestamp: report.timestamp,\n type: {\n localcandidate: 'local-candidate',\n remotecandidate: 'remote-candidate'\n }[report.type] || report.type\n };\n report.names().forEach(name => {\n standardStats[name] = report.stat(name);\n });\n standardReport[standardStats.id] = standardStats;\n });\n\n return standardReport;\n };\n\n // shim getStats with maplike support\n const makeMapStats = function(stats) {\n return new Map(Object.keys(stats).map(key => [key, stats[key]]));\n };\n\n if (arguments.length >= 2) {\n const successCallbackWrapper_ = function(response) {\n onSucc(makeMapStats(fixChromeStats_(response)));\n };\n\n return origGetStats.apply(this, [successCallbackWrapper_,\n selector]);\n }\n\n // promise-support\n return new Promise((resolve, reject) => {\n origGetStats.apply(this, [\n function(response) {\n resolve(makeMapStats(fixChromeStats_(response)));\n }, reject]);\n }).then(onSucc, onErr);\n };\n}\n\nexport function shimSenderReceiverGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection &&\n window.RTCRtpSender && window.RTCRtpReceiver)) {\n return;\n }\n\n // shim sender stats.\n if (!('getStats' in window.RTCRtpSender.prototype)) {\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n if (origGetSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n }\n\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n if (origAddTrack) {\n window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n const sender = origAddTrack.apply(this, arguments);\n sender._pc = this;\n return sender;\n };\n }\n window.RTCRtpSender.prototype.getStats = function getStats() {\n const sender = this;\n return this._pc.getStats().then(result =>\n /* Note: this will include stats of all senders that\n * send a track with the same id as sender.track as\n * it is not possible to identify the RTCRtpSender.\n */\n utils.filterStats(result, sender.track, true));\n };\n }\n\n // shim receiver stats.\n if (!('getStats' in window.RTCRtpReceiver.prototype)) {\n const origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n if (origGetReceivers) {\n window.RTCPeerConnection.prototype.getReceivers =\n function getReceivers() {\n const receivers = origGetReceivers.apply(this, []);\n receivers.forEach(receiver => receiver._pc = this);\n return receivers;\n };\n }\n utils.wrapPeerConnectionEvent(window, 'track', e => {\n e.receiver._pc = e.srcElement;\n return e;\n });\n window.RTCRtpReceiver.prototype.getStats = function getStats() {\n const receiver = this;\n return this._pc.getStats().then(result =>\n utils.filterStats(result, receiver.track, false));\n };\n }\n\n if (!('getStats' in window.RTCRtpSender.prototype &&\n 'getStats' in window.RTCRtpReceiver.prototype)) {\n return;\n }\n\n // shim RTCPeerConnection.getStats(track).\n const origGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n if (arguments.length > 0 &&\n arguments[0] instanceof window.MediaStreamTrack) {\n const track = arguments[0];\n let sender;\n let receiver;\n let err;\n this.getSenders().forEach(s => {\n if (s.track === track) {\n if (sender) {\n err = true;\n } else {\n sender = s;\n }\n }\n });\n this.getReceivers().forEach(r => {\n if (r.track === track) {\n if (receiver) {\n err = true;\n } else {\n receiver = r;\n }\n }\n return r.track === track;\n });\n if (err || (sender && receiver)) {\n return Promise.reject(new DOMException(\n 'There are more than one sender or receiver for the track.',\n 'InvalidAccessError'));\n } else if (sender) {\n return sender.getStats();\n } else if (receiver) {\n return receiver.getStats();\n }\n return Promise.reject(new DOMException(\n 'There is no sender or receiver for the track.',\n 'InvalidAccessError'));\n }\n return origGetStats.apply(this, arguments);\n };\n}\n\nexport function shimAddTrackRemoveTrackWithNative(window) {\n // shim addTrack/removeTrack with native variants in order to make\n // the interactions with legacy getLocalStreams behave as in other browsers.\n // Keeps a mapping stream.id => [stream, rtpsenders...]\n window.RTCPeerConnection.prototype.getLocalStreams =\n function getLocalStreams() {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n return Object.keys(this._shimmedLocalStreams)\n .map(streamId => this._shimmedLocalStreams[streamId][0]);\n };\n\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, stream) {\n if (!stream) {\n return origAddTrack.apply(this, arguments);\n }\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n\n const sender = origAddTrack.apply(this, arguments);\n if (!this._shimmedLocalStreams[stream.id]) {\n this._shimmedLocalStreams[stream.id] = [stream, sender];\n } else if (this._shimmedLocalStreams[stream.id].indexOf(sender) === -1) {\n this._shimmedLocalStreams[stream.id].push(sender);\n }\n return sender;\n };\n\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n\n stream.getTracks().forEach(track => {\n const alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.',\n 'InvalidAccessError');\n }\n });\n const existingSenders = this.getSenders();\n origAddStream.apply(this, arguments);\n const newSenders = this.getSenders()\n .filter(newSender => existingSenders.indexOf(newSender) === -1);\n this._shimmedLocalStreams[stream.id] = [stream].concat(newSenders);\n };\n\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n delete this._shimmedLocalStreams[stream.id];\n return origRemoveStream.apply(this, arguments);\n };\n\n const origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n window.RTCPeerConnection.prototype.removeTrack =\n function removeTrack(sender) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n if (sender) {\n Object.keys(this._shimmedLocalStreams).forEach(streamId => {\n const idx = this._shimmedLocalStreams[streamId].indexOf(sender);\n if (idx !== -1) {\n this._shimmedLocalStreams[streamId].splice(idx, 1);\n }\n if (this._shimmedLocalStreams[streamId].length === 1) {\n delete this._shimmedLocalStreams[streamId];\n }\n });\n }\n return origRemoveTrack.apply(this, arguments);\n };\n}\n\nexport function shimAddTrackRemoveTrack(window, browserDetails) {\n if (!window.RTCPeerConnection) {\n return;\n }\n // shim addTrack and removeTrack.\n if (window.RTCPeerConnection.prototype.addTrack &&\n browserDetails.version >= 65) {\n return shimAddTrackRemoveTrackWithNative(window);\n }\n\n // also shim pc.getLocalStreams when addTrack is shimmed\n // to return the original streams.\n const origGetLocalStreams = window.RTCPeerConnection.prototype\n .getLocalStreams;\n window.RTCPeerConnection.prototype.getLocalStreams =\n function getLocalStreams() {\n const nativeStreams = origGetLocalStreams.apply(this);\n this._reverseStreams = this._reverseStreams || {};\n return nativeStreams.map(stream => this._reverseStreams[stream.id]);\n };\n\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n\n stream.getTracks().forEach(track => {\n const alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.',\n 'InvalidAccessError');\n }\n });\n // Add identity mapping for consistency with addTrack.\n // Unless this is being used with a stream from addTrack.\n if (!this._reverseStreams[stream.id]) {\n const newStream = new window.MediaStream(stream.getTracks());\n this._streams[stream.id] = newStream;\n this._reverseStreams[newStream.id] = stream;\n stream = newStream;\n }\n origAddStream.apply(this, [stream]);\n };\n\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n\n origRemoveStream.apply(this, [(this._streams[stream.id] || stream)]);\n delete this._reverseStreams[(this._streams[stream.id] ?\n this._streams[stream.id].id : stream.id)];\n delete this._streams[stream.id];\n };\n\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, stream) {\n if (this.signalingState === 'closed') {\n throw new DOMException(\n 'The RTCPeerConnection\\'s signalingState is \\'closed\\'.',\n 'InvalidStateError');\n }\n const streams = [].slice.call(arguments, 1);\n if (streams.length !== 1 ||\n !streams[0].getTracks().find(t => t === track)) {\n // this is not fully correct but all we can manage without\n // [[associated MediaStreams]] internal slot.\n throw new DOMException(\n 'The adapter.js addTrack polyfill only supports a single ' +\n ' stream which is associated with the specified track.',\n 'NotSupportedError');\n }\n\n const alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.',\n 'InvalidAccessError');\n }\n\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n const oldStream = this._streams[stream.id];\n if (oldStream) {\n // this is using odd Chrome behaviour, use with caution:\n // https://bugs.chromium.org/p/webrtc/issues/detail?id=7815\n // Note: we rely on the high-level addTrack/dtmf shim to\n // create the sender with a dtmf sender.\n oldStream.addTrack(track);\n\n // Trigger ONN async.\n Promise.resolve().then(() => {\n this.dispatchEvent(new Event('negotiationneeded'));\n });\n } else {\n const newStream = new window.MediaStream([track]);\n this._streams[stream.id] = newStream;\n this._reverseStreams[newStream.id] = stream;\n this.addStream(newStream);\n }\n return this.getSenders().find(s => s.track === track);\n };\n\n // replace the internal stream id with the external one and\n // vice versa.\n function replaceInternalStreamId(pc, description) {\n let sdp = description.sdp;\n Object.keys(pc._reverseStreams || []).forEach(internalId => {\n const externalStream = pc._reverseStreams[internalId];\n const internalStream = pc._streams[externalStream.id];\n sdp = sdp.replace(new RegExp(internalStream.id, 'g'),\n externalStream.id);\n });\n return new RTCSessionDescription({\n type: description.type,\n sdp\n });\n }\n function replaceExternalStreamId(pc, description) {\n let sdp = description.sdp;\n Object.keys(pc._reverseStreams || []).forEach(internalId => {\n const externalStream = pc._reverseStreams[internalId];\n const internalStream = pc._streams[externalStream.id];\n sdp = sdp.replace(new RegExp(externalStream.id, 'g'),\n internalStream.id);\n });\n return new RTCSessionDescription({\n type: description.type,\n sdp\n });\n }\n ['createOffer', 'createAnswer'].forEach(function(method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {[method]() {\n const args = arguments;\n const isLegacyCall = arguments.length &&\n typeof arguments[0] === 'function';\n if (isLegacyCall) {\n return nativeMethod.apply(this, [\n (description) => {\n const desc = replaceInternalStreamId(this, description);\n args[0].apply(null, [desc]);\n },\n (err) => {\n if (args[1]) {\n args[1].apply(null, err);\n }\n }, arguments[2]\n ]);\n }\n return nativeMethod.apply(this, arguments)\n .then(description => replaceInternalStreamId(this, description));\n }};\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n\n const origSetLocalDescription =\n window.RTCPeerConnection.prototype.setLocalDescription;\n window.RTCPeerConnection.prototype.setLocalDescription =\n function setLocalDescription() {\n if (!arguments.length || !arguments[0].type) {\n return origSetLocalDescription.apply(this, arguments);\n }\n arguments[0] = replaceExternalStreamId(this, arguments[0]);\n return origSetLocalDescription.apply(this, arguments);\n };\n\n // TODO: mangle getStats: https://w3c.github.io/webrtc-stats/#dom-rtcmediastreamstats-streamidentifier\n\n const origLocalDescription = Object.getOwnPropertyDescriptor(\n window.RTCPeerConnection.prototype, 'localDescription');\n Object.defineProperty(window.RTCPeerConnection.prototype,\n 'localDescription', {\n get() {\n const description = origLocalDescription.get.apply(this);\n if (description.type === '') {\n return description;\n }\n return replaceInternalStreamId(this, description);\n }\n });\n\n window.RTCPeerConnection.prototype.removeTrack =\n function removeTrack(sender) {\n if (this.signalingState === 'closed') {\n throw new DOMException(\n 'The RTCPeerConnection\\'s signalingState is \\'closed\\'.',\n 'InvalidStateError');\n }\n // We can not yet check for sender instanceof RTCRtpSender\n // since we shim RTPSender. So we check if sender._pc is set.\n if (!sender._pc) {\n throw new DOMException('Argument 1 of RTCPeerConnection.removeTrack ' +\n 'does not implement interface RTCRtpSender.', 'TypeError');\n }\n const isLocal = sender._pc === this;\n if (!isLocal) {\n throw new DOMException('Sender was not created by this connection.',\n 'InvalidAccessError');\n }\n\n // Search for the native stream the senders track belongs to.\n this._streams = this._streams || {};\n let stream;\n Object.keys(this._streams).forEach(streamid => {\n const hasTrack = this._streams[streamid].getTracks()\n .find(track => sender.track === track);\n if (hasTrack) {\n stream = this._streams[streamid];\n }\n });\n\n if (stream) {\n if (stream.getTracks().length === 1) {\n // if this is the last track of the stream, remove the stream. This\n // takes care of any shimmed _senders.\n this.removeStream(this._reverseStreams[stream.id]);\n } else {\n // relying on the same odd chrome behaviour as above.\n stream.removeTrack(sender.track);\n }\n this.dispatchEvent(new Event('negotiationneeded'));\n }\n };\n}\n\nexport function shimPeerConnection(window, browserDetails) {\n if (!window.RTCPeerConnection && window.webkitRTCPeerConnection) {\n // very basic support for old versions.\n window.RTCPeerConnection = window.webkitRTCPeerConnection;\n }\n if (!window.RTCPeerConnection) {\n return;\n }\n\n // shim implicit creation of RTCSessionDescription/RTCIceCandidate\n if (browserDetails.version < 53) {\n ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate']\n .forEach(function(method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {[method]() {\n arguments[0] = new ((method === 'addIceCandidate') ?\n window.RTCIceCandidate :\n window.RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n }};\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n }\n}\n\n// Attempt to fix ONN in plan-b mode.\nexport function fixNegotiationNeeded(window, browserDetails) {\n utils.wrapPeerConnectionEvent(window, 'negotiationneeded', e => {\n const pc = e.target;\n if (browserDetails.version < 72 || (pc.getConfiguration &&\n pc.getConfiguration().sdpSemantics === 'plan-b')) {\n if (pc.signalingState !== 'stable') {\n return;\n }\n }\n return e;\n });\n}\n","/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\nexport function shimGetDisplayMedia(window, getSourceId) {\n if (window.navigator.mediaDevices &&\n 'getDisplayMedia' in window.navigator.mediaDevices) {\n return;\n }\n if (!(window.navigator.mediaDevices)) {\n return;\n }\n // getSourceId is a function that returns a promise resolving with\n // the sourceId of the screen/window/tab to be shared.\n if (typeof getSourceId !== 'function') {\n console.error('shimGetDisplayMedia: getSourceId argument is not ' +\n 'a function');\n return;\n }\n window.navigator.mediaDevices.getDisplayMedia =\n function getDisplayMedia(constraints) {\n return getSourceId(constraints)\n .then(sourceId => {\n const widthSpecified = constraints.video && constraints.video.width;\n const heightSpecified = constraints.video &&\n constraints.video.height;\n const frameRateSpecified = constraints.video &&\n constraints.video.frameRate;\n constraints.video = {\n mandatory: {\n chromeMediaSource: 'desktop',\n chromeMediaSourceId: sourceId,\n maxFrameRate: frameRateSpecified || 3\n }\n };\n if (widthSpecified) {\n constraints.video.mandatory.maxWidth = widthSpecified;\n }\n if (heightSpecified) {\n constraints.video.mandatory.maxHeight = heightSpecified;\n }\n return window.navigator.mediaDevices.getUserMedia(constraints);\n });\n };\n}\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\nimport * as utils from '../utils.js';\nconst logging = utils.log;\n\nexport function shimGetUserMedia(window, browserDetails) {\n const navigator = window && window.navigator;\n\n if (!navigator.mediaDevices) {\n return;\n }\n\n const constraintsToChrome_ = function(c) {\n if (typeof c !== 'object' || c.mandatory || c.optional) {\n return c;\n }\n const cc = {};\n Object.keys(c).forEach(key => {\n if (key === 'require' || key === 'advanced' || key === 'mediaSource') {\n return;\n }\n const r = (typeof c[key] === 'object') ? c[key] : {ideal: c[key]};\n if (r.exact !== undefined && typeof r.exact === 'number') {\n r.min = r.max = r.exact;\n }\n const oldname_ = function(prefix, name) {\n if (prefix) {\n return prefix + name.charAt(0).toUpperCase() + name.slice(1);\n }\n return (name === 'deviceId') ? 'sourceId' : name;\n };\n if (r.ideal !== undefined) {\n cc.optional = cc.optional || [];\n let oc = {};\n if (typeof r.ideal === 'number') {\n oc[oldname_('min', key)] = r.ideal;\n cc.optional.push(oc);\n oc = {};\n oc[oldname_('max', key)] = r.ideal;\n cc.optional.push(oc);\n } else {\n oc[oldname_('', key)] = r.ideal;\n cc.optional.push(oc);\n }\n }\n if (r.exact !== undefined && typeof r.exact !== 'number') {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_('', key)] = r.exact;\n } else {\n ['min', 'max'].forEach(mix => {\n if (r[mix] !== undefined) {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_(mix, key)] = r[mix];\n }\n });\n }\n });\n if (c.advanced) {\n cc.optional = (cc.optional || []).concat(c.advanced);\n }\n return cc;\n };\n\n const shimConstraints_ = function(constraints, func) {\n if (browserDetails.version >= 61) {\n return func(constraints);\n }\n constraints = JSON.parse(JSON.stringify(constraints));\n if (constraints && typeof constraints.audio === 'object') {\n const remap = function(obj, a, b) {\n if (a in obj && !(b in obj)) {\n obj[b] = obj[a];\n delete obj[a];\n }\n };\n constraints = JSON.parse(JSON.stringify(constraints));\n remap(constraints.audio, 'autoGainControl', 'googAutoGainControl');\n remap(constraints.audio, 'noiseSuppression', 'googNoiseSuppression');\n constraints.audio = constraintsToChrome_(constraints.audio);\n }\n if (constraints && typeof constraints.video === 'object') {\n // Shim facingMode for mobile & surface pro.\n let face = constraints.video.facingMode;\n face = face && ((typeof face === 'object') ? face : {ideal: face});\n const getSupportedFacingModeLies = browserDetails.version < 66;\n\n if ((face && (face.exact === 'user' || face.exact === 'environment' ||\n face.ideal === 'user' || face.ideal === 'environment')) &&\n !(navigator.mediaDevices.getSupportedConstraints &&\n navigator.mediaDevices.getSupportedConstraints().facingMode &&\n !getSupportedFacingModeLies)) {\n delete constraints.video.facingMode;\n let matches;\n if (face.exact === 'environment' || face.ideal === 'environment') {\n matches = ['back', 'rear'];\n } else if (face.exact === 'user' || face.ideal === 'user') {\n matches = ['front'];\n }\n if (matches) {\n // Look for matches in label, or use last cam for back (typical).\n return navigator.mediaDevices.enumerateDevices()\n .then(devices => {\n devices = devices.filter(d => d.kind === 'videoinput');\n let dev = devices.find(d => matches.some(match =>\n d.label.toLowerCase().includes(match)));\n if (!dev && devices.length && matches.includes('back')) {\n dev = devices[devices.length - 1]; // more likely the back cam\n }\n if (dev) {\n constraints.video.deviceId = face.exact\n ? {exact: dev.deviceId}\n : {ideal: dev.deviceId};\n }\n constraints.video = constraintsToChrome_(constraints.video);\n logging('chrome: ' + JSON.stringify(constraints));\n return func(constraints);\n });\n }\n }\n constraints.video = constraintsToChrome_(constraints.video);\n }\n logging('chrome: ' + JSON.stringify(constraints));\n return func(constraints);\n };\n\n const shimError_ = function(e) {\n if (browserDetails.version >= 64) {\n return e;\n }\n return {\n name: {\n PermissionDeniedError: 'NotAllowedError',\n PermissionDismissedError: 'NotAllowedError',\n InvalidStateError: 'NotAllowedError',\n DevicesNotFoundError: 'NotFoundError',\n ConstraintNotSatisfiedError: 'OverconstrainedError',\n TrackStartError: 'NotReadableError',\n MediaDeviceFailedDueToShutdown: 'NotAllowedError',\n MediaDeviceKillSwitchOn: 'NotAllowedError',\n TabCaptureError: 'AbortError',\n ScreenCaptureError: 'AbortError',\n DeviceCaptureError: 'AbortError'\n }[e.name] || e.name,\n message: e.message,\n constraint: e.constraint || e.constraintName,\n toString() {\n return this.name + (this.message && ': ') + this.message;\n }\n };\n };\n\n const getUserMedia_ = function(constraints, onSuccess, onError) {\n shimConstraints_(constraints, c => {\n navigator.webkitGetUserMedia(c, onSuccess, e => {\n if (onError) {\n onError(shimError_(e));\n }\n });\n });\n };\n navigator.getUserMedia = getUserMedia_.bind(navigator);\n\n // Even though Chrome 45 has navigator.mediaDevices and a getUserMedia\n // function which returns a Promise, it does not accept spec-style\n // constraints.\n if (navigator.mediaDevices.getUserMedia) {\n const origGetUserMedia = navigator.mediaDevices.getUserMedia.\n bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function(cs) {\n return shimConstraints_(cs, c => origGetUserMedia(c).then(stream => {\n if (c.audio && !stream.getAudioTracks().length ||\n c.video && !stream.getVideoTracks().length) {\n stream.getTracks().forEach(track => {\n track.stop();\n });\n throw new DOMException('', 'NotFoundError');\n }\n return stream;\n }, e => Promise.reject(shimError_(e))));\n };\n }\n}\n","/*\n * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nimport SDPUtils from 'sdp';\nimport * as utils from './utils';\n\nexport function shimRTCIceCandidate(window) {\n // foundation is arbitrarily chosen as an indicator for full support for\n // https://w3c.github.io/webrtc-pc/#rtcicecandidate-interface\n if (!window.RTCIceCandidate || (window.RTCIceCandidate && 'foundation' in\n window.RTCIceCandidate.prototype)) {\n return;\n }\n\n const NativeRTCIceCandidate = window.RTCIceCandidate;\n window.RTCIceCandidate = function RTCIceCandidate(args) {\n // Remove the a= which shouldn't be part of the candidate string.\n if (typeof args === 'object' && args.candidate &&\n args.candidate.indexOf('a=') === 0) {\n args = JSON.parse(JSON.stringify(args));\n args.candidate = args.candidate.substring(2);\n }\n\n if (args.candidate && args.candidate.length) {\n // Augment the native candidate with the parsed fields.\n const nativeCandidate = new NativeRTCIceCandidate(args);\n const parsedCandidate = SDPUtils.parseCandidate(args.candidate);\n for (const key in parsedCandidate) {\n if (!(key in nativeCandidate)) {\n Object.defineProperty(nativeCandidate, key,\n {value: parsedCandidate[key]});\n }\n }\n\n // Override serializer to not serialize the extra attributes.\n nativeCandidate.toJSON = function toJSON() {\n return {\n candidate: nativeCandidate.candidate,\n sdpMid: nativeCandidate.sdpMid,\n sdpMLineIndex: nativeCandidate.sdpMLineIndex,\n usernameFragment: nativeCandidate.usernameFragment,\n };\n };\n return nativeCandidate;\n }\n return new NativeRTCIceCandidate(args);\n };\n window.RTCIceCandidate.prototype = NativeRTCIceCandidate.prototype;\n\n // Hook up the augmented candidate in onicecandidate and\n // addEventListener('icecandidate', ...)\n utils.wrapPeerConnectionEvent(window, 'icecandidate', e => {\n if (e.candidate) {\n Object.defineProperty(e, 'candidate', {\n value: new window.RTCIceCandidate(e.candidate),\n writable: 'false'\n });\n }\n return e;\n });\n}\n\nexport function shimRTCIceCandidateRelayProtocol(window) {\n if (!window.RTCIceCandidate || (window.RTCIceCandidate && 'relayProtocol' in\n window.RTCIceCandidate.prototype)) {\n return;\n }\n\n // Hook up the augmented candidate in onicecandidate and\n // addEventListener('icecandidate', ...)\n utils.wrapPeerConnectionEvent(window, 'icecandidate', e => {\n if (e.candidate) {\n const parsedCandidate = SDPUtils.parseCandidate(e.candidate.candidate);\n if (parsedCandidate.type === 'relay') {\n // This is a libwebrtc-specific mapping of local type preference\n // to relayProtocol.\n e.candidate.relayProtocol = {\n 0: 'tls',\n 1: 'tcp',\n 2: 'udp',\n }[parsedCandidate.priority >> 24];\n }\n }\n return e;\n });\n}\n\nexport function shimMaxMessageSize(window, browserDetails) {\n if (!window.RTCPeerConnection) {\n return;\n }\n\n if (!('sctp' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'sctp', {\n get() {\n return typeof this._sctp === 'undefined' ? null : this._sctp;\n }\n });\n }\n\n const sctpInDescription = function(description) {\n if (!description || !description.sdp) {\n return false;\n }\n const sections = SDPUtils.splitSections(description.sdp);\n sections.shift();\n return sections.some(mediaSection => {\n const mLine = SDPUtils.parseMLine(mediaSection);\n return mLine && mLine.kind === 'application'\n && mLine.protocol.indexOf('SCTP') !== -1;\n });\n };\n\n const getRemoteFirefoxVersion = function(description) {\n // TODO: Is there a better solution for detecting Firefox?\n const match = description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\\d+)/);\n if (match === null || match.length < 2) {\n return -1;\n }\n const version = parseInt(match[1], 10);\n // Test for NaN (yes, this is ugly)\n return version !== version ? -1 : version;\n };\n\n const getCanSendMaxMessageSize = function(remoteIsFirefox) {\n // Every implementation we know can send at least 64 KiB.\n // Note: Although Chrome is technically able to send up to 256 KiB, the\n // data does not reach the other peer reliably.\n // See: https://bugs.chromium.org/p/webrtc/issues/detail?id=8419\n let canSendMaxMessageSize = 65536;\n if (browserDetails.browser === 'firefox') {\n if (browserDetails.version < 57) {\n if (remoteIsFirefox === -1) {\n // FF < 57 will send in 16 KiB chunks using the deprecated PPID\n // fragmentation.\n canSendMaxMessageSize = 16384;\n } else {\n // However, other FF (and RAWRTC) can reassemble PPID-fragmented\n // messages. Thus, supporting ~2 GiB when sending.\n canSendMaxMessageSize = 2147483637;\n }\n } else if (browserDetails.version < 60) {\n // Currently, all FF >= 57 will reset the remote maximum message size\n // to the default value when a data channel is created at a later\n // stage. :(\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n canSendMaxMessageSize =\n browserDetails.version === 57 ? 65535 : 65536;\n } else {\n // FF >= 60 supports sending ~2 GiB\n canSendMaxMessageSize = 2147483637;\n }\n }\n return canSendMaxMessageSize;\n };\n\n const getMaxMessageSize = function(description, remoteIsFirefox) {\n // Note: 65536 bytes is the default value from the SDP spec. Also,\n // every implementation we know supports receiving 65536 bytes.\n let maxMessageSize = 65536;\n\n // FF 57 has a slightly incorrect default remote max message size, so\n // we need to adjust it here to avoid a failure when sending.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1425697\n if (browserDetails.browser === 'firefox'\n && browserDetails.version === 57) {\n maxMessageSize = 65535;\n }\n\n const match = SDPUtils.matchPrefix(description.sdp,\n 'a=max-message-size:');\n if (match.length > 0) {\n maxMessageSize = parseInt(match[0].substring(19), 10);\n } else if (browserDetails.browser === 'firefox' &&\n remoteIsFirefox !== -1) {\n // If the maximum message size is not present in the remote SDP and\n // both local and remote are Firefox, the remote peer can receive\n // ~2 GiB.\n maxMessageSize = 2147483637;\n }\n return maxMessageSize;\n };\n\n const origSetRemoteDescription =\n window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription() {\n this._sctp = null;\n // Chrome decided to not expose .sctp in plan-b mode.\n // As usual, adapter.js has to do an 'ugly worakaround'\n // to cover up the mess.\n if (browserDetails.browser === 'chrome' && browserDetails.version >= 76) {\n const {sdpSemantics} = this.getConfiguration();\n if (sdpSemantics === 'plan-b') {\n Object.defineProperty(this, 'sctp', {\n get() {\n return typeof this._sctp === 'undefined' ? null : this._sctp;\n },\n enumerable: true,\n configurable: true,\n });\n }\n }\n\n if (sctpInDescription(arguments[0])) {\n // Check if the remote is FF.\n const isFirefox = getRemoteFirefoxVersion(arguments[0]);\n\n // Get the maximum message size the local peer is capable of sending\n const canSendMMS = getCanSendMaxMessageSize(isFirefox);\n\n // Get the maximum message size of the remote peer.\n const remoteMMS = getMaxMessageSize(arguments[0], isFirefox);\n\n // Determine final maximum message size\n let maxMessageSize;\n if (canSendMMS === 0 && remoteMMS === 0) {\n maxMessageSize = Number.POSITIVE_INFINITY;\n } else if (canSendMMS === 0 || remoteMMS === 0) {\n maxMessageSize = Math.max(canSendMMS, remoteMMS);\n } else {\n maxMessageSize = Math.min(canSendMMS, remoteMMS);\n }\n\n // Create a dummy RTCSctpTransport object and the 'maxMessageSize'\n // attribute.\n const sctp = {};\n Object.defineProperty(sctp, 'maxMessageSize', {\n get() {\n return maxMessageSize;\n }\n });\n this._sctp = sctp;\n }\n\n return origSetRemoteDescription.apply(this, arguments);\n };\n}\n\nexport function shimSendThrowTypeError(window) {\n if (!(window.RTCPeerConnection &&\n 'createDataChannel' in window.RTCPeerConnection.prototype)) {\n return;\n }\n\n // Note: Although Firefox >= 57 has a native implementation, the maximum\n // message size can be reset for all data channels at a later stage.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n\n function wrapDcSend(dc, pc) {\n const origDataChannelSend = dc.send;\n dc.send = function send() {\n const data = arguments[0];\n const length = data.length || data.size || data.byteLength;\n if (dc.readyState === 'open' &&\n pc.sctp && length > pc.sctp.maxMessageSize) {\n throw new TypeError('Message too large (can send a maximum of ' +\n pc.sctp.maxMessageSize + ' bytes)');\n }\n return origDataChannelSend.apply(dc, arguments);\n };\n }\n const origCreateDataChannel =\n window.RTCPeerConnection.prototype.createDataChannel;\n window.RTCPeerConnection.prototype.createDataChannel =\n function createDataChannel() {\n const dataChannel = origCreateDataChannel.apply(this, arguments);\n wrapDcSend(dataChannel, this);\n return dataChannel;\n };\n utils.wrapPeerConnectionEvent(window, 'datachannel', e => {\n wrapDcSend(e.channel, e.target);\n return e;\n });\n}\n\n\n/* shims RTCConnectionState by pretending it is the same as iceConnectionState.\n * See https://bugs.chromium.org/p/webrtc/issues/detail?id=6145#c12\n * for why this is a valid hack in Chrome. In Firefox it is slightly incorrect\n * since DTLS failures would be hidden. See\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1265827\n * for the Firefox tracking bug.\n */\nexport function shimConnectionState(window) {\n if (!window.RTCPeerConnection ||\n 'connectionState' in window.RTCPeerConnection.prototype) {\n return;\n }\n const proto = window.RTCPeerConnection.prototype;\n Object.defineProperty(proto, 'connectionState', {\n get() {\n return {\n completed: 'connected',\n checking: 'connecting'\n }[this.iceConnectionState] || this.iceConnectionState;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(proto, 'onconnectionstatechange', {\n get() {\n return this._onconnectionstatechange || null;\n },\n set(cb) {\n if (this._onconnectionstatechange) {\n this.removeEventListener('connectionstatechange',\n this._onconnectionstatechange);\n delete this._onconnectionstatechange;\n }\n if (cb) {\n this.addEventListener('connectionstatechange',\n this._onconnectionstatechange = cb);\n }\n },\n enumerable: true,\n configurable: true\n });\n\n ['setLocalDescription', 'setRemoteDescription'].forEach((method) => {\n const origMethod = proto[method];\n proto[method] = function() {\n if (!this._connectionstatechangepoly) {\n this._connectionstatechangepoly = e => {\n const pc = e.target;\n if (pc._lastConnectionState !== pc.connectionState) {\n pc._lastConnectionState = pc.connectionState;\n const newEvent = new Event('connectionstatechange', e);\n pc.dispatchEvent(newEvent);\n }\n return e;\n };\n this.addEventListener('iceconnectionstatechange',\n this._connectionstatechangepoly);\n }\n return origMethod.apply(this, arguments);\n };\n });\n}\n\nexport function removeExtmapAllowMixed(window, browserDetails) {\n /* remove a=extmap-allow-mixed for webrtc.org < M71 */\n if (!window.RTCPeerConnection) {\n return;\n }\n if (browserDetails.browser === 'chrome' && browserDetails.version >= 71) {\n return;\n }\n if (browserDetails.browser === 'safari' && browserDetails.version >= 605) {\n return;\n }\n const nativeSRD = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription(desc) {\n if (desc && desc.sdp && desc.sdp.indexOf('\\na=extmap-allow-mixed') !== -1) {\n const sdp = desc.sdp.split('\\n').filter((line) => {\n return line.trim() !== 'a=extmap-allow-mixed';\n }).join('\\n');\n // Safari enforces read-only-ness of RTCSessionDescription fields.\n if (window.RTCSessionDescription &&\n desc instanceof window.RTCSessionDescription) {\n arguments[0] = new window.RTCSessionDescription({\n type: desc.type,\n sdp,\n });\n } else {\n desc.sdp = sdp;\n }\n }\n return nativeSRD.apply(this, arguments);\n };\n}\n\nexport function shimAddIceCandidateNullOrEmpty(window, browserDetails) {\n // Support for addIceCandidate(null or undefined)\n // as well as addIceCandidate({candidate: \"\", ...})\n // https://bugs.chromium.org/p/chromium/issues/detail?id=978582\n // Note: must be called before other polyfills which change the signature.\n if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {\n return;\n }\n const nativeAddIceCandidate =\n window.RTCPeerConnection.prototype.addIceCandidate;\n if (!nativeAddIceCandidate || nativeAddIceCandidate.length === 0) {\n return;\n }\n window.RTCPeerConnection.prototype.addIceCandidate =\n function addIceCandidate() {\n if (!arguments[0]) {\n if (arguments[1]) {\n arguments[1].apply(null);\n }\n return Promise.resolve();\n }\n // Firefox 68+ emits and processes {candidate: \"\", ...}, ignore\n // in older versions.\n // Native support for ignoring exists for Chrome M77+.\n // Safari ignores as well, exact version unknown but works in the same\n // version that also ignores addIceCandidate(null).\n if (((browserDetails.browser === 'chrome' && browserDetails.version < 78)\n || (browserDetails.browser === 'firefox'\n && browserDetails.version < 68)\n || (browserDetails.browser === 'safari'))\n && arguments[0] && arguments[0].candidate === '') {\n return Promise.resolve();\n }\n return nativeAddIceCandidate.apply(this, arguments);\n };\n}\n\n// Note: Make sure to call this ahead of APIs that modify\n// setLocalDescription.length\nexport function shimParameterlessSetLocalDescription(window, browserDetails) {\n if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {\n return;\n }\n const nativeSetLocalDescription =\n window.RTCPeerConnection.prototype.setLocalDescription;\n if (!nativeSetLocalDescription || nativeSetLocalDescription.length === 0) {\n return;\n }\n window.RTCPeerConnection.prototype.setLocalDescription =\n function setLocalDescription() {\n let desc = arguments[0] || {};\n if (typeof desc !== 'object' || (desc.type && desc.sdp)) {\n return nativeSetLocalDescription.apply(this, arguments);\n }\n // The remaining steps should technically happen when SLD comes off the\n // RTCPeerConnection's operations chain (not ahead of going on it), but\n // this is too difficult to shim. Instead, this shim only covers the\n // common case where the operations chain is empty. This is imperfect, but\n // should cover many cases. Rationale: Even if we can't reduce the glare\n // window to zero on imperfect implementations, there's value in tapping\n // into the perfect negotiation pattern that several browsers support.\n desc = {type: desc.type, sdp: desc.sdp};\n if (!desc.type) {\n switch (this.signalingState) {\n case 'stable':\n case 'have-local-offer':\n case 'have-remote-pranswer':\n desc.type = 'offer';\n break;\n default:\n desc.type = 'answer';\n break;\n }\n }\n if (desc.sdp || (desc.type !== 'offer' && desc.type !== 'answer')) {\n return nativeSetLocalDescription.apply(this, [desc]);\n }\n const func = desc.type === 'offer' ? this.createOffer : this.createAnswer;\n return func.apply(this)\n .then(d => nativeSetLocalDescription.apply(this, [d]));\n };\n}\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nimport * as utils from '../utils';\nexport {shimGetUserMedia} from './getusermedia';\nexport {shimGetDisplayMedia} from './getdisplaymedia';\n\nexport function shimOnTrack(window) {\n if (typeof window === 'object' && window.RTCTrackEvent &&\n ('receiver' in window.RTCTrackEvent.prototype) &&\n !('transceiver' in window.RTCTrackEvent.prototype)) {\n Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n get() {\n return {receiver: this.receiver};\n }\n });\n }\n}\n\nexport function shimPeerConnection(window, browserDetails) {\n if (typeof window !== 'object' ||\n !(window.RTCPeerConnection || window.mozRTCPeerConnection)) {\n return; // probably media.peerconnection.enabled=false in about:config\n }\n if (!window.RTCPeerConnection && window.mozRTCPeerConnection) {\n // very basic support for old versions.\n window.RTCPeerConnection = window.mozRTCPeerConnection;\n }\n\n if (browserDetails.version < 53) {\n // shim away need for obsolete RTCIceCandidate/RTCSessionDescription.\n ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate']\n .forEach(function(method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {[method]() {\n arguments[0] = new ((method === 'addIceCandidate') ?\n window.RTCIceCandidate :\n window.RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n }};\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n }\n\n const modernStatsTypes = {\n inboundrtp: 'inbound-rtp',\n outboundrtp: 'outbound-rtp',\n candidatepair: 'candidate-pair',\n localcandidate: 'local-candidate',\n remotecandidate: 'remote-candidate'\n };\n\n const nativeGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n const [selector, onSucc, onErr] = arguments;\n return nativeGetStats.apply(this, [selector || null])\n .then(stats => {\n if (browserDetails.version < 53 && !onSucc) {\n // Shim only promise getStats with spec-hyphens in type names\n // Leave callback version alone; misc old uses of forEach before Map\n try {\n stats.forEach(stat => {\n stat.type = modernStatsTypes[stat.type] || stat.type;\n });\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n // Avoid TypeError: \"type\" is read-only, in old versions. 34-43ish\n stats.forEach((stat, i) => {\n stats.set(i, Object.assign({}, stat, {\n type: modernStatsTypes[stat.type] || stat.type\n }));\n });\n }\n }\n return stats;\n })\n .then(onSucc, onErr);\n };\n}\n\nexport function shimSenderGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection &&\n window.RTCRtpSender)) {\n return;\n }\n if (window.RTCRtpSender && 'getStats' in window.RTCRtpSender.prototype) {\n return;\n }\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n if (origGetSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n }\n\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n if (origAddTrack) {\n window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n const sender = origAddTrack.apply(this, arguments);\n sender._pc = this;\n return sender;\n };\n }\n window.RTCRtpSender.prototype.getStats = function getStats() {\n return this.track ? this._pc.getStats(this.track) :\n Promise.resolve(new Map());\n };\n}\n\nexport function shimReceiverGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection &&\n window.RTCRtpSender)) {\n return;\n }\n if (window.RTCRtpSender && 'getStats' in window.RTCRtpReceiver.prototype) {\n return;\n }\n const origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n if (origGetReceivers) {\n window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {\n const receivers = origGetReceivers.apply(this, []);\n receivers.forEach(receiver => receiver._pc = this);\n return receivers;\n };\n }\n utils.wrapPeerConnectionEvent(window, 'track', e => {\n e.receiver._pc = e.srcElement;\n return e;\n });\n window.RTCRtpReceiver.prototype.getStats = function getStats() {\n return this._pc.getStats(this.track);\n };\n}\n\nexport function shimRemoveStream(window) {\n if (!window.RTCPeerConnection ||\n 'removeStream' in window.RTCPeerConnection.prototype) {\n return;\n }\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n utils.deprecated('removeStream', 'removeTrack');\n this.getSenders().forEach(sender => {\n if (sender.track && stream.getTracks().includes(sender.track)) {\n this.removeTrack(sender);\n }\n });\n };\n}\n\nexport function shimRTCDataChannel(window) {\n // rename DataChannel to RTCDataChannel (native fix in FF60):\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1173851\n if (window.DataChannel && !window.RTCDataChannel) {\n window.RTCDataChannel = window.DataChannel;\n }\n}\n\nexport function shimAddTransceiver(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n const origAddTransceiver = window.RTCPeerConnection.prototype.addTransceiver;\n if (origAddTransceiver) {\n window.RTCPeerConnection.prototype.addTransceiver =\n function addTransceiver() {\n this.setParametersPromises = [];\n // WebIDL input coercion and validation\n let sendEncodings = arguments[1] && arguments[1].sendEncodings;\n if (sendEncodings === undefined) {\n sendEncodings = [];\n }\n sendEncodings = [...sendEncodings];\n const shouldPerformCheck = sendEncodings.length > 0;\n if (shouldPerformCheck) {\n // If sendEncodings params are provided, validate grammar\n sendEncodings.forEach((encodingParam) => {\n if ('rid' in encodingParam) {\n const ridRegex = /^[a-z0-9]{0,16}$/i;\n if (!ridRegex.test(encodingParam.rid)) {\n throw new TypeError('Invalid RID value provided.');\n }\n }\n if ('scaleResolutionDownBy' in encodingParam) {\n if (!(parseFloat(encodingParam.scaleResolutionDownBy) >= 1.0)) {\n throw new RangeError('scale_resolution_down_by must be >= 1.0');\n }\n }\n if ('maxFramerate' in encodingParam) {\n if (!(parseFloat(encodingParam.maxFramerate) >= 0)) {\n throw new RangeError('max_framerate must be >= 0.0');\n }\n }\n });\n }\n const transceiver = origAddTransceiver.apply(this, arguments);\n if (shouldPerformCheck) {\n // Check if the init options were applied. If not we do this in an\n // asynchronous way and save the promise reference in a global object.\n // This is an ugly hack, but at the same time is way more robust than\n // checking the sender parameters before and after the createOffer\n // Also note that after the createoffer we are not 100% sure that\n // the params were asynchronously applied so we might miss the\n // opportunity to recreate offer.\n const {sender} = transceiver;\n const params = sender.getParameters();\n if (!('encodings' in params) ||\n // Avoid being fooled by patched getParameters() below.\n (params.encodings.length === 1 &&\n Object.keys(params.encodings[0]).length === 0)) {\n params.encodings = sendEncodings;\n sender.sendEncodings = sendEncodings;\n this.setParametersPromises.push(sender.setParameters(params)\n .then(() => {\n delete sender.sendEncodings;\n }).catch(() => {\n delete sender.sendEncodings;\n })\n );\n }\n }\n return transceiver;\n };\n }\n}\n\nexport function shimGetParameters(window) {\n if (!(typeof window === 'object' && window.RTCRtpSender)) {\n return;\n }\n const origGetParameters = window.RTCRtpSender.prototype.getParameters;\n if (origGetParameters) {\n window.RTCRtpSender.prototype.getParameters =\n function getParameters() {\n const params = origGetParameters.apply(this, arguments);\n if (!('encodings' in params)) {\n params.encodings = [].concat(this.sendEncodings || [{}]);\n }\n return params;\n };\n }\n}\n\nexport function shimCreateOffer(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n const origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n window.RTCPeerConnection.prototype.createOffer = function createOffer() {\n if (this.setParametersPromises && this.setParametersPromises.length) {\n return Promise.all(this.setParametersPromises)\n .then(() => {\n return origCreateOffer.apply(this, arguments);\n })\n .finally(() => {\n this.setParametersPromises = [];\n });\n }\n return origCreateOffer.apply(this, arguments);\n };\n}\n\nexport function shimCreateAnswer(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n const origCreateAnswer = window.RTCPeerConnection.prototype.createAnswer;\n window.RTCPeerConnection.prototype.createAnswer = function createAnswer() {\n if (this.setParametersPromises && this.setParametersPromises.length) {\n return Promise.all(this.setParametersPromises)\n .then(() => {\n return origCreateAnswer.apply(this, arguments);\n })\n .finally(() => {\n this.setParametersPromises = [];\n });\n }\n return origCreateAnswer.apply(this, arguments);\n };\n}\n","/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nexport function shimGetDisplayMedia(window, preferredMediaSource) {\n if (window.navigator.mediaDevices &&\n 'getDisplayMedia' in window.navigator.mediaDevices) {\n return;\n }\n if (!(window.navigator.mediaDevices)) {\n return;\n }\n window.navigator.mediaDevices.getDisplayMedia =\n function getDisplayMedia(constraints) {\n if (!(constraints && constraints.video)) {\n const err = new DOMException('getDisplayMedia without video ' +\n 'constraints is undefined');\n err.name = 'NotFoundError';\n // from https://heycam.github.io/webidl/#idl-DOMException-error-names\n err.code = 8;\n return Promise.reject(err);\n }\n if (constraints.video === true) {\n constraints.video = {mediaSource: preferredMediaSource};\n } else {\n constraints.video.mediaSource = preferredMediaSource;\n }\n return window.navigator.mediaDevices.getUserMedia(constraints);\n };\n}\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nimport * as utils from '../utils';\n\nexport function shimGetUserMedia(window, browserDetails) {\n const navigator = window && window.navigator;\n const MediaStreamTrack = window && window.MediaStreamTrack;\n\n navigator.getUserMedia = function(constraints, onSuccess, onError) {\n // Replace Firefox 44+'s deprecation warning with unprefixed version.\n utils.deprecated('navigator.getUserMedia',\n 'navigator.mediaDevices.getUserMedia');\n navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError);\n };\n\n if (!(browserDetails.version > 55 &&\n 'autoGainControl' in navigator.mediaDevices.getSupportedConstraints())) {\n const remap = function(obj, a, b) {\n if (a in obj && !(b in obj)) {\n obj[b] = obj[a];\n delete obj[a];\n }\n };\n\n const nativeGetUserMedia = navigator.mediaDevices.getUserMedia.\n bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function(c) {\n if (typeof c === 'object' && typeof c.audio === 'object') {\n c = JSON.parse(JSON.stringify(c));\n remap(c.audio, 'autoGainControl', 'mozAutoGainControl');\n remap(c.audio, 'noiseSuppression', 'mozNoiseSuppression');\n }\n return nativeGetUserMedia(c);\n };\n\n if (MediaStreamTrack && MediaStreamTrack.prototype.getSettings) {\n const nativeGetSettings = MediaStreamTrack.prototype.getSettings;\n MediaStreamTrack.prototype.getSettings = function() {\n const obj = nativeGetSettings.apply(this, arguments);\n remap(obj, 'mozAutoGainControl', 'autoGainControl');\n remap(obj, 'mozNoiseSuppression', 'noiseSuppression');\n return obj;\n };\n }\n\n if (MediaStreamTrack && MediaStreamTrack.prototype.applyConstraints) {\n const nativeApplyConstraints =\n MediaStreamTrack.prototype.applyConstraints;\n MediaStreamTrack.prototype.applyConstraints = function(c) {\n if (this.kind === 'audio' && typeof c === 'object') {\n c = JSON.parse(JSON.stringify(c));\n remap(c, 'autoGainControl', 'mozAutoGainControl');\n remap(c, 'noiseSuppression', 'mozNoiseSuppression');\n }\n return nativeApplyConstraints.apply(this, [c]);\n };\n }\n }\n}\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n'use strict';\nimport * as utils from '../utils';\n\nexport function shimLocalStreamsAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n if (!('getLocalStreams' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.getLocalStreams =\n function getLocalStreams() {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n return this._localStreams;\n };\n }\n if (!('addStream' in window.RTCPeerConnection.prototype)) {\n const _addTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n if (!this._localStreams.includes(stream)) {\n this._localStreams.push(stream);\n }\n // Try to emulate Chrome's behaviour of adding in audio-video order.\n // Safari orders by track id.\n stream.getAudioTracks().forEach(track => _addTrack.call(this, track,\n stream));\n stream.getVideoTracks().forEach(track => _addTrack.call(this, track,\n stream));\n };\n\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, ...streams) {\n if (streams) {\n streams.forEach((stream) => {\n if (!this._localStreams) {\n this._localStreams = [stream];\n } else if (!this._localStreams.includes(stream)) {\n this._localStreams.push(stream);\n }\n });\n }\n return _addTrack.apply(this, arguments);\n };\n }\n if (!('removeStream' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n const index = this._localStreams.indexOf(stream);\n if (index === -1) {\n return;\n }\n this._localStreams.splice(index, 1);\n const tracks = stream.getTracks();\n this.getSenders().forEach(sender => {\n if (tracks.includes(sender.track)) {\n this.removeTrack(sender);\n }\n });\n };\n }\n}\n\nexport function shimRemoteStreamsAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n if (!('getRemoteStreams' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.getRemoteStreams =\n function getRemoteStreams() {\n return this._remoteStreams ? this._remoteStreams : [];\n };\n }\n if (!('onaddstream' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'onaddstream', {\n get() {\n return this._onaddstream;\n },\n set(f) {\n if (this._onaddstream) {\n this.removeEventListener('addstream', this._onaddstream);\n this.removeEventListener('track', this._onaddstreampoly);\n }\n this.addEventListener('addstream', this._onaddstream = f);\n this.addEventListener('track', this._onaddstreampoly = (e) => {\n e.streams.forEach(stream => {\n if (!this._remoteStreams) {\n this._remoteStreams = [];\n }\n if (this._remoteStreams.includes(stream)) {\n return;\n }\n this._remoteStreams.push(stream);\n const event = new Event('addstream');\n event.stream = stream;\n this.dispatchEvent(event);\n });\n });\n }\n });\n const origSetRemoteDescription =\n window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription() {\n const pc = this;\n if (!this._onaddstreampoly) {\n this.addEventListener('track', this._onaddstreampoly = function(e) {\n e.streams.forEach(stream => {\n if (!pc._remoteStreams) {\n pc._remoteStreams = [];\n }\n if (pc._remoteStreams.indexOf(stream) >= 0) {\n return;\n }\n pc._remoteStreams.push(stream);\n const event = new Event('addstream');\n event.stream = stream;\n pc.dispatchEvent(event);\n });\n });\n }\n return origSetRemoteDescription.apply(pc, arguments);\n };\n }\n}\n\nexport function shimCallbacksAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n const prototype = window.RTCPeerConnection.prototype;\n const origCreateOffer = prototype.createOffer;\n const origCreateAnswer = prototype.createAnswer;\n const setLocalDescription = prototype.setLocalDescription;\n const setRemoteDescription = prototype.setRemoteDescription;\n const addIceCandidate = prototype.addIceCandidate;\n\n prototype.createOffer =\n function createOffer(successCallback, failureCallback) {\n const options = (arguments.length >= 2) ? arguments[2] : arguments[0];\n const promise = origCreateOffer.apply(this, [options]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n\n prototype.createAnswer =\n function createAnswer(successCallback, failureCallback) {\n const options = (arguments.length >= 2) ? arguments[2] : arguments[0];\n const promise = origCreateAnswer.apply(this, [options]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n\n let withCallback = function(description, successCallback, failureCallback) {\n const promise = setLocalDescription.apply(this, [description]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.setLocalDescription = withCallback;\n\n withCallback = function(description, successCallback, failureCallback) {\n const promise = setRemoteDescription.apply(this, [description]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.setRemoteDescription = withCallback;\n\n withCallback = function(candidate, successCallback, failureCallback) {\n const promise = addIceCandidate.apply(this, [candidate]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.addIceCandidate = withCallback;\n}\n\nexport function shimGetUserMedia(window) {\n const navigator = window && window.navigator;\n\n if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n // shim not needed in Safari 12.1\n const mediaDevices = navigator.mediaDevices;\n const _getUserMedia = mediaDevices.getUserMedia.bind(mediaDevices);\n navigator.mediaDevices.getUserMedia = (constraints) => {\n return _getUserMedia(shimConstraints(constraints));\n };\n }\n\n if (!navigator.getUserMedia && navigator.mediaDevices &&\n navigator.mediaDevices.getUserMedia) {\n navigator.getUserMedia = function getUserMedia(constraints, cb, errcb) {\n navigator.mediaDevices.getUserMedia(constraints)\n .then(cb, errcb);\n }.bind(navigator);\n }\n}\n\nexport function shimConstraints(constraints) {\n if (constraints && constraints.video !== undefined) {\n return Object.assign({},\n constraints,\n {video: utils.compactObject(constraints.video)}\n );\n }\n\n return constraints;\n}\n\nexport function shimRTCIceServerUrls(window) {\n if (!window.RTCPeerConnection) {\n return;\n }\n // migrate from non-spec RTCIceServer.url to RTCIceServer.urls\n const OrigPeerConnection = window.RTCPeerConnection;\n window.RTCPeerConnection =\n function RTCPeerConnection(pcConfig, pcConstraints) {\n if (pcConfig && pcConfig.iceServers) {\n const newIceServers = [];\n for (let i = 0; i < pcConfig.iceServers.length; i++) {\n let server = pcConfig.iceServers[i];\n if (server.urls === undefined && server.url) {\n utils.deprecated('RTCIceServer.url', 'RTCIceServer.urls');\n server = JSON.parse(JSON.stringify(server));\n server.urls = server.url;\n delete server.url;\n newIceServers.push(server);\n } else {\n newIceServers.push(pcConfig.iceServers[i]);\n }\n }\n pcConfig.iceServers = newIceServers;\n }\n return new OrigPeerConnection(pcConfig, pcConstraints);\n };\n window.RTCPeerConnection.prototype = OrigPeerConnection.prototype;\n // wrap static methods. Currently just generateCertificate.\n if ('generateCertificate' in OrigPeerConnection) {\n Object.defineProperty(window.RTCPeerConnection, 'generateCertificate', {\n get() {\n return OrigPeerConnection.generateCertificate;\n }\n });\n }\n}\n\nexport function shimTrackEventTransceiver(window) {\n // Add event.transceiver member over deprecated event.receiver\n if (typeof window === 'object' && window.RTCTrackEvent &&\n 'receiver' in window.RTCTrackEvent.prototype &&\n !('transceiver' in window.RTCTrackEvent.prototype)) {\n Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n get() {\n return {receiver: this.receiver};\n }\n });\n }\n}\n\nexport function shimCreateOfferLegacy(window) {\n const origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n window.RTCPeerConnection.prototype.createOffer =\n function createOffer(offerOptions) {\n if (offerOptions) {\n if (typeof offerOptions.offerToReceiveAudio !== 'undefined') {\n // support bit values\n offerOptions.offerToReceiveAudio =\n !!offerOptions.offerToReceiveAudio;\n }\n const audioTransceiver = this.getTransceivers().find(transceiver =>\n transceiver.receiver.track.kind === 'audio');\n if (offerOptions.offerToReceiveAudio === false && audioTransceiver) {\n if (audioTransceiver.direction === 'sendrecv') {\n if (audioTransceiver.setDirection) {\n audioTransceiver.setDirection('sendonly');\n } else {\n audioTransceiver.direction = 'sendonly';\n }\n } else if (audioTransceiver.direction === 'recvonly') {\n if (audioTransceiver.setDirection) {\n audioTransceiver.setDirection('inactive');\n } else {\n audioTransceiver.direction = 'inactive';\n }\n }\n } else if (offerOptions.offerToReceiveAudio === true &&\n !audioTransceiver) {\n this.addTransceiver('audio', {direction: 'recvonly'});\n }\n\n if (typeof offerOptions.offerToReceiveVideo !== 'undefined') {\n // support bit values\n offerOptions.offerToReceiveVideo =\n !!offerOptions.offerToReceiveVideo;\n }\n const videoTransceiver = this.getTransceivers().find(transceiver =>\n transceiver.receiver.track.kind === 'video');\n if (offerOptions.offerToReceiveVideo === false && videoTransceiver) {\n if (videoTransceiver.direction === 'sendrecv') {\n if (videoTransceiver.setDirection) {\n videoTransceiver.setDirection('sendonly');\n } else {\n videoTransceiver.direction = 'sendonly';\n }\n } else if (videoTransceiver.direction === 'recvonly') {\n if (videoTransceiver.setDirection) {\n videoTransceiver.setDirection('inactive');\n } else {\n videoTransceiver.direction = 'inactive';\n }\n }\n } else if (offerOptions.offerToReceiveVideo === true &&\n !videoTransceiver) {\n this.addTransceiver('video', {direction: 'recvonly'});\n }\n }\n return origCreateOffer.apply(this, arguments);\n };\n}\n\nexport function shimAudioContext(window) {\n if (typeof window !== 'object' || window.AudioContext) {\n return;\n }\n window.AudioContext = window.webkitAudioContext;\n}\n\n","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nlet logDisabled_ = true;\nlet deprecationWarnings_ = true;\n\n/**\n * Extract browser version out of the provided user agent string.\n *\n * @param {!string} uastring userAgent string.\n * @param {!string} expr Regular expression used as match criteria.\n * @param {!number} pos position in the version string to be returned.\n * @return {!number} browser version.\n */\nexport function extractVersion(uastring, expr, pos) {\n const match = uastring.match(expr);\n return match && match.length >= pos && parseInt(match[pos], 10);\n}\n\n// Wraps the peerconnection event eventNameToWrap in a function\n// which returns the modified event object (or false to prevent\n// the event).\nexport function wrapPeerConnectionEvent(window, eventNameToWrap, wrapper) {\n if (!window.RTCPeerConnection) {\n return;\n }\n const proto = window.RTCPeerConnection.prototype;\n const nativeAddEventListener = proto.addEventListener;\n proto.addEventListener = function(nativeEventName, cb) {\n if (nativeEventName !== eventNameToWrap) {\n return nativeAddEventListener.apply(this, arguments);\n }\n const wrappedCallback = (e) => {\n const modifiedEvent = wrapper(e);\n if (modifiedEvent) {\n if (cb.handleEvent) {\n cb.handleEvent(modifiedEvent);\n } else {\n cb(modifiedEvent);\n }\n }\n };\n this._eventMap = this._eventMap || {};\n if (!this._eventMap[eventNameToWrap]) {\n this._eventMap[eventNameToWrap] = new Map();\n }\n this._eventMap[eventNameToWrap].set(cb, wrappedCallback);\n return nativeAddEventListener.apply(this, [nativeEventName,\n wrappedCallback]);\n };\n\n const nativeRemoveEventListener = proto.removeEventListener;\n proto.removeEventListener = function(nativeEventName, cb) {\n if (nativeEventName !== eventNameToWrap || !this._eventMap\n || !this._eventMap[eventNameToWrap]) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n if (!this._eventMap[eventNameToWrap].has(cb)) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n const unwrappedCb = this._eventMap[eventNameToWrap].get(cb);\n this._eventMap[eventNameToWrap].delete(cb);\n if (this._eventMap[eventNameToWrap].size === 0) {\n delete this._eventMap[eventNameToWrap];\n }\n if (Object.keys(this._eventMap).length === 0) {\n delete this._eventMap;\n }\n return nativeRemoveEventListener.apply(this, [nativeEventName,\n unwrappedCb]);\n };\n\n Object.defineProperty(proto, 'on' + eventNameToWrap, {\n get() {\n return this['_on' + eventNameToWrap];\n },\n set(cb) {\n if (this['_on' + eventNameToWrap]) {\n this.removeEventListener(eventNameToWrap,\n this['_on' + eventNameToWrap]);\n delete this['_on' + eventNameToWrap];\n }\n if (cb) {\n this.addEventListener(eventNameToWrap,\n this['_on' + eventNameToWrap] = cb);\n }\n },\n enumerable: true,\n configurable: true\n });\n}\n\nexport function disableLog(bool) {\n if (typeof bool !== 'boolean') {\n return new Error('Argument type: ' + typeof bool +\n '. Please use a boolean.');\n }\n logDisabled_ = bool;\n return (bool) ? 'adapter.js logging disabled' :\n 'adapter.js logging enabled';\n}\n\n/**\n * Disable or enable deprecation warnings\n * @param {!boolean} bool set to true to disable warnings.\n */\nexport function disableWarnings(bool) {\n if (typeof bool !== 'boolean') {\n return new Error('Argument type: ' + typeof bool +\n '. Please use a boolean.');\n }\n deprecationWarnings_ = !bool;\n return 'adapter.js deprecation warnings ' + (bool ? 'disabled' : 'enabled');\n}\n\nexport function log() {\n if (typeof window === 'object') {\n if (logDisabled_) {\n return;\n }\n if (typeof console !== 'undefined' && typeof console.log === 'function') {\n console.log.apply(console, arguments);\n }\n }\n}\n\n/**\n * Shows a deprecation warning suggesting the modern and spec-compatible API.\n */\nexport function deprecated(oldMethod, newMethod) {\n if (!deprecationWarnings_) {\n return;\n }\n console.warn(oldMethod + ' is deprecated, please use ' + newMethod +\n ' instead.');\n}\n\n/**\n * Browser detector.\n *\n * @return {object} result containing browser and version\n * properties.\n */\nexport function detectBrowser(window) {\n // Returned result object.\n const result = {browser: null, version: null};\n\n // Fail early if it's not a browser\n if (typeof window === 'undefined' || !window.navigator ||\n !window.navigator.userAgent) {\n result.browser = 'Not a browser.';\n return result;\n }\n\n const {navigator} = window;\n\n if (navigator.mozGetUserMedia) { // Firefox.\n result.browser = 'firefox';\n result.version = extractVersion(navigator.userAgent,\n /Firefox\\/(\\d+)\\./, 1);\n } else if (navigator.webkitGetUserMedia ||\n (window.isSecureContext === false && window.webkitRTCPeerConnection)) {\n // Chrome, Chromium, Webview, Opera.\n // Version matches Chrome/WebRTC version.\n // Chrome 74 removed webkitGetUserMedia on http as well so we need the\n // more complicated fallback to webkitRTCPeerConnection.\n result.browser = 'chrome';\n result.version = extractVersion(navigator.userAgent,\n /Chrom(e|ium)\\/(\\d+)\\./, 2);\n } else if (window.RTCPeerConnection &&\n navigator.userAgent.match(/AppleWebKit\\/(\\d+)\\./)) { // Safari.\n result.browser = 'safari';\n result.version = extractVersion(navigator.userAgent,\n /AppleWebKit\\/(\\d+)\\./, 1);\n result.supportsUnifiedPlan = window.RTCRtpTransceiver &&\n 'currentDirection' in window.RTCRtpTransceiver.prototype;\n } else { // Default fallthrough: not supported.\n result.browser = 'Not a supported browser.';\n return result;\n }\n\n return result;\n}\n\n/**\n * Checks if something is an object.\n *\n * @param {*} val The something you want to check.\n * @return true if val is an object, false otherwise.\n */\nfunction isObject(val) {\n return Object.prototype.toString.call(val) === '[object Object]';\n}\n\n/**\n * Remove all empty objects and undefined values\n * from a nested object -- an enhanced and vanilla version\n * of Lodash's `compact`.\n */\nexport function compactObject(data) {\n if (!isObject(data)) {\n return data;\n }\n\n return Object.keys(data).reduce(function(accumulator, key) {\n const isObj = isObject(data[key]);\n const value = isObj ? compactObject(data[key]) : data[key];\n const isEmptyObject = isObj && !Object.keys(value).length;\n if (value === undefined || isEmptyObject) {\n return accumulator;\n }\n return Object.assign(accumulator, {[key]: value});\n }, {});\n}\n\n/* iterates the stats graph recursively. */\nexport function walkStats(stats, base, resultSet) {\n if (!base || resultSet.has(base.id)) {\n return;\n }\n resultSet.set(base.id, base);\n Object.keys(base).forEach(name => {\n if (name.endsWith('Id')) {\n walkStats(stats, stats.get(base[name]), resultSet);\n } else if (name.endsWith('Ids')) {\n base[name].forEach(id => {\n walkStats(stats, stats.get(id), resultSet);\n });\n }\n });\n}\n\n/* filter getStats for a sender/receiver track. */\nexport function filterStats(result, track, outbound) {\n const streamStatsType = outbound ? 'outbound-rtp' : 'inbound-rtp';\n const filteredResult = new Map();\n if (track === null) {\n return filteredResult;\n }\n const trackStats = [];\n result.forEach(value => {\n if (value.type === 'track' &&\n value.trackIdentifier === track.id) {\n trackStats.push(value);\n }\n });\n trackStats.forEach(trackStat => {\n result.forEach(stats => {\n if (stats.type === streamStatsType && stats.trackId === trackStat.id) {\n walkStats(result, stats, filteredResult);\n }\n });\n });\n return filteredResult;\n}\n\n","import AWS from 'aws-sdk';\nimport * as KVSWebRTC from 'amazon-kinesis-video-streams-webrtc';\nimport { isMobile, isIOS } from 'mobile-device-detect';\n/* 아래 라이브러리가 import 되어야 사파리에서 webrtc가 동작함 */\nimport adapter from 'webrtc-adapter';\nimport { Crypto } from '@peculiar/webcrypto';\n\nif (isIOS && isMobile) {\n const crypto = new Crypto();\n if (!window.crypto) window.crypto = crypto;\n else {\n // window.crypto.subtle이 수정 가능한지 확인\n try {\n window.crypto.subtle = window.crypto.subtle || crypto.subtle;\n } catch (e) {\n console.error(\"window.crypto.subtle is read-only. Unable to modify.\", e);\n }\n }\n}\n\n// identityPoolId, roleARN을 이용한 경우\nexport default {\n /**\n * @description\n * Player : VideoJS로 실행할 Element,\n * Informs : {\n * key: string, // USEN_WEBRTC_BUB23400009_LIVE_C1\n * channelName: string, // USEN_WEBRTC_BUB23400009_LIVE_C1\n * clientId: string, // String(Math.floor(Math.random() * 1000000))\n * sendVideo: boolean, // false\n * sendAudio: boolean, // false\n * forceTURN: boolean, // false\n * wideScreen: boolean, // true\n * openDataChannel: boolean, // false\n * useTrickleICE: boolean, // true\n * natTraversalDisabled: boolean, // false\n * },\n */\n viewers : new Map(),\n async startViewer(Player, Informs) {\n console.log(`[VIEWER] Informs : `);\n console.log(Informs);\n const viewer = {\n remoteView: null, // UAC Player\n remoteStream: null, // UAC Stream\n localView: null, // 매장내 PC Player\n localStream: null, // 매장내 PC Stream\n signalingClient: null,\n dataChannel: null,\n peerConnection: null,\n peerConnectionStatsInterval: null,\n };\n\n // kvs webrtc 연결 로직 시작\n viewer.remoteView = Player; // this.$refs.videoElement || videojs('my-video');\n const kinesisVideoClient = new AWS.KinesisVideo({\n correctClockSkew: true,\n });\n console.log(`[VIEWER] kinesisVideoClient : ${kinesisVideoClient}`);\n\n const describeSignalingChannelResponse = await kinesisVideoClient\n .describeSignalingChannel({\n ChannelName: Informs.channelName,\n })\n .promise();\n const channelARN = describeSignalingChannelResponse.ChannelInfo.ChannelARN;\n console.log(`[VIEWER] Channel ARN: ${channelARN}`);\n\n const getSignalingChannelEndpointResponse = await kinesisVideoClient\n .getSignalingChannelEndpoint({\n ChannelARN: channelARN,\n SingleMasterChannelEndpointConfiguration: {\n Protocols: ['WSS', 'HTTPS'],\n Role: KVSWebRTC.Role.VIEWER,\n },\n })\n .promise();\n\n const endpointsByProtocol = getSignalingChannelEndpointResponse.ResourceEndpointList.reduce((endpoints, endpoint) => {\n endpoints[endpoint.Protocol] = endpoint.ResourceEndpoint;\n return endpoints;\n }, {});\n console.log(`[VIEWER] Endpoints: ${JSON.stringify(endpointsByProtocol)}`);\n\n const kinesisVideoSignalingChannelsClient = new AWS.KinesisVideoSignalingChannels({\n endpoint: endpointsByProtocol.HTTPS,\n correctClockSkew: true,\n });\n const getIceServerConfigResponse = await kinesisVideoSignalingChannelsClient\n .getIceServerConfig({\n ChannelARN: channelARN,\n })\n .promise();\n const iceServers = [];\n if (!Informs.natTraversalDisabled && !Informs.forceTURN) {\n iceServers.push({ urls: `stun:stun.kinesisvideo.${AWS.config.region}.amazonaws.com:443` });\n }\n if (!Informs.natTraversalDisabled) {\n getIceServerConfigResponse.IceServerList.forEach(iceServer => {\n iceServers.push({\n urls: iceServer.Uris,\n username: iceServer.Username,\n credential: iceServer.Password,\n });\n });\n }\n console.log(`[VIEWER] ICE servers: ${JSON.stringify(iceServers)}`);\n\n viewer.signalingClient = new KVSWebRTC.SignalingClient({\n channelARN,\n channelEndpoint: endpointsByProtocol.WSS,\n clientId: Informs.clientId,\n role: KVSWebRTC.Role.VIEWER,\n region: AWS.config.region,\n credentials: AWS.config.credentials,\n systemClockOffset: kinesisVideoClient.config.systemClockOffset,\n });\n\n console.log(`[VIEWER] signaling Client : ${viewer.signalingClient}`);\n\n const resolution = Informs.widescreen ? { width: { ideal: 1280 }, height: { ideal: 720 } } : { width: { ideal: 640 }, height: { ideal: 480 } };\n const constraints = {\n video: Informs.sendVideo ? resolution : false,\n ...Informs.sendAudio && {audio: { echoCancellation: true }},\n };\n \n const configuration = {\n iceServers,\n // relay면 TURN 서버만 사용하게 됨\n // all 이면 STUN 서버를 우선적으로 사용하고, 실패하면 TURN 서버를 사용하게 됨\n iceTransportPolicy: Informs.forceTURN ? 'relay' : 'all',\n };\n viewer.peerConnection = new RTCPeerConnection(configuration);\n if (Informs.openDataChannel) {\n const dataChannelObj = viewer.peerConnection.createDataChannel('kvsDataChannel');\n viewer.dataChannel = dataChannelObj;\n }\n\n viewer.signalingClient.on('open', async () => {\n console.log(`[VIEWER] Connected to signaling service`);\n if (Informs.sendVideo || Informs.sendAUdio) {\n try {\n viewer.localStream = await navigator.mediaDevices.getUserMedia(constraints);\n viewer.localStream.getTracks().forEach((track) => {\n viewer.peerConnection.addTrack(track, viewer.localStream);\n })\n } catch (e) {\n console.error(`[VIEWER] Could not find webcam`);\n return;\n }\n }\n\n console.log(`[VIEWER] Creating SDP offer`);\n await viewer.peerConnection.setLocalDescription(\n await viewer.peerConnection.createOffer({\n offerToReceiveAudio: true,\n offerToReceiveVideo: true,\n }),\n );\n if (Informs.useTrickleICE) {\n console.log(`[VIEWER] Sending SDP offer`);\n viewer.signalingClient.sendSdpOffer(viewer.peerConnection.localDescription);\n }\n\n\n console.log(`[VIEWER] Generating ICE candidates`);\n });\n\n viewer.signalingClient.on('sdpAnswer', async (answer) => {\n console.log(`[VIEWER] Received SDP answer`);\n await viewer.peerConnection.setRemoteDescription(answer);\n });\n\n viewer.signalingClient.on('iceCandidate', (candidate) => {\n console.log(`[VIEWER] Received ICE candidate`);\n viewer.peerConnection.addIceCandidate(candidate);\n });\n\n viewer.signalingClient.on('close', () => {\n console.log(`[VIEWER] Disconnected from signaling channel`);\n this.logPeerConnectionState(viewer.peerConnection);\n });\n\n viewer.signalingClient.on('error', (error) => {\n console.error(`[VIEWER] Signaling client error: ${error}`);\n console.log(error);\n });\n\n viewer.peerConnection.addEventListener('icecandidate', ({candidate}) => {\n if (candidate) {\n console.log(`[VIEWER] Generated ICE candidate: ${JSON.stringify(candidate)}`);\n if (candidate.candidate.includes('relay')) {\n console.log(`[VIEWER] This candidate is using TURN server`);\n } else if (candidate.candidate.includes('srflx')) {\n console.log(`[VIEWER] This candidate is using STUN server`);\n } else if (candidate.candidate.includes('host')) {\n console.log(`[VIEWER] This candidate is a host candidate`);\n }\n if (Informs.useTrickleICE) {\n console.log(`[VIEWER] Sending ICE candidate`);\n viewer.signalingClient.sendIceCandidate(candidate);\n }\n } else {\n console.log(`[VIEWER] All ICE candidates have been generated`);\n if (!Informs.useTrickleICE) {\n console.log(`[VIEWER] Sending SDP offer`);\n viewer.signalingClient.sendSdpOffer(viewer.peerConnection.localDescription);\n }\n }\n });\n\n // 실제 데이터 전송이 가능한지 데이터채널 통신 가능성을 파악할 수 있음.\n viewer.peerConnection.onconnectionstatechange = (evt) => {\n console.warn('viewer peerConnection', viewer.peerConnection.connectionState, evt);\n }\n\n // P2P의 전반적인 상태를 나타내며 네트워크 연결의 안정성을 모니터링 할 수 있음.\n // ICE 연결 상태가 변경될 때마다 사용된 후보 정보를 로그 기록\n viewer.peerConnection.oniceconnectionstatechange = async (event) => {\n const rtcPeerConnection = event.target;\n console.log(`[VIEWER] ICE connection state changed to ${rtcPeerConnection.iceConnectionState}`);\n\n if (rtcPeerConnection.iceConnectionState === 'connected') {\n console.log(`[VIEWER] ICE connection state is connected`);\n\n // 실제로 연결된 ICE 후보 쌍을 로그로 출력\n const stats = await viewer.peerConnection.getStats(null);\n stats.forEach(report => {\n if (report.type === 'candidate-pair' && report.state === 'succeeded') {\n console.log(`[VIEWER] Connected using local candidate: ${report.localCandidateId}`);\n console.log(`[VIEWER] Connected using remote candidate: ${report.remoteCandidateId}`);\n stats.forEach(candidate => {\n if (candidate.id === report.localCandidateId) {\n console.log(`[VIEWER] Local candidate details: ${JSON.stringify(candidate)}`);\n } else if (candidate.id === report.remoteCandidateId) {\n console.log(`[VIEWER] Remote candidate details: ${JSON.stringify(candidate)}`);\n }\n });\n }\n });\n } else if (rtcPeerConnection.iceConnectionState === 'disconnected') {\n console.log(`[VIEWER] ICE connection state is disconnected`);\n // 추가: disconnected 상태의 사유를 로그로 기록\n const stats = await viewer.peerConnection.getStats(null);\n stats.forEach(report => {\n if (report.type === 'candidate-pair' && report.state === 'failed') {\n console.log(`[VIEWER] Failed candidate pair: ${JSON.stringify(report)}`);\n } else if (report.type === 'local-candidate' || report.type === 'remote-candidate') {\n console.log(`[VIEWER] Candidate details: ${JSON.stringify(report)}`);\n }\n });\n } else if (rtcPeerConnection.iceConnectionState === 'failed') {\n console.log(`[VIEWER] ICE connection state is failed`);\n // 실패 원인을 로그로 기록\n const stats = await viewer.peerConnection.getStats(null);\n stats.forEach(report => {\n if (report.type === 'candidate-pair' && report.state === 'failed') {\n console.log(`[VIEWER] Failed candidate pair: ${JSON.stringify(report)}`);\n } else if (report.type === 'local-candidate' || report.type === 'remote-candidate') {\n console.log(`[VIEWER] Candidate details: ${JSON.stringify(report)}`);\n }\n });\n // TODO: stop 되면 그냥 까만 화면으로 멈춰 있는데.. 이후에는 어떻게 할지 고민해봐야 함\n this.stopViewer(Informs);\n }\n };\n\n // // ICE 후보 수집 완료를 알리는 Promise 생성\n const iceCandidatesCollected = new Promise((resolve, reject) => {\n viewer.peerConnection.onicecandidate = ({ candidate }) => {\n if (!candidate) {\n // 모든 후보가 생성되었을 때\n resolve();\n }\n };\n });\n\n viewer.peerConnection.ontrack = event => {\n console.log(event);\n viewer.remoteStream = new MediaStream();\n viewer.remoteView.srcObject = viewer.remoteStream;\n viewer.remoteView.style.display = 'block';\n event.streams[0].getTracks().forEach(track => {\n console.log(track)\n viewer.remoteStream.addTrack(track);\n });\n console.log(viewer.remoteView.srcObject);\n\n // 추가: playoutDelayHint 설정\n // 상암동 요청으로 삭제\n // event.receiver.playoutDelayHint = 0.1; // 원하는 지연 시간(초)을 설정합니다.\n }\n\n viewer.signalingClient.open();\n // kvs webrtc 연결 로직 종료\n this.viewers.set(Informs.key, viewer);\n \n // ICE 후보 수집이 완료될 때까지 기다림\n await iceCandidatesCollected;\n \n return;\n },\n logPeerConnectionState(peerConnection) {\n if (!peerConnection) return;\n console.log(`[VIEWER] PeerConnection state: ${peerConnection.connectionState}`);\n peerConnection.getStats().then(stats => {\n stats.forEach(report => {\n console.log(`[VIEWER] Report type: ${report.type}`);\n console.log(report);\n });\n }).catch(err => {\n console.error(`[VIEWER] Error getting stats: ${err}`);\n });\n },\n stopViewer(Informs) {\n const viewer = this.viewers.get(Informs.key);\n if (!viewer) {\n return;\n }\n if (viewer.peerConnectionStatsInterval) {\n clearInterval(viewer.peerConnectionStatsInterval);\n viewer.peerConnectionStatsInterval = null;\n }\n if (viewer.dataChannel) {\n viewer.dataChannel.close();\n viewer.dataChannel = null;\n }\n if (viewer.signalingClient) {\n viewer.signalingClient.close();\n viewer.signalingClient = null;\n }\n if (viewer.peerConnection) {\n viewer.peerConnection.close();\n viewer.peerConnection = null;\n }\n if (viewer.localView) {\n viewer.localView.srcObject = null;\n }\n if (viewer.localStream) {\n viewer.localStream.getTracks().forEach(track => track.stop());\n viewer.localStream = null;\n }\n if (viewer.remoteView) {\n viewer.remoteView.srcObject = null;\n }\n if (viewer.remoteStream) {\n viewer.remoteStream.getTracks().forEach(track => track.stop());\n viewer.remoteStream = null;\n }\n this.viewers.delete(Informs.key);\n },\n async removeRTCRemnants() {\n return new Promise((resolve) => {\n const keys = this.viewers.keys();\n for (const key of keys) this.stopViewer({ key : key });\n if (this.viewers.size < 1) resolve(true);\n })\n },\n} "],"sourceRoot":""}