helia 5.2.1 → 5.3.0-313e2c1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.min.js CHANGED
@@ -1,54 +1,85 @@
1
1
  (function (root, factory) {(typeof module === 'object' && module.exports) ? module.exports = factory() : root.Helia = factory()}(typeof self !== 'undefined' ? self : this, function () {
2
- "use strict";var Helia=(()=>{var ux=Object.create;var fl=Object.defineProperty;var dx=Object.getOwnPropertyDescriptor;var fx=Object.getOwnPropertyNames;var hx=Object.getPrototypeOf,px=Object.prototype.hasOwnProperty;var Ct=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Qe=(r,e)=>{for(var t in e)fl(r,t,{get:e[t],enumerable:!0})},_4=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of fx(e))!px.call(r,o)&&o!==t&&fl(r,o,{get:()=>e[o],enumerable:!(n=dx(e,o))||n.enumerable});return r};var Mr=(r,e,t)=>(t=r!=null?ux(hx(r)):{},_4(e||!r||!r.__esModule?fl(t,"default",{value:r,enumerable:!0}):t,r)),mx=r=>_4(fl({},"__esModule",{value:!0}),r);var N6=Ct(Ss=>{"use strict";var wS="[object ArrayBuffer]",Vn=class r{static isArrayBuffer(e){return Object.prototype.toString.call(e)===wS}static toArrayBuffer(e){return this.isArrayBuffer(e)?e:e.byteLength===e.buffer.byteLength||e.byteOffset===0&&e.byteLength===e.buffer.byteLength?e.buffer:this.toUint8Array(e.buffer).slice(e.byteOffset,e.byteOffset+e.byteLength).buffer}static toUint8Array(e){return this.toView(e,Uint8Array)}static toView(e,t){if(e.constructor===t)return e;if(this.isArrayBuffer(e))return new t(e);if(this.isArrayBufferView(e))return new t(e.buffer,e.byteOffset,e.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}static isBufferSource(e){return this.isArrayBufferView(e)||this.isArrayBuffer(e)}static isArrayBufferView(e){return ArrayBuffer.isView(e)||e&&this.isArrayBuffer(e.buffer)}static isEqual(e,t){let n=r.toUint8Array(e),o=r.toUint8Array(t);if(n.length!==o.byteLength)return!1;for(let i=0;i<n.length;i++)if(n[i]!==o[i])return!1;return!0}static concat(...e){let t;Array.isArray(e[0])&&!(e[1]instanceof Function)||Array.isArray(e[0])&&e[1]instanceof Function?t=e[0]:e[e.length-1]instanceof Function?t=e.slice(0,e.length-1):t=e;let n=0;for(let s of t)n+=s.byteLength;let o=new Uint8Array(n),i=0;for(let s of t){let a=this.toUint8Array(s);o.set(a,i),i+=a.length}return e[e.length-1]instanceof Function?this.toView(o,e[e.length-1]):o.buffer}},A2="string",bS=/^[0-9a-f\s]+$/i,xS=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,vS=/^[a-zA-Z0-9-_]+$/,ru=class{static fromString(e){let t=unescape(encodeURIComponent(e)),n=new Uint8Array(t.length);for(let o=0;o<t.length;o++)n[o]=t.charCodeAt(o);return n.buffer}static toString(e){let t=Vn.toUint8Array(e),n="";for(let i=0;i<t.length;i++)n+=String.fromCharCode(t[i]);return decodeURIComponent(escape(n))}},Tr=class{static toString(e,t=!1){let n=Vn.toArrayBuffer(e),o=new DataView(n),i="";for(let s=0;s<n.byteLength;s+=2){let a=o.getUint16(s,t);i+=String.fromCharCode(a)}return i}static fromString(e,t=!1){let n=new ArrayBuffer(e.length*2),o=new DataView(n);for(let i=0;i<e.length;i++)o.setUint16(i*2,e.charCodeAt(i),t);return n}},nu=class r{static isHex(e){return typeof e===A2&&bS.test(e)}static isBase64(e){return typeof e===A2&&xS.test(e)}static isBase64Url(e){return typeof e===A2&&vS.test(e)}static ToString(e,t="utf8"){let n=Vn.toUint8Array(e);switch(t.toLowerCase()){case"utf8":return this.ToUtf8String(n);case"binary":return this.ToBinary(n);case"hex":return this.ToHex(n);case"base64":return this.ToBase64(n);case"base64url":return this.ToBase64Url(n);case"utf16le":return Tr.toString(n,!0);case"utf16":case"utf16be":return Tr.toString(n);default:throw new Error(`Unknown type of encoding '${t}'`)}}static FromString(e,t="utf8"){if(!e)return new ArrayBuffer(0);switch(t.toLowerCase()){case"utf8":return this.FromUtf8String(e);case"binary":return this.FromBinary(e);case"hex":return this.FromHex(e);case"base64":return this.FromBase64(e);case"base64url":return this.FromBase64Url(e);case"utf16le":return Tr.fromString(e,!0);case"utf16":case"utf16be":return Tr.fromString(e);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToBase64(e){let t=Vn.toUint8Array(e);if(typeof btoa<"u"){let n=this.ToString(t,"binary");return btoa(n)}else return Buffer.from(t).toString("base64")}static FromBase64(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!r.isBase64(t))throw new TypeError("Argument 'base64Text' is not Base64 encoded");return typeof atob<"u"?this.FromBinary(atob(t)):new Uint8Array(Buffer.from(t,"base64")).buffer}static FromBase64Url(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!r.isBase64Url(t))throw new TypeError("Argument 'base64url' is not Base64Url encoded");return this.FromBase64(this.Base64Padding(t.replace(/\-/g,"+").replace(/\_/g,"/")))}static ToBase64Url(e){return this.ToBase64(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/\=/g,"")}static FromUtf8String(e,t=r.DEFAULT_UTF8_ENCODING){switch(t){case"ascii":return this.FromBinary(e);case"utf8":return ru.fromString(e);case"utf16":case"utf16be":return Tr.fromString(e);case"utf16le":case"usc2":return Tr.fromString(e,!0);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToUtf8String(e,t=r.DEFAULT_UTF8_ENCODING){switch(t){case"ascii":return this.ToBinary(e);case"utf8":return ru.toString(e);case"utf16":case"utf16be":return Tr.toString(e);case"utf16le":case"usc2":return Tr.toString(e,!0);default:throw new Error(`Unknown type of encoding '${t}'`)}}static FromBinary(e){let t=e.length,n=new Uint8Array(t);for(let o=0;o<t;o++)n[o]=e.charCodeAt(o);return n.buffer}static ToBinary(e){let t=Vn.toUint8Array(e),n="";for(let o=0;o<t.length;o++)n+=String.fromCharCode(t[o]);return n}static ToHex(e){let t=Vn.toUint8Array(e),n="",o=t.length;for(let i=0;i<o;i++){let s=t[i];s<16&&(n+="0"),n+=s.toString(16)}return n}static FromHex(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!r.isHex(t))throw new TypeError("Argument 'hexString' is not HEX encoded");t.length%2&&(t=`0${t}`);let n=new Uint8Array(t.length/2);for(let o=0;o<t.length;o=o+2){let i=t.slice(o,o+2);n[o/2]=parseInt(i,16)}return n.buffer}static ToUtf16String(e,t=!1){return Tr.toString(e,t)}static FromUtf16String(e,t=!1){return Tr.fromString(e,t)}static Base64Padding(e){let t=4-e.length%4;if(t<4)for(let n=0;n<t;n++)e+="=";return e}static formatString(e){return e?.replace(/[\n\r\t ]/g,"")||""}};nu.DEFAULT_UTF8_ENCODING="utf8";function ES(r,...e){let t=arguments[0];for(let n=1;n<arguments.length;n++){let o=arguments[n];for(let i in o)t[i]=o[i]}return t}function SS(...r){let e=r.map(o=>o.byteLength).reduce((o,i)=>o+i),t=new Uint8Array(e),n=0;return r.map(o=>new Uint8Array(o)).forEach(o=>{for(let i of o)t[n++]=i}),t.buffer}function AS(r,e){if(!(r&&e)||r.byteLength!==e.byteLength)return!1;let t=new Uint8Array(r),n=new Uint8Array(e);for(let o=0;o<r.byteLength;o++)if(t[o]!==n[o])return!1;return!0}Ss.BufferSourceConverter=Vn;Ss.Convert=nu;Ss.assign=ES;Ss.combine=SS;Ss.isEqual=AS});var s8=Ct((FU,Y2)=>{"use strict";var hA=Object.prototype.hasOwnProperty,Wt="~";function lc(){}Object.create&&(lc.prototype=Object.create(null),new lc().__proto__||(Wt=!1));function pA(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function i8(r,e,t,n,o){if(typeof t!="function")throw new TypeError("The listener must be a function");var i=new pA(t,n||r,o),s=Wt?Wt+e:e;return r._events[s]?r._events[s].fn?r._events[s]=[r._events[s],i]:r._events[s].push(i):(r._events[s]=i,r._eventsCount++),r}function id(r,e){--r._eventsCount===0?r._events=new lc:delete r._events[e]}function Ot(){this._events=new lc,this._eventsCount=0}Ot.prototype.eventNames=function(){var e=[],t,n;if(this._eventsCount===0)return e;for(n in t=this._events)hA.call(t,n)&&e.push(Wt?n.slice(1):n);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};Ot.prototype.listeners=function(e){var t=Wt?Wt+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var o=0,i=n.length,s=new Array(i);o<i;o++)s[o]=n[o].fn;return s};Ot.prototype.listenerCount=function(e){var t=Wt?Wt+e:e,n=this._events[t];return n?n.fn?1:n.length:0};Ot.prototype.emit=function(e,t,n,o,i,s){var a=Wt?Wt+e:e;if(!this._events[a])return!1;var c=this._events[a],l=arguments.length,u,d;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),l){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,n),!0;case 4:return c.fn.call(c.context,t,n,o),!0;case 5:return c.fn.call(c.context,t,n,o,i),!0;case 6:return c.fn.call(c.context,t,n,o,i,s),!0}for(d=1,u=new Array(l-1);d<l;d++)u[d-1]=arguments[d];c.fn.apply(c.context,u)}else{var f=c.length,h;for(d=0;d<f;d++)switch(c[d].once&&this.removeListener(e,c[d].fn,void 0,!0),l){case 1:c[d].fn.call(c[d].context);break;case 2:c[d].fn.call(c[d].context,t);break;case 3:c[d].fn.call(c[d].context,t,n);break;case 4:c[d].fn.call(c[d].context,t,n,o);break;default:if(!u)for(h=1,u=new Array(l-1);h<l;h++)u[h-1]=arguments[h];c[d].fn.apply(c[d].context,u)}}return!0};Ot.prototype.on=function(e,t,n){return i8(this,e,t,n,!1)};Ot.prototype.once=function(e,t,n){return i8(this,e,t,n,!0)};Ot.prototype.removeListener=function(e,t,n,o){var i=Wt?Wt+e:e;if(!this._events[i])return this;if(!t)return id(this,i),this;var s=this._events[i];if(s.fn)s.fn===t&&(!o||s.once)&&(!n||s.context===n)&&id(this,i);else{for(var a=0,c=[],l=s.length;a<l;a++)(s[a].fn!==t||o&&!s[a].once||n&&s[a].context!==n)&&c.push(s[a]);c.length?this._events[i]=c.length===1?c[0]:c:id(this,i)}return this};Ot.prototype.removeAllListeners=function(e){var t;return e?(t=Wt?Wt+e:e,this._events[t]&&id(this,t)):(this._events=new lc,this._eventsCount=0),this};Ot.prototype.off=Ot.prototype.removeListener;Ot.prototype.addListener=Ot.prototype.on;Ot.prefixed=Wt;Ot.EventEmitter=Ot;typeof Y2<"u"&&(Y2.exports=Ot)});var d8=Ct((cF,u8)=>{u8.exports=function(r){if(!r)throw Error("hashlru must have a max value, of type number, greater than 0");var e=0,t=Object.create(null),n=Object.create(null);function o(i,s){t[i]=s,e++,e>=r&&(e=0,n=t,t=Object.create(null))}return{has:function(i){return t[i]!==void 0||n[i]!==void 0},remove:function(i){t[i]!==void 0&&(t[i]=void 0),n[i]!==void 0&&(n[i]=void 0)},get:function(i){var s=t[i];if(s!==void 0)return s;if((s=n[i])!==void 0)return o(i,s),s},set:function(i,s){t[i]!==void 0?t[i]=s:o(i,s)},clear:function(){t=Object.create(null),n=Object.create(null)}}}});var j5=Ct(Ec=>{(function(){var r,e,t,n,o,i,s,a;a=function(c){var l,u,d,f;return l=(c&255<<24)>>>24,u=(c&255<<16)>>>16,d=(c&65280)>>>8,f=c&255,[l,u,d,f].join(".")},s=function(c){var l,u,d,f,h,p;for(l=[],d=f=0;f<=3&&c.length!==0;d=++f){if(d>0){if(c[0]!==".")throw new Error("Invalid IP");c=c.substring(1)}p=e(c),h=p[0],u=p[1],c=c.substring(u),l.push(h)}if(c.length!==0)throw new Error("Invalid IP");switch(l.length){case 1:if(l[0]>4294967295)throw new Error("Invalid IP");return l[0]>>>0;case 2:if(l[0]>255||l[1]>16777215)throw new Error("Invalid IP");return(l[0]<<24|l[1])>>>0;case 3:if(l[0]>255||l[1]>255||l[2]>65535)throw new Error("Invalid IP");return(l[0]<<24|l[1]<<16|l[2])>>>0;case 4:if(l[0]>255||l[1]>255||l[2]>255||l[3]>255)throw new Error("Invalid IP");return(l[0]<<24|l[1]<<16|l[2]<<8|l[3])>>>0;default:throw new Error("Invalid IP")}},t=function(c){return c.charCodeAt(0)},n=t("0"),i=t("a"),o=t("A"),e=function(c){var l,u,d,f,h;for(f=0,l=10,u="9",d=0,c.length>1&&c[d]==="0"&&(c[d+1]==="x"||c[d+1]==="X"?(d+=2,l=16):"0"<=c[d+1]&&c[d+1]<="9"&&(d++,l=8,u="7")),h=d;d<c.length;){if("0"<=c[d]&&c[d]<=u)f=f*l+(t(c[d])-n)>>>0;else if(l===16)if("a"<=c[d]&&c[d]<="f")f=f*l+(10+t(c[d])-i)>>>0;else if("A"<=c[d]&&c[d]<="F")f=f*l+(10+t(c[d])-o)>>>0;else break;else break;if(f>4294967295)throw new Error("too large");d++}if(d===h)throw new Error("empty octet");return[f,d]},r=function(){function c(l,u){var d,f,h,p;if(typeof l!="string")throw new Error("Missing `net' parameter");if(u||(p=l.split("/",2),l=p[0],u=p[1]),u||(u=32),typeof u=="string"&&u.indexOf(".")>-1){try{this.maskLong=s(u)}catch(g){throw d=g,new Error("Invalid mask: "+u)}for(f=h=32;h>=0;f=--h)if(this.maskLong===4294967295<<32-f>>>0){this.bitmask=f;break}}else if(u||u===0)this.bitmask=parseInt(u,10),this.maskLong=0,this.bitmask>0&&(this.maskLong=4294967295<<32-this.bitmask>>>0);else throw new Error("Invalid mask: empty");try{this.netLong=(s(l)&this.maskLong)>>>0}catch(g){throw d=g,new Error("Invalid net address: "+l)}if(!(this.bitmask<=32))throw new Error("Invalid mask for ip4: "+u);this.size=Math.pow(2,32-this.bitmask),this.base=a(this.netLong),this.mask=a(this.maskLong),this.hostmask=a(~this.maskLong),this.first=this.bitmask<=30?a(this.netLong+1):this.base,this.last=this.bitmask<=30?a(this.netLong+this.size-2):a(this.netLong+this.size-1),this.broadcast=this.bitmask<=30?a(this.netLong+this.size-1):void 0}return c.prototype.contains=function(l){return typeof l=="string"&&(l.indexOf("/")>0||l.split(".").length!==4)&&(l=new c(l)),l instanceof c?this.contains(l.base)&&this.contains(l.broadcast||l.last):(s(l)&this.maskLong)>>>0===(this.netLong&this.maskLong)>>>0},c.prototype.next=function(l){return l==null&&(l=1),new c(a(this.netLong+this.size*l),this.mask)},c.prototype.forEach=function(l){var u,d,f;for(f=s(this.first),d=s(this.last),u=0;f<=d;)l(a(f),f,u),u++,f++},c.prototype.toString=function(){return this.base+"/"+this.bitmask},c}(),Ec.ip2long=s,Ec.long2ip=a,Ec.Netmask=r}).call(Ec)});var s1=Ct((Yq,bm)=>{var Qq=function(){typeof bm<"u"&&(bm.exports=g);var r=86400,e=3200,t=146097*e/400,n=r*t,o=1e3*n,i=864e13,s=4294967296,a=1e6,c="000000000",l=Math.trunc||function(S){var A=S-S%1;return A==0&&(S<0||S===0&&1/S!=1/0)?-0:A},u=g.prototype,d=(g.fromDate=function(S){return new g(+S)},g.fromInt64BE=I(0,1,2,3,0,4),g.fromInt64LE=I(3,2,1,0,4,0),g.fromString=function(D){var A,F=new g,D=(D+="").replace(/^\s*[+\-]?\d+/,function($){var $=+$,k=1970+($-1970)%400;return F.year=$-k,k}).replace(/(?:Z|([+\-]\d{2}):?(\d{2}))$/,function(O,$,k){return $<0&&(k*=-1),A=6e4*(60*+$+ +k),""}).replace(/\.\d+$/,function(O){return F.nano=+(O+c).substr(1,9),""}).split(/\D+/);if(1<D.length?D[1]--:D[1]=0,F.time=A=Date.UTC.apply(Date,D)-(A||0),isNaN(A))throw new TypeError("Invalid Date");return m(F)},g.fromTimeT=function(S){return x(S,0)},u.year=0,u.time=0,u.nano=0,u.addNano=function(S){return this.nano+=+S||0,this},u.getNano=function(){var S=m(this);return(S.time%1e3*a+ +S.nano+1e9)%1e9},u.getTimeT=function(){var A=m(this),S=Math.floor(A.time/1e3),A=A.year;return A&&(S+=A*t*r/e),S},u.getYear=function(){return this.toDate().getUTCFullYear()+this.year},u.toDate=function(){return y(m(this).time)},u.toJSON=function(){return this.toString().replace(/0{1,6}Z$/,"Z")},u.toString=function(S){var A=this,F=A.toDate(),D={H:function(){return L(F.getUTCHours())},L:function(){return P(F.getUTCMilliseconds(),3)},M:function(){return L(F.getUTCMinutes())},N:function(){return P(A.getNano(),9)},S:function(){return L(F.getUTCSeconds())},Y:function(){var O=A.getYear();return 999999<O?"+"+O:9999<O?"+"+P(O,6):0<=O?P(O,4):-999999<=O?"-"+P(-O,6):O},a:function(){return h[F.getUTCDay()]},b:function(){return f[F.getUTCMonth()]},d:function(){return L(F.getUTCDate())},e:function(){return function(O){return(9<O?"":" ")+(0|O)}(F.getUTCDate())},m:function(){return L(F.getUTCMonth()+1)}};return function O($){return $.replace(/%./g,function(k){var E=k[1],R=p[E],E=D[E];return R?O(R):E?E():k})}(S||d)},u.writeInt64BE=w(0,1,2,3,0,4),u.writeInt64LE=w(3,2,1,0,4,0),"%Y-%m-%dT%H:%M:%S.%NZ"),f=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],h=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],p={"%":"%",F:"%Y-%m-%d",n:`
3
- `,R:"%H:%M",T:"%H:%M:%S",t:" ",X:"%T",Z:"GMT",z:"+0000"};return g;function g(S,A,F){var D=this;if(!(D instanceof g))return new g(S,A,F);D.time=+S||0,D.nano=+A||0,D.year=+F||0,m(D)}function m(S){var A,F,D,O=S.year,$=S.time,k=S.nano,R=((k<0||a<=k)&&(k-=(F=Math.floor(k/a))*a,$+=F,F=1),O%e);return($<-i||i<$||R)&&((A=l($/o))&&(O+=A*e,$-=A*o),(D=y($)).setUTCFullYear(R+D.getUTCFullYear()),D=($=+D)+(A=l((O-=R)/e))*o,A&&-i<=D&&D<=i&&(O-=A*e,$=D),F=1),F&&(S.year=O,S.time=$,S.nano=k),S}function y(S){var A=new Date(0);return A.setTime(S),A}function x(O,D){O=+O||0;var F=l((D=(D|0)*s)/n)+l(O/n),D=D%n+O%n,O=l(D/n);return O&&(F+=O,D-=O*n),new g(1e3*D,0,F*e)}function w(S,A,F,D,O,$){return function(R,E){var C=m(this);R=R||new Array(8),B(R,E|=0);var T=Math.floor(C.time/1e3),C=C.year*(t*r/e),v=l(C/s)+l(T/s),C=C%s+T%s,T=Math.floor(C/s);return T&&(v+=T,C-=T*s),k(R,E+O,v),k(R,E+$,C),R};function k(R,E,v){R[E+S]=v>>24&255,R[E+A]=v>>16&255,R[E+F]=v>>8&255,R[E+D]=255&v}}function I(S,A,F,D,O,$){return function(R,E){B(R,E|=0);var v=k(R,E+O);return x(k(R,E+$),v)};function k(R,E){return 16777216*R[E+S]+(R[E+A]<<16|R[E+F]<<8|R[E+D])}}function B(S,A){if(S=S&&S.length,S==null)throw new TypeError("Invalid Buffer");if(S<A+8)throw new RangeError("Out of range")}function L(S){return(9<S?"":"0")+(0|S)}function P(S,A){return(c+(0|S)).substr(-A)}}()});var ew=Ct((qoe,Jy)=>{"use strict";Jy.exports=r=>{if(Object.prototype.toString.call(r)!=="[object Object]")return!1;let e=Object.getPrototypeOf(r);return e===null||e===Object.prototype}});var sw=Ct((ow,iw)=>{"use strict";var Xf=ew(),{hasOwnProperty:rw}=Object.prototype,{propertyIsEnumerable:MC}=Object,la=(r,e,t)=>Object.defineProperty(r,e,{value:t,writable:!0,enumerable:!0,configurable:!0}),UC=ow,tw={concatArrays:!1,ignoreUndefined:!1},jf=r=>{let e=[];for(let t in r)rw.call(r,t)&&e.push(t);if(Object.getOwnPropertySymbols){let t=Object.getOwnPropertySymbols(r);for(let n of t)MC.call(r,n)&&e.push(n)}return e};function ua(r){return Array.isArray(r)?FC(r):Xf(r)?VC(r):r}function FC(r){let e=r.slice(0,0);return jf(r).forEach(t=>{la(e,t,ua(r[t]))}),e}function VC(r){let e=Object.getPrototypeOf(r)===null?Object.create(null):{};return jf(r).forEach(t=>{la(e,t,ua(r[t]))}),e}var nw=(r,e,t,n)=>(t.forEach(o=>{typeof e[o]>"u"&&n.ignoreUndefined||(o in r&&r[o]!==Object.getPrototypeOf(r)?la(r,o,k3(r[o],e[o],n)):la(r,o,ua(e[o])))}),r),$C=(r,e,t)=>{let n=r.slice(0,0),o=0;return[r,e].forEach(i=>{let s=[];for(let a=0;a<i.length;a++)rw.call(i,a)&&(s.push(String(a)),i===r?la(n,o++,i[a]):la(n,o++,ua(i[a])));n=nw(n,i,jf(i).filter(a=>!s.includes(a)),t)}),n};function k3(r,e,t){return t.concatArrays&&Array.isArray(r)&&Array.isArray(e)?$C(r,e,t):!Xf(e)||!Xf(r)?ua(e):nw(r,e,jf(e),t)}iw.exports=function(...r){let e=k3(ua(tw),this!==UC&&this||{},tw),t={_:{}};for(let n of r)if(n!==void 0){if(!Xf(n))throw new TypeError("`"+n+"` is not an Option Object");t=k3(t,{_:n},e)}return t._}});var lw=Ct((Woe,cw)=>{"use strict";function KC(r){return r>=55296&&r<=56319}function HC(r){return r>=56320&&r<=57343}cw.exports=function(e,t,n){if(typeof t!="string")throw new Error("Input must be string");for(var o=t.length,i=0,s,a,c=0;c<o;c+=1){if(s=t.charCodeAt(c),a=t[c],KC(s)&&HC(t.charCodeAt(c+1))&&(c+=1,a+=t[c]),i+=e(a),i===n)return t.slice(0,c+1);if(i>n)return t.slice(0,c-a.length+1)}return t}});var dw=Ct((Goe,uw)=>{"use strict";function qC(r){return r>=55296&&r<=56319}function zC(r){return r>=56320&&r<=57343}uw.exports=function(e){if(typeof e!="string")throw new Error("Input must be string");for(var t=e.length,n=0,o=null,i=null,s=0;s<t;s++)o=e.charCodeAt(s),zC(o)?i!=null&&qC(i)?n+=1:n+=3:o<=127?n+=1:o>=128&&o<=2047?n+=2:o>=2048&&o<=65535&&(n+=3),i=o;return n}});var hw=Ct((Qoe,fw)=>{"use strict";var WC=lw(),GC=dw();fw.exports=WC.bind(null,GC)});var gw=Ct((Yoe,mw)=>{"use strict";var QC=hw(),YC=/[\/\?<>\\:\*\|"]/g,XC=/[\x00-\x1f\x80-\x9f]/g,jC=/^\.+$/,ZC=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i,JC=/[\. ]+$/;function pw(r,e){if(typeof r!="string")throw new Error("Input must be string");var t=r.replace(YC,e).replace(XC,e).replace(jC,e).replace(ZC,e).replace(JC,e);return QC(t,255)}mw.exports=function(r,e){var t=e&&e.replacement||"",n=pw(r,t);return t===""?n:pw(n,"")}});var tb=Ct(bh=>{"use strict";Object.defineProperty(bh,"__esModule",{value:!0});var Q3=class{constructor(){this.pullQueue=[],this.pushQueue=[],this.eventHandlers={},this.isPaused=!1,this.isStopped=!1}push(e){if(this.isStopped)return;let t={value:e,done:!1};if(this.pullQueue.length){let n=this.pullQueue.shift();n&&n.resolve(t)}else this.pushQueue.push(Promise.resolve(t)),this.highWaterMark!==void 0&&this.pushQueue.length>=this.highWaterMark&&!this.isPaused&&(this.isPaused=!0,this.eventHandlers.highWater?this.eventHandlers.highWater():console&&console.warn(`EventIterator queue reached ${this.pushQueue.length} items`))}stop(){if(!this.isStopped){this.isStopped=!0,this.remove();for(let e of this.pullQueue)e.resolve({value:void 0,done:!0});this.pullQueue.length=0}}fail(e){if(!this.isStopped)if(this.isStopped=!0,this.remove(),this.pullQueue.length){for(let t of this.pullQueue)t.reject(e);this.pullQueue.length=0}else{let t=Promise.reject(e);t.catch(()=>{}),this.pushQueue.push(t)}}remove(){Promise.resolve().then(()=>{this.removeCallback&&this.removeCallback()})}[Symbol.asyncIterator](){return{next:e=>{let t=this.pushQueue.shift();return t?(this.lowWaterMark!==void 0&&this.pushQueue.length<=this.lowWaterMark&&this.isPaused&&(this.isPaused=!1,this.eventHandlers.lowWater&&this.eventHandlers.lowWater()),t):this.isStopped?Promise.resolve({value:void 0,done:!0}):new Promise((n,o)=>{this.pullQueue.push({resolve:n,reject:o})})},return:()=>(this.isStopped=!0,this.pushQueue.length=0,this.remove(),Promise.resolve({value:void 0,done:!0}))}}},wh=class{constructor(e,{highWaterMark:t=100,lowWaterMark:n=1}={}){let o=new Q3;o.highWaterMark=t,o.lowWaterMark=n,o.removeCallback=e({push:i=>o.push(i),stop:()=>o.stop(),fail:i=>o.fail(i),on:(i,s)=>{o.eventHandlers[i]=s}})||(()=>{}),this[Symbol.asyncIterator]=()=>o[Symbol.asyncIterator](),Object.freeze(this)}};bh.EventIterator=wh;bh.default=wh});var rb=Ct(il=>{"use strict";Object.defineProperty(il,"__esModule",{value:!0});var Y3=tb();il.EventIterator=Y3.EventIterator;function Zk(r,e,t){return new Y3.EventIterator(({push:n})=>(this.addEventListener(r,n,e),()=>this.removeEventListener(r,n,e)),t)}il.subscribe=Zk;il.default=Y3.EventIterator});var Kb=Ct((kde,$b)=>{function Or(r,e){typeof e=="boolean"&&(e={forever:e}),this._originalTimeouts=JSON.parse(JSON.stringify(r)),this._timeouts=r,this._options=e||{},this._maxRetryTime=e&&e.maxRetryTime||1/0,this._fn=null,this._errors=[],this._attempts=1,this._operationTimeout=null,this._operationTimeoutCb=null,this._timeout=null,this._operationStart=null,this._timer=null,this._options.forever&&(this._cachedTimeouts=this._timeouts.slice(0))}$b.exports=Or;Or.prototype.reset=function(){this._attempts=1,this._timeouts=this._originalTimeouts.slice(0)};Or.prototype.stop=function(){this._timeout&&clearTimeout(this._timeout),this._timer&&clearTimeout(this._timer),this._timeouts=[],this._cachedTimeouts=null};Or.prototype.retry=function(r){if(this._timeout&&clearTimeout(this._timeout),!r)return!1;var e=new Date().getTime();if(r&&e-this._operationStart>=this._maxRetryTime)return this._errors.push(r),this._errors.unshift(new Error("RetryOperation timeout occurred")),!1;this._errors.push(r);var t=this._timeouts.shift();if(t===void 0)if(this._cachedTimeouts)this._errors.splice(0,this._errors.length-1),t=this._cachedTimeouts.slice(-1);else return!1;var n=this;return this._timer=setTimeout(function(){n._attempts++,n._operationTimeoutCb&&(n._timeout=setTimeout(function(){n._operationTimeoutCb(n._attempts)},n._operationTimeout),n._options.unref&&n._timeout.unref()),n._fn(n._attempts)},t),this._options.unref&&this._timer.unref(),!0};Or.prototype.attempt=function(r,e){this._fn=r,e&&(e.timeout&&(this._operationTimeout=e.timeout),e.cb&&(this._operationTimeoutCb=e.cb));var t=this;this._operationTimeoutCb&&(this._timeout=setTimeout(function(){t._operationTimeoutCb()},t._operationTimeout)),this._operationStart=new Date().getTime(),this._fn(this._attempts)};Or.prototype.try=function(r){console.log("Using RetryOperation.try() is deprecated"),this.attempt(r)};Or.prototype.start=function(r){console.log("Using RetryOperation.start() is deprecated"),this.attempt(r)};Or.prototype.start=Or.prototype.try;Or.prototype.errors=function(){return this._errors};Or.prototype.attempts=function(){return this._attempts};Or.prototype.mainError=function(){if(this._errors.length===0)return null;for(var r={},e=null,t=0,n=0;n<this._errors.length;n++){var o=this._errors[n],i=o.message,s=(r[i]||0)+1;r[i]=s,s>=t&&(e=o,t=s)}return e}});var Hb=Ct(ji=>{var CP=Kb();ji.operation=function(r){var e=ji.timeouts(r);return new CP(e,{forever:r&&(r.forever||r.retries===1/0),unref:r&&r.unref,maxRetryTime:r&&r.maxRetryTime})};ji.timeouts=function(r){if(r instanceof Array)return[].concat(r);var e={retries:10,factor:2,minTimeout:1*1e3,maxTimeout:1/0,randomize:!1};for(var t in r)e[t]=r[t];if(e.minTimeout>e.maxTimeout)throw new Error("minTimeout is greater than maxTimeout");for(var n=[],o=0;o<e.retries;o++)n.push(this.createTimeout(o,e));return r&&r.forever&&!n.length&&n.push(this.createTimeout(o,e)),n.sort(function(i,s){return i-s}),n};ji.createTimeout=function(r,e){var t=e.randomize?Math.random()+1:1,n=Math.round(t*Math.max(e.minTimeout,1)*Math.pow(e.factor,r));return n=Math.min(n,e.maxTimeout),n};ji.wrap=function(r,e,t){if(e instanceof Array&&(t=e,e=null),!t){t=[];for(var n in r)typeof r[n]=="function"&&t.push(n)}for(var o=0;o<t.length;o++){var i=t[o],s=r[i];r[i]=function(c){var l=ji.operation(e),u=Array.prototype.slice.call(arguments,1),d=u.pop();u.push(function(f){l.retry(f)||(f&&(arguments[0]=l.mainError()),d.apply(this,arguments))}),l.attempt(function(){c.apply(r,u)})}.bind(r,s),r[i].options=e}}});var zb=Ct((Rde,qb)=>{qb.exports=Hb()});var XP={};Qe(XP,{DEFAULT_SESSION_MAX_PROVIDERS:()=>gp,DEFAULT_SESSION_MIN_PROVIDERS:()=>mp,InsufficientProvidersError:()=>wc,NoRoutersAvailableError:()=>No,UnknownCodecError:()=>xc,UnknownHashAlgorithmError:()=>bc,createHelia:()=>QP,libp2pDefaults:()=>vh});var C4=Symbol.for("@libp2p/connection");var pn=Symbol.for("@libp2p/content-routing");var jo=Symbol.for("@libp2p/peer-discovery");var hl=Symbol.for("@libp2p/peer-id");function pl(r){return!!r?.[hl]}var mn=Symbol.for("@libp2p/peer-routing");var so="keep-alive";var co=Symbol.for("@libp2p/transport");var ao;(function(r){r[r.FATAL_ALL=0]="FATAL_ALL",r[r.NO_FATAL=1]="NO_FATAL"})(ao||(ao={}));var Ft=class extends Error{static name="AbortError";constructor(e="The operation was aborted"){super(e),this.name="AbortError"}},ml=class extends Error{static name="UnexpectedPeerError";constructor(e="Unexpected Peer"){super(e),this.name="UnexpectedPeerError"}};var _=class extends Error{static name="InvalidParametersError";constructor(e="Invalid parameters"){super(e),this.name="InvalidParametersError"}},Dn=class extends Error{static name="InvalidPublicKeyError";constructor(e="Invalid public key"){super(e),this.name="InvalidPublicKeyError"}},Ea=class extends Error{static name="InvalidPrivateKeyError";constructor(e="Invalid private key"){super(e),this.name="InvalidPrivateKeyError"}};var gl=class extends Error{static name="ConnectionClosingError";constructor(e="The connection is closing"){super(e),this.name="ConnectionClosingError"}},Ji=class extends Error{static name="ConnectionClosedError";constructor(e="The connection is closed"){super(e),this.name="ConnectionClosedError"}},es=class extends Error{static name="ConnectionFailedError";constructor(e="Connection failed"){super(e),this.name="ConnectionFailedError"}},gn=class extends Error{static name="MuxerClosedError";constructor(e="The muxer is closed"){super(e),this.name="MuxerClosedError"}},yl=class extends Error{static name="StreamResetError";constructor(e="The stream has been reset"){super(e),this.name="StreamResetError"}},Zo=class extends Error{static name="StreamStateError";constructor(e="The stream is in an invalid state"){super(e),this.name="StreamStateError"}},Be=class extends Error{static name="NotFoundError";constructor(e="Not found"){super(e),this.name="NotFoundError"}},ts=class extends Error{static name="InvalidPeerIdError";constructor(e="Invalid PeerID"){super(e),this.name="InvalidPeerIdError"}},lo=class extends Error{static name="InvalidMultiaddrError";constructor(e="Invalid multiaddr"){super(e),this.name="InvalidMultiaddrError"}},wl=class extends Error{static name="InvalidCIDError";constructor(e="Invalid CID"){super(e),this.name="InvalidCIDError"}},uo=class extends Error{static name="InvalidMultihashError";constructor(e="Invalid Multihash"){super(e),this.name="InvalidMultihashError"}},Ln=class extends Error{static name="UnsupportedProtocolError";constructor(e="Unsupported protocol error"){super(e),this.name="UnsupportedProtocolError"}},fe=class extends Error{static name="InvalidMessageError";constructor(e="Invalid message"){super(e),this.name="InvalidMessageError"}},bl=class extends Error{static name="ProtocolError";constructor(e="Protocol error"){super(e),this.name="ProtocolError"}},Ur=class extends Error{static name="TimeoutError";constructor(e="Timed out"){super(e),this.name="TimeoutError"}},Fr=class extends Error{static name="NotStartedError";constructor(e="Not started"){super(e),this.name="NotStartedError"}};var Nn=class extends Error{static name="DialError";constructor(e="Dial error"){super(e),this.name="DialError"}},Jo=class extends Error{static name="ListenError";constructor(e="Listen error"){super(e),this.name="ListenError"}},rs=class extends Error{static name="LimitedConnectionError";constructor(e="Limited connection"){super(e),this.name="LimitedConnectionError"}},xl=class extends Error{static name="TooManyInboundProtocolStreamsError";constructor(e="Too many inbound protocol streams"){super(e),this.name="TooManyInboundProtocolStreamsError"}},fo=class extends Error{static name="TooManyOutboundProtocolStreamsError";constructor(e="Too many outbound protocol streams"){super(e),this.name="TooManyOutboundProtocolStreamsError"}},Vr=class extends Error{static name="UnsupportedKeyTypeError";constructor(e="Unsupported key type"){super(e),this.name="UnsupportedKeyTypeError"}};var ge=class extends EventTarget{#e=new Map;constructor(){super()}listenerCount(e){let t=this.#e.get(e);return t==null?0:t.length}addEventListener(e,t,n){super.addEventListener(e,t,n);let o=this.#e.get(e);o==null&&(o=[],this.#e.set(e,o)),o.push({callback:t,once:(n!==!0&&n!==!1&&n?.once)??!1})}removeEventListener(e,t,n){super.removeEventListener(e.toString(),t??null,n);let o=this.#e.get(e);o!=null&&(o=o.filter(({callback:i})=>i!==t),this.#e.set(e,o))}dispatchEvent(e){let t=super.dispatchEvent(e),n=this.#e.get(e.type);return n==null||(n=n.filter(({once:o})=>!o),this.#e.set(e.type,n)),t}safeDispatchEvent(e,t={}){return this.dispatchEvent(new CustomEvent(e,t))}};function vl(r){return r!=null&&typeof r.start=="function"&&typeof r.stop=="function"}async function gt(...r){let e=[];for(let t of r)vl(t)&&e.push(t);await Promise.all(e.map(async t=>{t.beforeStart!=null&&await t.beforeStart()})),await Promise.all(e.map(async t=>{await t.start()})),await Promise.all(e.map(async t=>{t.afterStart!=null&&await t.afterStart()}))}async function kt(...r){let e=[];for(let t of r)vl(t)&&e.push(t);await Promise.all(e.map(async t=>{t.beforeStop!=null&&await t.beforeStop()})),await Promise.all(e.map(async t=>{await t.stop()})),await Promise.all(e.map(async t=>{t.afterStop!=null&&await t.afterStop()}))}var Se=Symbol.for("@libp2p/service-capabilities"),dr=Symbol.for("@libp2p/service-dependencies");function ce(r){let e=new globalThis.AbortController;function t(){e.abort();for(let i of r)i?.removeEventListener!=null&&i.removeEventListener("abort",t)}for(let i of r){if(i?.aborted===!0){t();break}i?.addEventListener!=null&&i.addEventListener("abort",t)}function n(){for(let i of r)i?.removeEventListener!=null&&i.removeEventListener("abort",t)}let o=e.signal;return o.clear=n,o}function J(){let r={};return r.promise=new Promise((e,t)=>{r.resolve=e,r.reject=t}),r}var El=class{buffer;mask;top;btm;next;constructor(e){if(!(e>0)||e-1&e)throw new Error("Max size for a FixedFIFO should be a power of two");this.buffer=new Array(e),this.mask=e-1,this.top=0,this.btm=0,this.next=null}push(e){return this.buffer[this.top]!==void 0?!1:(this.buffer[this.top]=e,this.top=this.top+1&this.mask,!0)}shift(){let e=this.buffer[this.btm];if(e!==void 0)return this.buffer[this.btm]=void 0,this.btm=this.btm+1&this.mask,e}isEmpty(){return this.buffer[this.btm]===void 0}},ns=class{size;hwm;head;tail;constructor(e={}){this.hwm=e.splitLimit??16,this.head=new El(this.hwm),this.tail=this.head,this.size=0}calculateSize(e){return e?.byteLength!=null?e.byteLength:1}push(e){if(e?.value!=null&&(this.size+=this.calculateSize(e.value)),!this.head.push(e)){let t=this.head;this.head=t.next=new El(2*this.head.buffer.length),this.head.push(e)}}shift(){let e=this.tail.shift();if(e===void 0&&this.tail.next!=null){let t=this.tail.next;this.tail.next=null,this.tail=t,e=this.tail.shift()}return e?.value!=null&&(this.size-=this.calculateSize(e.value)),e}isEmpty(){return this.head.isEmpty()}};var i0=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.code=t??"ABORT_ERR"}};function Pt(r={}){return gx(t=>{let n=t.shift();if(n==null)return{done:!0};if(n.error!=null)throw n.error;return{done:n.done===!0,value:n.value}},r)}function gx(r,e){e=e??{};let t=e.onEnd,n=new ns,o,i,s,a=J(),c=async()=>{try{return n.isEmpty()?s?{done:!0}:await new Promise((m,y)=>{i=x=>{i=null,n.push(x);try{m(r(n))}catch(w){y(w)}return o}}):r(n)}finally{n.isEmpty()&&queueMicrotask(()=>{a.resolve(),a=J()})}},l=m=>i!=null?i(m):(n.push(m),o),u=m=>(n=new ns,i!=null?i({error:m}):(n.push({error:m}),o)),d=m=>{if(s)return o;if(e?.objectMode!==!0&&m?.byteLength==null)throw new Error("objectMode was not true but tried to push non-Uint8Array value");return l({done:!1,value:m})},f=m=>s?o:(s=!0,m!=null?u(m):l({done:!0})),h=()=>(n=new ns,f(),{done:!0}),p=m=>(f(m),{done:!0});if(o={[Symbol.asyncIterator](){return this},next:c,return:h,throw:p,push:d,end:f,get readableLength(){return n.size},onEmpty:async m=>{let y=m?.signal;if(y?.throwIfAborted(),n.isEmpty())return;let x,w;y!=null&&(x=new Promise((I,B)=>{w=()=>{B(new i0)},y.addEventListener("abort",w)}));try{await Promise.race([a.promise,x])}finally{w!=null&&y!=null&&y?.removeEventListener("abort",w)}}},t==null)return o;let g=o;return o={[Symbol.asyncIterator](){return this},next(){return g.next()},throw(m){return g.throw(m),t!=null&&(t(m),t=void 0),{done:!0}},return(){return g.return(),t!=null&&(t(),t=void 0),{done:!0}},push:d,end(m){return g.end(m),t!=null&&(t(m),t=void 0),o},get readableLength(){return g.readableLength},onEmpty:m=>g.onEmpty(m)},o}var s0=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.name="AbortError",this.code=t??"ABORT_ERR"}};async function fr(r,e,t,n){let o=new s0(n?.errorMessage,n?.errorCode);return t?.aborted===!0?Promise.reject(o):new Promise((i,s)=>{function a(){t?.removeEventListener("abort",u),r.removeEventListener(e,c),n?.errorEvent!=null&&r.removeEventListener(n.errorEvent,l)}let c=d=>{try{if(n?.filter?.(d)===!1)return}catch(f){a(),s(f);return}a(),i(d)},l=d=>{a(),s(d.detail)},u=()=>{a(),s(o)};t?.addEventListener("abort",u),r.addEventListener(e,c),n?.errorEvent!=null&&r.addEventListener(n.errorEvent,l)})}var Sl=class extends Error{remainingPoints;msBeforeNext;consumedPoints;isFirstInDuration;constructor(e="Rate limit exceeded",t){super(e),this.name="RateLimitError",this.remainingPoints=t.remainingPoints,this.msBeforeNext=t.msBeforeNext,this.consumedPoints=t.consumedPoints,this.isFirstInDuration=t.isFirstInDuration}},Al=class extends Error{static name="QueueFullError";constructor(e="The queue was full"){super(e),this.name="QueueFullError"}};var Il=class extends Error{type;code;constructor(e,t,n){super(e??"The operation was aborted"),this.type="aborted",this.name=n??"AbortError",this.code=t??"ABORT_ERR"}};async function st(r,e,t){if(e==null)return r;if(e.aborted)return Promise.reject(new Il(t?.errorMessage,t?.errorCode,t?.errorName));let n,o=new Il(t?.errorMessage,t?.errorCode,t?.errorName);try{return await Promise.race([r,new Promise((i,s)=>{n=()=>{s(o)},e.addEventListener("abort",n)})])}finally{n!=null&&e.removeEventListener("abort",n)}}var Tl=class{deferred;signal;constructor(e){this.signal=e,this.deferred=J(),this.onAbort=this.onAbort.bind(this),this.signal?.addEventListener("abort",this.onAbort)}onAbort(){this.deferred.reject(this.signal?.reason??new Ft)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function yx(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var _l=class{id;fn;options;recipients;status;timeline;controller;constructor(e,t){this.id=yx(),this.status="queued",this.fn=e,this.options=t,this.recipients=[],this.timeline={created:Date.now()},this.controller=new AbortController,this.controller.signal,this.onAbort=this.onAbort.bind(this)}abort(e){this.controller.abort(e)}onAbort(){this.recipients.reduce((t,n)=>t&&n.signal?.aborted===!0,!0)&&(this.controller.abort(new Ft),this.cleanup())}async join(e={}){let t=new Tl(e.signal);return this.recipients.push(t),e.signal?.addEventListener("abort",this.onAbort),t.deferred.promise}async run(){this.status="running",this.timeline.started=Date.now();try{this.controller.signal.throwIfAborted();let e=await st(this.fn({...this.options??{},signal:this.controller.signal}),this.controller.signal);this.recipients.forEach(t=>{t.deferred.resolve(e)}),this.status="complete"}catch(e){this.recipients.forEach(t=>{t.deferred.reject(e)}),this.status="errored"}finally{this.timeline.finished=Date.now(),this.cleanup()}}cleanup(){this.recipients.forEach(e=>{e.cleanup(),e.signal?.removeEventListener("abort",this.onAbort)})}};var Vt=class extends ge{concurrency;maxSize;queue;pending;sort;constructor(e={}){super(),this.concurrency=e.concurrency??Number.POSITIVE_INFINITY,this.maxSize=e.maxSize??Number.POSITIVE_INFINITY,this.pending=0,e.metricName!=null&&e.metrics?.registerMetricGroup(e.metricName,{calculate:()=>({size:this.queue.length,running:this.pending,queued:this.queue.length-this.pending})}),this.sort=e.sort,this.queue=[]}tryToStartAnother(){if(this.size===0)return queueMicrotask(()=>{this.safeDispatchEvent("empty")}),this.running===0&&queueMicrotask(()=>{this.safeDispatchEvent("idle")}),!1;if(this.pending<this.concurrency){let e;for(let t of this.queue)if(t.status==="queued"){e=t;break}return e==null?!1:(this.safeDispatchEvent("active"),this.pending++,e.run().finally(()=>{for(let t=0;t<this.queue.length;t++)if(this.queue[t]===e){this.queue.splice(t,1);break}this.pending--,this.tryToStartAnother(),this.safeDispatchEvent("next")}),!0)}return!1}enqueue(e){this.queue.push(e),this.sort!=null&&this.queue.sort(this.sort)}async add(e,t){if(t?.signal?.throwIfAborted(),this.size===this.maxSize)throw new Al;let n=new _l(e,t);return this.enqueue(n),this.safeDispatchEvent("add"),this.tryToStartAnother(),n.join(t).then(o=>(this.safeDispatchEvent("completed",{detail:o}),this.safeDispatchEvent("success",{detail:{job:n,result:o}}),o)).catch(o=>{if(n.status==="queued"){for(let i=0;i<this.queue.length;i++)if(this.queue[i]===n){this.queue.splice(i,1);break}}throw this.safeDispatchEvent("error",{detail:o}),this.safeDispatchEvent("failure",{detail:{job:n,error:o}}),o})}clear(){this.queue.splice(0,this.queue.length)}abort(){this.queue.forEach(e=>{e.abort(new Ft)}),this.clear()}async onEmpty(e){this.size!==0&&await fr(this,"empty",e?.signal)}async onSizeLessThan(e,t){this.size<e||await fr(this,"next",t?.signal,{filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await fr(this,"idle",e?.signal)}get size(){return this.queue.length}get queued(){return this.queue.length-this.pending}get running(){return this.pending}async*toGenerator(e){e?.signal?.throwIfAborted();let t=Pt({objectMode:!0}),n=c=>{c!=null?this.abort():this.clear(),t.end(c)},o=c=>{c.detail!=null&&t.push(c.detail)},i=c=>{n(c.detail)},s=()=>{n()},a=()=>{n(new Ft("Queue aborted"))};this.addEventListener("completed",o),this.addEventListener("error",i),this.addEventListener("idle",s),e?.signal?.addEventListener("abort",a);try{yield*t}finally{this.removeEventListener("completed",o),this.removeEventListener("error",i),this.removeEventListener("idle",s),e?.signal?.removeEventListener("abort",a),n()}}};var yt=class extends Vt{has(e){return this.find(e)!=null}find(e){return this.queue.find(t=>e.equals(t.options.peerId))}};function wx(r){return r[Symbol.asyncIterator]!=null}function bx(r){if(wx(r))return(async()=>{for await(let e of r);})();for(let e of r);}var Rt=bx;function se(r=0){return new Uint8Array(r)}function We(r=0){return new Uint8Array(r)}var xx=Math.pow(2,7),vx=Math.pow(2,14),Ex=Math.pow(2,21),a0=Math.pow(2,28),c0=Math.pow(2,35),l0=Math.pow(2,42),u0=Math.pow(2,49),_e=128,Dt=127;function pe(r){if(r<xx)return 1;if(r<vx)return 2;if(r<Ex)return 3;if(r<a0)return 4;if(r<c0)return 5;if(r<l0)return 6;if(r<u0)return 7;if(Number.MAX_SAFE_INTEGER!=null&&r>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function d0(r,e,t=0){switch(pe(r)){case 8:e[t++]=r&255|_e,r/=128;case 7:e[t++]=r&255|_e,r/=128;case 6:e[t++]=r&255|_e,r/=128;case 5:e[t++]=r&255|_e,r/=128;case 4:e[t++]=r&255|_e,r>>>=7;case 3:e[t++]=r&255|_e,r>>>=7;case 2:e[t++]=r&255|_e,r>>>=7;case 1:{e[t++]=r&255,r>>>=7;break}default:throw new Error("unreachable")}return e}function Sx(r,e,t=0){switch(pe(r)){case 8:e.set(t++,r&255|_e),r/=128;case 7:e.set(t++,r&255|_e),r/=128;case 6:e.set(t++,r&255|_e),r/=128;case 5:e.set(t++,r&255|_e),r/=128;case 4:e.set(t++,r&255|_e),r>>>=7;case 3:e.set(t++,r&255|_e),r>>>=7;case 2:e.set(t++,r&255|_e),r>>>=7;case 1:{e.set(t++,r&255),r>>>=7;break}default:throw new Error("unreachable")}return e}function f0(r,e){let t=r[e],n=0;if(n+=t&Dt,t<_e||(t=r[e+1],n+=(t&Dt)<<7,t<_e)||(t=r[e+2],n+=(t&Dt)<<14,t<_e)||(t=r[e+3],n+=(t&Dt)<<21,t<_e)||(t=r[e+4],n+=(t&Dt)*a0,t<_e)||(t=r[e+5],n+=(t&Dt)*c0,t<_e)||(t=r[e+6],n+=(t&Dt)*l0,t<_e)||(t=r[e+7],n+=(t&Dt)*u0,t<_e))return n;throw new RangeError("Could not decode varint")}function Ax(r,e){let t=r.get(e),n=0;if(n+=t&Dt,t<_e||(t=r.get(e+1),n+=(t&Dt)<<7,t<_e)||(t=r.get(e+2),n+=(t&Dt)<<14,t<_e)||(t=r.get(e+3),n+=(t&Dt)<<21,t<_e)||(t=r.get(e+4),n+=(t&Dt)*a0,t<_e)||(t=r.get(e+5),n+=(t&Dt)*c0,t<_e)||(t=r.get(e+6),n+=(t&Dt)*l0,t<_e)||(t=r.get(e+7),n+=(t&Dt)*u0,t<_e))return n;throw new RangeError("Could not decode varint")}function $e(r,e,t=0){return e==null&&(e=We(pe(r))),e instanceof Uint8Array?d0(r,e,t):Sx(r,e,t)}function $t(r,e=0){return r instanceof Uint8Array?f0(r,e):Ax(r,e)}function Pe(r,e){e==null&&(e=r.reduce((o,i)=>o+i.length,0));let t=We(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return t}function ne(r,e){if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0}var P4=Symbol.for("@achingbrain/uint8arraylist");function k4(r,e){if(e==null||e<0)throw new RangeError("index is out of bounds");let t=0;for(let n of r){let o=t+n.byteLength;if(e<o)return{buf:n,index:e-t};t=o}throw new RangeError("index is out of bounds")}function os(r){return!!r?.[P4]}var ue=class r{bufs;length;[P4]=!0;constructor(...e){this.bufs=[],this.length=0,e.length>0&&this.appendAll(e)}*[Symbol.iterator](){yield*this.bufs}get byteLength(){return this.length}append(...e){this.appendAll(e)}appendAll(e){let t=0;for(let n of e)if(n instanceof Uint8Array)t+=n.byteLength,this.bufs.push(n);else if(os(n))t+=n.byteLength,this.bufs.push(...n.bufs);else throw new Error("Could not append value, must be an Uint8Array or a Uint8ArrayList");this.length+=t}prepend(...e){this.prependAll(e)}prependAll(e){let t=0;for(let n of e.reverse())if(n instanceof Uint8Array)t+=n.byteLength,this.bufs.unshift(n);else if(os(n))t+=n.byteLength,this.bufs.unshift(...n.bufs);else throw new Error("Could not prepend value, must be an Uint8Array or a Uint8ArrayList");this.length+=t}get(e){let t=k4(this.bufs,e);return t.buf[t.index]}set(e,t){let n=k4(this.bufs,e);n.buf[n.index]=t}write(e,t=0){if(e instanceof Uint8Array)for(let n=0;n<e.length;n++)this.set(t+n,e[n]);else if(os(e))for(let n=0;n<e.length;n++)this.set(t+n,e.get(n));else throw new Error("Could not write value, must be an Uint8Array or a Uint8ArrayList")}consume(e){if(e=Math.trunc(e),!(Number.isNaN(e)||e<=0)){if(e===this.byteLength){this.bufs=[],this.length=0;return}for(;this.bufs.length>0;)if(e>=this.bufs[0].byteLength)e-=this.bufs[0].byteLength,this.length-=this.bufs[0].byteLength,this.bufs.shift();else{this.bufs[0]=this.bufs[0].subarray(e),this.length-=e;break}}}slice(e,t){let{bufs:n,length:o}=this._subList(e,t);return Pe(n,o)}subarray(e,t){let{bufs:n,length:o}=this._subList(e,t);return n.length===1?n[0]:Pe(n,o)}sublist(e,t){let{bufs:n,length:o}=this._subList(e,t),i=new r;return i.length=o,i.bufs=[...n],i}_subList(e,t){if(e=e??0,t=t??this.length,e<0&&(e=this.length+e),t<0&&(t=this.length+t),e<0||t>this.length)throw new RangeError("index is out of bounds");if(e===t)return{bufs:[],length:0};if(e===0&&t===this.length)return{bufs:this.bufs,length:this.length};let n=[],o=0;for(let i=0;i<this.bufs.length;i++){let s=this.bufs[i],a=o,c=a+s.byteLength;if(o=c,e>=c)continue;let l=e>=a&&e<c,u=t>a&&t<=c;if(l&&u){if(e===a&&t===c){n.push(s);break}let d=e-a;n.push(s.subarray(d,d+(t-e)));break}if(l){if(e===0){n.push(s);continue}n.push(s.subarray(e-a));continue}if(u){if(t===c){n.push(s);break}n.push(s.subarray(0,t-a));break}n.push(s)}return{bufs:n,length:t-e}}indexOf(e,t=0){if(!os(e)&&!(e instanceof Uint8Array))throw new TypeError('The "value" argument must be a Uint8ArrayList or Uint8Array');let n=e instanceof Uint8Array?e:e.subarray();if(t=Number(t??0),isNaN(t)&&(t=0),t<0&&(t=this.length+t),t<0&&(t=0),e.length===0)return t>this.length?this.length:t;let o=n.byteLength;if(o===0)throw new TypeError("search must be at least 1 byte long");let i=256,s=new Int32Array(i);for(let d=0;d<i;d++)s[d]=-1;for(let d=0;d<o;d++)s[n[d]]=d;let a=s,c=this.byteLength-n.byteLength,l=n.byteLength-1,u;for(let d=t;d<=c;d+=u){u=0;for(let f=l;f>=0;f--){let h=this.get(d+f);if(n[f]!==h){u=Math.max(1,f-a[h]);break}}if(u===0)return d}return-1}getInt8(e){let t=this.subarray(e,e+1);return new DataView(t.buffer,t.byteOffset,t.byteLength).getInt8(0)}setInt8(e,t){let n=We(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setInt8(0,t),this.write(n,e)}getInt16(e,t){let n=this.subarray(e,e+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt16(0,t)}setInt16(e,t,n){let o=se(2);new DataView(o.buffer,o.byteOffset,o.byteLength).setInt16(0,t,n),this.write(o,e)}getInt32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt32(0,t)}setInt32(e,t,n){let o=se(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setInt32(0,t,n),this.write(o,e)}getBigInt64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getBigInt64(0,t)}setBigInt64(e,t,n){let o=se(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setBigInt64(0,t,n),this.write(o,e)}getUint8(e){let t=this.subarray(e,e+1);return new DataView(t.buffer,t.byteOffset,t.byteLength).getUint8(0)}setUint8(e,t){let n=We(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setUint8(0,t),this.write(n,e)}getUint16(e,t){let n=this.subarray(e,e+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint16(0,t)}setUint16(e,t,n){let o=se(2);new DataView(o.buffer,o.byteOffset,o.byteLength).setUint16(0,t,n),this.write(o,e)}getUint32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint32(0,t)}setUint32(e,t,n){let o=se(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setUint32(0,t,n),this.write(o,e)}getBigUint64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getBigUint64(0,t)}setBigUint64(e,t,n){let o=se(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setBigUint64(0,t,n),this.write(o,e)}getFloat32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getFloat32(0,t)}setFloat32(e,t,n){let o=se(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setFloat32(0,t,n),this.write(o,e)}getFloat64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getFloat64(0,t)}setFloat64(e,t,n){let o=se(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setFloat64(0,t,n),this.write(o,e)}equals(e){if(e==null||!(e instanceof r)||e.bufs.length!==this.bufs.length)return!1;for(let t=0;t<this.bufs.length;t++)if(!ne(this.bufs[t],e.bufs[t]))return!1;return!0}static fromUint8Arrays(e,t){let n=new r;return n.bufs=e,t==null&&(t=e.reduce((o,i)=>o+i.byteLength,0)),n.length=t,n}};function Cl(r){return r[Symbol.asyncIterator]!=null}var kl=r=>{let e=pe(r),t=We(e);return $e(r,t),kl.bytes=e,t};kl.bytes=0;function $r(r,e){e=e??{};let t=e.lengthEncoder??kl;function*n(o){let i=t(o.byteLength);i instanceof Uint8Array?yield i:yield*i,o instanceof Uint8Array?yield o:yield*o}return Cl(r)?async function*(){for await(let o of r)yield*n(o)}():function*(){for(let o of r)yield*n(o)}()}$r.single=(r,e)=>{e=e??{};let t=e.lengthEncoder??kl;return new ue(t(r.byteLength),r)};var Pl=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},Rl=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},Dl=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"},Sa=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};var Tx=8,_x=1024*1024*4,ei;(function(r){r[r.LENGTH=0]="LENGTH",r[r.DATA=1]="DATA"})(ei||(ei={}));var h0=r=>{let e=$t(r);return h0.bytes=pe(e),e};h0.bytes=0;function Kr(r,e){let t=new ue,n=ei.LENGTH,o=-1,i=e?.lengthDecoder??h0,s=e?.maxLengthLength??Tx,a=e?.maxDataLength??_x;function*c(){for(;t.byteLength>0;){if(n===ei.LENGTH)try{if(o=i(t),o<0)throw new Pl("Invalid message length");if(o>a)throw new Rl("Message length too long");let l=i.bytes;t.consume(l),e?.onLength!=null&&e.onLength(o),n=ei.DATA}catch(l){if(l instanceof RangeError){if(t.byteLength>s)throw new Dl("Message length length too long");break}throw l}if(n===ei.DATA){if(t.byteLength<o)break;let l=t.sublist(0,o);t.consume(o),e?.onData!=null&&e.onData(l),yield l,n=ei.LENGTH}}}return Cl(r)?async function*(){for await(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new Sa("Unexpected end of input")}():function*(){for(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new Sa("Unexpected end of input")}()}Kr.fromReader=(r,e)=>{let t=1,n=async function*(){for(;;)try{let{done:i,value:s}=await r.next(t);if(i===!0)return;s!=null&&(yield s)}catch(i){if(i.code==="ERR_UNDER_READ")return{done:!0,value:null};throw i}finally{t=1}}();return Kr(n,{...e??{},onLength:i=>{t=i}})};function Cx(r){let[e,t]=r[Symbol.asyncIterator]!=null?[r[Symbol.asyncIterator](),Symbol.asyncIterator]:[r[Symbol.iterator](),Symbol.iterator],n=[];return{peek:()=>e.next(),push:o=>{n.push(o)},next:()=>n.length>0?{done:!1,value:n.shift()}:e.next(),[t](){return this}}}var is=Cx;function kx(r){return r[Symbol.asyncIterator]!=null}function Px(r,e){let t=0;if(kx(r))return async function*(){for await(let c of r)yield e(c,t++)}();let n=is(r),{value:o,done:i}=n.next();if(i===!0)return function*(){}();let s=e(o,t++);if(typeof s.then=="function")return async function*(){yield await s;for await(let c of n)yield e(c,t++)}();let a=e;return function*(){yield s;for(let c of n)yield a(c,t++)}()}var jt=Px;function Rx(r){return r[Symbol.asyncIterator]!=null}function Dx(...r){let e=[];for(let t of r)Rx(t)||e.push(t);return e.length===r.length?function*(){for(let t of e)yield*t}():async function*(){let t=Pt({objectMode:!0});Promise.resolve().then(async()=>{try{await Promise.all(r.map(async n=>{for await(let o of n)t.push(o)})),t.end()}catch(n){t.end(n)}}),yield*t}()}var Kt=Dx;function dt(r,...e){if(r==null)throw new Error("Empty pipeline");if(m0(r)){let n=r;r=()=>n.source}else if(D4(r)||R4(r)){let n=r;r=()=>n}let t=[r,...e];if(t.length>1&&m0(t[t.length-1])&&(t[t.length-1]=t[t.length-1].sink),t.length>2)for(let n=1;n<t.length-1;n++)m0(t[n])&&(t[n]=Nx(t[n]));return Lx(...t)}var Lx=(...r)=>{let e;for(;r.length>0;)e=r.shift()(e);return e},R4=r=>r?.[Symbol.asyncIterator]!=null,D4=r=>r?.[Symbol.iterator]!=null,m0=r=>r==null?!1:r.sink!=null&&r.source!=null,Nx=r=>e=>{let t=r.sink(e);if(t?.then!=null){let n=Pt({objectMode:!0});t.then(()=>{n.end()},s=>{n.end(s)});let o,i=r.source;if(R4(i))o=async function*(){yield*i,n.end()};else if(D4(i))o=function*(){yield*i,n.end()};else throw new Error("Unknown duplex source type - must be Iterable or AsyncIterable");return Kt(n,o())}return r.source};function Bx(r){return r[Symbol.asyncIterator]!=null}function Ox(r,e){return Bx(r)?async function*(){let t=0;if(!(e<1)){for await(let n of r)if(yield n,t++,t===e)return}}():function*(){let t=0;if(!(e<1)){for(let n of r)if(yield n,t++,t===e)return}}()}var ho=Ox;var W=class extends Event{type;detail;constructor(e,t){super(e),this.type=e,this.detail=t}};var Aa="/ipfs/bitswap/1.2.0";var g0=new Float32Array([-0]),po=new Uint8Array(g0.buffer);function L4(r,e,t){g0[0]=r,e[t]=po[0],e[t+1]=po[1],e[t+2]=po[2],e[t+3]=po[3]}function N4(r,e){return po[0]=r[e],po[1]=r[e+1],po[2]=r[e+2],po[3]=r[e+3],g0[0]}var y0=new Float64Array([-0]),Lt=new Uint8Array(y0.buffer);function B4(r,e,t){y0[0]=r,e[t]=Lt[0],e[t+1]=Lt[1],e[t+2]=Lt[2],e[t+3]=Lt[3],e[t+4]=Lt[4],e[t+5]=Lt[5],e[t+6]=Lt[6],e[t+7]=Lt[7]}function O4(r,e){return Lt[0]=r[e],Lt[1]=r[e+1],Lt[2]=r[e+2],Lt[3]=r[e+3],Lt[4]=r[e+4],Lt[5]=r[e+5],Lt[6]=r[e+6],Lt[7]=r[e+7],y0[0]}var Mx=BigInt(Number.MAX_SAFE_INTEGER),Ux=BigInt(Number.MIN_SAFE_INTEGER),hr=class r{lo;hi;constructor(e,t){this.lo=e|0,this.hi=t|0}toNumber(e=!1){if(!e&&this.hi>>>31>0){let t=~this.lo+1>>>0,n=~this.hi>>>0;return t===0&&(n=n+1>>>0),-(t+n*4294967296)}return this.lo+this.hi*4294967296}toBigInt(e=!1){if(e)return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n);if(this.hi>>>31){let t=~this.lo+1>>>0,n=~this.hi>>>0;return t===0&&(n=n+1>>>0),-(BigInt(t)+(BigInt(n)<<32n))}return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n)}toString(e=!1){return this.toBigInt(e).toString()}zzEncode(){let e=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^e)>>>0,this.lo=(this.lo<<1^e)>>>0,this}zzDecode(){let e=-(this.lo&1);return this.lo=((this.lo>>>1|this.hi<<31)^e)>>>0,this.hi=(this.hi>>>1^e)>>>0,this}length(){let e=this.lo,t=(this.lo>>>28|this.hi<<4)>>>0,n=this.hi>>>24;return n===0?t===0?e<16384?e<128?1:2:e<2097152?3:4:t<16384?t<128?5:6:t<2097152?7:8:n<128?9:10}static fromBigInt(e){if(e===0n)return ti;if(e<Mx&&e>Ux)return this.fromNumber(Number(e));let t=e<0n;t&&(e=-e);let n=e>>32n,o=e-(n<<32n);return t&&(n=~n|0n,o=~o|0n,++o>M4&&(o=0n,++n>M4&&(n=0n))),new r(Number(o),Number(n))}static fromNumber(e){if(e===0)return ti;let t=e<0;t&&(e=-e);let n=e>>>0,o=(e-n)/4294967296>>>0;return t&&(o=~o>>>0,n=~n>>>0,++n>4294967295&&(n=0,++o>4294967295&&(o=0))),new r(n,o)}static from(e){return typeof e=="number"?r.fromNumber(e):typeof e=="bigint"?r.fromBigInt(e):typeof e=="string"?r.fromBigInt(BigInt(e)):e.low!=null||e.high!=null?new r(e.low>>>0,e.high>>>0):ti}},ti=new hr(0,0);ti.toBigInt=function(){return 0n};ti.zzEncode=ti.zzDecode=function(){return this};ti.length=function(){return 1};var M4=4294967296n;function U4(r){let e=0,t=0;for(let n=0;n<r.length;++n)t=r.charCodeAt(n),t<128?e+=1:t<2048?e+=2:(t&64512)===55296&&(r.charCodeAt(n+1)&64512)===56320?(++n,e+=4):e+=3;return e}function F4(r,e,t){if(t-e<1)return"";let o,i=[],s=0,a;for(;e<t;)a=r[e++],a<128?i[s++]=a:a>191&&a<224?i[s++]=(a&31)<<6|r[e++]&63:a>239&&a<365?(a=((a&7)<<18|(r[e++]&63)<<12|(r[e++]&63)<<6|r[e++]&63)-65536,i[s++]=55296+(a>>10),i[s++]=56320+(a&1023)):i[s++]=(a&15)<<12|(r[e++]&63)<<6|r[e++]&63,s>8191&&((o??(o=[])).push(String.fromCharCode.apply(String,i)),s=0);return o!=null?(s>0&&o.push(String.fromCharCode.apply(String,i.slice(0,s))),o.join("")):String.fromCharCode.apply(String,i.slice(0,s))}function w0(r,e,t){let n=t,o,i;for(let s=0;s<r.length;++s)o=r.charCodeAt(s),o<128?e[t++]=o:o<2048?(e[t++]=o>>6|192,e[t++]=o&63|128):(o&64512)===55296&&((i=r.charCodeAt(s+1))&64512)===56320?(o=65536+((o&1023)<<10)+(i&1023),++s,e[t++]=o>>18|240,e[t++]=o>>12&63|128,e[t++]=o>>6&63|128,e[t++]=o&63|128):(e[t++]=o>>12|224,e[t++]=o>>6&63|128,e[t++]=o&63|128);return t-n}function Hr(r,e){return RangeError(`index out of range: ${r.pos} + ${e??1} > ${r.len}`)}function Ll(r,e){return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0}var b0=class{buf;pos;len;_slice=Uint8Array.prototype.subarray;constructor(e){this.buf=e,this.pos=0,this.len=e.length}uint32(){let e=4294967295;if(e=(this.buf[this.pos]&127)>>>0,this.buf[this.pos++]<128||(e=(e|(this.buf[this.pos]&127)<<7)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&127)<<14)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&127)<<21)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&15)<<28)>>>0,this.buf[this.pos++]<128))return e;if((this.pos+=5)>this.len)throw this.pos=this.len,Hr(this,10);return e}int32(){return this.uint32()|0}sint32(){let e=this.uint32();return e>>>1^-(e&1)|0}bool(){return this.uint32()!==0}fixed32(){if(this.pos+4>this.len)throw Hr(this,4);return Ll(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw Hr(this,4);return Ll(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw Hr(this,4);let e=N4(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw Hr(this,4);let e=O4(this.buf,this.pos);return this.pos+=8,e}bytes(){let e=this.uint32(),t=this.pos,n=this.pos+e;if(n>this.len)throw Hr(this,e);return this.pos+=e,t===n?new Uint8Array(0):this.buf.subarray(t,n)}string(){let e=this.bytes();return F4(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw Hr(this,e);this.pos+=e}else do if(this.pos>=this.len)throw Hr(this);while(this.buf[this.pos++]&128);return this}skipType(e){switch(e){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;(e=this.uint32()&7)!==4;)this.skipType(e);break;case 5:this.skip(4);break;default:throw Error(`invalid wire type ${e} at offset ${this.pos}`)}return this}readLongVarint(){let e=new hr(0,0),t=0;if(this.len-this.pos>4){for(;t<4;++t)if(e.lo=(e.lo|(this.buf[this.pos]&127)<<t*7)>>>0,this.buf[this.pos++]<128)return e;if(e.lo=(e.lo|(this.buf[this.pos]&127)<<28)>>>0,e.hi=(e.hi|(this.buf[this.pos]&127)>>4)>>>0,this.buf[this.pos++]<128)return e;t=0}else{for(;t<3;++t){if(this.pos>=this.len)throw Hr(this);if(e.lo=(e.lo|(this.buf[this.pos]&127)<<t*7)>>>0,this.buf[this.pos++]<128)return e}return e.lo=(e.lo|(this.buf[this.pos++]&127)<<t*7)>>>0,e}if(this.len-this.pos>4){for(;t<5;++t)if(e.hi=(e.hi|(this.buf[this.pos]&127)<<t*7+3)>>>0,this.buf[this.pos++]<128)return e}else for(;t<5;++t){if(this.pos>=this.len)throw Hr(this);if(e.hi=(e.hi|(this.buf[this.pos]&127)<<t*7+3)>>>0,this.buf[this.pos++]<128)return e}throw Error("invalid varint encoding")}readFixed64(){if(this.pos+8>this.len)throw Hr(this,8);let e=Ll(this.buf,this.pos+=4),t=Ll(this.buf,this.pos+=4);return new hr(e,t)}int64(){return this.readLongVarint().toBigInt()}int64Number(){return this.readLongVarint().toNumber()}int64String(){return this.readLongVarint().toString()}uint64(){return this.readLongVarint().toBigInt(!0)}uint64Number(){let e=f0(this.buf,this.pos);return this.pos+=pe(e),e}uint64String(){return this.readLongVarint().toString(!0)}sint64(){return this.readLongVarint().zzDecode().toBigInt()}sint64Number(){return this.readLongVarint().zzDecode().toNumber()}sint64String(){return this.readLongVarint().zzDecode().toString()}fixed64(){return this.readFixed64().toBigInt()}fixed64Number(){return this.readFixed64().toNumber()}fixed64String(){return this.readFixed64().toString()}sfixed64(){return this.readFixed64().toBigInt()}sfixed64Number(){return this.readFixed64().toNumber()}sfixed64String(){return this.readFixed64().toString()}};function x0(r){return new b0(r instanceof Uint8Array?r:r.subarray())}function ee(r,e,t){let n=x0(r);return e.decode(n,void 0,t)}var T0={};Qe(T0,{base10:()=>qx});var HD=new Uint8Array(0);function $4(r,e){if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0}function qr(r){if(r instanceof Uint8Array&&r.constructor.name==="Uint8Array")return r;if(r instanceof ArrayBuffer)return new Uint8Array(r);if(ArrayBuffer.isView(r))return new Uint8Array(r.buffer,r.byteOffset,r.byteLength);throw new Error("Unknown type, must be binary type")}function K4(r){return new TextEncoder().encode(r)}function H4(r){return new TextDecoder().decode(r)}function Fx(r,e){if(r.length>=255)throw new TypeError("Alphabet too long");for(var t=new Uint8Array(256),n=0;n<t.length;n++)t[n]=255;for(var o=0;o<r.length;o++){var i=r.charAt(o),s=i.charCodeAt(0);if(t[s]!==255)throw new TypeError(i+" is ambiguous");t[s]=o}var a=r.length,c=r.charAt(0),l=Math.log(a)/Math.log(256),u=Math.log(256)/Math.log(a);function d(p){if(p instanceof Uint8Array||(ArrayBuffer.isView(p)?p=new Uint8Array(p.buffer,p.byteOffset,p.byteLength):Array.isArray(p)&&(p=Uint8Array.from(p))),!(p instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(p.length===0)return"";for(var g=0,m=0,y=0,x=p.length;y!==x&&p[y]===0;)y++,g++;for(var w=(x-y)*u+1>>>0,I=new Uint8Array(w);y!==x;){for(var B=p[y],L=0,P=w-1;(B!==0||L<m)&&P!==-1;P--,L++)B+=256*I[P]>>>0,I[P]=B%a>>>0,B=B/a>>>0;if(B!==0)throw new Error("Non-zero carry");m=L,y++}for(var S=w-m;S!==w&&I[S]===0;)S++;for(var A=c.repeat(g);S<w;++S)A+=r.charAt(I[S]);return A}function f(p){if(typeof p!="string")throw new TypeError("Expected String");if(p.length===0)return new Uint8Array;var g=0;if(p[g]!==" "){for(var m=0,y=0;p[g]===c;)m++,g++;for(var x=(p.length-g)*l+1>>>0,w=new Uint8Array(x);p[g];){var I=t[p.charCodeAt(g)];if(I===255)return;for(var B=0,L=x-1;(I!==0||B<y)&&L!==-1;L--,B++)I+=a*w[L]>>>0,w[L]=I%256>>>0,I=I/256>>>0;if(I!==0)throw new Error("Non-zero carry");y=B,g++}if(p[g]!==" "){for(var P=x-y;P!==x&&w[P]===0;)P++;for(var S=new Uint8Array(m+(x-P)),A=m;P!==x;)S[A++]=w[P++];return S}}}function h(p){var g=f(p);if(g)return g;throw new Error(`Non-${e} character`)}return{encode:d,decodeUnsafe:f,decode:h}}var Vx=Fx,$x=Vx,q4=$x;var E0=class{name;prefix;baseEncode;constructor(e,t,n){this.name=e,this.prefix=t,this.baseEncode=n}encode(e){if(e instanceof Uint8Array)return`${this.prefix}${this.baseEncode(e)}`;throw Error("Unknown type, must be binary type")}},S0=class{name;prefix;baseDecode;prefixCodePoint;constructor(e,t,n){this.name=e,this.prefix=t;let o=t.codePointAt(0);if(o===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=o,this.baseDecode=n}decode(e){if(typeof e=="string"){if(e.codePointAt(0)!==this.prefixCodePoint)throw Error(`Unable to decode multibase string ${JSON.stringify(e)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);return this.baseDecode(e.slice(this.prefix.length))}else throw Error("Can only multibase decode strings")}or(e){return z4(this,e)}},A0=class{decoders;constructor(e){this.decoders=e}or(e){return z4(this,e)}decode(e){let t=e[0],n=this.decoders[t];if(n!=null)return n.decode(e);throw RangeError(`Unable to decode multibase string ${JSON.stringify(e)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}};function z4(r,e){return new A0({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var I0=class{name;prefix;baseEncode;baseDecode;encoder;decoder;constructor(e,t,n,o){this.name=e,this.prefix=t,this.baseEncode=n,this.baseDecode=o,this.encoder=new E0(e,t,n),this.decoder=new S0(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function ss({name:r,prefix:e,encode:t,decode:n}){return new I0(r,e,t,n)}function mo({name:r,prefix:e,alphabet:t}){let{encode:n,decode:o}=q4(t,r);return ss({prefix:e,name:r,encode:n,decode:i=>qr(o(i))})}function Kx(r,e,t,n){let o={};for(let u=0;u<e.length;++u)o[e[u]]=u;let i=r.length;for(;r[i-1]==="=";)--i;let s=new Uint8Array(i*t/8|0),a=0,c=0,l=0;for(let u=0;u<i;++u){let d=o[r[u]];if(d===void 0)throw new SyntaxError(`Non-${n} character`);c=c<<t|d,a+=t,a>=8&&(a-=8,s[l++]=255&c>>a)}if(a>=t||255&c<<8-a)throw new SyntaxError("Unexpected end of data");return s}function Hx(r,e,t){let n=e[e.length-1]==="=",o=(1<<t)-1,i="",s=0,a=0;for(let c=0;c<r.length;++c)for(a=a<<8|r[c],s+=8;s>t;)s-=t,i+=e[o&a>>s];if(s!==0&&(i+=e[o&a<<t-s]),n)for(;i.length*t&7;)i+="=";return i}function Xe({name:r,prefix:e,bitsPerChar:t,alphabet:n}){return ss({prefix:e,name:r,encode(o){return Hx(o,n,t)},decode(o){return Kx(o,n,t,r)}})}var qx=mo({prefix:"9",name:"base10",alphabet:"0123456789"});var _0={};Qe(_0,{base16:()=>zx,base16upper:()=>Wx});var zx=Xe({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),Wx=Xe({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var C0={};Qe(C0,{base2:()=>Gx});var Gx=Xe({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var k0={};Qe(k0,{base256emoji:()=>Zx});var W4=Array.from("\u{1F680}\u{1FA90}\u2604\u{1F6F0}\u{1F30C}\u{1F311}\u{1F312}\u{1F313}\u{1F314}\u{1F315}\u{1F316}\u{1F317}\u{1F318}\u{1F30D}\u{1F30F}\u{1F30E}\u{1F409}\u2600\u{1F4BB}\u{1F5A5}\u{1F4BE}\u{1F4BF}\u{1F602}\u2764\u{1F60D}\u{1F923}\u{1F60A}\u{1F64F}\u{1F495}\u{1F62D}\u{1F618}\u{1F44D}\u{1F605}\u{1F44F}\u{1F601}\u{1F525}\u{1F970}\u{1F494}\u{1F496}\u{1F499}\u{1F622}\u{1F914}\u{1F606}\u{1F644}\u{1F4AA}\u{1F609}\u263A\u{1F44C}\u{1F917}\u{1F49C}\u{1F614}\u{1F60E}\u{1F607}\u{1F339}\u{1F926}\u{1F389}\u{1F49E}\u270C\u2728\u{1F937}\u{1F631}\u{1F60C}\u{1F338}\u{1F64C}\u{1F60B}\u{1F497}\u{1F49A}\u{1F60F}\u{1F49B}\u{1F642}\u{1F493}\u{1F929}\u{1F604}\u{1F600}\u{1F5A4}\u{1F603}\u{1F4AF}\u{1F648}\u{1F447}\u{1F3B6}\u{1F612}\u{1F92D}\u2763\u{1F61C}\u{1F48B}\u{1F440}\u{1F62A}\u{1F611}\u{1F4A5}\u{1F64B}\u{1F61E}\u{1F629}\u{1F621}\u{1F92A}\u{1F44A}\u{1F973}\u{1F625}\u{1F924}\u{1F449}\u{1F483}\u{1F633}\u270B\u{1F61A}\u{1F61D}\u{1F634}\u{1F31F}\u{1F62C}\u{1F643}\u{1F340}\u{1F337}\u{1F63B}\u{1F613}\u2B50\u2705\u{1F97A}\u{1F308}\u{1F608}\u{1F918}\u{1F4A6}\u2714\u{1F623}\u{1F3C3}\u{1F490}\u2639\u{1F38A}\u{1F498}\u{1F620}\u261D\u{1F615}\u{1F33A}\u{1F382}\u{1F33B}\u{1F610}\u{1F595}\u{1F49D}\u{1F64A}\u{1F639}\u{1F5E3}\u{1F4AB}\u{1F480}\u{1F451}\u{1F3B5}\u{1F91E}\u{1F61B}\u{1F534}\u{1F624}\u{1F33C}\u{1F62B}\u26BD\u{1F919}\u2615\u{1F3C6}\u{1F92B}\u{1F448}\u{1F62E}\u{1F646}\u{1F37B}\u{1F343}\u{1F436}\u{1F481}\u{1F632}\u{1F33F}\u{1F9E1}\u{1F381}\u26A1\u{1F31E}\u{1F388}\u274C\u270A\u{1F44B}\u{1F630}\u{1F928}\u{1F636}\u{1F91D}\u{1F6B6}\u{1F4B0}\u{1F353}\u{1F4A2}\u{1F91F}\u{1F641}\u{1F6A8}\u{1F4A8}\u{1F92C}\u2708\u{1F380}\u{1F37A}\u{1F913}\u{1F619}\u{1F49F}\u{1F331}\u{1F616}\u{1F476}\u{1F974}\u25B6\u27A1\u2753\u{1F48E}\u{1F4B8}\u2B07\u{1F628}\u{1F31A}\u{1F98B}\u{1F637}\u{1F57A}\u26A0\u{1F645}\u{1F61F}\u{1F635}\u{1F44E}\u{1F932}\u{1F920}\u{1F927}\u{1F4CC}\u{1F535}\u{1F485}\u{1F9D0}\u{1F43E}\u{1F352}\u{1F617}\u{1F911}\u{1F30A}\u{1F92F}\u{1F437}\u260E\u{1F4A7}\u{1F62F}\u{1F486}\u{1F446}\u{1F3A4}\u{1F647}\u{1F351}\u2744\u{1F334}\u{1F4A3}\u{1F438}\u{1F48C}\u{1F4CD}\u{1F940}\u{1F922}\u{1F445}\u{1F4A1}\u{1F4A9}\u{1F450}\u{1F4F8}\u{1F47B}\u{1F910}\u{1F92E}\u{1F3BC}\u{1F975}\u{1F6A9}\u{1F34E}\u{1F34A}\u{1F47C}\u{1F48D}\u{1F4E3}\u{1F942}"),Qx=W4.reduce((r,e,t)=>(r[t]=e,r),[]),Yx=W4.reduce((r,e,t)=>{let n=e.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${e}`);return r[n]=t,r},[]);function Xx(r){return r.reduce((e,t)=>(e+=Qx[t],e),"")}function jx(r){let e=[];for(let t of r){let n=t.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${t}`);let o=Yx[n];if(o==null)throw new Error(`Non-base256emoji character: ${t}`);e.push(o)}return new Uint8Array(e)}var Zx=ss({prefix:"\u{1F680}",name:"base256emoji",encode:Xx,decode:jx});var P0={};Qe(P0,{base32:()=>at,base32hex:()=>rv,base32hexpad:()=>ov,base32hexpadupper:()=>iv,base32hexupper:()=>nv,base32pad:()=>ev,base32padupper:()=>tv,base32upper:()=>Jx,base32z:()=>sv});var at=Xe({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),Jx=Xe({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),ev=Xe({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),tv=Xe({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),rv=Xe({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),nv=Xe({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),ov=Xe({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),iv=Xe({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),sv=Xe({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var R0={};Qe(R0,{base36:()=>wn,base36upper:()=>av});var wn=mo({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),av=mo({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var D0={};Qe(D0,{base58btc:()=>ve,base58flickr:()=>cv});var ve=mo({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),cv=mo({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var N0={};Qe(N0,{base64:()=>nt,base64pad:()=>lv,base64url:()=>L0,base64urlpad:()=>uv});var nt=Xe({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),lv=Xe({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),L0=Xe({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),uv=Xe({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var B0={};Qe(B0,{base8:()=>dv});var dv=Xe({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var O0={};Qe(O0,{identity:()=>fv});var fv=ss({prefix:"\0",name:"identity",encode:r=>H4(r),decode:r=>K4(r)});var Nl={};Qe(Nl,{code:()=>M0,decode:()=>yv,encode:()=>gv,name:()=>mv});var hv=new TextEncoder,pv=new TextDecoder,mv="json",M0=512;function gv(r){return hv.encode(JSON.stringify(r))}function yv(r){return JSON.parse(pv.decode(r))}var as={};Qe(as,{code:()=>ri,decode:()=>xv,encode:()=>bv,name:()=>wv});var wv="raw",ri=85;function bv(r){return qr(r)}function xv(r){return qr(r)}var V0={};Qe(V0,{identity:()=>Jt});var je={};Qe(je,{Digest:()=>ni,create:()=>Zt,decode:()=>Ae,equals:()=>F0,hasCode:()=>Fv});var vv=Y4,G4=128,Ev=127,Sv=~Ev,Av=Math.pow(2,31);function Y4(r,e,t){e=e||[],t=t||0;for(var n=t;r>=Av;)e[t++]=r&255|G4,r/=128;for(;r&Sv;)e[t++]=r&255|G4,r>>>=7;return e[t]=r|0,Y4.bytes=t-n+1,e}var Iv=U0,Tv=128,Q4=127;function U0(r,n){var t=0,n=n||0,o=0,i=n,s,a=r.length;do{if(i>=a)throw U0.bytes=0,new RangeError("Could not decode varint");s=r[i++],t+=o<28?(s&Q4)<<o:(s&Q4)*Math.pow(2,o),o+=7}while(s>=Tv);return U0.bytes=i-n,t}var _v=Math.pow(2,7),Cv=Math.pow(2,14),kv=Math.pow(2,21),Pv=Math.pow(2,28),Rv=Math.pow(2,35),Dv=Math.pow(2,42),Lv=Math.pow(2,49),Nv=Math.pow(2,56),Bv=Math.pow(2,63),Ov=function(r){return r<_v?1:r<Cv?2:r<kv?3:r<Pv?4:r<Rv?5:r<Dv?6:r<Lv?7:r<Nv?8:r<Bv?9:10},Mv={encode:vv,decode:Iv,encodingLength:Ov},Uv=Mv,Ia=Uv;function Ta(r,e=0){return[Ia.decode(r,e),Ia.decode.bytes]}function cs(r,e,t=0){return Ia.encode(r,e,t),e}function ls(r){return Ia.encodingLength(r)}function Zt(r,e){let t=e.byteLength,n=ls(r),o=n+ls(t),i=new Uint8Array(o+t);return cs(r,i,0),cs(t,i,n),i.set(e,o),new ni(r,t,e,i)}function Ae(r){let e=qr(r),[t,n]=Ta(e),[o,i]=Ta(e.subarray(n)),s=e.subarray(n+i);if(s.byteLength!==o)throw new Error("Incorrect length");return new ni(t,o,s,e)}function F0(r,e){if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&$4(r.bytes,t.bytes)}}var ni=class{code;size;digest;bytes;constructor(e,t,n,o){this.code=e,this.size=t,this.digest=n,this.bytes=o}};function Fv(r,e){return r.code===e}var X4=0,Vv="identity",j4=qr;function $v(r){return Zt(X4,j4(r))}var Jt={code:X4,name:Vv,encode:j4,digest:$v};var H0={};Qe(H0,{sha256:()=>ct,sha512:()=>Ol});function K0({name:r,code:e,encode:t}){return new $0(r,e,t)}var $0=class{name;code;encode;constructor(e,t,n){this.name=e,this.code=t,this.encode=n}digest(e){if(e instanceof Uint8Array){let t=this.encode(e);return t instanceof Uint8Array?Zt(this.code,t):t.then(n=>Zt(this.code,n))}else throw Error("Unknown type, must be binary type")}};function J4(r){return async e=>new Uint8Array(await crypto.subtle.digest(r,e))}var ct=K0({name:"sha2-256",code:18,encode:J4("SHA-256")}),Ol=K0({name:"sha2-512",code:19,encode:J4("SHA-512")});function e6(r,e){let{bytes:t,version:n}=r;switch(n){case 0:return Hv(t,q0(r),e??ve.encoder);default:return qv(t,q0(r),e??at.encoder)}}var t6=new WeakMap;function q0(r){let e=t6.get(r);if(e==null){let t=new Map;return t6.set(r,t),t}return e}var X=class r{code;version;multihash;bytes;"/";constructor(e,t,n,o){this.code=t,this.version=e,this.multihash=n,this.bytes=o,this["/"]=o}get asCID(){return this}get byteOffset(){return this.bytes.byteOffset}get byteLength(){return this.bytes.byteLength}toV0(){switch(this.version){case 0:return this;case 1:{let{code:e,multihash:t}=this;if(e!==_a)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==zv)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");return r.createV0(t)}default:throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`)}}toV1(){switch(this.version){case 0:{let{code:e,digest:t}=this.multihash,n=Zt(e,t);return r.createV1(this.code,n)}case 1:return this;default:throw Error(`Can not convert CID version ${this.version} to version 1. This is a bug please report`)}}equals(e){return r.equals(this,e)}static equals(e,t){let n=t;return n!=null&&e.code===n.code&&e.version===n.version&&F0(e.multihash,n.multihash)}toString(e){return e6(this,e)}toJSON(){return{"/":e6(this)}}link(){return this}[Symbol.toStringTag]="CID";[Symbol.for("nodejs.util.inspect.custom")](){return`CID(${this.toString()})`}static asCID(e){if(e==null)return null;let t=e;if(t instanceof r)return t;if(t["/"]!=null&&t["/"]===t.bytes||t.asCID===t){let{version:n,code:o,multihash:i,bytes:s}=t;return new r(n,o,i,s??r6(n,o,i.bytes))}else if(t[Wv]===!0){let{version:n,multihash:o,code:i}=t,s=Ae(o);return r.create(n,i,s)}else return null}static create(e,t,n){if(typeof t!="number")throw new Error("String codecs are no longer supported");if(!(n.bytes instanceof Uint8Array))throw new Error("Invalid digest");switch(e){case 0:{if(t!==_a)throw new Error(`Version 0 CID must use dag-pb (code: ${_a}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let o=r6(e,t,n.bytes);return new r(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,_a,e)}static createV1(e,t){return r.create(1,e,t)}static decode(e){let[t,n]=r.decodeFirst(e);if(n.length!==0)throw new Error("Incorrect length");return t}static decodeFirst(e){let t=r.inspectBytes(e),n=t.size-t.multihashSize,o=qr(e.subarray(n,n+t.multihashSize));if(o.byteLength!==t.multihashSize)throw new Error("Incorrect length");let i=o.subarray(t.multihashSize-t.digestSize),s=new ni(t.multihashCode,t.digestSize,i,o);return[t.version===0?r.createV0(s):r.createV1(t.codec,s),e.subarray(t.size)]}static inspectBytes(e){let t=0,n=()=>{let[d,f]=Ta(e.subarray(t));return t+=f,d},o=n(),i=_a;if(o===18?(o=0,t=0):i=n(),o!==0&&o!==1)throw new RangeError(`Invalid CID version ${o}`);let s=t,a=n(),c=n(),l=t+c,u=l-s;return{version:o,codec:i,multihashCode:a,digestSize:c,multihashSize:u,size:l}}static parse(e,t){let[n,o]=Kv(e,t),i=r.decode(o);if(i.version===0&&e[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return q0(i).set(n,e),i}};function Kv(r,e){switch(r[0]){case"Q":{let t=e??ve;return[ve.prefix,t.decode(`${ve.prefix}${r}`)]}case ve.prefix:{let t=e??ve;return[ve.prefix,t.decode(r)]}case at.prefix:{let t=e??at;return[at.prefix,t.decode(r)]}case wn.prefix:{let t=e??wn;return[wn.prefix,t.decode(r)]}default:{if(e==null)throw Error("To parse non base32, base36 or base58btc encoded CID multibase decoder must be provided");return[r[0],e.decode(r)]}}}function Hv(r,e,t){let{prefix:n}=t;if(n!==ve.prefix)throw Error(`Cannot string encode V0 in ${t.name} encoding`);let o=e.get(n);if(o==null){let i=t.encode(r).slice(1);return e.set(n,i),i}else return o}function qv(r,e,t){let{prefix:n}=t,o=e.get(n);if(o==null){let i=t.encode(r);return e.set(n,i),i}else return o}var _a=112,zv=18;function r6(r,e,t){let n=ls(r),o=n+ls(e),i=new Uint8Array(o+t.byteLength);return cs(r,i,0),cs(e,i,n),i.set(t,o),i}var Wv=Symbol.for("@ipld/js-cid/CID");var oi={...O0,...C0,...B0,...T0,..._0,...P0,...R0,...D0,...N0,...k0},TL={...H0,...V0};function o6(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var n6=o6("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),z0=o6("ascii","a",r=>{let e="a";for(let t=0;t<r.length;t++)e+=String.fromCharCode(r[t]);return e},r=>{r=r.substring(1);let e=We(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),Gv={utf8:n6,"utf-8":n6,hex:oi.base16,latin1:z0,ascii:z0,binary:z0,...oi},Ml=Gv;function N(r,e="utf8"){let t=Ml[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.decoder.decode(`${t.prefix}${r}`)}function W0(r){let e=r??8192,t=e>>>1,n,o=e;return function(s){if(s<1||s>t)return We(s);o+s>e&&(n=We(e),o=0);let a=n.subarray(o,o+=s);return o&7&&(o=(o|7)+1),a}}var ii=class{fn;len;next;val;constructor(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}};function G0(){}var Y0=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},Qv=W0();function Yv(r){return globalThis.Buffer!=null?We(r):Qv(r)}var ka=class{len;head;tail;states;constructor(){this.len=0,this.head=new ii(G0,0,0),this.tail=this.head,this.states=null}_push(e,t,n){return this.tail=this.tail.next=new ii(e,t,n),this.len+=t,this}uint32(e){return this.len+=(this.tail=this.tail.next=new X0((e=e>>>0)<128?1:e<16384?2:e<2097152?3:e<268435456?4:5,e)).len,this}int32(e){return e<0?this._push(Ul,10,hr.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){let t=hr.fromBigInt(e);return this._push(Ul,t.length(),t)}uint64Number(e){return this._push(d0,pe(e),e)}uint64String(e){return this.uint64(BigInt(e))}int64(e){return this.uint64(e)}int64Number(e){return this.uint64Number(e)}int64String(e){return this.uint64String(e)}sint64(e){let t=hr.fromBigInt(e).zzEncode();return this._push(Ul,t.length(),t)}sint64Number(e){let t=hr.fromNumber(e).zzEncode();return this._push(Ul,t.length(),t)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push(Q0,1,e?1:0)}fixed32(e){return this._push(Ca,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=hr.fromBigInt(e);return this._push(Ca,4,t.lo)._push(Ca,4,t.hi)}fixed64Number(e){let t=hr.fromNumber(e);return this._push(Ca,4,t.lo)._push(Ca,4,t.hi)}fixed64String(e){return this.fixed64(BigInt(e))}sfixed64(e){return this.fixed64(e)}sfixed64Number(e){return this.fixed64Number(e)}sfixed64String(e){return this.fixed64String(e)}float(e){return this._push(L4,4,e)}double(e){return this._push(B4,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push(Q0,1,0):this.uint32(t)._push(jv,t,e)}string(e){let t=U4(e);return t!==0?this.uint32(t)._push(w0,t,e):this._push(Q0,1,0)}fork(){return this.states=new Y0(this),this.head=this.tail=new ii(G0,0,0),this.len=0,this}reset(){return this.states!=null?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new ii(G0,0,0),this.len=0),this}ldelim(){let e=this.head,t=this.tail,n=this.len;return this.reset().uint32(n),n!==0&&(this.tail.next=e.next,this.tail=t,this.len+=n),this}finish(){let e=this.head.next,t=Yv(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function Q0(r,e,t){e[t]=r&255}function Xv(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var X0=class extends ii{next;constructor(e,t){super(Xv,e,t),this.next=void 0}};function Ul(r,e,t){for(;r.hi!==0;)e[t++]=r.lo&127|128,r.lo=(r.lo>>>7|r.hi<<25)>>>0,r.hi>>>=7;for(;r.lo>127;)e[t++]=r.lo&127|128,r.lo=r.lo>>>7;e[t++]=r.lo}function Ca(r,e,t){e[t]=r&255,e[t+1]=r>>>8&255,e[t+2]=r>>>16&255,e[t+3]=r>>>24}function jv(r,e,t){e.set(r,t)}globalThis.Buffer!=null&&(ka.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(Zv,e,r),this},ka.prototype.string=function(r){let e=globalThis.Buffer.byteLength(r);return this.uint32(e),e>0&&this._push(Jv,e,r),this});function Zv(r,e,t){e.set(r,t)}function Jv(r,e,t){r.length<40?w0(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(N(r),t)}function j0(){return new ka}function te(r,e){let t=j0();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}var us;(function(r){r[r.VARINT=0]="VARINT",r[r.BIT64=1]="BIT64",r[r.LENGTH_DELIMITED=2]="LENGTH_DELIMITED",r[r.START_GROUP=3]="START_GROUP",r[r.END_GROUP=4]="END_GROUP",r[r.BIT32=5]="BIT32"})(us||(us={}));function Fl(r,e,t,n){return{name:r,type:e,encode:t,decode:n}}function Ke(r){function e(o){if(r[o.toString()]==null)throw new Error("Invalid enum value");return r[o]}let t=function(i,s){let a=e(i);s.int32(a)},n=function(i){let s=i.int32();return e(s)};return Fl("enum",us.VARINT,t,n)}function re(r,e){return Fl("message",us.LENGTH_DELIMITED,r,e)}var Oe=class extends Error{code="ERR_MAX_LENGTH";name="MaxLengthError"},Pa=class extends Error{code="ERR_MAX_SIZE";name="MaxSizeError"};var Je;(function(r){r.WantBlock="WantBlock",r.WantHave="WantHave"})(Je||(Je={}));var Z0;(function(r){r[r.WantBlock=0]="WantBlock",r[r.WantHave=1]="WantHave"})(Z0||(Z0={}));(function(r){r.codec=()=>Ke(Z0)})(Je||(Je={}));var ds;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.cid!=null&&t.cid.byteLength>0&&(n.uint32(10),n.bytes(t.cid)),t.priority!=null&&t.priority!==0&&(n.uint32(16),n.int32(t.priority)),t.cancel!=null&&(n.uint32(24),n.bool(t.cancel)),t.wantType!=null&&(n.uint32(32),Je.codec().encode(t.wantType,n)),t.sendDontHave!=null&&(n.uint32(40),n.bool(t.sendDontHave)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={cid:se(0),priority:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.cid=t.bytes();break}case 2:{i.priority=t.int32();break}case 3:{i.cancel=t.bool();break}case 4:{i.wantType=Je.codec().decode(t);break}case 5:{i.sendDontHave=t.bool();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(ds||(ds={}));var Vl;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.entries!=null)for(let i of t.entries)n.uint32(10),ds.codec().encode(i,n);t.full!=null&&(n.uint32(16),n.bool(t.full)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={entries:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{if(o.limits?.entries!=null&&i.entries.length===o.limits.entries)throw new Oe('Decode error - map field "entries" had too many elements');i.entries.push(ds.codec().decode(t,t.uint32(),{limits:o.limits?.entries$}));break}case 2:{i.full=t.bool();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(Vl||(Vl={}));var fs;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.prefix!=null&&t.prefix.byteLength>0&&(n.uint32(10),n.bytes(t.prefix)),t.data!=null&&t.data.byteLength>0&&(n.uint32(18),n.bytes(t.data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={prefix:se(0),data:se(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.prefix=t.bytes();break}case 2:{i.data=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(fs||(fs={}));var Sr;(function(r){r.HaveBlock="HaveBlock",r.DontHaveBlock="DontHaveBlock"})(Sr||(Sr={}));var $l;(function(r){r[r.HaveBlock=0]="HaveBlock",r[r.DontHaveBlock=1]="DontHaveBlock"})($l||($l={}));(function(r){r.codec=()=>Ke($l)})(Sr||(Sr={}));var hs;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.cid!=null&&t.cid.byteLength>0&&(n.uint32(10),n.bytes(t.cid)),t.type!=null&&$l[t.type]!==0&&(n.uint32(16),Sr.codec().encode(t.type,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={cid:se(0),type:Sr.HaveBlock},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.cid=t.bytes();break}case 2:{i.type=Sr.codec().decode(t);break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(hs||(hs={}));var si;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.wantlist!=null&&(n.uint32(10),Vl.codec().encode(t.wantlist,n)),t.blocks!=null)for(let i of t.blocks)n.uint32(26),fs.codec().encode(i,n);if(t.blockPresences!=null)for(let i of t.blockPresences)n.uint32(34),hs.codec().encode(i,n);t.pendingBytes!=null&&t.pendingBytes!==0&&(n.uint32(40),n.int32(t.pendingBytes)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={blocks:[],blockPresences:[],pendingBytes:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.wantlist=Vl.codec().decode(t,t.uint32(),{limits:o.limits?.wantlist});break}case 3:{if(o.limits?.blocks!=null&&i.blocks.length===o.limits.blocks)throw new Oe('Decode error - map field "blocks" had too many elements');i.blocks.push(fs.codec().decode(t,t.uint32(),{limits:o.limits?.blocks$}));break}case 4:{if(o.limits?.blockPresences!=null&&i.blockPresences.length===o.limits.blockPresences)throw new Oe('Decode error - map field "blockPresences" had too many elements');i.blockPresences.push(hs.codec().decode(t,t.uint32(),{limits:o.limits?.blockPresences$}));break}case 5:{i.pendingBytes=t.int32();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(si||(si={}));function i6(r,e){for(let[t,n]of e.wantlist.entries()){let o=r.wantlist.get(t);o!=null&&(o.priority>n.priority&&(n.priority=o.priority),n.cancel=n.cancel??o.cancel,n.wantType=n.wantType??o.wantType,n.sendDontHave=n.sendDontHave??o.sendDontHave),r.wantlist.set(t,n)}for(let[t,n]of e.blockPresences.entries())r.blockPresences.set(t,n);for(let[t,n]of e.blocks.entries())r.blocks.set(t,n);return e.full&&!r.full&&(r.full=!0),r}var Kl=class extends Error{static name="BlockTooLargeError";constructor(e="Block too large"){super(e),this.name="BlockTooLargeError"}};var eE=4193648,tE=eE+16;function*s6(r,e){let t=[...r.wantlist.values()],n=[...r.blockPresences.values()],o=[...r.blocks.values()],i=0,s=0,a=0,c=!1;for(;;){let l={wantlist:{full:r.full??!1,entries:[]},blockPresences:[],blocks:[],pendingBytes:0},u=si.encode(l).byteLength,{added:d,hasMore:f,newSize:h}=J0(o,l.blocks,a,e,u,rE);a+=d,u=h;let p=f;({added:d,hasMore:f,newSize:h}=J0(n,l.blockPresences,s,e,u,nE)),s+=d,u=h;let g=f;if({added:d,hasMore:f,newSize:h}=J0(t,l.wantlist.entries,i,e,u,oE),i+=d,u=h,c=!p&&!g&&!f,c||(l.wantlist.full=!1),yield si.encode(l),c)break}}function J0(r,e,t,n,o,i){let s=0,a=!1;for(let c=t;c<r.length;c++){let l=r[c],u=i(l);if(u>tE)throw new Kl("Cannot send block as after encoding it is over the max message size");let d=o+u;if(d>n){a=!0;break}e.push(l),s++,o=d}return{hasMore:a,added:s,newSize:o}}function rE(r){return e2(3,fs.encode(r))}function nE(r){return e2(4,hs.encode(r))}function oE(r){return e2(1,ds.encode(r))}function e2(r,e){let t=pe(r),n=pe(e.byteLength);return t+n+e.byteLength}var Hl=class extends ge{log;libp2p;routing;protocols;running;maxInboundStreams;maxOutboundStreams;messageReceiveTimeout;registrarIds;metrics;sendQueue;runOnLimitedConnections;maxOutgoingMessageSize;maxIncomingMessageSize;constructor(e,t={}){super(),this.log=e.logger.forComponent("helia:bitswap:network"),this.libp2p=e.libp2p,this.routing=e.routing,this.protocols=t.protocols??[Aa],this.registrarIds=[],this.running=!1,this._onStream=this._onStream.bind(this),this.maxInboundStreams=t.maxInboundStreams??1024,this.maxOutboundStreams=t.maxOutboundStreams??1024,this.messageReceiveTimeout=t.messageReceiveTimeout??5e3,this.runOnLimitedConnections=t.runOnLimitedConnections??!1,this.maxIncomingMessageSize=t.maxIncomingMessageSize??4194304,this.maxOutgoingMessageSize=t.maxOutgoingMessageSize??t.maxIncomingMessageSize??4194304,this.metrics={blocksSent:e.metrics?.registerCounter("helia_bitswap_sent_blocks_total"),dataSent:e.metrics?.registerCounter("helia_bitswap_sent_data_bytes_total")},this.sendQueue=new yt({concurrency:t.messageSendConcurrency??50,metrics:e.metrics,metricName:"helia_bitswap_message_send_queue"}),this.sendQueue.addEventListener("error",n=>{this.log.error("error sending wantlist to peer",n.detail)})}async start(){if(this.running)return;this.running=!0,await this.libp2p.handle(this.protocols,this._onStream,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnections});let e={onConnect:t=>{this.safeDispatchEvent("peer:connected",{detail:t})},onDisconnect:t=>{this.safeDispatchEvent("peer:disconnected",{detail:t})}};this.registrarIds=[];for(let t of this.protocols)this.registrarIds.push(await this.libp2p.register(t,e));this.libp2p.getConnections().forEach(t=>{this.safeDispatchEvent("peer:connected",{detail:t.remotePeer})})}async stop(){if(this.running=!1,await this.libp2p.unhandle(this.protocols),this.registrarIds!=null){for(let e of this.registrarIds)this.libp2p.unregister(e);this.registrarIds=[]}}_onStream(e){if(!this.running)return;let{stream:t,connection:n}=e;Promise.resolve().then(async()=>{this.log("incoming new bitswap %s stream from %p",t.protocol,n.remotePeer);let o=()=>{t.status==="open"?t.abort(new Ur(`Incoming Bitswap stream timed out after ${this.messageReceiveTimeout}ms`)):this.log("stream aborted with status %s",t.status)},i=AbortSignal.timeout(this.messageReceiveTimeout);i.addEventListener("abort",o),await t.closeWrite(),await dt(t,s=>Kr(s,{maxDataLength:this.maxIncomingMessageSize}),async s=>{for await(let a of s)try{let c=si.decode(a);this.log("incoming new bitswap %s message from %p on stream",t.protocol,n.remotePeer,t.id),this.safeDispatchEvent("bitswap:message",{detail:{peer:n.remotePeer,message:c}}),i.removeEventListener("abort",o),i=AbortSignal.timeout(this.messageReceiveTimeout),i.addEventListener("abort",o)}catch(c){this.log.error("error reading incoming bitswap message from %p on stream",n.remotePeer,t.id,c),t.abort(c);break}})}).catch(o=>{this.log.error("error handling incoming stream from %p",n.remotePeer,o),t.abort(o)})}async*findProviders(e,t){t?.onProgress?.(new W("bitswap:network:find-providers",e));for await(let n of this.routing.findProviders(e,t))await this.libp2p.isDialable(n.multiaddrs,{runOnLimitedConnection:this.runOnLimitedConnections})&&(yield n)}async findAndConnect(e,t){await Rt(jt(ho(this.findProviders(e,t),t?.maxProviders??3),async n=>this.connectTo(n.id,t))).catch(n=>{this.log.error(n)})}async sendMessage(e,t,n){if(!this.running)throw new Error("network isn't running");let o=this.sendQueue.queue.find(i=>e.equals(i.options.peerId)&&i.status==="queued");if(o!=null){o.options.message=i6(o.options.message,t),await o.join({signal:n?.signal});return}await this.sendQueue.add(async i=>{let s=i?.message;if(s==null)throw new _("No message to send");this.log("sendMessage to %p",e),i?.onProgress?.(new W("bitswap:network:send-wantlist",e));let a=await this.libp2p.dialProtocol(e,Aa,i);await a.closeRead();try{await dt(s6(s,this.maxOutgoingMessageSize),c=>$r(c),a),await a.close(i)}catch(c){i?.onProgress?.(new W("bitswap:network:send-wantlist:error",{peer:e,error:c})),this.log.error("error sending message to %p",e,c),a.abort(c)}this._updateSentStats(s.blocks)},{peerId:e,signal:n?.signal,message:t})}async connectTo(e,t){if(!this.running)throw new Fr("Network isn't running");t?.onProgress?.(new W("bitswap:network:dial",e));let[n]=await Promise.all([this.libp2p.dial(e,t),fr(this.libp2p,"peer:identify",t?.signal,{filter:o=>{if(!o.detail.peerId.equals(e))return!1;if(o.detail.protocols.includes(Aa))return!0;throw new Ln(`${e} did not support ${Aa}`)}})]);return n}_updateSentStats(e){let t=0;for(let n of e.values())t+=n.data.byteLength;this.metrics.dataSent?.increment(t),this.metrics.blocksSent?.increment(e.size)}};function go(r){if(!Number.isSafeInteger(r)||r<0)throw new Error("positive integer expected, got "+r)}function hE(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function ps(r,...e){if(!hE(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error("Uint8Array expected of length "+e+", got length="+r.length)}function ai(r){if(typeof r!="function"||typeof r.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");go(r.outputLen),go(r.blockLen)}function ms(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function a6(r,e){ps(r);let t=e.outputLen;if(r.length<t)throw new Error("digestInto() expects output buffer of length at least "+t)}var ci=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;function li(r){return new DataView(r.buffer,r.byteOffset,r.byteLength)}function zr(r,e){return r<<32-e|r>>>e}function ql(r,e){return r<<e|r>>>32-e>>>0}var pE=async()=>{};async function c6(r,e,t){let n=Date.now();for(let o=0;o<r;o++){t(o);let i=Date.now()-n;i>=0&&i<e||(await pE(),n+=i)}}function l6(r){if(typeof r!="string")throw new Error("utf8ToBytes expected string, got "+typeof r);return new Uint8Array(new TextEncoder().encode(r))}function Wr(r){return typeof r=="string"&&(r=l6(r)),ps(r),r}function t2(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];ps(o),e+=o.length}let t=new Uint8Array(e);for(let n=0,o=0;n<r.length;n++){let i=r[n];t.set(i,o),o+=i.length}return t}var gs=class{clone(){return this._cloneInto()}};function u6(r,e){if(e!==void 0&&{}.toString.call(e)!=="[object Object]")throw new Error("Options should be object or undefined");return Object.assign(r,e)}function ys(r){let e=n=>r().update(Wr(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function ui(r=32){if(ci&&typeof ci.getRandomValues=="function")return ci.getRandomValues(new Uint8Array(r));if(ci&&typeof ci.randomBytes=="function")return ci.randomBytes(r);throw new Error("crypto.getRandomValues must be defined")}function mE(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),i=BigInt(4294967295),s=Number(t>>o&i),a=Number(t&i),c=n?4:0,l=n?0:4;r.setUint32(e+c,s,n),r.setUint32(e+l,a,n)}function zl(r,e,t){return r&e^~r&t}function Wl(r,e,t){return r&e^r&t^e&t}var yo=class extends gs{constructor(e,t,n,o){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=li(this.buffer)}update(e){ms(this);let{view:t,buffer:n,blockLen:o}=this;e=Wr(e);let i=e.length;for(let s=0;s<i;){let a=Math.min(o-this.pos,i-s);if(a===o){let c=li(e);for(;o<=i-s;s+=o)this.process(c,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){ms(this),a6(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:i}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>o-s&&(this.process(n,0),s=0);for(let d=s;d<o;d++)t[d]=0;mE(n,o-8,BigInt(this.length*8),i),this.process(n,0);let a=li(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let l=c/4,u=this.get();if(l>u.length)throw new Error("_sha2: outputLen bigger than state");for(let d=0;d<l;d++)a.setUint32(4*d,u[d],i)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:i,destroyed:s,pos:a}=this;return e.length=o,e.pos=a,e.finished=i,e.destroyed=s,o%t&&e.buffer.set(n),e}};var Gl=BigInt(4294967295),r2=BigInt(32);function d6(r,e=!1){return e?{h:Number(r&Gl),l:Number(r>>r2&Gl)}:{h:Number(r>>r2&Gl)|0,l:Number(r&Gl)|0}}function gE(r,e=!1){let t=new Uint32Array(r.length),n=new Uint32Array(r.length);for(let o=0;o<r.length;o++){let{h:i,l:s}=d6(r[o],e);[t[o],n[o]]=[i,s]}return[t,n]}var yE=(r,e)=>BigInt(r>>>0)<<r2|BigInt(e>>>0),wE=(r,e,t)=>r>>>t,bE=(r,e,t)=>r<<32-t|e>>>t,xE=(r,e,t)=>r>>>t|e<<32-t,vE=(r,e,t)=>r<<32-t|e>>>t,EE=(r,e,t)=>r<<64-t|e>>>t-32,SE=(r,e,t)=>r>>>t-32|e<<64-t,AE=(r,e)=>e,IE=(r,e)=>r,TE=(r,e,t)=>r<<t|e>>>32-t,_E=(r,e,t)=>e<<t|r>>>32-t,CE=(r,e,t)=>e<<t-32|r>>>64-t,kE=(r,e,t)=>r<<t-32|e>>>64-t;function PE(r,e,t,n){let o=(e>>>0)+(n>>>0);return{h:r+t+(o/2**32|0)|0,l:o|0}}var RE=(r,e,t)=>(r>>>0)+(e>>>0)+(t>>>0),DE=(r,e,t,n)=>e+t+n+(r/2**32|0)|0,LE=(r,e,t,n)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0),NE=(r,e,t,n,o)=>e+t+n+o+(r/2**32|0)|0,BE=(r,e,t,n,o)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0)+(o>>>0),OE=(r,e,t,n,o,i)=>e+t+n+o+i+(r/2**32|0)|0;var ME={fromBig:d6,split:gE,toBig:yE,shrSH:wE,shrSL:bE,rotrSH:xE,rotrSL:vE,rotrBH:EE,rotrBL:SE,rotr32H:AE,rotr32L:IE,rotlSH:TE,rotlSL:_E,rotlBH:CE,rotlBL:kE,add:PE,add3L:RE,add3H:DE,add4L:LE,add4H:NE,add5H:OE,add5L:BE},le=ME;var[UE,FE]=le.split(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(r=>BigInt(r))),wo=new Uint32Array(80),bo=new Uint32Array(80),n2=class extends yo{constructor(){super(128,64,16,!1),this.Ah=1779033703,this.Al=-205731576,this.Bh=-1150833019,this.Bl=-2067093701,this.Ch=1013904242,this.Cl=-23791573,this.Dh=-1521486534,this.Dl=1595750129,this.Eh=1359893119,this.El=-1377402159,this.Fh=-1694144372,this.Fl=725511199,this.Gh=528734635,this.Gl=-79577749,this.Hh=1541459225,this.Hl=327033209}get(){let{Ah:e,Al:t,Bh:n,Bl:o,Ch:i,Cl:s,Dh:a,Dl:c,Eh:l,El:u,Fh:d,Fl:f,Gh:h,Gl:p,Hh:g,Hl:m}=this;return[e,t,n,o,i,s,a,c,l,u,d,f,h,p,g,m]}set(e,t,n,o,i,s,a,c,l,u,d,f,h,p,g,m){this.Ah=e|0,this.Al=t|0,this.Bh=n|0,this.Bl=o|0,this.Ch=i|0,this.Cl=s|0,this.Dh=a|0,this.Dl=c|0,this.Eh=l|0,this.El=u|0,this.Fh=d|0,this.Fl=f|0,this.Gh=h|0,this.Gl=p|0,this.Hh=g|0,this.Hl=m|0}process(e,t){for(let w=0;w<16;w++,t+=4)wo[w]=e.getUint32(t),bo[w]=e.getUint32(t+=4);for(let w=16;w<80;w++){let I=wo[w-15]|0,B=bo[w-15]|0,L=le.rotrSH(I,B,1)^le.rotrSH(I,B,8)^le.shrSH(I,B,7),P=le.rotrSL(I,B,1)^le.rotrSL(I,B,8)^le.shrSL(I,B,7),S=wo[w-2]|0,A=bo[w-2]|0,F=le.rotrSH(S,A,19)^le.rotrBH(S,A,61)^le.shrSH(S,A,6),D=le.rotrSL(S,A,19)^le.rotrBL(S,A,61)^le.shrSL(S,A,6),O=le.add4L(P,D,bo[w-7],bo[w-16]),$=le.add4H(O,L,F,wo[w-7],wo[w-16]);wo[w]=$|0,bo[w]=O|0}let{Ah:n,Al:o,Bh:i,Bl:s,Ch:a,Cl:c,Dh:l,Dl:u,Eh:d,El:f,Fh:h,Fl:p,Gh:g,Gl:m,Hh:y,Hl:x}=this;for(let w=0;w<80;w++){let I=le.rotrSH(d,f,14)^le.rotrSH(d,f,18)^le.rotrBH(d,f,41),B=le.rotrSL(d,f,14)^le.rotrSL(d,f,18)^le.rotrBL(d,f,41),L=d&h^~d&g,P=f&p^~f&m,S=le.add5L(x,B,P,FE[w],bo[w]),A=le.add5H(S,y,I,L,UE[w],wo[w]),F=S|0,D=le.rotrSH(n,o,28)^le.rotrBH(n,o,34)^le.rotrBH(n,o,39),O=le.rotrSL(n,o,28)^le.rotrBL(n,o,34)^le.rotrBL(n,o,39),$=n&i^n&a^i&a,k=o&s^o&c^s&c;y=g|0,x=m|0,g=h|0,m=p|0,h=d|0,p=f|0,{h:d,l:f}=le.add(l|0,u|0,A|0,F|0),l=a|0,u=c|0,a=i|0,c=s|0,i=n|0,s=o|0;let R=le.add3L(F,O,k);n=le.add3H(R,A,D,$),o=R|0}({h:n,l:o}=le.add(this.Ah|0,this.Al|0,n|0,o|0)),{h:i,l:s}=le.add(this.Bh|0,this.Bl|0,i|0,s|0),{h:a,l:c}=le.add(this.Ch|0,this.Cl|0,a|0,c|0),{h:l,l:u}=le.add(this.Dh|0,this.Dl|0,l|0,u|0),{h:d,l:f}=le.add(this.Eh|0,this.El|0,d|0,f|0),{h,l:p}=le.add(this.Fh|0,this.Fl|0,h|0,p|0),{h:g,l:m}=le.add(this.Gh|0,this.Gl|0,g|0,m|0),{h:y,l:x}=le.add(this.Hh|0,this.Hl|0,y|0,x|0),this.set(n,o,i,s,a,c,l,u,d,f,h,p,g,m,y,x)}roundClean(){wo.fill(0),bo.fill(0)}destroy(){this.buffer.fill(0),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}};var xo=ys(()=>new n2);var Xl={};Qe(Xl,{aInRange:()=>wt,abool:()=>Gr,abytes:()=>ws,bitGet:()=>zE,bitLen:()=>a2,bitMask:()=>Da,bitSet:()=>WE,bytesToHex:()=>On,bytesToNumberBE:()=>Mn,bytesToNumberLE:()=>Qr,concatBytes:()=>Fn,createHmacDrbg:()=>c2,ensureBytes:()=>Re,equalBytes:()=>HE,hexToBytes:()=>fi,hexToNumber:()=>s2,inRange:()=>Ra,isBytes:()=>vo,memoized:()=>hi,notImplemented:()=>QE,numberToBytesBE:()=>Eo,numberToBytesLE:()=>Un,numberToHexUnpadded:()=>di,numberToVarBytesBE:()=>KE,utf8ToBytes:()=>qE,validateObject:()=>Ar});var Ql=BigInt(0),Yl=BigInt(1),VE=BigInt(2);function vo(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function ws(r){if(!vo(r))throw new Error("Uint8Array expected")}function Gr(r,e){if(typeof e!="boolean")throw new Error(r+" boolean expected, got "+e)}var $E=Array.from({length:256},(r,e)=>e.toString(16).padStart(2,"0"));function On(r){ws(r);let e="";for(let t=0;t<r.length;t++)e+=$E[r[t]];return e}function di(r){let e=r.toString(16);return e.length&1?"0"+e:e}function s2(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);return r===""?Ql:BigInt("0x"+r)}var Bn={_0:48,_9:57,A:65,F:70,a:97,f:102};function f6(r){if(r>=Bn._0&&r<=Bn._9)return r-Bn._0;if(r>=Bn.A&&r<=Bn.F)return r-(Bn.A-10);if(r>=Bn.a&&r<=Bn.f)return r-(Bn.a-10)}function fi(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);let e=r.length,t=e/2;if(e%2)throw new Error("hex string expected, got unpadded hex of length "+e);let n=new Uint8Array(t);for(let o=0,i=0;o<t;o++,i+=2){let s=f6(r.charCodeAt(i)),a=f6(r.charCodeAt(i+1));if(s===void 0||a===void 0){let c=r[i]+r[i+1];throw new Error('hex string expected, got non-hex character "'+c+'" at index '+i)}n[o]=s*16+a}return n}function Mn(r){return s2(On(r))}function Qr(r){return ws(r),s2(On(Uint8Array.from(r).reverse()))}function Eo(r,e){return fi(r.toString(16).padStart(e*2,"0"))}function Un(r,e){return Eo(r,e).reverse()}function KE(r){return fi(di(r))}function Re(r,e,t){let n;if(typeof e=="string")try{n=fi(e)}catch(i){throw new Error(r+" must be hex string or Uint8Array, cause: "+i)}else if(vo(e))n=Uint8Array.from(e);else throw new Error(r+" must be hex string or Uint8Array");let o=n.length;if(typeof t=="number"&&o!==t)throw new Error(r+" of length "+t+" expected, got "+o);return n}function Fn(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];ws(o),e+=o.length}let t=new Uint8Array(e);for(let n=0,o=0;n<r.length;n++){let i=r[n];t.set(i,o),o+=i.length}return t}function HE(r,e){if(r.length!==e.length)return!1;let t=0;for(let n=0;n<r.length;n++)t|=r[n]^e[n];return t===0}function qE(r){if(typeof r!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(r))}var o2=r=>typeof r=="bigint"&&Ql<=r;function Ra(r,e,t){return o2(r)&&o2(e)&&o2(t)&&e<=r&&r<t}function wt(r,e,t,n){if(!Ra(e,t,n))throw new Error("expected valid "+r+": "+t+" <= n < "+n+", got "+e)}function a2(r){let e;for(e=0;r>Ql;r>>=Yl,e+=1);return e}function zE(r,e){return r>>BigInt(e)&Yl}function WE(r,e,t){return r|(t?Yl:Ql)<<BigInt(e)}var Da=r=>(VE<<BigInt(r-1))-Yl,i2=r=>new Uint8Array(r),h6=r=>Uint8Array.from(r);function c2(r,e,t){if(typeof r!="number"||r<2)throw new Error("hashLen must be a number");if(typeof e!="number"||e<2)throw new Error("qByteLen must be a number");if(typeof t!="function")throw new Error("hmacFn must be a function");let n=i2(r),o=i2(r),i=0,s=()=>{n.fill(1),o.fill(0),i=0},a=(...d)=>t(o,n,...d),c=(d=i2())=>{o=a(h6([0]),d),n=a(),d.length!==0&&(o=a(h6([1]),d),n=a())},l=()=>{if(i++>=1e3)throw new Error("drbg: tried 1000 values");let d=0,f=[];for(;d<e;){n=a();let h=n.slice();f.push(h),d+=n.length}return Fn(...f)};return(d,f)=>{s(),c(d);let h;for(;!(h=f(l()));)c();return s(),h}}var GE={bigint:r=>typeof r=="bigint",function:r=>typeof r=="function",boolean:r=>typeof r=="boolean",string:r=>typeof r=="string",stringOrUint8Array:r=>typeof r=="string"||vo(r),isSafeInteger:r=>Number.isSafeInteger(r),array:r=>Array.isArray(r),field:(r,e)=>e.Fp.isValid(r),hash:r=>typeof r=="function"&&Number.isSafeInteger(r.outputLen)};function Ar(r,e,t={}){let n=(o,i,s)=>{let a=GE[i];if(typeof a!="function")throw new Error("invalid validator function");let c=r[o];if(!(s&&c===void 0)&&!a(c,r))throw new Error("param "+String(o)+" is invalid. Expected "+i+", got "+c)};for(let[o,i]of Object.entries(e))n(o,i,!1);for(let[o,i]of Object.entries(t))n(o,i,!0);return r}var QE=()=>{throw new Error("not implemented")};function hi(r){let e=new WeakMap;return(t,...n)=>{let o=e.get(t);if(o!==void 0)return o;let i=r(t,...n);return e.set(t,i),i}}var lt=BigInt(0),He=BigInt(1),pi=BigInt(2),YE=BigInt(3),l2=BigInt(4),p6=BigInt(5),m6=BigInt(8),XE=BigInt(9),jE=BigInt(16);function Ie(r,e){let t=r%e;return t>=lt?t:e+t}function u2(r,e,t){if(e<lt)throw new Error("invalid exponent, negatives unsupported");if(t<=lt)throw new Error("invalid modulus");if(t===He)return lt;let n=He;for(;e>lt;)e&He&&(n=n*r%t),r=r*r%t,e>>=He;return n}function Me(r,e,t){let n=r;for(;e-- >lt;)n*=n,n%=t;return n}function jl(r,e){if(r===lt)throw new Error("invert: expected non-zero number");if(e<=lt)throw new Error("invert: expected positive modulus, got "+e);let t=Ie(r,e),n=e,o=lt,i=He,s=He,a=lt;for(;t!==lt;){let l=n/t,u=n%t,d=o-s*l,f=i-a*l;n=t,t=u,o=s,i=a,s=d,a=f}if(n!==He)throw new Error("invert: does not exist");return Ie(o,e)}function ZE(r){let e=(r-He)/pi,t,n,o;for(t=r-He,n=0;t%pi===lt;t/=pi,n++);for(o=pi;o<r&&u2(o,e,r)!==r-He;o++)if(o>1e3)throw new Error("Cannot find square root: likely non-prime P");if(n===1){let s=(r+He)/l2;return function(c,l){let u=c.pow(l,s);if(!c.eql(c.sqr(u),l))throw new Error("Cannot find square root");return u}}let i=(t+He)/pi;return function(a,c){if(a.pow(c,e)===a.neg(a.ONE))throw new Error("Cannot find square root");let l=n,u=a.pow(a.mul(a.ONE,o),t),d=a.pow(c,i),f=a.pow(c,t);for(;!a.eql(f,a.ONE);){if(a.eql(f,a.ZERO))return a.ZERO;let h=1;for(let g=a.sqr(f);h<l&&!a.eql(g,a.ONE);h++)g=a.sqr(g);let p=a.pow(u,He<<BigInt(l-h-1));u=a.sqr(p),d=a.mul(d,p),f=a.mul(f,u),l=h}return d}}function JE(r){if(r%l2===YE){let e=(r+He)/l2;return function(n,o){let i=n.pow(o,e);if(!n.eql(n.sqr(i),o))throw new Error("Cannot find square root");return i}}if(r%m6===p6){let e=(r-p6)/m6;return function(n,o){let i=n.mul(o,pi),s=n.pow(i,e),a=n.mul(o,s),c=n.mul(n.mul(a,pi),s),l=n.mul(a,n.sub(c,n.ONE));if(!n.eql(n.sqr(l),o))throw new Error("Cannot find square root");return l}}return r%jE,ZE(r)}var g6=(r,e)=>(Ie(r,e)&He)===He,eS=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function d2(r){let e={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},t=eS.reduce((n,o)=>(n[o]="function",n),e);return Ar(r,t)}function tS(r,e,t){if(t<lt)throw new Error("invalid exponent, negatives unsupported");if(t===lt)return r.ONE;if(t===He)return e;let n=r.ONE,o=e;for(;t>lt;)t&He&&(n=r.mul(n,o)),o=r.sqr(o),t>>=He;return n}function rS(r,e){let t=new Array(e.length),n=e.reduce((i,s,a)=>r.is0(s)?i:(t[a]=i,r.mul(i,s)),r.ONE),o=r.inv(n);return e.reduceRight((i,s,a)=>r.is0(s)?i:(t[a]=r.mul(i,t[a]),r.mul(i,s)),o),t}function f2(r,e){let t=e!==void 0?e:r.toString(2).length,n=Math.ceil(t/8);return{nBitLength:t,nByteLength:n}}function So(r,e,t=!1,n={}){if(r<=lt)throw new Error("invalid field: expected ORDER > 0, got "+r);let{nBitLength:o,nByteLength:i}=f2(r,e);if(i>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");let s,a=Object.freeze({ORDER:r,isLE:t,BITS:o,BYTES:i,MASK:Da(o),ZERO:lt,ONE:He,create:c=>Ie(c,r),isValid:c=>{if(typeof c!="bigint")throw new Error("invalid field element: expected bigint, got "+typeof c);return lt<=c&&c<r},is0:c=>c===lt,isOdd:c=>(c&He)===He,neg:c=>Ie(-c,r),eql:(c,l)=>c===l,sqr:c=>Ie(c*c,r),add:(c,l)=>Ie(c+l,r),sub:(c,l)=>Ie(c-l,r),mul:(c,l)=>Ie(c*l,r),pow:(c,l)=>tS(a,c,l),div:(c,l)=>Ie(c*jl(l,r),r),sqrN:c=>c*c,addN:(c,l)=>c+l,subN:(c,l)=>c-l,mulN:(c,l)=>c*l,inv:c=>jl(c,r),sqrt:n.sqrt||(c=>(s||(s=JE(r)),s(a,c))),invertBatch:c=>rS(a,c),cmov:(c,l,u)=>u?l:c,toBytes:c=>t?Un(c,i):Eo(c,i),fromBytes:c=>{if(c.length!==i)throw new Error("Field.fromBytes: expected "+i+" bytes, got "+c.length);return t?Qr(c):Mn(c)}});return Object.freeze(a)}function y6(r){if(typeof r!="bigint")throw new Error("field order must be bigint");let e=r.toString(2).length;return Math.ceil(e/8)}function h2(r){let e=y6(r);return e+Math.ceil(e/2)}function w6(r,e,t=!1){let n=r.length,o=y6(e),i=h2(e);if(n<16||n<i||n>1024)throw new Error("expected "+i+"-1024 bytes of input, got "+n);let s=t?Qr(r):Mn(r),a=Ie(s,e-He)+He;return t?Un(a,o):Eo(a,o)}var b6=BigInt(0),Zl=BigInt(1);function p2(r,e){let t=e.negate();return r?t:e}function x6(r,e){if(!Number.isSafeInteger(r)||r<=0||r>e)throw new Error("invalid window size, expected [1.."+e+"], got W="+r)}function m2(r,e){x6(r,e);let t=Math.ceil(e/r)+1,n=2**(r-1);return{windows:t,windowSize:n}}function nS(r,e){if(!Array.isArray(r))throw new Error("array expected");r.forEach((t,n)=>{if(!(t instanceof e))throw new Error("invalid point at index "+n)})}function oS(r,e){if(!Array.isArray(r))throw new Error("array of scalars expected");r.forEach((t,n)=>{if(!e.isValid(t))throw new Error("invalid scalar at index "+n)})}var g2=new WeakMap,v6=new WeakMap;function y2(r){return v6.get(r)||1}function Jl(r,e){return{constTimeNegate:p2,hasPrecomputes(t){return y2(t)!==1},unsafeLadder(t,n,o=r.ZERO){let i=t;for(;n>b6;)n&Zl&&(o=o.add(i)),i=i.double(),n>>=Zl;return o},precomputeWindow(t,n){let{windows:o,windowSize:i}=m2(n,e),s=[],a=t,c=a;for(let l=0;l<o;l++){c=a,s.push(c);for(let u=1;u<i;u++)c=c.add(a),s.push(c);a=c.double()}return s},wNAF(t,n,o){let{windows:i,windowSize:s}=m2(t,e),a=r.ZERO,c=r.BASE,l=BigInt(2**t-1),u=2**t,d=BigInt(t);for(let f=0;f<i;f++){let h=f*s,p=Number(o&l);o>>=d,p>s&&(p-=u,o+=Zl);let g=h,m=h+Math.abs(p)-1,y=f%2!==0,x=p<0;p===0?c=c.add(p2(y,n[g])):a=a.add(p2(x,n[m]))}return{p:a,f:c}},wNAFUnsafe(t,n,o,i=r.ZERO){let{windows:s,windowSize:a}=m2(t,e),c=BigInt(2**t-1),l=2**t,u=BigInt(t);for(let d=0;d<s;d++){let f=d*a;if(o===b6)break;let h=Number(o&c);if(o>>=u,h>a&&(h-=l,o+=Zl),h===0)continue;let p=n[f+Math.abs(h)-1];h<0&&(p=p.negate()),i=i.add(p)}return i},getPrecomputes(t,n,o){let i=g2.get(n);return i||(i=this.precomputeWindow(n,t),t!==1&&g2.set(n,o(i))),i},wNAFCached(t,n,o){let i=y2(t);return this.wNAF(i,this.getPrecomputes(i,t,o),n)},wNAFCachedUnsafe(t,n,o,i){let s=y2(t);return s===1?this.unsafeLadder(t,n,i):this.wNAFUnsafe(s,this.getPrecomputes(s,t,o),n,i)},setWindowSize(t,n){x6(n,e),v6.set(t,n),g2.delete(t)}}}function eu(r,e,t,n){if(nS(t,r),oS(n,e),t.length!==n.length)throw new Error("arrays of points and scalars must have equal length");let o=r.ZERO,i=a2(BigInt(t.length)),s=i>12?i-3:i>4?i-2:i?2:1,a=(1<<s)-1,c=new Array(a+1).fill(o),l=Math.floor((e.BITS-1)/s)*s,u=o;for(let d=l;d>=0;d-=s){c.fill(o);for(let h=0;h<n.length;h++){let p=n[h],g=Number(p>>BigInt(d)&BigInt(a));c[g]=c[g].add(t[h])}let f=o;for(let h=c.length-1,p=o;h>0;h--)p=p.add(c[h]),f=f.add(p);if(u=u.add(f),d!==0)for(let h=0;h<s;h++)u=u.double()}return u}function La(r){return d2(r.Fp),Ar(r,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...f2(r.n,r.nBitLength),...r,p:r.Fp.ORDER})}var Yr=BigInt(0),er=BigInt(1),tu=BigInt(2),iS=BigInt(8),sS={zip215:!0};function aS(r){let e=La(r);return Ar(r,{hash:"function",a:"bigint",d:"bigint",randomBytes:"function"},{adjustScalarBytes:"function",domain:"function",uvRatio:"function",mapToCurve:"function"}),Object.freeze({...e})}function E6(r){let e=aS(r),{Fp:t,n,prehash:o,hash:i,randomBytes:s,nByteLength:a,h:c}=e,l=tu<<BigInt(a*8)-er,u=t.create,d=So(e.n,e.nBitLength),f=e.uvRatio||((E,v)=>{try{return{isValid:!0,value:t.sqrt(E*t.inv(v))}}catch{return{isValid:!1,value:Yr}}}),h=e.adjustScalarBytes||(E=>E),p=e.domain||((E,v,C)=>{if(Gr("phflag",C),v.length||C)throw new Error("Contexts/pre-hash are not supported");return E});function g(E,v){wt("coordinate "+E,v,Yr,l)}function m(E){if(!(E instanceof w))throw new Error("ExtendedPoint expected")}let y=hi((E,v)=>{let{ex:C,ey:T,ez:K}=E,q=E.is0();v==null&&(v=q?iS:t.inv(K));let Y=u(C*v),ae=u(T*v),ie=u(K*v);if(q)return{x:Yr,y:er};if(ie!==er)throw new Error("invZ was invalid");return{x:Y,y:ae}}),x=hi(E=>{let{a:v,d:C}=e;if(E.is0())throw new Error("bad point: ZERO");let{ex:T,ey:K,ez:q,et:Y}=E,ae=u(T*T),ie=u(K*K),de=u(q*q),xe=u(de*de),Le=u(ae*v),Ne=u(de*u(Le+ie)),Ve=u(xe+u(C*u(ae*ie)));if(Ne!==Ve)throw new Error("bad point: equation left != right (1)");let _t=u(T*K),Xt=u(q*Y);if(_t!==Xt)throw new Error("bad point: equation left != right (2)");return!0});class w{constructor(v,C,T,K){this.ex=v,this.ey=C,this.ez=T,this.et=K,g("x",v),g("y",C),g("z",T),g("t",K),Object.freeze(this)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(v){if(v instanceof w)throw new Error("extended point not allowed");let{x:C,y:T}=v||{};return g("x",C),g("y",T),new w(C,T,er,u(C*T))}static normalizeZ(v){let C=t.invertBatch(v.map(T=>T.ez));return v.map((T,K)=>T.toAffine(C[K])).map(w.fromAffine)}static msm(v,C){return eu(w,d,v,C)}_setWindowSize(v){L.setWindowSize(this,v)}assertValidity(){x(this)}equals(v){m(v);let{ex:C,ey:T,ez:K}=this,{ex:q,ey:Y,ez:ae}=v,ie=u(C*ae),de=u(q*K),xe=u(T*ae),Le=u(Y*K);return ie===de&&xe===Le}is0(){return this.equals(w.ZERO)}negate(){return new w(u(-this.ex),this.ey,this.ez,u(-this.et))}double(){let{a:v}=e,{ex:C,ey:T,ez:K}=this,q=u(C*C),Y=u(T*T),ae=u(tu*u(K*K)),ie=u(v*q),de=C+T,xe=u(u(de*de)-q-Y),Le=ie+Y,Ne=Le-ae,Ve=ie-Y,_t=u(xe*Ne),Xt=u(Le*Ve),Ut=u(xe*Ve),hn=u(Ne*Le);return new w(_t,Xt,hn,Ut)}add(v){m(v);let{a:C,d:T}=e,{ex:K,ey:q,ez:Y,et:ae}=this,{ex:ie,ey:de,ez:xe,et:Le}=v;if(C===BigInt(-1)){let x4=u((q-K)*(de+ie)),v4=u((q+K)*(de-ie)),o0=u(v4-x4);if(o0===Yr)return this.double();let E4=u(Y*tu*Le),S4=u(ae*tu*xe),A4=S4+E4,I4=v4+x4,T4=S4-E4,sx=u(A4*o0),ax=u(I4*T4),cx=u(A4*T4),lx=u(o0*I4);return new w(sx,ax,lx,cx)}let Ne=u(K*ie),Ve=u(q*de),_t=u(ae*T*Le),Xt=u(Y*xe),Ut=u((K+q)*(ie+de)-Ne-Ve),hn=Xt-_t,Rn=Xt+_t,va=u(Ve-C*Ne),rx=u(Ut*hn),nx=u(Rn*va),ox=u(Ut*va),ix=u(hn*Rn);return new w(rx,nx,ix,ox)}subtract(v){return this.add(v.negate())}wNAF(v){return L.wNAFCached(this,v,w.normalizeZ)}multiply(v){let C=v;wt("scalar",C,er,n);let{p:T,f:K}=this.wNAF(C);return w.normalizeZ([T,K])[0]}multiplyUnsafe(v,C=w.ZERO){let T=v;return wt("scalar",T,Yr,n),T===Yr?B:this.is0()||T===er?this:L.wNAFCachedUnsafe(this,T,w.normalizeZ,C)}isSmallOrder(){return this.multiplyUnsafe(c).is0()}isTorsionFree(){return L.unsafeLadder(this,n).is0()}toAffine(v){return y(this,v)}clearCofactor(){let{h:v}=e;return v===er?this:this.multiplyUnsafe(v)}static fromHex(v,C=!1){let{d:T,a:K}=e,q=t.BYTES;v=Re("pointHex",v,q),Gr("zip215",C);let Y=v.slice(),ae=v[q-1];Y[q-1]=ae&-129;let ie=Qr(Y),de=C?l:t.ORDER;wt("pointHex.y",ie,Yr,de);let xe=u(ie*ie),Le=u(xe-er),Ne=u(T*xe-K),{isValid:Ve,value:_t}=f(Le,Ne);if(!Ve)throw new Error("Point.fromHex: invalid y coordinate");let Xt=(_t&er)===er,Ut=(ae&128)!==0;if(!C&&_t===Yr&&Ut)throw new Error("Point.fromHex: x=0 and x_0=1");return Ut!==Xt&&(_t=u(-_t)),w.fromAffine({x:_t,y:ie})}static fromPrivateKey(v){return A(v).point}toRawBytes(){let{x:v,y:C}=this.toAffine(),T=Un(C,t.BYTES);return T[T.length-1]|=v&er?128:0,T}toHex(){return On(this.toRawBytes())}}w.BASE=new w(e.Gx,e.Gy,er,u(e.Gx*e.Gy)),w.ZERO=new w(Yr,er,er,Yr);let{BASE:I,ZERO:B}=w,L=Jl(w,a*8);function P(E){return Ie(E,n)}function S(E){return P(Qr(E))}function A(E){let v=t.BYTES;E=Re("private key",E,v);let C=Re("hashed private key",i(E),2*v),T=h(C.slice(0,v)),K=C.slice(v,2*v),q=S(T),Y=I.multiply(q),ae=Y.toRawBytes();return{head:T,prefix:K,scalar:q,point:Y,pointBytes:ae}}function F(E){return A(E).pointBytes}function D(E=new Uint8Array,...v){let C=Fn(...v);return S(i(p(C,Re("context",E),!!o)))}function O(E,v,C={}){E=Re("message",E),o&&(E=o(E));let{prefix:T,scalar:K,pointBytes:q}=A(v),Y=D(C.context,T,E),ae=I.multiply(Y).toRawBytes(),ie=D(C.context,ae,q,E),de=P(Y+ie*K);wt("signature.s",de,Yr,n);let xe=Fn(ae,Un(de,t.BYTES));return Re("result",xe,t.BYTES*2)}let $=sS;function k(E,v,C,T=$){let{context:K,zip215:q}=T,Y=t.BYTES;E=Re("signature",E,2*Y),v=Re("message",v),C=Re("publicKey",C,Y),q!==void 0&&Gr("zip215",q),o&&(v=o(v));let ae=Qr(E.slice(Y,2*Y)),ie,de,xe;try{ie=w.fromHex(C,q),de=w.fromHex(E.slice(0,Y),q),xe=I.multiplyUnsafe(ae)}catch{return!1}if(!q&&ie.isSmallOrder())return!1;let Le=D(K,de.toRawBytes(),ie.toRawBytes(),v);return de.add(ie.multiplyUnsafe(Le)).subtract(xe).clearCofactor().equals(w.ZERO)}return I._setWindowSize(8),{CURVE:e,getPublicKey:F,sign:O,verify:k,ExtendedPoint:w,utils:{getExtendedPublicKey:A,randomPrivateKey:()=>s(t.BYTES),precompute(E=8,v=w.BASE){return v._setWindowSize(E),v.multiply(BigInt(3)),v}}}}var bs=BigInt(0),w2=BigInt(1);function cS(r){return Ar(r,{a:"bigint"},{montgomeryBits:"isSafeInteger",nByteLength:"isSafeInteger",adjustScalarBytes:"function",domain:"function",powPminus2:"function",Gu:"bigint"}),Object.freeze({...r})}function S6(r){let e=cS(r),{P:t}=e,n=x=>Ie(x,t),o=e.montgomeryBits,i=Math.ceil(o/8),s=e.nByteLength,a=e.adjustScalarBytes||(x=>x),c=e.powPminus2||(x=>u2(x,t-BigInt(2),t));function l(x,w,I){let B=n(x*(w-I));return w=n(w-B),I=n(I+B),[w,I]}let u=(e.a-BigInt(2))/BigInt(4);function d(x,w){wt("u",x,bs,t),wt("scalar",w,bs,t);let I=w,B=x,L=w2,P=bs,S=x,A=w2,F=bs,D;for(let $=BigInt(o-1);$>=bs;$--){let k=I>>$&w2;F^=k,D=l(F,L,S),L=D[0],S=D[1],D=l(F,P,A),P=D[0],A=D[1],F=k;let R=L+P,E=n(R*R),v=L-P,C=n(v*v),T=E-C,K=S+A,q=S-A,Y=n(q*R),ae=n(K*v),ie=Y+ae,de=Y-ae;S=n(ie*ie),A=n(B*n(de*de)),L=n(E*C),P=n(T*(E+n(u*T)))}D=l(F,L,S),L=D[0],S=D[1],D=l(F,P,A),P=D[0],A=D[1];let O=c(P);return n(L*O)}function f(x){return Un(n(x),i)}function h(x){let w=Re("u coordinate",x,i);return s===32&&(w[31]&=127),Qr(w)}function p(x){let w=Re("scalar",x),I=w.length;if(I!==i&&I!==s){let B=""+i+" or "+s;throw new Error("invalid scalar, expected "+B+" bytes, got "+I)}return Qr(a(w))}function g(x,w){let I=h(w),B=p(x),L=d(I,B);if(L===bs)throw new Error("invalid private or public key received");return f(L)}let m=f(e.Gu);function y(x){return g(x,m)}return{scalarMult:g,scalarMultBase:y,getSharedSecret:(x,w)=>g(x,w),getPublicKey:x=>y(x),utils:{randomPrivateKey:()=>e.randomBytes(e.nByteLength)},GuBytes:m}}var Na=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),A6=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752"),tB=BigInt(0),lS=BigInt(1),I6=BigInt(2),uS=BigInt(3),dS=BigInt(5),fS=BigInt(8);function T6(r){let e=BigInt(10),t=BigInt(20),n=BigInt(40),o=BigInt(80),i=Na,a=r*r%i*r%i,c=Me(a,I6,i)*a%i,l=Me(c,lS,i)*r%i,u=Me(l,dS,i)*l%i,d=Me(u,e,i)*u%i,f=Me(d,t,i)*d%i,h=Me(f,n,i)*f%i,p=Me(h,o,i)*h%i,g=Me(p,o,i)*h%i,m=Me(g,e,i)*u%i;return{pow_p_5_8:Me(m,I6,i)*r%i,b2:a}}function _6(r){return r[0]&=248,r[31]&=127,r[31]|=64,r}function hS(r,e){let t=Na,n=Ie(e*e*e,t),o=Ie(n*n*e,t),i=T6(r*o).pow_p_5_8,s=Ie(r*n*i,t),a=Ie(e*s*s,t),c=s,l=Ie(s*A6,t),u=a===r,d=a===Ie(-r,t),f=a===Ie(-r*A6,t);return u&&(s=c),(d||f)&&(s=l),g6(s,t)&&(s=Ie(-s,t)),{isValid:u||d,value:s}}var pS=So(Na,void 0,!0),mS={a:BigInt(-1),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),Fp:pS,n:BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),h:fS,Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960"),hash:xo,randomBytes:ui,adjustScalarBytes:_6,uvRatio:hS},Ba=E6(mS);var Oa=S6({P:Na,a:BigInt(486662),montgomeryBits:255,nByteLength:32,Gu:BigInt(9),powPminus2:r=>{let e=Na,{pow_p_5_8:t,b2:n}=T6(r);return Ie(Me(t,uS,e)*n,e)},adjustScalarBytes:_6,randomBytes:ui});var xs=32,bn=64,b2=32;function C6(){let r=Ba.utils.randomPrivateKey(),e=Ba.getPublicKey(r);return{privateKey:gS(r,e),publicKey:e}}function k6(r,e){let t=r.subarray(0,b2);return Ba.sign(e instanceof Uint8Array?e:e.subarray(),t)}function P6(r,e,t){return Ba.verify(e,t instanceof Uint8Array?t:t.subarray(),r)}function gS(r,e){let t=new Uint8Array(bn);for(let n=0;n<b2;n++)t[n]=r[n],t[b2+n]=e[n];return t}var Ma=class{type="Ed25519";raw;constructor(e){this.raw=Es(e,xs)}toMultihash(){return Jt.digest(Nt(this))}toCID(){return X.createV1(114,this.toMultihash())}toString(){return ve.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ne(this.raw,e.raw)}verify(e,t){return P6(this.raw,t,e)}},vs=class{type="Ed25519";raw;publicKey;constructor(e,t){this.raw=Es(e,bn),this.publicKey=new Ma(t)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ne(this.raw,e.raw)}sign(e){return k6(this.raw,e)}};function x2(r){if(r.length>bn){r=Es(r,bn+xs);let n=r.subarray(0,bn),o=r.subarray(bn,r.length);return new vs(n,o)}r=Es(r,bn);let e=r.subarray(0,bn),t=r.subarray(xs);return new vs(e,t)}function v2(r){return r=Es(r,xs),new Ma(r)}async function D6(){let{privateKey:r,publicKey:e}=C6();return new vs(r,e)}function Es(r,e){if(r=Uint8Array.from(r??[]),r.length!==e)throw new _(`Key must be a Uint8Array of length ${e}, got ${r.length}`);return r}var Ge;(function(r){r.RSA="RSA",r.Ed25519="Ed25519",r.secp256k1="secp256k1"})(Ge||(Ge={}));var E2;(function(r){r[r.RSA=0]="RSA",r[r.Ed25519=1]="Ed25519",r[r.secp256k1=2]="secp256k1"})(E2||(E2={}));(function(r){r.codec=()=>Ke(E2)})(Ge||(Ge={}));var xn;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Ge.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.Type=Ge.codec().decode(t);break}case 2:{i.Data=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(xn||(xn={}));var Ua;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),Ge.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.Type=Ge.codec().decode(t);break}case 2:{i.Data=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(Ua||(Ua={}));var Ya={};Qe(Ya,{MAX_RSA_KEY_SIZE:()=>zu,generateRSAKeyPair:()=>L2,jwkToJWKKeyPair:()=>Cg,jwkToPkcs1:()=>RS,jwkToPkix:()=>R2,jwkToRSAPrivateKey:()=>_g,pkcs1ToJwk:()=>Ig,pkcs1ToRSAPrivateKey:()=>Wu,pkixToJwk:()=>Tg,pkixToRSAPublicKey:()=>D2});var yS=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),Ao=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),Io=new Uint32Array(64),S2=class extends yo{constructor(){super(64,32,8,!1),this.A=Ao[0]|0,this.B=Ao[1]|0,this.C=Ao[2]|0,this.D=Ao[3]|0,this.E=Ao[4]|0,this.F=Ao[5]|0,this.G=Ao[6]|0,this.H=Ao[7]|0}get(){let{A:e,B:t,C:n,D:o,E:i,F:s,G:a,H:c}=this;return[e,t,n,o,i,s,a,c]}set(e,t,n,o,i,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=i|0,this.F=s|0,this.G=a|0,this.H=c|0}process(e,t){for(let d=0;d<16;d++,t+=4)Io[d]=e.getUint32(t,!1);for(let d=16;d<64;d++){let f=Io[d-15],h=Io[d-2],p=zr(f,7)^zr(f,18)^f>>>3,g=zr(h,17)^zr(h,19)^h>>>10;Io[d]=g+Io[d-7]+p+Io[d-16]|0}let{A:n,B:o,C:i,D:s,E:a,F:c,G:l,H:u}=this;for(let d=0;d<64;d++){let f=zr(a,6)^zr(a,11)^zr(a,25),h=u+f+zl(a,c,l)+yS[d]+Io[d]|0,g=(zr(n,2)^zr(n,13)^zr(n,22))+Wl(n,o,i)|0;u=l,l=c,c=a,a=s+h|0,s=i,i=o,o=n,n=h+g|0}n=n+this.A|0,o=o+this.B|0,i=i+this.C|0,s=s+this.D|0,a=a+this.E|0,c=c+this.F|0,l=l+this.G|0,u=u+this.H|0,this.set(n,o,i,s,a,c,l,u)}roundClean(){Io.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Ir=ys(()=>new S2);var ye=Mr(N6());function mi(r,e){let t=0;if(r.length===1)return r[0];for(let n=r.length-1;n>=0;n--)t+=r[r.length-1-n]*Math.pow(2,e*n);return t}function To(r,e,t=-1){let n=t,o=r,i=0,s=Math.pow(2,e);for(let a=1;a<8;a++){if(r<s){let c;if(n<0)c=new ArrayBuffer(a),i=a;else{if(n<a)return new ArrayBuffer(0);c=new ArrayBuffer(n),i=n}let l=new Uint8Array(c);for(let u=a-1;u>=0;u--){let d=Math.pow(2,u*e);l[i-u-1]=Math.floor(o/d),o-=l[i-u-1]*d}return c}s*=Math.pow(2,e)}return new ArrayBuffer(0)}function ou(...r){let e=0,t=0;for(let i of r)e+=i.length;let n=new ArrayBuffer(e),o=new Uint8Array(n);for(let i of r)o.set(i,t),t+=i.length;return o}function I2(){let r=new Uint8Array(this.valueHex);if(this.valueHex.byteLength>=2){let a=r[0]===255&&r[1]&128,c=r[0]===0&&(r[1]&128)===0;(a||c)&&this.warnings.push("Needlessly long format")}let e=new ArrayBuffer(this.valueHex.byteLength),t=new Uint8Array(e);for(let a=0;a<this.valueHex.byteLength;a++)t[a]=0;t[0]=r[0]&128;let n=mi(t,8),o=new ArrayBuffer(this.valueHex.byteLength),i=new Uint8Array(o);for(let a=0;a<this.valueHex.byteLength;a++)i[a]=r[a];return i[0]&=127,mi(i,8)-n}function B6(r){let e=r<0?r*-1:r,t=128;for(let n=1;n<8;n++){if(e<=t){if(r<0){let s=t-e,a=To(s,8,n),c=new Uint8Array(a);return c[0]|=128,a}let o=To(e,8,n),i=new Uint8Array(o);if(i[0]&128){let s=o.slice(0),a=new Uint8Array(s);o=new ArrayBuffer(o.byteLength+1),i=new Uint8Array(o);for(let c=0;c<s.byteLength;c++)i[c+1]=a[c];i[0]=0}return o}t*=Math.pow(2,8)}return new ArrayBuffer(0)}function O6(r,e){if(r.byteLength!==e.byteLength)return!1;let t=new Uint8Array(r),n=new Uint8Array(e);for(let o=0;o<t.length;o++)if(t[o]!==n[o])return!1;return!0}function tr(r,e){let t=r.toString(10);if(e<t.length)return"";let n=e-t.length,o=new Array(n);for(let s=0;s<n;s++)o[s]="0";return o.join("").concat(t)}var vB=Math.log(2);function iu(){if(typeof BigInt>"u")throw new Error("BigInt is not defined. Your environment doesn't implement BigInt.")}function T2(r){let e=0,t=0;for(let o=0;o<r.length;o++){let i=r[o];e+=i.byteLength}let n=new Uint8Array(e);for(let o=0;o<r.length;o++){let i=r[o];n.set(new Uint8Array(i),t),t+=i.byteLength}return n.buffer}function zn(r,e,t,n){return e instanceof Uint8Array?e.byteLength?t<0?(r.error="Wrong parameter: inputOffset less than zero",!1):n<0?(r.error="Wrong parameter: inputLength less than zero",!1):e.byteLength-t-n<0?(r.error="End of input reached before message was fully decoded (inconsistent offset and length values)",!1):!0:(r.error="Wrong parameter: inputBuffer has zero length",!1):(r.error="Wrong parameter: inputBuffer must be 'Uint8Array'",!1)}var Va=class{constructor(){this.items=[]}write(e){this.items.push(e)}final(){return T2(this.items)}},Fa=[new Uint8Array([1])],M6="0123456789";var Is="",Xr=new ArrayBuffer(0),_2=new Uint8Array(0),$a="EndOfContent",F6="OCTET STRING",V6="BIT STRING";function Wn(r){var e;return e=class extends r{constructor(...n){var o;super(...n);let i=n[0]||{};this.isHexOnly=(o=i.isHexOnly)!==null&&o!==void 0?o:!1,this.valueHexView=i.valueHex?ye.BufferSourceConverter.toUint8Array(i.valueHex):_2}get valueHex(){return this.valueHexView.slice().buffer}set valueHex(n){this.valueHexView=new Uint8Array(n)}fromBER(n,o,i){let s=n instanceof ArrayBuffer?new Uint8Array(n):n;if(!zn(this,s,o,i))return-1;let a=o+i;return this.valueHexView=s.subarray(o,a),this.valueHexView.length?(this.blockLength=i,a):(this.warnings.push("Zero buffer length"),o)}toBER(n=!1){return this.isHexOnly?n?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.byteLength===this.valueHexView.buffer.byteLength?this.valueHexView.buffer:this.valueHexView.slice().buffer:(this.error="Flag 'isHexOnly' is not set, abort",Xr)}toJSON(){return{...super.toJSON(),isHexOnly:this.isHexOnly,valueHex:ye.Convert.ToHex(this.valueHexView)}}},e.NAME="hexBlock",e}var $n=class{constructor({blockLength:e=0,error:t=Is,warnings:n=[],valueBeforeDecode:o=_2}={}){this.blockLength=e,this.error=t,this.warnings=n,this.valueBeforeDecodeView=ye.BufferSourceConverter.toUint8Array(o)}static blockName(){return this.NAME}get valueBeforeDecode(){return this.valueBeforeDecodeView.slice().buffer}set valueBeforeDecode(e){this.valueBeforeDecodeView=new Uint8Array(e)}toJSON(){return{blockName:this.constructor.NAME,blockLength:this.blockLength,error:this.error,warnings:this.warnings,valueBeforeDecode:ye.Convert.ToHex(this.valueBeforeDecodeView)}}};$n.NAME="baseBlock";var Bt=class extends $n{fromBER(e,t,n){throw TypeError("User need to make a specific function in a class which extends 'ValueBlock'")}toBER(e,t){throw TypeError("User need to make a specific function in a class which extends 'ValueBlock'")}};Bt.NAME="valueBlock";var su=class extends Wn($n){constructor({idBlock:e={}}={}){var t,n,o,i;super(),e?(this.isHexOnly=(t=e.isHexOnly)!==null&&t!==void 0?t:!1,this.valueHexView=e.valueHex?ye.BufferSourceConverter.toUint8Array(e.valueHex):_2,this.tagClass=(n=e.tagClass)!==null&&n!==void 0?n:-1,this.tagNumber=(o=e.tagNumber)!==null&&o!==void 0?o:-1,this.isConstructed=(i=e.isConstructed)!==null&&i!==void 0?i:!1):(this.tagClass=-1,this.tagNumber=-1,this.isConstructed=!1)}toBER(e=!1){let t=0;switch(this.tagClass){case 1:t|=0;break;case 2:t|=64;break;case 3:t|=128;break;case 4:t|=192;break;default:return this.error="Unknown tag class",Xr}if(this.isConstructed&&(t|=32),this.tagNumber<31&&!this.isHexOnly){let o=new Uint8Array(1);if(!e){let i=this.tagNumber;i&=31,t|=i,o[0]=t}return o.buffer}if(!this.isHexOnly){let o=To(this.tagNumber,7),i=new Uint8Array(o),s=o.byteLength,a=new Uint8Array(s+1);if(a[0]=t|31,!e){for(let c=0;c<s-1;c++)a[c+1]=i[c]|128;a[s]=i[s-1]}return a.buffer}let n=new Uint8Array(this.valueHexView.byteLength+1);if(n[0]=t|31,!e){let o=this.valueHexView;for(let i=0;i<o.length-1;i++)n[i+1]=o[i]|128;n[this.valueHexView.byteLength]=o[o.length-1]}return n.buffer}fromBER(e,t,n){let o=ye.BufferSourceConverter.toUint8Array(e);if(!zn(this,o,t,n))return-1;let i=o.subarray(t,t+n);if(i.length===0)return this.error="Zero buffer length",-1;switch(i[0]&192){case 0:this.tagClass=1;break;case 64:this.tagClass=2;break;case 128:this.tagClass=3;break;case 192:this.tagClass=4;break;default:return this.error="Unknown tag class",-1}this.isConstructed=(i[0]&32)===32,this.isHexOnly=!1;let a=i[0]&31;if(a!==31)this.tagNumber=a,this.blockLength=1;else{let c=1,l=this.valueHexView=new Uint8Array(255),u=255;for(;i[c]&128;){if(l[c-1]=i[c]&127,c++,c>=i.length)return this.error="End of input reached before message was fully decoded",-1;if(c===u){u+=255;let f=new Uint8Array(u);for(let h=0;h<l.length;h++)f[h]=l[h];l=this.valueHexView=new Uint8Array(u)}}this.blockLength=c+1,l[c-1]=i[c]&127;let d=new Uint8Array(c);for(let f=0;f<c;f++)d[f]=l[f];l=this.valueHexView=new Uint8Array(c),l.set(d),this.blockLength<=9?this.tagNumber=mi(l,7):(this.isHexOnly=!0,this.warnings.push("Tag too long, represented as hex-coded"))}if(this.tagClass===1&&this.isConstructed)switch(this.tagNumber){case 1:case 2:case 5:case 6:case 9:case 13:case 14:case 23:case 24:case 31:case 32:case 33:case 34:return this.error="Constructed encoding used for primitive type",-1}return t+this.blockLength}toJSON(){return{...super.toJSON(),tagClass:this.tagClass,tagNumber:this.tagNumber,isConstructed:this.isConstructed}}};su.NAME="identificationBlock";var au=class extends $n{constructor({lenBlock:e={}}={}){var t,n,o;super(),this.isIndefiniteForm=(t=e.isIndefiniteForm)!==null&&t!==void 0?t:!1,this.longFormUsed=(n=e.longFormUsed)!==null&&n!==void 0?n:!1,this.length=(o=e.length)!==null&&o!==void 0?o:0}fromBER(e,t,n){let o=ye.BufferSourceConverter.toUint8Array(e);if(!zn(this,o,t,n))return-1;let i=o.subarray(t,t+n);if(i.length===0)return this.error="Zero buffer length",-1;if(i[0]===255)return this.error="Length block 0xFF is reserved by standard",-1;if(this.isIndefiniteForm=i[0]===128,this.isIndefiniteForm)return this.blockLength=1,t+this.blockLength;if(this.longFormUsed=!!(i[0]&128),this.longFormUsed===!1)return this.length=i[0],this.blockLength=1,t+this.blockLength;let s=i[0]&127;if(s>8)return this.error="Too big integer",-1;if(s+1>i.length)return this.error="End of input reached before message was fully decoded",-1;let a=t+1,c=o.subarray(a,a+s);return c[s-1]===0&&this.warnings.push("Needlessly long encoded length"),this.length=mi(c,8),this.longFormUsed&&this.length<=127&&this.warnings.push("Unnecessary usage of long length form"),this.blockLength=s+1,t+this.blockLength}toBER(e=!1){let t,n;if(this.length>127&&(this.longFormUsed=!0),this.isIndefiniteForm)return t=new ArrayBuffer(1),e===!1&&(n=new Uint8Array(t),n[0]=128),t;if(this.longFormUsed){let o=To(this.length,8);if(o.byteLength>127)return this.error="Too big length",Xr;if(t=new ArrayBuffer(o.byteLength+1),e)return t;let i=new Uint8Array(o);n=new Uint8Array(t),n[0]=o.byteLength|128;for(let s=0;s<o.byteLength;s++)n[s+1]=i[s];return t}return t=new ArrayBuffer(1),e===!1&&(n=new Uint8Array(t),n[0]=this.length),t}toJSON(){return{...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,longFormUsed:this.longFormUsed,length:this.length}}};au.NAME="lengthBlock";var G={},bt=class extends $n{constructor({name:e=Is,optional:t=!1,primitiveSchema:n,...o}={},i){super(o),this.name=e,this.optional=t,n&&(this.primitiveSchema=n),this.idBlock=new su(o),this.lenBlock=new au(o),this.valueBlock=i?new i(o):new Bt(o)}fromBER(e,t,n){let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}toBER(e,t){let n=t||new Va;t||$6(this);let o=this.idBlock.toBER(e);if(n.write(o),this.lenBlock.isIndefiniteForm)n.write(new Uint8Array([128]).buffer),this.valueBlock.toBER(e,n),n.write(new ArrayBuffer(2));else{let i=this.valueBlock.toBER(e);this.lenBlock.length=i.byteLength;let s=this.lenBlock.toBER(e);n.write(s),n.write(i)}return t?Xr:n.final()}toJSON(){let e={...super.toJSON(),idBlock:this.idBlock.toJSON(),lenBlock:this.lenBlock.toJSON(),valueBlock:this.valueBlock.toJSON(),name:this.name,optional:this.optional};return this.primitiveSchema&&(e.primitiveSchema=this.primitiveSchema.toJSON()),e}toString(e="ascii"){return e==="ascii"?this.onAsciiEncoding():ye.Convert.ToHex(this.toBER())}onAsciiEncoding(){return`${this.constructor.NAME} : ${ye.Convert.ToHex(this.valueBlock.valueBeforeDecodeView)}`}isEqual(e){if(this===e)return!0;if(!(e instanceof this.constructor))return!1;let t=this.toBER(),n=e.toBER();return O6(t,n)}};bt.NAME="BaseBlock";function $6(r){if(r instanceof G.Constructed)for(let e of r.valueBlock.value)$6(e)&&(r.lenBlock.isIndefiniteForm=!0);return!!r.lenBlock.isIndefiniteForm}var cu=class extends bt{constructor({value:e=Is,...t}={},n){super(t,n),e&&this.fromString(e)}getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}fromBER(e,t,n){let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.fromBuffer(this.valueBlock.valueHexView),this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}onAsciiEncoding(){return`${this.constructor.NAME} : '${this.valueBlock.value}'`}};cu.NAME="BaseStringBlock";var lu=class extends Wn(Bt){constructor({isHexOnly:e=!0,...t}={}){super(t),this.isHexOnly=e}};lu.NAME="PrimitiveValueBlock";var K6,uu=class extends bt{constructor(e={}){super(e,lu),this.idBlock.isConstructed=!1}};K6=uu;G.Primitive=K6;uu.NAME="PRIMITIVE";function TS(r,e){if(r instanceof e)return r;let t=new e;return t.idBlock=r.idBlock,t.lenBlock=r.lenBlock,t.warnings=r.warnings,t.valueBeforeDecodeView=r.valueBeforeDecodeView,t}function Hu(r,e=0,t=r.length){let n=e,o=new bt({},Bt),i=new $n;if(!zn(i,r,e,t))return o.error=i.error,{offset:-1,result:o};if(!r.subarray(e,e+t).length)return o.error="Zero buffer length",{offset:-1,result:o};let a=o.idBlock.fromBER(r,e,t);if(o.idBlock.warnings.length&&o.warnings.concat(o.idBlock.warnings),a===-1)return o.error=o.idBlock.error,{offset:-1,result:o};if(e=a,t-=o.idBlock.blockLength,a=o.lenBlock.fromBER(r,e,t),o.lenBlock.warnings.length&&o.warnings.concat(o.lenBlock.warnings),a===-1)return o.error=o.lenBlock.error,{offset:-1,result:o};if(e=a,t-=o.lenBlock.blockLength,!o.idBlock.isConstructed&&o.lenBlock.isIndefiniteForm)return o.error="Indefinite length form used for primitive encoding form",{offset:-1,result:o};let c=bt;switch(o.idBlock.tagClass){case 1:if(o.idBlock.tagNumber>=37&&o.idBlock.isHexOnly===!1)return o.error="UNIVERSAL 37 and upper tags are reserved by ASN.1 standard",{offset:-1,result:o};switch(o.idBlock.tagNumber){case 0:if(o.idBlock.isConstructed&&o.lenBlock.length>0)return o.error="Type [UNIVERSAL 0] is reserved",{offset:-1,result:o};c=G.EndOfContent;break;case 1:c=G.Boolean;break;case 2:c=G.Integer;break;case 3:c=G.BitString;break;case 4:c=G.OctetString;break;case 5:c=G.Null;break;case 6:c=G.ObjectIdentifier;break;case 10:c=G.Enumerated;break;case 12:c=G.Utf8String;break;case 13:c=G.RelativeObjectIdentifier;break;case 14:c=G.TIME;break;case 15:return o.error="[UNIVERSAL 15] is reserved by ASN.1 standard",{offset:-1,result:o};case 16:c=G.Sequence;break;case 17:c=G.Set;break;case 18:c=G.NumericString;break;case 19:c=G.PrintableString;break;case 20:c=G.TeletexString;break;case 21:c=G.VideotexString;break;case 22:c=G.IA5String;break;case 23:c=G.UTCTime;break;case 24:c=G.GeneralizedTime;break;case 25:c=G.GraphicString;break;case 26:c=G.VisibleString;break;case 27:c=G.GeneralString;break;case 28:c=G.UniversalString;break;case 29:c=G.CharacterString;break;case 30:c=G.BmpString;break;case 31:c=G.DATE;break;case 32:c=G.TimeOfDay;break;case 33:c=G.DateTime;break;case 34:c=G.Duration;break;default:{let l=o.idBlock.isConstructed?new G.Constructed:new G.Primitive;l.idBlock=o.idBlock,l.lenBlock=o.lenBlock,l.warnings=o.warnings,o=l}}break;case 2:case 3:case 4:default:c=o.idBlock.isConstructed?G.Constructed:G.Primitive}return o=TS(o,c),a=o.fromBER(r,e,o.lenBlock.isIndefiniteForm?t:o.lenBlock.length),o.valueBeforeDecodeView=r.subarray(n,n+o.blockLength),{offset:a,result:o}}function gi(r){if(!r.byteLength){let e=new bt({},Bt);return e.error="Input buffer has zero length",{offset:-1,result:e}}return Hu(ye.BufferSourceConverter.toUint8Array(r).slice(),0,r.byteLength)}function _S(r,e){return r?1:e}var vn=class extends Bt{constructor({value:e=[],isIndefiniteForm:t=!1,...n}={}){super(n),this.value=e,this.isIndefiniteForm=t}fromBER(e,t,n){let o=ye.BufferSourceConverter.toUint8Array(e);if(!zn(this,o,t,n))return-1;if(this.valueBeforeDecodeView=o.subarray(t,t+n),this.valueBeforeDecodeView.length===0)return this.warnings.push("Zero buffer length"),t;let i=t;for(;_S(this.isIndefiniteForm,n)>0;){let s=Hu(o,i,n);if(s.offset===-1)return this.error=s.result.error,this.warnings.concat(s.result.warnings),-1;if(i=s.offset,this.blockLength+=s.result.blockLength,n-=s.result.blockLength,this.value.push(s.result),this.isIndefiniteForm&&s.result.constructor.NAME===$a)break}return this.isIndefiniteForm&&(this.value[this.value.length-1].constructor.NAME===$a?this.value.pop():this.warnings.push("No EndOfContent block encoded")),i}toBER(e,t){let n=t||new Va;for(let o=0;o<this.value.length;o++)this.value[o].toBER(e,n);return t?Xr:n.final()}toJSON(){let e={...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,value:[]};for(let t of this.value)e.value.push(t.toJSON());return e}};vn.NAME="ConstructedValueBlock";var H6,_o=class extends bt{constructor(e={}){super(e,vn),this.idBlock.isConstructed=!0}fromBER(e,t,n){this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm;let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}onAsciiEncoding(){let e=[];for(let n of this.valueBlock.value)e.push(n.toString("ascii").split(`
2
+ "use strict";var Helia=(()=>{var fN=Object.create;var _p=Object.defineProperty;var hN=Object.getOwnPropertyDescriptor;var pN=Object.getOwnPropertyNames;var mN=Object.getPrototypeOf,gN=Object.prototype.hasOwnProperty;var er=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Pt=(r,e)=>{for(var t in e)_p(r,t,{get:e[t],enumerable:!0})},eb=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of pN(e))!gN.call(r,o)&&o!==t&&_p(r,o,{get:()=>e[o],enumerable:!(n=hN(e,o))||n.enumerable});return r};var Vt=(r,e,t)=>(t=r!=null?fN(mN(r)):{},eb(e||!r||!r.__esModule?_p(t,"default",{value:r,enumerable:!0}):t,r)),yN=r=>eb(_p({},"__esModule",{value:!0}),r);var gv=er((GZ,E6)=>{"use strict";var fB=Object.prototype.hasOwnProperty,Wr="~";function nf(){}Object.create&&(nf.prototype=Object.create(null),new nf().__proto__||(Wr=!1));function hB(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function mv(r,e,t,n,o){if(typeof t!="function")throw new TypeError("The listener must be a function");var i=new hB(t,n||r,o),s=Wr?Wr+e:e;return r._events[s]?r._events[s].fn?r._events[s]=[r._events[s],i]:r._events[s].push(i):(r._events[s]=i,r._eventsCount++),r}function C1(r,e){--r._eventsCount===0?r._events=new nf:delete r._events[e]}function Lr(){this._events=new nf,this._eventsCount=0}Lr.prototype.eventNames=function(){var e=[],t,n;if(this._eventsCount===0)return e;for(n in t=this._events)fB.call(t,n)&&e.push(Wr?n.slice(1):n);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};Lr.prototype.listeners=function(e){var t=Wr?Wr+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var o=0,i=n.length,s=new Array(i);o<i;o++)s[o]=n[o].fn;return s};Lr.prototype.listenerCount=function(e){var t=Wr?Wr+e:e,n=this._events[t];return n?n.fn?1:n.length:0};Lr.prototype.emit=function(e,t,n,o,i,s){var a=Wr?Wr+e:e;if(!this._events[a])return!1;var c=this._events[a],l=arguments.length,u,d;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),l){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,n),!0;case 4:return c.fn.call(c.context,t,n,o),!0;case 5:return c.fn.call(c.context,t,n,o,i),!0;case 6:return c.fn.call(c.context,t,n,o,i,s),!0}for(d=1,u=new Array(l-1);d<l;d++)u[d-1]=arguments[d];c.fn.apply(c.context,u)}else{var h=c.length,m;for(d=0;d<h;d++)switch(c[d].once&&this.removeListener(e,c[d].fn,void 0,!0),l){case 1:c[d].fn.call(c[d].context);break;case 2:c[d].fn.call(c[d].context,t);break;case 3:c[d].fn.call(c[d].context,t,n);break;case 4:c[d].fn.call(c[d].context,t,n,o);break;default:if(!u)for(m=1,u=new Array(l-1);m<l;m++)u[m-1]=arguments[m];c[d].fn.apply(c[d].context,u)}}return!0};Lr.prototype.on=function(e,t,n){return mv(this,e,t,n,!1)};Lr.prototype.once=function(e,t,n){return mv(this,e,t,n,!0)};Lr.prototype.removeListener=function(e,t,n,o){var i=Wr?Wr+e:e;if(!this._events[i])return this;if(!t)return C1(this,i),this;var s=this._events[i];if(s.fn)s.fn===t&&(!o||s.once)&&(!n||s.context===n)&&C1(this,i);else{for(var a=0,c=[],l=s.length;a<l;a++)(s[a].fn!==t||o&&!s[a].once||n&&s[a].context!==n)&&c.push(s[a]);c.length?this._events[i]=c.length===1?c[0]:c:C1(this,i)}return this};Lr.prototype.removeAllListeners=function(e){var t;return e?(t=Wr?Wr+e:e,this._events[t]&&C1(this,t)):(this._events=new nf,this._eventsCount=0),this};Lr.prototype.off=Lr.prototype.removeListener;Lr.prototype.addListener=Lr.prototype.on;Lr.prefixed=Wr;Lr.EventEmitter=Lr;typeof E6<"u"&&(E6.exports=Lr)});var vv=er((gJ,xv)=>{xv.exports=function(r){if(!r)throw Error("hashlru must have a max value, of type number, greater than 0");var e=0,t=Object.create(null),n=Object.create(null);function o(i,s){t[i]=s,e++,e>=r&&(e=0,n=t,t=Object.create(null))}return{has:function(i){return t[i]!==void 0||n[i]!==void 0},remove:function(i){t[i]!==void 0&&(t[i]=void 0),n[i]!==void 0&&(n[i]=void 0)},get:function(i){var s=t[i];if(s!==void 0)return s;if((s=n[i])!==void 0)return o(i,s),s},set:function(i,s){t[i]!==void 0?t[i]=s:o(i,s)},clear:function(){t=Object.create(null),n=Object.create(null)}}}});var aS=er(yf=>{(function(){var r,e,t,n,o,i,s,a;a=function(c){var l,u,d,h;return l=(c&255<<24)>>>24,u=(c&255<<16)>>>16,d=(c&65280)>>>8,h=c&255,[l,u,d,h].join(".")},s=function(c){var l,u,d,h,m,g;for(l=[],d=h=0;h<=3&&c.length!==0;d=++h){if(d>0){if(c[0]!==".")throw new Error("Invalid IP");c=c.substring(1)}g=e(c),m=g[0],u=g[1],c=c.substring(u),l.push(m)}if(c.length!==0)throw new Error("Invalid IP");switch(l.length){case 1:if(l[0]>4294967295)throw new Error("Invalid IP");return l[0]>>>0;case 2:if(l[0]>255||l[1]>16777215)throw new Error("Invalid IP");return(l[0]<<24|l[1])>>>0;case 3:if(l[0]>255||l[1]>255||l[2]>65535)throw new Error("Invalid IP");return(l[0]<<24|l[1]<<16|l[2])>>>0;case 4:if(l[0]>255||l[1]>255||l[2]>255||l[3]>255)throw new Error("Invalid IP");return(l[0]<<24|l[1]<<16|l[2]<<8|l[3])>>>0;default:throw new Error("Invalid IP")}},t=function(c){return c.charCodeAt(0)},n=t("0"),i=t("a"),o=t("A"),e=function(c){var l,u,d,h,m;for(h=0,l=10,u="9",d=0,c.length>1&&c[d]==="0"&&(c[d+1]==="x"||c[d+1]==="X"?(d+=2,l=16):"0"<=c[d+1]&&c[d+1]<="9"&&(d++,l=8,u="7")),m=d;d<c.length;){if("0"<=c[d]&&c[d]<=u)h=h*l+(t(c[d])-n)>>>0;else if(l===16)if("a"<=c[d]&&c[d]<="f")h=h*l+(10+t(c[d])-i)>>>0;else if("A"<=c[d]&&c[d]<="F")h=h*l+(10+t(c[d])-o)>>>0;else break;else break;if(h>4294967295)throw new Error("too large");d++}if(d===m)throw new Error("empty octet");return[h,d]},r=function(){function c(l,u){var d,h,m,g;if(typeof l!="string")throw new Error("Missing `net' parameter");if(u||(g=l.split("/",2),l=g[0],u=g[1]),u||(u=32),typeof u=="string"&&u.indexOf(".")>-1){try{this.maskLong=s(u)}catch(w){throw d=w,new Error("Invalid mask: "+u)}for(h=m=32;m>=0;h=--m)if(this.maskLong===4294967295<<32-h>>>0){this.bitmask=h;break}}else if(u||u===0)this.bitmask=parseInt(u,10),this.maskLong=0,this.bitmask>0&&(this.maskLong=4294967295<<32-this.bitmask>>>0);else throw new Error("Invalid mask: empty");try{this.netLong=(s(l)&this.maskLong)>>>0}catch(w){throw d=w,new Error("Invalid net address: "+l)}if(!(this.bitmask<=32))throw new Error("Invalid mask for ip4: "+u);this.size=Math.pow(2,32-this.bitmask),this.base=a(this.netLong),this.mask=a(this.maskLong),this.hostmask=a(~this.maskLong),this.first=this.bitmask<=30?a(this.netLong+1):this.base,this.last=this.bitmask<=30?a(this.netLong+this.size-2):a(this.netLong+this.size-1),this.broadcast=this.bitmask<=30?a(this.netLong+this.size-1):void 0}return c.prototype.contains=function(l){return typeof l=="string"&&(l.indexOf("/")>0||l.split(".").length!==4)&&(l=new c(l)),l instanceof c?this.contains(l.base)&&this.contains(l.broadcast||l.last):(s(l)&this.maskLong)>>>0===(this.netLong&this.maskLong)>>>0},c.prototype.next=function(l){return l==null&&(l=1),new c(a(this.netLong+this.size*l),this.mask)},c.prototype.forEach=function(l){var u,d,h;for(h=s(this.first),d=s(this.last),u=0;h<=d;)l(a(h),h,u),u++,h++},c.prototype.toString=function(){return this.base+"/"+this.bitmask},c}(),yf.ip2long=s,yf.long2ip=a,yf.Netmask=r}).call(yf)});var Pm=er((nie,G5)=>{var rie=function(){typeof G5<"u"&&(G5.exports=w);var r=86400,e=3200,t=146097*e/400,n=r*t,o=1e3*n,i=864e13,s=4294967296,a=1e6,c="000000000",l=Math.trunc||function(P){var R=P-P%1;return R==0&&(P<0||P===0&&1/P!=1/0)?-0:R},u=w.prototype,d=(w.fromDate=function(P){return new w(+P)},w.fromInt64BE=N(0,1,2,3,0,4),w.fromInt64LE=N(3,2,1,0,4,0),w.fromString=function(q){var R,X=new w,q=(q+="").replace(/^\s*[+\-]?\d+/,function(ne){var ne=+ne,B=1970+(ne-1970)%400;return X.year=ne-B,B}).replace(/(?:Z|([+\-]\d{2}):?(\d{2}))$/,function(j,ne,B){return ne<0&&(B*=-1),R=6e4*(60*+ne+ +B),""}).replace(/\.\d+$/,function(j){return X.nano=+(j+c).substr(1,9),""}).split(/\D+/);if(1<q.length?q[1]--:q[1]=0,X.time=R=Date.UTC.apply(Date,q)-(R||0),isNaN(R))throw new TypeError("Invalid Date");return y(X)},w.fromTimeT=function(P){return S(P,0)},u.year=0,u.time=0,u.nano=0,u.addNano=function(P){return this.nano+=+P||0,this},u.getNano=function(){var P=y(this);return(P.time%1e3*a+ +P.nano+1e9)%1e9},u.getTimeT=function(){var R=y(this),P=Math.floor(R.time/1e3),R=R.year;return R&&(P+=R*t*r/e),P},u.getYear=function(){return this.toDate().getUTCFullYear()+this.year},u.toDate=function(){return x(y(this).time)},u.toJSON=function(){return this.toString().replace(/0{1,6}Z$/,"Z")},u.toString=function(P){var R=this,X=R.toDate(),q={H:function(){return H(X.getUTCHours())},L:function(){return $(X.getUTCMilliseconds(),3)},M:function(){return H(X.getUTCMinutes())},N:function(){return $(R.getNano(),9)},S:function(){return H(X.getUTCSeconds())},Y:function(){var j=R.getYear();return 999999<j?"+"+j:9999<j?"+"+$(j,6):0<=j?$(j,4):-999999<=j?"-"+$(-j,6):j},a:function(){return m[X.getUTCDay()]},b:function(){return h[X.getUTCMonth()]},d:function(){return H(X.getUTCDate())},e:function(){return function(j){return(9<j?"":" ")+(0|j)}(X.getUTCDate())},m:function(){return H(X.getUTCMonth()+1)}};return function j(ne){return ne.replace(/%./g,function(B){var K=B[1],L=g[K],K=q[K];return L?j(L):K?K():B})}(P||d)},u.writeInt64BE=v(0,1,2,3,0,4),u.writeInt64LE=v(3,2,1,0,4,0),"%Y-%m-%dT%H:%M:%S.%NZ"),h=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],m=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],g={"%":"%",F:"%Y-%m-%d",n:`
3
+ `,R:"%H:%M",T:"%H:%M:%S",t:" ",X:"%T",Z:"GMT",z:"+0000"};return w;function w(P,R,X){var q=this;if(!(q instanceof w))return new w(P,R,X);q.time=+P||0,q.nano=+R||0,q.year=+X||0,y(q)}function y(P){var R,X,q,j=P.year,ne=P.time,B=P.nano,L=((B<0||a<=B)&&(B-=(X=Math.floor(B/a))*a,ne+=X,X=1),j%e);return(ne<-i||i<ne||L)&&((R=l(ne/o))&&(j+=R*e,ne-=R*o),(q=x(ne)).setUTCFullYear(L+q.getUTCFullYear()),q=(ne=+q)+(R=l((j-=L)/e))*o,R&&-i<=q&&q<=i&&(j-=R*e,ne=q),X=1),X&&(P.year=j,P.time=ne,P.nano=B),P}function x(P){var R=new Date(0);return R.setTime(P),R}function S(j,q){j=+j||0;var X=l((q=(q|0)*s)/n)+l(j/n),q=q%n+j%n,j=l(q/n);return j&&(X+=j,q-=j*n),new w(1e3*q,0,X*e)}function v(P,R,X,q,j,ne){return function(L,K){var I=y(this);L=L||new Array(8),W(L,K|=0);var k=Math.floor(I.time/1e3),I=I.year*(t*r/e),O=l(I/s)+l(k/s),I=I%s+k%s,k=Math.floor(I/s);return k&&(O+=k,I-=k*s),B(L,K+j,O),B(L,K+ne,I),L};function B(L,K,O){L[K+P]=O>>24&255,L[K+R]=O>>16&255,L[K+X]=O>>8&255,L[K+q]=255&O}}function N(P,R,X,q,j,ne){return function(L,K){W(L,K|=0);var O=B(L,K+j);return S(B(L,K+ne),O)};function B(L,K){return 16777216*L[K+P]+(L[K+R]<<16|L[K+X]<<8|L[K+q])}}function W(P,R){if(P=P&&P.length,P==null)throw new TypeError("Invalid Buffer");if(P<R+8)throw new RangeError("Out of range")}function H(P){return(9<P?"":"0")+(0|P)}function $(P,R){return(c+(0|P)).substr(-R)}}()});var bI=er((Kge,wI)=>{"use strict";wI.exports=r=>{if(Object.prototype.toString.call(r)!=="[object Object]")return!1;let e=Object.getPrototypeOf(r);return e===null||e===Object.prototype}});var _I=er((SI,AI)=>{"use strict";var B2=bI(),{hasOwnProperty:vI}=Object.prototype,{propertyIsEnumerable:O$}=Object,Su=(r,e,t)=>Object.defineProperty(r,e,{value:t,writable:!0,enumerable:!0,configurable:!0}),L$=SI,xI={concatArrays:!1,ignoreUndefined:!1},M2=r=>{let e=[];for(let t in r)vI.call(r,t)&&e.push(t);if(Object.getOwnPropertySymbols){let t=Object.getOwnPropertySymbols(r);for(let n of t)O$.call(r,n)&&e.push(n)}return e};function Au(r){return Array.isArray(r)?B$(r):B2(r)?M$(r):r}function B$(r){let e=r.slice(0,0);return M2(r).forEach(t=>{Su(e,t,Au(r[t]))}),e}function M$(r){let e=Object.getPrototypeOf(r)===null?Object.create(null):{};return M2(r).forEach(t=>{Su(e,t,Au(r[t]))}),e}var EI=(r,e,t,n)=>(t.forEach(o=>{typeof e[o]>"u"&&n.ignoreUndefined||(o in r&&r[o]!==Object.getPrototypeOf(r)?Su(r,o,c7(r[o],e[o],n)):Su(r,o,Au(e[o])))}),r),U$=(r,e,t)=>{let n=r.slice(0,0),o=0;return[r,e].forEach(i=>{let s=[];for(let a=0;a<i.length;a++)vI.call(i,a)&&(s.push(String(a)),i===r?Su(n,o++,i[a]):Su(n,o++,Au(i[a])));n=EI(n,i,M2(i).filter(a=>!s.includes(a)),t)}),n};function c7(r,e,t){return t.concatArrays&&Array.isArray(r)&&Array.isArray(e)?U$(r,e,t):!B2(e)||!B2(r)?Au(e):EI(r,e,M2(e),t)}AI.exports=function(...r){let e=c7(Au(xI),this!==L$&&this||{},xI),t={_:{}};for(let n of r)if(n!==void 0){if(!B2(n))throw new TypeError("`"+n+"` is not an Option Object");t=c7(t,{_:n},e)}return t._}});var CI=er((Hge,TI)=>{"use strict";function F$(r){return r>=55296&&r<=56319}function $$(r){return r>=56320&&r<=57343}TI.exports=function(e,t,n){if(typeof t!="string")throw new Error("Input must be string");for(var o=t.length,i=0,s,a,c=0;c<o;c+=1){if(s=t.charCodeAt(c),a=t[c],F$(s)&&$$(t.charCodeAt(c+1))&&(c+=1,a+=t[c]),i+=e(a),i===n)return t.slice(0,c+1);if(i>n)return t.slice(0,c-a.length+1)}return t}});var PI=er((qge,kI)=>{"use strict";function K$(r){return r>=55296&&r<=56319}function V$(r){return r>=56320&&r<=57343}kI.exports=function(e){if(typeof e!="string")throw new Error("Input must be string");for(var t=e.length,n=0,o=null,i=null,s=0;s<t;s++)o=e.charCodeAt(s),V$(o)?i!=null&&K$(i)?n+=1:n+=3:o<=127?n+=1:o>=128&&o<=2047?n+=2:o>=2048&&o<=65535&&(n+=3),i=o;return n}});var NI=er((jge,RI)=>{"use strict";var H$=CI(),q$=PI();RI.exports=H$.bind(null,q$)});var LI=er((Wge,OI)=>{"use strict";var j$=NI(),W$=/[\/\?<>\\:\*\|"]/g,G$=/[\x00-\x1f\x80-\x9f]/g,z$=/^\.+$/,X$=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i,Y$=/[\. ]+$/;function DI(r,e){if(typeof r!="string")throw new Error("Input must be string");var t=r.replace(W$,e).replace(G$,e).replace(z$,e).replace(X$,e).replace(Y$,e);return j$(t,255)}OI.exports=function(r,e){var t=e&&e.replacement||"",n=DI(r,t);return t===""?n:DI(n,"")}});var $i=er(Tu=>{"use strict";var Z$="[object ArrayBuffer]",Fi=class r{static isArrayBuffer(e){return Object.prototype.toString.call(e)===Z$}static toArrayBuffer(e){return this.isArrayBuffer(e)?e:e.byteLength===e.buffer.byteLength||e.byteOffset===0&&e.byteLength===e.buffer.byteLength?e.buffer:this.toUint8Array(e.buffer).slice(e.byteOffset,e.byteOffset+e.byteLength).buffer}static toUint8Array(e){return this.toView(e,Uint8Array)}static toView(e,t){if(e.constructor===t)return e;if(this.isArrayBuffer(e))return new t(e);if(this.isArrayBufferView(e))return new t(e.buffer,e.byteOffset,e.byteLength);throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'")}static isBufferSource(e){return this.isArrayBufferView(e)||this.isArrayBuffer(e)}static isArrayBufferView(e){return ArrayBuffer.isView(e)||e&&this.isArrayBuffer(e.buffer)}static isEqual(e,t){let n=r.toUint8Array(e),o=r.toUint8Array(t);if(n.length!==o.byteLength)return!1;for(let i=0;i<n.length;i++)if(n[i]!==o[i])return!1;return!0}static concat(...e){let t;Array.isArray(e[0])&&!(e[1]instanceof Function)||Array.isArray(e[0])&&e[1]instanceof Function?t=e[0]:e[e.length-1]instanceof Function?t=e.slice(0,e.length-1):t=e;let n=0;for(let s of t)n+=s.byteLength;let o=new Uint8Array(n),i=0;for(let s of t){let a=this.toUint8Array(s);o.set(a,i),i+=a.length}return e[e.length-1]instanceof Function?this.toView(o,e[e.length-1]):o.buffer}},l7="string",J$=/^[0-9a-f\s]+$/i,eK=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,tK=/^[a-zA-Z0-9-_]+$/,F2=class{static fromString(e){let t=unescape(encodeURIComponent(e)),n=new Uint8Array(t.length);for(let o=0;o<t.length;o++)n[o]=t.charCodeAt(o);return n.buffer}static toString(e){let t=Fi.toUint8Array(e),n="";for(let i=0;i<t.length;i++)n+=String.fromCharCode(t[i]);return decodeURIComponent(escape(n))}},Qn=class{static toString(e,t=!1){let n=Fi.toArrayBuffer(e),o=new DataView(n),i="";for(let s=0;s<n.byteLength;s+=2){let a=o.getUint16(s,t);i+=String.fromCharCode(a)}return i}static fromString(e,t=!1){let n=new ArrayBuffer(e.length*2),o=new DataView(n);for(let i=0;i<e.length;i++)o.setUint16(i*2,e.charCodeAt(i),t);return n}},$2=class r{static isHex(e){return typeof e===l7&&J$.test(e)}static isBase64(e){return typeof e===l7&&eK.test(e)}static isBase64Url(e){return typeof e===l7&&tK.test(e)}static ToString(e,t="utf8"){let n=Fi.toUint8Array(e);switch(t.toLowerCase()){case"utf8":return this.ToUtf8String(n);case"binary":return this.ToBinary(n);case"hex":return this.ToHex(n);case"base64":return this.ToBase64(n);case"base64url":return this.ToBase64Url(n);case"utf16le":return Qn.toString(n,!0);case"utf16":case"utf16be":return Qn.toString(n);default:throw new Error(`Unknown type of encoding '${t}'`)}}static FromString(e,t="utf8"){if(!e)return new ArrayBuffer(0);switch(t.toLowerCase()){case"utf8":return this.FromUtf8String(e);case"binary":return this.FromBinary(e);case"hex":return this.FromHex(e);case"base64":return this.FromBase64(e);case"base64url":return this.FromBase64Url(e);case"utf16le":return Qn.fromString(e,!0);case"utf16":case"utf16be":return Qn.fromString(e);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToBase64(e){let t=Fi.toUint8Array(e);if(typeof btoa<"u"){let n=this.ToString(t,"binary");return btoa(n)}else return Buffer.from(t).toString("base64")}static FromBase64(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!r.isBase64(t))throw new TypeError("Argument 'base64Text' is not Base64 encoded");return typeof atob<"u"?this.FromBinary(atob(t)):new Uint8Array(Buffer.from(t,"base64")).buffer}static FromBase64Url(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!r.isBase64Url(t))throw new TypeError("Argument 'base64url' is not Base64Url encoded");return this.FromBase64(this.Base64Padding(t.replace(/\-/g,"+").replace(/\_/g,"/")))}static ToBase64Url(e){return this.ToBase64(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/\=/g,"")}static FromUtf8String(e,t=r.DEFAULT_UTF8_ENCODING){switch(t){case"ascii":return this.FromBinary(e);case"utf8":return F2.fromString(e);case"utf16":case"utf16be":return Qn.fromString(e);case"utf16le":case"usc2":return Qn.fromString(e,!0);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToUtf8String(e,t=r.DEFAULT_UTF8_ENCODING){switch(t){case"ascii":return this.ToBinary(e);case"utf8":return F2.toString(e);case"utf16":case"utf16be":return Qn.toString(e);case"utf16le":case"usc2":return Qn.toString(e,!0);default:throw new Error(`Unknown type of encoding '${t}'`)}}static FromBinary(e){let t=e.length,n=new Uint8Array(t);for(let o=0;o<t;o++)n[o]=e.charCodeAt(o);return n.buffer}static ToBinary(e){let t=Fi.toUint8Array(e),n="";for(let o=0;o<t.length;o++)n+=String.fromCharCode(t[o]);return n}static ToHex(e){let t=Fi.toUint8Array(e),n="",o=t.length;for(let i=0;i<o;i++){let s=t[i];s<16&&(n+="0"),n+=s.toString(16)}return n}static FromHex(e){let t=this.formatString(e);if(!t)return new ArrayBuffer(0);if(!r.isHex(t))throw new TypeError("Argument 'hexString' is not HEX encoded");t.length%2&&(t=`0${t}`);let n=new Uint8Array(t.length/2);for(let o=0;o<t.length;o=o+2){let i=t.slice(o,o+2);n[o/2]=parseInt(i,16)}return n.buffer}static ToUtf16String(e,t=!1){return Qn.toString(e,t)}static FromUtf16String(e,t=!1){return Qn.fromString(e,t)}static Base64Padding(e){let t=4-e.length%4;if(t<4)for(let n=0;n<t;n++)e+="=";return e}static formatString(e){return e?.replace(/[\n\r\t ]/g,"")||""}};$2.DEFAULT_UTF8_ENCODING="utf8";function rK(r,...e){let t=arguments[0];for(let n=1;n<arguments.length;n++){let o=arguments[n];for(let i in o)t[i]=o[i]}return t}function nK(...r){let e=r.map(o=>o.byteLength).reduce((o,i)=>o+i),t=new Uint8Array(e),n=0;return r.map(o=>new Uint8Array(o)).forEach(o=>{for(let i of o)t[n++]=i}),t.buffer}function oK(r,e){if(!(r&&e)||r.byteLength!==e.byteLength)return!1;let t=new Uint8Array(r),n=new Uint8Array(e);for(let o=0;o<r.byteLength;o++)if(t[o]!==n[o])return!1;return!0}Tu.BufferSourceConverter=Fi;Tu.Convert=$2;Tu.assign=rK;Tu.combine=nK;Tu.isEqual=oK});var lC=er(()=>{var cC;(function(r){(function(e){var t=typeof globalThis=="object"||typeof globalThis=="object"?globalThis:typeof self=="object"?self:typeof this=="object"?this:a(),n=o(r);typeof t.Reflect<"u"&&(n=o(t.Reflect,n)),e(n,t),typeof t.Reflect>"u"&&(t.Reflect=r);function o(c,l){return function(u,d){Object.defineProperty(c,u,{configurable:!0,writable:!0,value:d}),l&&l(u,d)}}function i(){try{return Function("return this;")()}catch{}}function s(){try{return(0,eval)("(function() { return this; })()")}catch{}}function a(){return i()||s()}})(function(e,t){var n=Object.prototype.hasOwnProperty,o=typeof Symbol=="function",i=o&&typeof Symbol.toPrimitive<"u"?Symbol.toPrimitive:"@@toPrimitive",s=o&&typeof Symbol.iterator<"u"?Symbol.iterator:"@@iterator",a=typeof Object.create=="function",c={__proto__:[]}instanceof Array,l=!a&&!c,u={create:a?function(){return Ty(Object.create(null))}:c?function(){return Ty({__proto__:null})}:function(){return Ty({})},has:l?function(A,T){return n.call(A,T)}:function(A,T){return T in A},get:l?function(A,T){return n.call(A,T)?A[T]:void 0}:function(A,T){return A[T]}},d=Object.getPrototypeOf(Function),h=typeof Map=="function"&&typeof Map.prototype.entries=="function"?Map:aN(),m=typeof Set=="function"&&typeof Set.prototype.entries=="function"?Set:cN(),g=typeof WeakMap=="function"?WeakMap:lN(),w=o?Symbol.for("@reflect-metadata:registry"):void 0,y=oN(),x=iN(y);function S(A,T,U,Z){if(F(U)){if(!Bt(A))throw new TypeError;if(!Tr(T))throw new TypeError;return j(A,T)}else{if(!Bt(A))throw new TypeError;if(!he(T))throw new TypeError;if(!he(Z)&&!F(Z)&&!xe(Z))throw new TypeError;return xe(Z)&&(Z=void 0),U=mt(U),ne(A,T,U,Z)}}e("decorate",S);function v(A,T){function U(Z,ve){if(!he(Z))throw new TypeError;if(!F(ve)&&!vn(ve))throw new TypeError;I(A,T,Z,ve)}return U}e("metadata",v);function N(A,T,U,Z){if(!he(U))throw new TypeError;return F(Z)||(Z=mt(Z)),I(A,T,U,Z)}e("defineMetadata",N);function W(A,T,U){if(!he(T))throw new TypeError;return F(U)||(U=mt(U)),B(A,T,U)}e("hasMetadata",W);function H(A,T,U){if(!he(T))throw new TypeError;return F(U)||(U=mt(U)),L(A,T,U)}e("hasOwnMetadata",H);function $(A,T,U){if(!he(T))throw new TypeError;return F(U)||(U=mt(U)),K(A,T,U)}e("getMetadata",$);function P(A,T,U){if(!he(T))throw new TypeError;return F(U)||(U=mt(U)),O(A,T,U)}e("getOwnMetadata",P);function R(A,T){if(!he(A))throw new TypeError;return F(T)||(T=mt(T)),k(A,T)}e("getMetadataKeys",R);function X(A,T){if(!he(A))throw new TypeError;return F(T)||(T=mt(T)),z(A,T)}e("getOwnMetadataKeys",X);function q(A,T,U){if(!he(T))throw new TypeError;if(F(U)||(U=mt(U)),!he(T))throw new TypeError;F(U)||(U=mt(U));var Z=xd(T,U,!1);return F(Z)?!1:Z.OrdinaryDeleteMetadata(A,T,U)}e("deleteMetadata",q);function j(A,T){for(var U=A.length-1;U>=0;--U){var Z=A[U],ve=Z(T);if(!F(ve)&&!xe(ve)){if(!Tr(ve))throw new TypeError;T=ve}}return T}function ne(A,T,U,Z){for(var ve=A.length-1;ve>=0;--ve){var Mt=A[ve],zt=Mt(T,U,Z);if(!F(zt)&&!xe(zt)){if(!he(zt))throw new TypeError;Z=zt}}return Z}function B(A,T,U){var Z=L(A,T,U);if(Z)return!0;var ve=Iy(T);return xe(ve)?!1:B(A,ve,U)}function L(A,T,U){var Z=xd(T,U,!1);return F(Z)?!1:Ze(Z.OrdinaryHasOwnMetadata(A,T,U))}function K(A,T,U){var Z=L(A,T,U);if(Z)return O(A,T,U);var ve=Iy(T);if(!xe(ve))return K(A,ve,U)}function O(A,T,U){var Z=xd(T,U,!1);if(!F(Z))return Z.OrdinaryGetOwnMetadata(A,T,U)}function I(A,T,U,Z){var ve=xd(U,Z,!0);ve.OrdinaryDefineOwnMetadata(A,T,U,Z)}function k(A,T){var U=z(A,T),Z=Iy(A);if(Z===null)return U;var ve=k(Z,T);if(ve.length<=0)return U;if(U.length<=0)return ve;for(var Mt=new m,zt=[],Ke=0,ie=U;Ke<ie.length;Ke++){var ue=ie[Ke],pe=Mt.has(ue);pe||(Mt.add(ue),zt.push(ue))}for(var ye=0,Ve=ve;ye<Ve.length;ye++){var ue=Ve[ye],pe=Mt.has(ue);pe||(Mt.add(ue),zt.push(ue))}return zt}function z(A,T){var U=xd(A,T,!1);return U?U.OrdinaryOwnMetadataKeys(A,T):[]}function re(A){if(A===null)return 1;switch(typeof A){case"undefined":return 0;case"boolean":return 2;case"string":return 3;case"symbol":return 4;case"number":return 5;case"object":return A===null?1:6;default:return 6}}function F(A){return A===void 0}function xe(A){return A===null}function Pe(A){return typeof A=="symbol"}function he(A){return typeof A=="object"?A!==null:typeof A=="function"}function Ue(A,T){switch(re(A)){case 0:return A;case 1:return A;case 2:return A;case 3:return A;case 4:return A;case 5:return A}var U=T===3?"string":T===5?"number":"default",Z=bd(A,i);if(Z!==void 0){var ve=Z.call(A,U);if(he(ve))throw new TypeError;return ve}return rt(A,U==="default"?"number":U)}function rt(A,T){if(T==="string"){var U=A.toString;if(Tt(U)){var Z=U.call(A);if(!he(Z))return Z}var ve=A.valueOf;if(Tt(ve)){var Z=ve.call(A);if(!he(Z))return Z}}else{var ve=A.valueOf;if(Tt(ve)){var Z=ve.call(A);if(!he(Z))return Z}var Mt=A.toString;if(Tt(Mt)){var Z=Mt.call(A);if(!he(Z))return Z}}throw new TypeError}function Ze(A){return!!A}function ut(A){return""+A}function mt(A){var T=Ue(A,3);return Pe(T)?T:ut(T)}function Bt(A){return Array.isArray?Array.isArray(A):A instanceof Object?A instanceof Array:Object.prototype.toString.call(A)==="[object Array]"}function Tt(A){return typeof A=="function"}function Tr(A){return typeof A=="function"}function vn(A){switch(re(A)){case 3:return!0;case 4:return!0;default:return!1}}function bi(A,T){return A===T||A!==A&&T!==T}function bd(A,T){var U=A[T];if(U!=null){if(!Tt(U))throw new TypeError;return U}}function vp(A){var T=bd(A,s);if(!Tt(T))throw new TypeError;var U=T.call(A);if(!he(U))throw new TypeError;return U}function Ep(A){return A.value}function Sp(A){var T=A.next();return T.done?!1:T}function Ap(A){var T=A.return;T&&T.call(A)}function Iy(A){var T=Object.getPrototypeOf(A);if(typeof A!="function"||A===d||T!==d)return T;var U=A.prototype,Z=U&&Object.getPrototypeOf(U);if(Z==null||Z===Object.prototype)return T;var ve=Z.constructor;return typeof ve!="function"||ve===A?T:ve}function nN(){var A;!F(w)&&typeof t.Reflect<"u"&&!(w in t.Reflect)&&typeof t.Reflect.defineMetadata=="function"&&(A=sN(t.Reflect));var T,U,Z,ve=new g,Mt={registerProvider:zt,getProvider:ie,setProvider:pe};return Mt;function zt(ye){if(!Object.isExtensible(Mt))throw new Error("Cannot add provider to a frozen registry.");switch(!0){case A===ye:break;case F(T):T=ye;break;case T===ye:break;case F(U):U=ye;break;case U===ye:break;default:Z===void 0&&(Z=new m),Z.add(ye);break}}function Ke(ye,Ve){if(!F(T)){if(T.isProviderFor(ye,Ve))return T;if(!F(U)){if(U.isProviderFor(ye,Ve))return T;if(!F(Z))for(var gt=vp(Z);;){var Ut=Sp(gt);if(!Ut)return;var fo=Ep(Ut);if(fo.isProviderFor(ye,Ve))return Ap(gt),fo}}}if(!F(A)&&A.isProviderFor(ye,Ve))return A}function ie(ye,Ve){var gt=ve.get(ye),Ut;return F(gt)||(Ut=gt.get(Ve)),F(Ut)&&(Ut=Ke(ye,Ve),F(Ut)||(F(gt)&&(gt=new h,ve.set(ye,gt)),gt.set(Ve,Ut))),Ut}function ue(ye){if(F(ye))throw new TypeError;return T===ye||U===ye||!F(Z)&&Z.has(ye)}function pe(ye,Ve,gt){if(!ue(gt))throw new Error("Metadata provider not registered.");var Ut=ie(ye,Ve);if(Ut!==gt){if(!F(Ut))return!1;var fo=ve.get(ye);F(fo)&&(fo=new h,ve.set(ye,fo)),fo.set(Ve,gt)}return!0}}function oN(){var A;return!F(w)&&he(t.Reflect)&&Object.isExtensible(t.Reflect)&&(A=t.Reflect[w]),F(A)&&(A=nN()),!F(w)&&he(t.Reflect)&&Object.isExtensible(t.Reflect)&&Object.defineProperty(t.Reflect,w,{enumerable:!1,configurable:!1,writable:!1,value:A}),A}function iN(A){var T=new g,U={isProviderFor:function(ue,pe){var ye=T.get(ue);return F(ye)?!1:ye.has(pe)},OrdinaryDefineOwnMetadata:zt,OrdinaryHasOwnMetadata:ve,OrdinaryGetOwnMetadata:Mt,OrdinaryOwnMetadataKeys:Ke,OrdinaryDeleteMetadata:ie};return y.registerProvider(U),U;function Z(ue,pe,ye){var Ve=T.get(ue),gt=!1;if(F(Ve)){if(!ye)return;Ve=new h,T.set(ue,Ve),gt=!0}var Ut=Ve.get(pe);if(F(Ut)){if(!ye)return;if(Ut=new h,Ve.set(pe,Ut),!A.setProvider(ue,pe,U))throw Ve.delete(pe),gt&&T.delete(ue),new Error("Wrong provider for target.")}return Ut}function ve(ue,pe,ye){var Ve=Z(pe,ye,!1);return F(Ve)?!1:Ze(Ve.has(ue))}function Mt(ue,pe,ye){var Ve=Z(pe,ye,!1);if(!F(Ve))return Ve.get(ue)}function zt(ue,pe,ye,Ve){var gt=Z(ye,Ve,!0);gt.set(ue,pe)}function Ke(ue,pe){var ye=[],Ve=Z(ue,pe,!1);if(F(Ve))return ye;for(var gt=Ve.keys(),Ut=vp(gt),fo=0;;){var Jw=Sp(Ut);if(!Jw)return ye.length=fo,ye;var uN=Ep(Jw);try{ye[fo]=uN}catch(dN){try{Ap(Ut)}finally{throw dN}}fo++}}function ie(ue,pe,ye){var Ve=Z(pe,ye,!1);if(F(Ve)||!Ve.delete(ue))return!1;if(Ve.size===0){var gt=T.get(pe);F(gt)||(gt.delete(ye),gt.size===0&&T.delete(gt))}return!0}}function sN(A){var T=A.defineMetadata,U=A.hasOwnMetadata,Z=A.getOwnMetadata,ve=A.getOwnMetadataKeys,Mt=A.deleteMetadata,zt=new g,Ke={isProviderFor:function(ie,ue){var pe=zt.get(ie);return!F(pe)&&pe.has(ue)?!0:ve(ie,ue).length?(F(pe)&&(pe=new m,zt.set(ie,pe)),pe.add(ue),!0):!1},OrdinaryDefineOwnMetadata:T,OrdinaryHasOwnMetadata:U,OrdinaryGetOwnMetadata:Z,OrdinaryOwnMetadataKeys:ve,OrdinaryDeleteMetadata:Mt};return Ke}function xd(A,T,U){var Z=y.getProvider(A,T);if(!F(Z))return Z;if(U){if(y.setProvider(A,T,x))return x;throw new Error("Illegal state.")}}function aN(){var A={},T=[],U=function(){function Ke(ie,ue,pe){this._index=0,this._keys=ie,this._values=ue,this._selector=pe}return Ke.prototype["@@iterator"]=function(){return this},Ke.prototype[s]=function(){return this},Ke.prototype.next=function(){var ie=this._index;if(ie>=0&&ie<this._keys.length){var ue=this._selector(this._keys[ie],this._values[ie]);return ie+1>=this._keys.length?(this._index=-1,this._keys=T,this._values=T):this._index++,{value:ue,done:!1}}return{value:void 0,done:!0}},Ke.prototype.throw=function(ie){throw this._index>=0&&(this._index=-1,this._keys=T,this._values=T),ie},Ke.prototype.return=function(ie){return this._index>=0&&(this._index=-1,this._keys=T,this._values=T),{value:ie,done:!0}},Ke}(),Z=function(){function Ke(){this._keys=[],this._values=[],this._cacheKey=A,this._cacheIndex=-2}return Object.defineProperty(Ke.prototype,"size",{get:function(){return this._keys.length},enumerable:!0,configurable:!0}),Ke.prototype.has=function(ie){return this._find(ie,!1)>=0},Ke.prototype.get=function(ie){var ue=this._find(ie,!1);return ue>=0?this._values[ue]:void 0},Ke.prototype.set=function(ie,ue){var pe=this._find(ie,!0);return this._values[pe]=ue,this},Ke.prototype.delete=function(ie){var ue=this._find(ie,!1);if(ue>=0){for(var pe=this._keys.length,ye=ue+1;ye<pe;ye++)this._keys[ye-1]=this._keys[ye],this._values[ye-1]=this._values[ye];return this._keys.length--,this._values.length--,bi(ie,this._cacheKey)&&(this._cacheKey=A,this._cacheIndex=-2),!0}return!1},Ke.prototype.clear=function(){this._keys.length=0,this._values.length=0,this._cacheKey=A,this._cacheIndex=-2},Ke.prototype.keys=function(){return new U(this._keys,this._values,ve)},Ke.prototype.values=function(){return new U(this._keys,this._values,Mt)},Ke.prototype.entries=function(){return new U(this._keys,this._values,zt)},Ke.prototype["@@iterator"]=function(){return this.entries()},Ke.prototype[s]=function(){return this.entries()},Ke.prototype._find=function(ie,ue){if(!bi(this._cacheKey,ie)){this._cacheIndex=-1;for(var pe=0;pe<this._keys.length;pe++)if(bi(this._keys[pe],ie)){this._cacheIndex=pe;break}}return this._cacheIndex<0&&ue&&(this._cacheIndex=this._keys.length,this._keys.push(ie),this._values.push(void 0)),this._cacheIndex},Ke}();return Z;function ve(Ke,ie){return Ke}function Mt(Ke,ie){return ie}function zt(Ke,ie){return[Ke,ie]}}function cN(){var A=function(){function T(){this._map=new h}return Object.defineProperty(T.prototype,"size",{get:function(){return this._map.size},enumerable:!0,configurable:!0}),T.prototype.has=function(U){return this._map.has(U)},T.prototype.add=function(U){return this._map.set(U,U),this},T.prototype.delete=function(U){return this._map.delete(U)},T.prototype.clear=function(){this._map.clear()},T.prototype.keys=function(){return this._map.keys()},T.prototype.values=function(){return this._map.keys()},T.prototype.entries=function(){return this._map.entries()},T.prototype["@@iterator"]=function(){return this.keys()},T.prototype[s]=function(){return this.keys()},T}();return A}function lN(){var A=16,T=u.create(),U=Z();return function(){function ie(){this._key=Z()}return ie.prototype.has=function(ue){var pe=ve(ue,!1);return pe!==void 0?u.has(pe,this._key):!1},ie.prototype.get=function(ue){var pe=ve(ue,!1);return pe!==void 0?u.get(pe,this._key):void 0},ie.prototype.set=function(ue,pe){var ye=ve(ue,!0);return ye[this._key]=pe,this},ie.prototype.delete=function(ue){var pe=ve(ue,!1);return pe!==void 0?delete pe[this._key]:!1},ie.prototype.clear=function(){this._key=Z()},ie}();function Z(){var ie;do ie="@@WeakMap@@"+Ke();while(u.has(T,ie));return T[ie]=!0,ie}function ve(ie,ue){if(!n.call(ie,U)){if(!ue)return;Object.defineProperty(ie,U,{value:u.create()})}return ie[U]}function Mt(ie,ue){for(var pe=0;pe<ue;++pe)ie[pe]=Math.random()*255|0;return ie}function zt(ie){if(typeof Uint8Array=="function"){var ue=new Uint8Array(ie);return typeof crypto<"u"?crypto.getRandomValues(ue):typeof msCrypto<"u"?msCrypto.getRandomValues(ue):Mt(ue,ie),ue}return Mt(new Array(ie),ie)}function Ke(){var ie=zt(A);ie[6]=ie[6]&79|64,ie[8]=ie[8]&191|128;for(var ue="",pe=0;pe<A;++pe){var ye=ie[pe];(pe===4||pe===6||pe===8)&&(ue+="-"),ye<16&&(ue+="0"),ue+=ye.toString(16).toLowerCase()}return ue}}function Ty(A){return A.__=void 0,delete A.__,A}})})(cC||(cC={}))});var wk=er((x_e,r3)=>{var ZC,JC,ek,tk,rk,nk,ok,ik,sk,t3,O9,ak,ck,cd,lk,uk,dk,fk,hk,pk,mk,gk,yk;(function(r){var e=typeof globalThis=="object"?globalThis:typeof self=="object"?self:typeof this=="object"?this:{};typeof define=="function"&&define.amd?define("tslib",["exports"],function(n){r(t(e,t(n)))}):typeof r3=="object"&&typeof r3.exports=="object"?r(t(e,t(r3.exports))):r(t(e));function t(n,o){return n!==e&&(typeof Object.create=="function"?Object.defineProperty(n,"__esModule",{value:!0}):n.__esModule=!0),function(i,s){return n[i]=o?o(i,s):s}}})(function(r){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var o in n)n.hasOwnProperty(o)&&(t[o]=n[o])};ZC=function(t,n){e(t,n);function o(){this.constructor=t}t.prototype=n===null?Object.create(n):(o.prototype=n.prototype,new o)},JC=Object.assign||function(t){for(var n,o=1,i=arguments.length;o<i;o++){n=arguments[o];for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(t[s]=n[s])}return t},ek=function(t,n){var o={};for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&n.indexOf(i)<0&&(o[i]=t[i]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,i=Object.getOwnPropertySymbols(t);s<i.length;s++)n.indexOf(i[s])<0&&Object.prototype.propertyIsEnumerable.call(t,i[s])&&(o[i[s]]=t[i[s]]);return o},tk=function(t,n,o,i){var s=arguments.length,a=s<3?n:i===null?i=Object.getOwnPropertyDescriptor(n,o):i,c;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")a=Reflect.decorate(t,n,o,i);else for(var l=t.length-1;l>=0;l--)(c=t[l])&&(a=(s<3?c(a):s>3?c(n,o,a):c(n,o))||a);return s>3&&a&&Object.defineProperty(n,o,a),a},rk=function(t,n){return function(o,i){n(o,i,t)}},nk=function(t,n){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(t,n)},ok=function(t,n,o,i){function s(a){return a instanceof o?a:new o(function(c){c(a)})}return new(o||(o=Promise))(function(a,c){function l(h){try{d(i.next(h))}catch(m){c(m)}}function u(h){try{d(i.throw(h))}catch(m){c(m)}}function d(h){h.done?a(h.value):s(h.value).then(l,u)}d((i=i.apply(t,n||[])).next())})},ik=function(t,n){var o={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]},i,s,a,c;return c={next:l(0),throw:l(1),return:l(2)},typeof Symbol=="function"&&(c[Symbol.iterator]=function(){return this}),c;function l(d){return function(h){return u([d,h])}}function u(d){if(i)throw new TypeError("Generator is already executing.");for(;o;)try{if(i=1,s&&(a=d[0]&2?s.return:d[0]?s.throw||((a=s.return)&&a.call(s),0):s.next)&&!(a=a.call(s,d[1])).done)return a;switch(s=0,a&&(d=[d[0]&2,a.value]),d[0]){case 0:case 1:a=d;break;case 4:return o.label++,{value:d[1],done:!1};case 5:o.label++,s=d[1],d=[0];continue;case 7:d=o.ops.pop(),o.trys.pop();continue;default:if(a=o.trys,!(a=a.length>0&&a[a.length-1])&&(d[0]===6||d[0]===2)){o=0;continue}if(d[0]===3&&(!a||d[1]>a[0]&&d[1]<a[3])){o.label=d[1];break}if(d[0]===6&&o.label<a[1]){o.label=a[1],a=d;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(d);break}a[2]&&o.ops.pop(),o.trys.pop();continue}d=n.call(t,o)}catch(h){d=[6,h],s=0}finally{i=a=0}if(d[0]&5)throw d[1];return{value:d[0]?d[1]:void 0,done:!0}}},yk=function(t,n,o,i){i===void 0&&(i=o),t[i]=n[o]},sk=function(t,n){for(var o in t)o!=="default"&&!n.hasOwnProperty(o)&&(n[o]=t[o])},t3=function(t){var n=typeof Symbol=="function"&&Symbol.iterator,o=n&&t[n],i=0;if(o)return o.call(t);if(t&&typeof t.length=="number")return{next:function(){return t&&i>=t.length&&(t=void 0),{value:t&&t[i++],done:!t}}};throw new TypeError(n?"Object is not iterable.":"Symbol.iterator is not defined.")},O9=function(t,n){var o=typeof Symbol=="function"&&t[Symbol.iterator];if(!o)return t;var i=o.call(t),s,a=[],c;try{for(;(n===void 0||n-- >0)&&!(s=i.next()).done;)a.push(s.value)}catch(l){c={error:l}}finally{try{s&&!s.done&&(o=i.return)&&o.call(i)}finally{if(c)throw c.error}}return a},ak=function(){for(var t=[],n=0;n<arguments.length;n++)t=t.concat(O9(arguments[n]));return t},ck=function(){for(var t=0,n=0,o=arguments.length;n<o;n++)t+=arguments[n].length;for(var i=Array(t),s=0,n=0;n<o;n++)for(var a=arguments[n],c=0,l=a.length;c<l;c++,s++)i[s]=a[c];return i},cd=function(t){return this instanceof cd?(this.v=t,this):new cd(t)},lk=function(t,n,o){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var i=o.apply(t,n||[]),s,a=[];return s={},c("next"),c("throw"),c("return"),s[Symbol.asyncIterator]=function(){return this},s;function c(g){i[g]&&(s[g]=function(w){return new Promise(function(y,x){a.push([g,w,y,x])>1||l(g,w)})})}function l(g,w){try{u(i[g](w))}catch(y){m(a[0][3],y)}}function u(g){g.value instanceof cd?Promise.resolve(g.value.v).then(d,h):m(a[0][2],g)}function d(g){l("next",g)}function h(g){l("throw",g)}function m(g,w){g(w),a.shift(),a.length&&l(a[0][0],a[0][1])}},uk=function(t){var n,o;return n={},i("next"),i("throw",function(s){throw s}),i("return"),n[Symbol.iterator]=function(){return this},n;function i(s,a){n[s]=t[s]?function(c){return(o=!o)?{value:cd(t[s](c)),done:s==="return"}:a?a(c):c}:a}},dk=function(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=t[Symbol.asyncIterator],o;return n?n.call(t):(t=typeof t3=="function"?t3(t):t[Symbol.iterator](),o={},i("next"),i("throw"),i("return"),o[Symbol.asyncIterator]=function(){return this},o);function i(a){o[a]=t[a]&&function(c){return new Promise(function(l,u){c=t[a](c),s(l,u,c.done,c.value)})}}function s(a,c,l,u){Promise.resolve(u).then(function(d){a({value:d,done:l})},c)}},fk=function(t,n){return Object.defineProperty?Object.defineProperty(t,"raw",{value:n}):t.raw=n,t},hk=function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var o in t)Object.hasOwnProperty.call(t,o)&&(n[o]=t[o]);return n.default=t,n},pk=function(t){return t&&t.__esModule?t:{default:t}},mk=function(t,n){if(!n.has(t))throw new TypeError("attempted to get private field on non-instance");return n.get(t)},gk=function(t,n,o){if(!n.has(t))throw new TypeError("attempted to set private field on non-instance");return n.set(t,o),o},r("__extends",ZC),r("__assign",JC),r("__rest",ek),r("__decorate",tk),r("__param",rk),r("__metadata",nk),r("__awaiter",ok),r("__generator",ik),r("__exportStar",sk),r("__createBinding",yk),r("__values",t3),r("__read",O9),r("__spread",ak),r("__spreadArrays",ck),r("__await",cd),r("__asyncGenerator",lk),r("__asyncDelegator",uk),r("__asyncValues",dk),r("__makeTemplateObject",fk),r("__importStar",hk),r("__importDefault",pk),r("__classPrivateFieldGet",mk),r("__classPrivateFieldSet",gk)})});var QP=er(N3=>{"use strict";Object.defineProperty(N3,"__esModule",{value:!0});var Aw=class{constructor(){this.pullQueue=[],this.pushQueue=[],this.eventHandlers={},this.isPaused=!1,this.isStopped=!1}push(e){if(this.isStopped)return;let t={value:e,done:!1};if(this.pullQueue.length){let n=this.pullQueue.shift();n&&n.resolve(t)}else this.pushQueue.push(Promise.resolve(t)),this.highWaterMark!==void 0&&this.pushQueue.length>=this.highWaterMark&&!this.isPaused&&(this.isPaused=!0,this.eventHandlers.highWater?this.eventHandlers.highWater():console&&console.warn(`EventIterator queue reached ${this.pushQueue.length} items`))}stop(){if(!this.isStopped){this.isStopped=!0,this.remove();for(let e of this.pullQueue)e.resolve({value:void 0,done:!0});this.pullQueue.length=0}}fail(e){if(!this.isStopped)if(this.isStopped=!0,this.remove(),this.pullQueue.length){for(let t of this.pullQueue)t.reject(e);this.pullQueue.length=0}else{let t=Promise.reject(e);t.catch(()=>{}),this.pushQueue.push(t)}}remove(){Promise.resolve().then(()=>{this.removeCallback&&this.removeCallback()})}[Symbol.asyncIterator](){return{next:e=>{let t=this.pushQueue.shift();return t?(this.lowWaterMark!==void 0&&this.pushQueue.length<=this.lowWaterMark&&this.isPaused&&(this.isPaused=!1,this.eventHandlers.lowWater&&this.eventHandlers.lowWater()),t):this.isStopped?Promise.resolve({value:void 0,done:!0}):new Promise((n,o)=>{this.pullQueue.push({resolve:n,reject:o})})},return:()=>(this.isStopped=!0,this.pushQueue.length=0,this.remove(),Promise.resolve({value:void 0,done:!0}))}}},R3=class{constructor(e,{highWaterMark:t=100,lowWaterMark:n=1}={}){let o=new Aw;o.highWaterMark=t,o.lowWaterMark=n,o.removeCallback=e({push:i=>o.push(i),stop:()=>o.stop(),fail:i=>o.fail(i),on:(i,s)=>{o.eventHandlers[i]=s}})||(()=>{}),this[Symbol.asyncIterator]=()=>o[Symbol.asyncIterator](),Object.freeze(this)}};N3.EventIterator=R3;N3.default=R3});var ZP=er(hp=>{"use strict";Object.defineProperty(hp,"__esModule",{value:!0});var _w=QP();hp.EventIterator=_w.EventIterator;function uH(r,e,t){return new _w.EventIterator(({push:n})=>(this.addEventListener(r,n,e),()=>this.removeEventListener(r,n,e)),t)}hp.subscribe=uH;hp.default=_w.EventIterator});var HR=er((ILe,VR)=>{function uo(r,e){typeof e=="boolean"&&(e={forever:e}),this._originalTimeouts=JSON.parse(JSON.stringify(r)),this._timeouts=r,this._options=e||{},this._maxRetryTime=e&&e.maxRetryTime||1/0,this._fn=null,this._errors=[],this._attempts=1,this._operationTimeout=null,this._operationTimeoutCb=null,this._timeout=null,this._operationStart=null,this._timer=null,this._options.forever&&(this._cachedTimeouts=this._timeouts.slice(0))}VR.exports=uo;uo.prototype.reset=function(){this._attempts=1,this._timeouts=this._originalTimeouts.slice(0)};uo.prototype.stop=function(){this._timeout&&clearTimeout(this._timeout),this._timer&&clearTimeout(this._timer),this._timeouts=[],this._cachedTimeouts=null};uo.prototype.retry=function(r){if(this._timeout&&clearTimeout(this._timeout),!r)return!1;var e=new Date().getTime();if(r&&e-this._operationStart>=this._maxRetryTime)return this._errors.push(r),this._errors.unshift(new Error("RetryOperation timeout occurred")),!1;this._errors.push(r);var t=this._timeouts.shift();if(t===void 0)if(this._cachedTimeouts)this._errors.splice(0,this._errors.length-1),t=this._cachedTimeouts.slice(-1);else return!1;var n=this;return this._timer=setTimeout(function(){n._attempts++,n._operationTimeoutCb&&(n._timeout=setTimeout(function(){n._operationTimeoutCb(n._attempts)},n._operationTimeout),n._options.unref&&n._timeout.unref()),n._fn(n._attempts)},t),this._options.unref&&this._timer.unref(),!0};uo.prototype.attempt=function(r,e){this._fn=r,e&&(e.timeout&&(this._operationTimeout=e.timeout),e.cb&&(this._operationTimeoutCb=e.cb));var t=this;this._operationTimeoutCb&&(this._timeout=setTimeout(function(){t._operationTimeoutCb()},t._operationTimeout)),this._operationStart=new Date().getTime(),this._fn(this._attempts)};uo.prototype.try=function(r){console.log("Using RetryOperation.try() is deprecated"),this.attempt(r)};uo.prototype.start=function(r){console.log("Using RetryOperation.start() is deprecated"),this.attempt(r)};uo.prototype.start=uo.prototype.try;uo.prototype.errors=function(){return this._errors};uo.prototype.attempts=function(){return this._attempts};uo.prototype.mainError=function(){if(this._errors.length===0)return null;for(var r={},e=null,t=0,n=0;n<this._errors.length;n++){var o=this._errors[n],i=o.message,s=(r[i]||0)+1;r[i]=s,s>=t&&(e=o,t=s)}return e}});var qR=er(ul=>{var XH=HR();ul.operation=function(r){var e=ul.timeouts(r);return new XH(e,{forever:r&&(r.forever||r.retries===1/0),unref:r&&r.unref,maxRetryTime:r&&r.maxRetryTime})};ul.timeouts=function(r){if(r instanceof Array)return[].concat(r);var e={retries:10,factor:2,minTimeout:1*1e3,maxTimeout:1/0,randomize:!1};for(var t in r)e[t]=r[t];if(e.minTimeout>e.maxTimeout)throw new Error("minTimeout is greater than maxTimeout");for(var n=[],o=0;o<e.retries;o++)n.push(this.createTimeout(o,e));return r&&r.forever&&!n.length&&n.push(this.createTimeout(o,e)),n.sort(function(i,s){return i-s}),n};ul.createTimeout=function(r,e){var t=e.randomize?Math.random()+1:1,n=Math.round(t*Math.max(e.minTimeout,1)*Math.pow(e.factor,r));return n=Math.min(n,e.maxTimeout),n};ul.wrap=function(r,e,t){if(e instanceof Array&&(t=e,e=null),!t){t=[];for(var n in r)typeof r[n]=="function"&&t.push(n)}for(var o=0;o<t.length;o++){var i=t[o],s=r[i];r[i]=function(c){var l=ul.operation(e),u=Array.prototype.slice.call(arguments,1),d=u.pop();u.push(function(h){l.retry(h)||(h&&(arguments[0]=l.mainError()),d.apply(this,arguments))}),l.attempt(function(){c.apply(r,u)})}.bind(r,s),r[i].options=e}}});var WR=er((CLe,jR)=>{jR.exports=qR()});var gq={};Pt(gq,{DEFAULT_SESSION_MAX_PROVIDERS:()=>H6,DEFAULT_SESSION_MIN_PROVIDERS:()=>V6,InsufficientProvidersError:()=>hf,NoRoutersAvailableError:()=>Is,UnknownCodecError:()=>mf,UnknownHashAlgorithmError:()=>pf,createHelia:()=>pq,libp2pDefaults:()=>B3});var tb=Symbol.for("@libp2p/connection");var jo=Symbol.for("@libp2p/content-routing");var ma=Symbol.for("@libp2p/peer-discovery");var Ip=Symbol.for("@libp2p/peer-id");function Tp(r){return!!r?.[Ip]}var Wo=Symbol.for("@libp2p/peer-routing");var rs="keep-alive";var ns=Symbol.for("@libp2p/transport");var ga;(function(r){r[r.FATAL_ALL=0]="FATAL_ALL",r[r.NO_FATAL=1]="NO_FATAL"})(ga||(ga={}));var cr=class extends Error{static name="AbortError";constructor(e="The operation was aborted"){super(e),this.name="AbortError"}},Cp=class extends Error{static name="UnexpectedPeerError";constructor(e="Unexpected Peer"){super(e),this.name="UnexpectedPeerError"}},kp=class extends Error{static name="InvalidCryptoExchangeError";constructor(e="Invalid crypto exchange"){super(e),this.name="InvalidCryptoExchangeError"}},D=class extends Error{static name="InvalidParametersError";constructor(e="Invalid parameters"){super(e),this.name="InvalidParametersError"}},xi=class extends Error{static name="InvalidPublicKeyError";constructor(e="Invalid public key"){super(e),this.name="InvalidPublicKeyError"}},vd=class extends Error{static name="InvalidPrivateKeyError";constructor(e="Invalid private key"){super(e),this.name="InvalidPrivateKeyError"}};var Pp=class extends Error{static name="ConnectionClosingError";constructor(e="The connection is closing"){super(e),this.name="ConnectionClosingError"}},fl=class extends Error{static name="ConnectionClosedError";constructor(e="The connection is closed"){super(e),this.name="ConnectionClosedError"}},hl=class extends Error{static name="ConnectionFailedError";constructor(e="Connection failed"){super(e),this.name="ConnectionFailedError"}},Go=class extends Error{static name="MuxerClosedError";constructor(e="The muxer is closed"){super(e),this.name="MuxerClosedError"}},Rp=class extends Error{static name="StreamResetError";constructor(e="The stream has been reset"){super(e),this.name="StreamResetError"}},ya=class extends Error{static name="StreamStateError";constructor(e="The stream is in an invalid state"){super(e),this.name="StreamStateError"}},ze=class extends Error{static name="NotFoundError";constructor(e="Not found"){super(e),this.name="NotFoundError"}},pl=class extends Error{static name="InvalidPeerIdError";constructor(e="Invalid PeerID"){super(e),this.name="InvalidPeerIdError"}},os=class extends Error{static name="InvalidMultiaddrError";constructor(e="Invalid multiaddr"){super(e),this.name="InvalidMultiaddrError"}},Np=class extends Error{static name="InvalidCIDError";constructor(e="Invalid CID"){super(e),this.name="InvalidCIDError"}},is=class extends Error{static name="InvalidMultihashError";constructor(e="Invalid Multihash"){super(e),this.name="InvalidMultihashError"}},vi=class extends Error{static name="UnsupportedProtocolError";constructor(e="Unsupported protocol error"){super(e),this.name="UnsupportedProtocolError"}},Oe=class extends Error{static name="InvalidMessageError";constructor(e="Invalid message"){super(e),this.name="InvalidMessageError"}},Dp=class extends Error{static name="ProtocolError";constructor(e="Protocol error"){super(e),this.name="ProtocolError"}},zo=class extends Error{static name="TimeoutError";constructor(e="Timed out"){super(e),this.name="TimeoutError"}},En=class extends Error{static name="NotStartedError";constructor(e="Not started"){super(e),this.name="NotStartedError"}};var Ei=class extends Error{static name="DialError";constructor(e="Dial error"){super(e),this.name="DialError"}},wa=class extends Error{static name="ListenError";constructor(e="Listen error"){super(e),this.name="ListenError"}},ml=class extends Error{static name="LimitedConnectionError";constructor(e="Limited connection"){super(e),this.name="LimitedConnectionError"}},Op=class extends Error{static name="TooManyInboundProtocolStreamsError";constructor(e="Too many inbound protocol streams"){super(e),this.name="TooManyInboundProtocolStreamsError"}},ss=class extends Error{static name="TooManyOutboundProtocolStreamsError";constructor(e="Too many outbound protocol streams"){super(e),this.name="TooManyOutboundProtocolStreamsError"}},ho=class extends Error{static name="UnsupportedKeyTypeError";constructor(e="Unsupported key type"){super(e),this.name="UnsupportedKeyTypeError"}};var Le=class extends EventTarget{#e=new Map;constructor(){super()}listenerCount(e){let t=this.#e.get(e);return t==null?0:t.length}addEventListener(e,t,n){super.addEventListener(e,t,n);let o=this.#e.get(e);o==null&&(o=[],this.#e.set(e,o)),o.push({callback:t,once:(n!==!0&&n!==!1&&n?.once)??!1})}removeEventListener(e,t,n){super.removeEventListener(e.toString(),t??null,n);let o=this.#e.get(e);o!=null&&(o=o.filter(({callback:i})=>i!==t),this.#e.set(e,o))}dispatchEvent(e){let t=super.dispatchEvent(e),n=this.#e.get(e.type);return n==null||(n=n.filter(({once:o})=>!o),this.#e.set(e.type,n)),t}safeDispatchEvent(e,t={}){return this.dispatchEvent(new CustomEvent(e,t))}};function Lp(r){return r!=null&&typeof r.start=="function"&&typeof r.stop=="function"}async function lr(...r){let e=[];for(let t of r)Lp(t)&&e.push(t);await Promise.all(e.map(async t=>{t.beforeStart!=null&&await t.beforeStart()})),await Promise.all(e.map(async t=>{await t.start()})),await Promise.all(e.map(async t=>{t.afterStart!=null&&await t.afterStart()}))}async function Cr(...r){let e=[];for(let t of r)Lp(t)&&e.push(t);await Promise.all(e.map(async t=>{t.beforeStop!=null&&await t.beforeStop()})),await Promise.all(e.map(async t=>{await t.stop()})),await Promise.all(e.map(async t=>{t.afterStop!=null&&await t.afterStop()}))}var Xe=Symbol.for("@libp2p/service-capabilities"),Sn=Symbol.for("@libp2p/service-dependencies");function Ne(r){let e=new globalThis.AbortController;function t(){e.abort();for(let i of r)i?.removeEventListener!=null&&i.removeEventListener("abort",t)}for(let i of r){if(i?.aborted===!0){t();break}i?.addEventListener!=null&&i.addEventListener("abort",t)}function n(){for(let i of r)i?.removeEventListener!=null&&i.removeEventListener("abort",t)}let o=e.signal;return o.clear=n,o}function de(){let r={};return r.promise=new Promise((e,t)=>{r.resolve=e,r.reject=t}),r}var Bp=class{buffer;mask;top;btm;next;constructor(e){if(!(e>0)||(e-1&e)!==0)throw new Error("Max size for a FixedFIFO should be a power of two");this.buffer=new Array(e),this.mask=e-1,this.top=0,this.btm=0,this.next=null}push(e){return this.buffer[this.top]!==void 0?!1:(this.buffer[this.top]=e,this.top=this.top+1&this.mask,!0)}shift(){let e=this.buffer[this.btm];if(e!==void 0)return this.buffer[this.btm]=void 0,this.btm=this.btm+1&this.mask,e}isEmpty(){return this.buffer[this.btm]===void 0}},gl=class{size;hwm;head;tail;constructor(e={}){this.hwm=e.splitLimit??16,this.head=new Bp(this.hwm),this.tail=this.head,this.size=0}calculateSize(e){return e?.byteLength!=null?e.byteLength:1}push(e){if(e?.value!=null&&(this.size+=this.calculateSize(e.value)),!this.head.push(e)){let t=this.head;this.head=t.next=new Bp(2*this.head.buffer.length),this.head.push(e)}}shift(){let e=this.tail.shift();if(e===void 0&&this.tail.next!=null){let t=this.tail.next;this.tail.next=null,this.tail=t,e=this.tail.shift()}return e?.value!=null&&(this.size-=this.calculateSize(e.value)),e}isEmpty(){return this.head.isEmpty()}};var Cy=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.code=t??"ABORT_ERR"}};function Zr(r={}){return wN(t=>{let n=t.shift();if(n==null)return{done:!0};if(n.error!=null)throw n.error;return{done:n.done===!0,value:n.value}},r)}function wN(r,e){e=e??{};let t=e.onEnd,n=new gl,o,i,s,a=de(),c=async()=>{try{return n.isEmpty()?s?{done:!0}:await new Promise((y,x)=>{i=S=>{i=null,n.push(S);try{y(r(n))}catch(v){x(v)}return o}}):r(n)}finally{n.isEmpty()&&queueMicrotask(()=>{a.resolve(),a=de()})}},l=y=>i!=null?i(y):(n.push(y),o),u=y=>(n=new gl,i!=null?i({error:y}):(n.push({error:y}),o)),d=y=>{if(s)return o;if(e?.objectMode!==!0&&y?.byteLength==null)throw new Error("objectMode was not true but tried to push non-Uint8Array value");return l({done:!1,value:y})},h=y=>s?o:(s=!0,y!=null?u(y):l({done:!0})),m=()=>(n=new gl,h(),{done:!0}),g=y=>(h(y),{done:!0});if(o={[Symbol.asyncIterator](){return this},next:c,return:m,throw:g,push:d,end:h,get readableLength(){return n.size},onEmpty:async y=>{let x=y?.signal;if(x?.throwIfAborted(),n.isEmpty())return;let S,v;x!=null&&(S=new Promise((N,W)=>{v=()=>{W(new Cy)},x.addEventListener("abort",v)}));try{await Promise.race([a.promise,S])}finally{v!=null&&x!=null&&x?.removeEventListener("abort",v)}}},t==null)return o;let w=o;return o={[Symbol.asyncIterator](){return this},next(){return w.next()},throw(y){return w.throw(y),t!=null&&(t(y),t=void 0),{done:!0}},return(){return w.return(),t!=null&&(t(),t=void 0),{done:!0}},push:d,end(y){return w.end(y),t!=null&&(t(y),t=void 0),o},get readableLength(){return w.readableLength},onEmpty:y=>w.onEmpty(y)},o}var ky=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.name="AbortError",this.code=t??"ABORT_ERR"}};async function tr(r,e,t,n){let o=new ky(n?.errorMessage,n?.errorCode);return t?.aborted===!0?Promise.reject(o):new Promise((i,s)=>{function a(){t?.removeEventListener("abort",u),r.removeEventListener(e,c),n?.errorEvent!=null&&r.removeEventListener(n.errorEvent,l)}let c=d=>{try{if(n?.filter?.(d)===!1)return}catch(h){a(),s(h);return}a(),i(d)},l=d=>{a(),s(d.detail)},u=()=>{a(),s(o)};t?.addEventListener("abort",u),r.addEventListener(e,c),n?.errorEvent!=null&&r.addEventListener(n.errorEvent,l)})}var Mp=class extends Error{remainingPoints;msBeforeNext;consumedPoints;isFirstInDuration;constructor(e="Rate limit exceeded",t){super(e),this.name="RateLimitError",this.remainingPoints=t.remainingPoints,this.msBeforeNext=t.msBeforeNext,this.consumedPoints=t.consumedPoints,this.isFirstInDuration=t.isFirstInDuration}},Up=class extends Error{static name="QueueFullError";constructor(e="The queue was full"){super(e),this.name="QueueFullError"}};var Fp=class extends Error{type;code;constructor(e,t,n){super(e??"The operation was aborted"),this.type="aborted",this.name=n??"AbortError",this.code=t??"ABORT_ERR"}};async function dt(r,e,t){if(e==null)return r;if(e.aborted)return r.catch(()=>{}),Promise.reject(new Fp(t?.errorMessage,t?.errorCode,t?.errorName));let n,o=new Fp(t?.errorMessage,t?.errorCode,t?.errorName);try{return await Promise.race([r,new Promise((i,s)=>{n=()=>{s(o)},e.addEventListener("abort",n)})])}finally{n!=null&&e.removeEventListener("abort",n)}}var $p=class{deferred;signal;constructor(e){this.signal=e,this.deferred=de(),this.onAbort=this.onAbort.bind(this),this.signal?.addEventListener("abort",this.onAbort)}onAbort(){this.deferred.reject(this.signal?.reason??new cr)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function bN(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var Kp=class{id;fn;options;recipients;status;timeline;controller;constructor(e,t){this.id=bN(),this.status="queued",this.fn=e,this.options=t,this.recipients=[],this.timeline={created:Date.now()},this.controller=new AbortController,this.controller.signal,this.onAbort=this.onAbort.bind(this)}abort(e){this.controller.abort(e)}onAbort(){this.recipients.reduce((t,n)=>t&&n.signal?.aborted===!0,!0)&&(this.controller.abort(new cr),this.cleanup())}async join(e={}){let t=new $p(e.signal);return this.recipients.push(t),e.signal?.addEventListener("abort",this.onAbort),t.deferred.promise}async run(){this.status="running",this.timeline.started=Date.now();try{this.controller.signal.throwIfAborted();let e=await dt(this.fn({...this.options??{},signal:this.controller.signal}),this.controller.signal);this.recipients.forEach(t=>{t.deferred.resolve(e)}),this.status="complete"}catch(e){this.recipients.forEach(t=>{t.deferred.reject(e)}),this.status="errored"}finally{this.timeline.finished=Date.now(),this.cleanup()}}cleanup(){this.recipients.forEach(e=>{e.cleanup(),e.signal?.removeEventListener("abort",this.onAbort)})}};var $r=class extends Le{concurrency;maxSize;queue;pending;sort;constructor(e={}){super(),this.concurrency=e.concurrency??Number.POSITIVE_INFINITY,this.maxSize=e.maxSize??Number.POSITIVE_INFINITY,this.pending=0,e.metricName!=null&&e.metrics?.registerMetricGroup(e.metricName,{calculate:()=>({size:this.queue.length,running:this.pending,queued:this.queue.length-this.pending})}),this.sort=e.sort,this.queue=[]}tryToStartAnother(){if(this.size===0)return queueMicrotask(()=>{this.safeDispatchEvent("empty")}),this.running===0&&queueMicrotask(()=>{this.safeDispatchEvent("idle")}),!1;if(this.pending<this.concurrency){let e;for(let t of this.queue)if(t.status==="queued"){e=t;break}return e==null?!1:(this.safeDispatchEvent("active"),this.pending++,e.run().finally(()=>{for(let t=0;t<this.queue.length;t++)if(this.queue[t]===e){this.queue.splice(t,1);break}this.pending--,this.tryToStartAnother(),this.safeDispatchEvent("next")}),!0)}return!1}enqueue(e){this.queue.push(e),this.sort!=null&&this.queue.sort(this.sort)}async add(e,t){if(t?.signal?.throwIfAborted(),this.size===this.maxSize)throw new Up;let n=new Kp(e,t);return this.enqueue(n),this.safeDispatchEvent("add"),this.tryToStartAnother(),n.join(t).then(o=>(this.safeDispatchEvent("completed",{detail:o}),this.safeDispatchEvent("success",{detail:{job:n,result:o}}),o)).catch(o=>{if(n.status==="queued"){for(let i=0;i<this.queue.length;i++)if(this.queue[i]===n){this.queue.splice(i,1);break}}throw this.safeDispatchEvent("error",{detail:o}),this.safeDispatchEvent("failure",{detail:{job:n,error:o}}),o})}clear(){this.queue.splice(0,this.queue.length)}abort(){this.queue.forEach(e=>{e.abort(new cr)}),this.clear()}async onEmpty(e){this.size!==0&&await tr(this,"empty",e?.signal)}async onSizeLessThan(e,t){this.size<e||await tr(this,"next",t?.signal,{filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await tr(this,"idle",e?.signal)}get size(){return this.queue.length}get queued(){return this.queue.length-this.pending}get running(){return this.pending}async*toGenerator(e){e?.signal?.throwIfAborted();let t=Zr({objectMode:!0}),n=c=>{c!=null?this.abort():this.clear(),t.end(c)},o=c=>{c.detail!=null&&t.push(c.detail)},i=c=>{n(c.detail)},s=()=>{n()},a=()=>{n(new cr("Queue aborted"))};this.addEventListener("completed",o),this.addEventListener("error",i),this.addEventListener("idle",s),e?.signal?.addEventListener("abort",a);try{yield*t}finally{this.removeEventListener("completed",o),this.removeEventListener("error",i),this.removeEventListener("idle",s),e?.signal?.removeEventListener("abort",a),n()}}};var ur=class extends $r{has(e){return this.find(e)!=null}find(e){return this.queue.find(t=>e.equals(t.options.peerId))}};function xN(r){return r[Symbol.asyncIterator]!=null}function vN(r){if(xN(r))return(async()=>{for await(let e of r);})();for(let e of r);}var kr=vN;function ke(r=0){return new Uint8Array(r)}function Ct(r=0){return new Uint8Array(r)}var EN=Math.pow(2,7),SN=Math.pow(2,14),AN=Math.pow(2,21),Py=Math.pow(2,28),Ry=Math.pow(2,35),Ny=Math.pow(2,42),Dy=Math.pow(2,49),tt=128,Pr=127;function Ce(r){if(r<EN)return 1;if(r<SN)return 2;if(r<AN)return 3;if(r<Py)return 4;if(r<Ry)return 5;if(r<Ny)return 6;if(r<Dy)return 7;if(Number.MAX_SAFE_INTEGER!=null&&r>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function Oy(r,e,t=0){switch(Ce(r)){case 8:e[t++]=r&255|tt,r/=128;case 7:e[t++]=r&255|tt,r/=128;case 6:e[t++]=r&255|tt,r/=128;case 5:e[t++]=r&255|tt,r/=128;case 4:e[t++]=r&255|tt,r>>>=7;case 3:e[t++]=r&255|tt,r>>>=7;case 2:e[t++]=r&255|tt,r>>>=7;case 1:{e[t++]=r&255,r>>>=7;break}default:throw new Error("unreachable")}return e}function _N(r,e,t=0){switch(Ce(r)){case 8:e.set(t++,r&255|tt),r/=128;case 7:e.set(t++,r&255|tt),r/=128;case 6:e.set(t++,r&255|tt),r/=128;case 5:e.set(t++,r&255|tt),r/=128;case 4:e.set(t++,r&255|tt),r>>>=7;case 3:e.set(t++,r&255|tt),r>>>=7;case 2:e.set(t++,r&255|tt),r>>>=7;case 1:{e.set(t++,r&255),r>>>=7;break}default:throw new Error("unreachable")}return e}function Ly(r,e){let t=r[e],n=0;if(n+=t&Pr,t<tt||(t=r[e+1],n+=(t&Pr)<<7,t<tt)||(t=r[e+2],n+=(t&Pr)<<14,t<tt)||(t=r[e+3],n+=(t&Pr)<<21,t<tt)||(t=r[e+4],n+=(t&Pr)*Py,t<tt)||(t=r[e+5],n+=(t&Pr)*Ry,t<tt)||(t=r[e+6],n+=(t&Pr)*Ny,t<tt)||(t=r[e+7],n+=(t&Pr)*Dy,t<tt))return n;throw new RangeError("Could not decode varint")}function IN(r,e){let t=r.get(e),n=0;if(n+=t&Pr,t<tt||(t=r.get(e+1),n+=(t&Pr)<<7,t<tt)||(t=r.get(e+2),n+=(t&Pr)<<14,t<tt)||(t=r.get(e+3),n+=(t&Pr)<<21,t<tt)||(t=r.get(e+4),n+=(t&Pr)*Py,t<tt)||(t=r.get(e+5),n+=(t&Pr)*Ry,t<tt)||(t=r.get(e+6),n+=(t&Pr)*Ny,t<tt)||(t=r.get(e+7),n+=(t&Pr)*Dy,t<tt))return n;throw new RangeError("Could not decode varint")}function Fe(r,e,t=0){return e==null&&(e=Ct(Ce(r))),e instanceof Uint8Array?Oy(r,e,t):_N(r,e,t)}function nt(r,e=0){return r instanceof Uint8Array?Ly(r,e):IN(r,e)}function st(r,e){e==null&&(e=r.reduce((o,i)=>o+i.length,0));let t=Ct(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return t}function ge(r,e){if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0}var nb=Symbol.for("@achingbrain/uint8arraylist");function rb(r,e){if(e==null||e<0)throw new RangeError("index is out of bounds");let t=0;for(let n of r){let o=t+n.byteLength;if(e<o)return{buf:n,index:e-t};t=o}throw new RangeError("index is out of bounds")}function yl(r){return!!r?.[nb]}var J=class r{bufs;length;[nb]=!0;constructor(...e){this.bufs=[],this.length=0,e.length>0&&this.appendAll(e)}*[Symbol.iterator](){yield*this.bufs}get byteLength(){return this.length}append(...e){this.appendAll(e)}appendAll(e){let t=0;for(let n of e)if(n instanceof Uint8Array)t+=n.byteLength,this.bufs.push(n);else if(yl(n))t+=n.byteLength,this.bufs.push(...n.bufs);else throw new Error("Could not append value, must be an Uint8Array or a Uint8ArrayList");this.length+=t}prepend(...e){this.prependAll(e)}prependAll(e){let t=0;for(let n of e.reverse())if(n instanceof Uint8Array)t+=n.byteLength,this.bufs.unshift(n);else if(yl(n))t+=n.byteLength,this.bufs.unshift(...n.bufs);else throw new Error("Could not prepend value, must be an Uint8Array or a Uint8ArrayList");this.length+=t}get(e){let t=rb(this.bufs,e);return t.buf[t.index]}set(e,t){let n=rb(this.bufs,e);n.buf[n.index]=t}write(e,t=0){if(e instanceof Uint8Array)for(let n=0;n<e.length;n++)this.set(t+n,e[n]);else if(yl(e))for(let n=0;n<e.length;n++)this.set(t+n,e.get(n));else throw new Error("Could not write value, must be an Uint8Array or a Uint8ArrayList")}consume(e){if(e=Math.trunc(e),!(Number.isNaN(e)||e<=0)){if(e===this.byteLength){this.bufs=[],this.length=0;return}for(;this.bufs.length>0;)if(e>=this.bufs[0].byteLength)e-=this.bufs[0].byteLength,this.length-=this.bufs[0].byteLength,this.bufs.shift();else{this.bufs[0]=this.bufs[0].subarray(e),this.length-=e;break}}}slice(e,t){let{bufs:n,length:o}=this._subList(e,t);return st(n,o)}subarray(e,t){let{bufs:n,length:o}=this._subList(e,t);return n.length===1?n[0]:st(n,o)}sublist(e,t){let{bufs:n,length:o}=this._subList(e,t),i=new r;return i.length=o,i.bufs=[...n],i}_subList(e,t){if(e=e??0,t=t??this.length,e<0&&(e=this.length+e),t<0&&(t=this.length+t),e<0||t>this.length)throw new RangeError("index is out of bounds");if(e===t)return{bufs:[],length:0};if(e===0&&t===this.length)return{bufs:this.bufs,length:this.length};let n=[],o=0;for(let i=0;i<this.bufs.length;i++){let s=this.bufs[i],a=o,c=a+s.byteLength;if(o=c,e>=c)continue;let l=e>=a&&e<c,u=t>a&&t<=c;if(l&&u){if(e===a&&t===c){n.push(s);break}let d=e-a;n.push(s.subarray(d,d+(t-e)));break}if(l){if(e===0){n.push(s);continue}n.push(s.subarray(e-a));continue}if(u){if(t===c){n.push(s);break}n.push(s.subarray(0,t-a));break}n.push(s)}return{bufs:n,length:t-e}}indexOf(e,t=0){if(!yl(e)&&!(e instanceof Uint8Array))throw new TypeError('The "value" argument must be a Uint8ArrayList or Uint8Array');let n=e instanceof Uint8Array?e:e.subarray();if(t=Number(t??0),isNaN(t)&&(t=0),t<0&&(t=this.length+t),t<0&&(t=0),e.length===0)return t>this.length?this.length:t;let o=n.byteLength;if(o===0)throw new TypeError("search must be at least 1 byte long");let i=256,s=new Int32Array(i);for(let d=0;d<i;d++)s[d]=-1;for(let d=0;d<o;d++)s[n[d]]=d;let a=s,c=this.byteLength-n.byteLength,l=n.byteLength-1,u;for(let d=t;d<=c;d+=u){u=0;for(let h=l;h>=0;h--){let m=this.get(d+h);if(n[h]!==m){u=Math.max(1,h-a[m]);break}}if(u===0)return d}return-1}getInt8(e){let t=this.subarray(e,e+1);return new DataView(t.buffer,t.byteOffset,t.byteLength).getInt8(0)}setInt8(e,t){let n=Ct(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setInt8(0,t),this.write(n,e)}getInt16(e,t){let n=this.subarray(e,e+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt16(0,t)}setInt16(e,t,n){let o=ke(2);new DataView(o.buffer,o.byteOffset,o.byteLength).setInt16(0,t,n),this.write(o,e)}getInt32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getInt32(0,t)}setInt32(e,t,n){let o=ke(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setInt32(0,t,n),this.write(o,e)}getBigInt64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getBigInt64(0,t)}setBigInt64(e,t,n){let o=ke(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setBigInt64(0,t,n),this.write(o,e)}getUint8(e){let t=this.subarray(e,e+1);return new DataView(t.buffer,t.byteOffset,t.byteLength).getUint8(0)}setUint8(e,t){let n=Ct(1);new DataView(n.buffer,n.byteOffset,n.byteLength).setUint8(0,t),this.write(n,e)}getUint16(e,t){let n=this.subarray(e,e+2);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint16(0,t)}setUint16(e,t,n){let o=ke(2);new DataView(o.buffer,o.byteOffset,o.byteLength).setUint16(0,t,n),this.write(o,e)}getUint32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getUint32(0,t)}setUint32(e,t,n){let o=ke(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setUint32(0,t,n),this.write(o,e)}getBigUint64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getBigUint64(0,t)}setBigUint64(e,t,n){let o=ke(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setBigUint64(0,t,n),this.write(o,e)}getFloat32(e,t){let n=this.subarray(e,e+4);return new DataView(n.buffer,n.byteOffset,n.byteLength).getFloat32(0,t)}setFloat32(e,t,n){let o=ke(4);new DataView(o.buffer,o.byteOffset,o.byteLength).setFloat32(0,t,n),this.write(o,e)}getFloat64(e,t){let n=this.subarray(e,e+8);return new DataView(n.buffer,n.byteOffset,n.byteLength).getFloat64(0,t)}setFloat64(e,t,n){let o=ke(8);new DataView(o.buffer,o.byteOffset,o.byteLength).setFloat64(0,t,n),this.write(o,e)}equals(e){if(e==null||!(e instanceof r)||e.bufs.length!==this.bufs.length)return!1;for(let t=0;t<this.bufs.length;t++)if(!ge(this.bufs[t],e.bufs[t]))return!1;return!0}static fromUint8Arrays(e,t){let n=new r;return n.bufs=e,t==null&&(t=e.reduce((o,i)=>o+i.byteLength,0)),n.length=t,n}};var Vp=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},wl=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},Hp=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"},Ed=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};function qp(r){return r[Symbol.asyncIterator]!=null}function ob(r,e){if(r.byteLength>e)throw new wl("Message length too long")}var Wp=r=>{let e=Ce(r),t=Ct(e);return Fe(r,t),Wp.bytes=e,t};Wp.bytes=0;function po(r,e){e=e??{};let t=e.lengthEncoder??Wp,n=e?.maxDataLength??4194304;function*o(i){ob(i,n);let s=t(i.byteLength);s instanceof Uint8Array?yield s:yield*s,i instanceof Uint8Array?yield i:yield*i}return qp(r)?async function*(){for await(let i of r)yield*o(i)}():function*(){for(let i of r)yield*o(i)}()}po.single=(r,e)=>{e=e??{};let t=e.lengthEncoder??Wp,n=e?.maxDataLength??4194304;return ob(r,n),new J(t(r.byteLength),r)};var ba;(function(r){r[r.LENGTH=0]="LENGTH",r[r.DATA=1]="DATA"})(ba||(ba={}));var By=r=>{let e=nt(r);return By.bytes=Ce(e),e};By.bytes=0;function mo(r,e){let t=new J,n=ba.LENGTH,o=-1,i=e?.lengthDecoder??By,s=e?.maxLengthLength??8,a=e?.maxDataLength??4194304;function*c(){for(;t.byteLength>0;){if(n===ba.LENGTH)try{if(o=i(t),o<0)throw new Vp("Invalid message length");if(o>a)throw new wl("Message length too long");let l=i.bytes;t.consume(l),e?.onLength!=null&&e.onLength(o),n=ba.DATA}catch(l){if(l instanceof RangeError){if(t.byteLength>s)throw new Hp("Message length length too long");break}throw l}if(n===ba.DATA){if(t.byteLength<o)break;let l=t.sublist(0,o);t.consume(o),e?.onData!=null&&e.onData(l),yield l,n=ba.LENGTH}}}return qp(r)?async function*(){for await(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new Ed("Unexpected end of input")}():function*(){for(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new Ed("Unexpected end of input")}()}mo.fromReader=(r,e)=>{let t=1,n=async function*(){for(;;)try{let{done:i,value:s}=await r.next(t);if(i===!0)return;s!=null&&(yield s)}catch(i){if(i.code==="ERR_UNDER_READ")return{done:!0,value:null};throw i}finally{t=1}}();return mo(n,{...e??{},onLength:i=>{t=i}})};function kN(r){let[e,t]=r[Symbol.asyncIterator]!=null?[r[Symbol.asyncIterator](),Symbol.asyncIterator]:[r[Symbol.iterator](),Symbol.iterator],n=[];return{peek:()=>e.next(),push:o=>{n.push(o)},next:()=>n.length>0?{done:!1,value:n.shift()}:e.next(),[t](){return this}}}var bl=kN;function PN(r){return r[Symbol.asyncIterator]!=null}function RN(r,e){let t=0;if(PN(r))return async function*(){for await(let c of r)yield e(c,t++)}();let n=bl(r),{value:o,done:i}=n.next();if(i===!0)return function*(){}();let s=e(o,t++);if(typeof s.then=="function")return async function*(){yield await s;for await(let c of n)yield e(c,t++)}();let a=e;return function*(){yield s;for(let c of n)yield a(c,t++)}()}var Jr=RN;var Uy=class{readNext;haveNext;ended;nextResult;error;constructor(){this.ended=!1,this.readNext=de(),this.haveNext=de()}[Symbol.asyncIterator](){return this}async next(){if(this.nextResult==null&&await this.haveNext.promise,this.nextResult==null)throw new Error("HaveNext promise resolved but nextResult was undefined");let e=this.nextResult;return this.nextResult=void 0,this.readNext.resolve(),this.readNext=de(),e}async throw(e){return this.ended=!0,this.error=e,e!=null&&(this.haveNext.promise.catch(()=>{}),this.haveNext.reject(e)),{done:!0,value:void 0}}async return(){let e={done:!0,value:void 0};return this.ended=!0,this.nextResult=e,this.haveNext.resolve(),e}async push(e,t){await this._push(e,t)}async end(e,t){e!=null?await this.throw(e):await this._push(void 0,t)}async _push(e,t){if(e!=null&&this.ended)throw this.error??new Error("Cannot push value onto an ended pushable");for(;this.nextResult!=null;)await this.readNext.promise;e!=null?this.nextResult={done:!1,value:e}:(this.ended=!0,this.nextResult={done:!0,value:void 0}),this.haveNext.resolve(),this.haveNext=de(),await dt(this.readNext.promise,t?.signal,t)}};function ib(){return new Uy}function NN(r){return r[Symbol.asyncIterator]!=null}async function DN(r,e){try{await Promise.all(r.map(async t=>{for await(let n of t)await e.push(n)})),await e.end()}catch(t){await e.end(t).catch(()=>{})}}async function*ON(r){let e=ib();DN(r,e).catch(()=>{}),yield*e}function*LN(r){for(let e of r)yield*e}function BN(...r){let e=[];for(let t of r)NN(t)||e.push(t);return e.length===r.length?LN(e):ON(r)}var Kr=BN;function rr(r,...e){if(r==null)throw new Error("Empty pipeline");if(Fy(r)){let n=r;r=()=>n.source}else if(ab(r)||sb(r)){let n=r;r=()=>n}let t=[r,...e];if(t.length>1&&Fy(t[t.length-1])&&(t[t.length-1]=t[t.length-1].sink),t.length>2)for(let n=1;n<t.length-1;n++)Fy(t[n])&&(t[n]=UN(t[n]));return MN(...t)}var MN=(...r)=>{let e;for(;r.length>0;)e=r.shift()(e);return e},sb=r=>r?.[Symbol.asyncIterator]!=null,ab=r=>r?.[Symbol.iterator]!=null,Fy=r=>r==null?!1:r.sink!=null&&r.source!=null,UN=r=>e=>{let t=r.sink(e);if(t?.then!=null){let n=Zr({objectMode:!0});t.then(()=>{n.end()},s=>{n.end(s)});let o,i=r.source;if(sb(i))o=async function*(){yield*i,n.end()};else if(ab(i))o=function*(){yield*i,n.end()};else throw new Error("Unknown duplex source type - must be Iterable or AsyncIterable");return Kr(n,o())}return r.source};function FN(r){return r[Symbol.asyncIterator]!=null}function $N(r,e){return FN(r)?async function*(){let t=0;if(!(e<1)){for await(let n of r)if(yield n,t++,t===e)return}}():function*(){let t=0;if(!(e<1)){for(let n of r)if(yield n,t++,t===e)return}}()}var as=$N;var ae=class extends Event{type;detail;constructor(e,t){super(e),this.type=e,this.detail=t}};var Sd="/ipfs/bitswap/1.2.0";var $y=new Float32Array([-0]),cs=new Uint8Array($y.buffer);function cb(r,e,t){$y[0]=r,e[t]=cs[0],e[t+1]=cs[1],e[t+2]=cs[2],e[t+3]=cs[3]}function lb(r,e){return cs[0]=r[e],cs[1]=r[e+1],cs[2]=r[e+2],cs[3]=r[e+3],$y[0]}var Ky=new Float64Array([-0]),Rr=new Uint8Array(Ky.buffer);function ub(r,e,t){Ky[0]=r,e[t]=Rr[0],e[t+1]=Rr[1],e[t+2]=Rr[2],e[t+3]=Rr[3],e[t+4]=Rr[4],e[t+5]=Rr[5],e[t+6]=Rr[6],e[t+7]=Rr[7]}function db(r,e){return Rr[0]=r[e],Rr[1]=r[e+1],Rr[2]=r[e+2],Rr[3]=r[e+3],Rr[4]=r[e+4],Rr[5]=r[e+5],Rr[6]=r[e+6],Rr[7]=r[e+7],Ky[0]}var KN=BigInt(Number.MAX_SAFE_INTEGER),VN=BigInt(Number.MIN_SAFE_INTEGER),An=class r{lo;hi;constructor(e,t){this.lo=e|0,this.hi=t|0}toNumber(e=!1){if(!e&&this.hi>>>31>0){let t=~this.lo+1>>>0,n=~this.hi>>>0;return t===0&&(n=n+1>>>0),-(t+n*4294967296)}return this.lo+this.hi*4294967296}toBigInt(e=!1){if(e)return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n);if(this.hi>>>31){let t=~this.lo+1>>>0,n=~this.hi>>>0;return t===0&&(n=n+1>>>0),-(BigInt(t)+(BigInt(n)<<32n))}return BigInt(this.lo>>>0)+(BigInt(this.hi>>>0)<<32n)}toString(e=!1){return this.toBigInt(e).toString()}zzEncode(){let e=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^e)>>>0,this.lo=(this.lo<<1^e)>>>0,this}zzDecode(){let e=-(this.lo&1);return this.lo=((this.lo>>>1|this.hi<<31)^e)>>>0,this.hi=(this.hi>>>1^e)>>>0,this}length(){let e=this.lo,t=(this.lo>>>28|this.hi<<4)>>>0,n=this.hi>>>24;return n===0?t===0?e<16384?e<128?1:2:e<2097152?3:4:t<16384?t<128?5:6:t<2097152?7:8:n<128?9:10}static fromBigInt(e){if(e===0n)return xa;if(e<KN&&e>VN)return this.fromNumber(Number(e));let t=e<0n;t&&(e=-e);let n=e>>32n,o=e-(n<<32n);return t&&(n=~n|0n,o=~o|0n,++o>fb&&(o=0n,++n>fb&&(n=0n))),new r(Number(o),Number(n))}static fromNumber(e){if(e===0)return xa;let t=e<0;t&&(e=-e);let n=e>>>0,o=(e-n)/4294967296>>>0;return t&&(o=~o>>>0,n=~n>>>0,++n>4294967295&&(n=0,++o>4294967295&&(o=0))),new r(n,o)}static from(e){return typeof e=="number"?r.fromNumber(e):typeof e=="bigint"?r.fromBigInt(e):typeof e=="string"?r.fromBigInt(BigInt(e)):e.low!=null||e.high!=null?new r(e.low>>>0,e.high>>>0):xa}},xa=new An(0,0);xa.toBigInt=function(){return 0n};xa.zzEncode=xa.zzDecode=function(){return this};xa.length=function(){return 1};var fb=4294967296n;function hb(r){let e=0,t=0;for(let n=0;n<r.length;++n)t=r.charCodeAt(n),t<128?e+=1:t<2048?e+=2:(t&64512)===55296&&(r.charCodeAt(n+1)&64512)===56320?(++n,e+=4):e+=3;return e}function pb(r,e,t){if(t-e<1)return"";let o,i=[],s=0,a;for(;e<t;)a=r[e++],a<128?i[s++]=a:a>191&&a<224?i[s++]=(a&31)<<6|r[e++]&63:a>239&&a<365?(a=((a&7)<<18|(r[e++]&63)<<12|(r[e++]&63)<<6|r[e++]&63)-65536,i[s++]=55296+(a>>10),i[s++]=56320+(a&1023)):i[s++]=(a&15)<<12|(r[e++]&63)<<6|r[e++]&63,s>8191&&((o??(o=[])).push(String.fromCharCode.apply(String,i)),s=0);return o!=null?(s>0&&o.push(String.fromCharCode.apply(String,i.slice(0,s))),o.join("")):String.fromCharCode.apply(String,i.slice(0,s))}function Vy(r,e,t){let n=t,o,i;for(let s=0;s<r.length;++s)o=r.charCodeAt(s),o<128?e[t++]=o:o<2048?(e[t++]=o>>6|192,e[t++]=o&63|128):(o&64512)===55296&&((i=r.charCodeAt(s+1))&64512)===56320?(o=65536+((o&1023)<<10)+(i&1023),++s,e[t++]=o>>18|240,e[t++]=o>>12&63|128,e[t++]=o>>6&63|128,e[t++]=o&63|128):(e[t++]=o>>12|224,e[t++]=o>>6&63|128,e[t++]=o&63|128);return t-n}function go(r,e){return RangeError(`index out of range: ${r.pos} + ${e??1} > ${r.len}`)}function Gp(r,e){return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0}var Hy=class{buf;pos;len;_slice=Uint8Array.prototype.subarray;constructor(e){this.buf=e,this.pos=0,this.len=e.length}uint32(){let e=4294967295;if(e=(this.buf[this.pos]&127)>>>0,this.buf[this.pos++]<128||(e=(e|(this.buf[this.pos]&127)<<7)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&127)<<14)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&127)<<21)>>>0,this.buf[this.pos++]<128)||(e=(e|(this.buf[this.pos]&15)<<28)>>>0,this.buf[this.pos++]<128))return e;if((this.pos+=5)>this.len)throw this.pos=this.len,go(this,10);return e}int32(){return this.uint32()|0}sint32(){let e=this.uint32();return e>>>1^-(e&1)|0}bool(){return this.uint32()!==0}fixed32(){if(this.pos+4>this.len)throw go(this,4);return Gp(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw go(this,4);return Gp(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw go(this,4);let e=lb(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw go(this,4);let e=db(this.buf,this.pos);return this.pos+=8,e}bytes(){let e=this.uint32(),t=this.pos,n=this.pos+e;if(n>this.len)throw go(this,e);return this.pos+=e,t===n?new Uint8Array(0):this.buf.subarray(t,n)}string(){let e=this.bytes();return pb(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw go(this,e);this.pos+=e}else do if(this.pos>=this.len)throw go(this);while((this.buf[this.pos++]&128)!==0);return this}skipType(e){switch(e){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;(e=this.uint32()&7)!==4;)this.skipType(e);break;case 5:this.skip(4);break;default:throw Error(`invalid wire type ${e} at offset ${this.pos}`)}return this}readLongVarint(){let e=new An(0,0),t=0;if(this.len-this.pos>4){for(;t<4;++t)if(e.lo=(e.lo|(this.buf[this.pos]&127)<<t*7)>>>0,this.buf[this.pos++]<128)return e;if(e.lo=(e.lo|(this.buf[this.pos]&127)<<28)>>>0,e.hi=(e.hi|(this.buf[this.pos]&127)>>4)>>>0,this.buf[this.pos++]<128)return e;t=0}else{for(;t<3;++t){if(this.pos>=this.len)throw go(this);if(e.lo=(e.lo|(this.buf[this.pos]&127)<<t*7)>>>0,this.buf[this.pos++]<128)return e}return e.lo=(e.lo|(this.buf[this.pos++]&127)<<t*7)>>>0,e}if(this.len-this.pos>4){for(;t<5;++t)if(e.hi=(e.hi|(this.buf[this.pos]&127)<<t*7+3)>>>0,this.buf[this.pos++]<128)return e}else for(;t<5;++t){if(this.pos>=this.len)throw go(this);if(e.hi=(e.hi|(this.buf[this.pos]&127)<<t*7+3)>>>0,this.buf[this.pos++]<128)return e}throw Error("invalid varint encoding")}readFixed64(){if(this.pos+8>this.len)throw go(this,8);let e=Gp(this.buf,this.pos+=4),t=Gp(this.buf,this.pos+=4);return new An(e,t)}int64(){return this.readLongVarint().toBigInt()}int64Number(){return this.readLongVarint().toNumber()}int64String(){return this.readLongVarint().toString()}uint64(){return this.readLongVarint().toBigInt(!0)}uint64Number(){let e=Ly(this.buf,this.pos);return this.pos+=Ce(e),e}uint64String(){return this.readLongVarint().toString(!0)}sint64(){return this.readLongVarint().zzDecode().toBigInt()}sint64Number(){return this.readLongVarint().zzDecode().toNumber()}sint64String(){return this.readLongVarint().zzDecode().toString()}fixed64(){return this.readFixed64().toBigInt()}fixed64Number(){return this.readFixed64().toNumber()}fixed64String(){return this.readFixed64().toString()}sfixed64(){return this.readFixed64().toBigInt()}sfixed64Number(){return this.readFixed64().toNumber()}sfixed64String(){return this.readFixed64().toString()}};function qy(r){return new Hy(r instanceof Uint8Array?r:r.subarray())}function Se(r,e,t){let n=qy(r);return e.decode(n,void 0,t)}var Yy={};Pt(Yy,{base10:()=>zN});var gW=new Uint8Array(0);function gb(r,e){if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0}function yo(r){if(r instanceof Uint8Array&&r.constructor.name==="Uint8Array")return r;if(r instanceof ArrayBuffer)return new Uint8Array(r);if(ArrayBuffer.isView(r))return new Uint8Array(r.buffer,r.byteOffset,r.byteLength);throw new Error("Unknown type, must be binary type")}function yb(r){return new TextEncoder().encode(r)}function wb(r){return new TextDecoder().decode(r)}function HN(r,e){if(r.length>=255)throw new TypeError("Alphabet too long");for(var t=new Uint8Array(256),n=0;n<t.length;n++)t[n]=255;for(var o=0;o<r.length;o++){var i=r.charAt(o),s=i.charCodeAt(0);if(t[s]!==255)throw new TypeError(i+" is ambiguous");t[s]=o}var a=r.length,c=r.charAt(0),l=Math.log(a)/Math.log(256),u=Math.log(256)/Math.log(a);function d(g){if(g instanceof Uint8Array||(ArrayBuffer.isView(g)?g=new Uint8Array(g.buffer,g.byteOffset,g.byteLength):Array.isArray(g)&&(g=Uint8Array.from(g))),!(g instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(g.length===0)return"";for(var w=0,y=0,x=0,S=g.length;x!==S&&g[x]===0;)x++,w++;for(var v=(S-x)*u+1>>>0,N=new Uint8Array(v);x!==S;){for(var W=g[x],H=0,$=v-1;(W!==0||H<y)&&$!==-1;$--,H++)W+=256*N[$]>>>0,N[$]=W%a>>>0,W=W/a>>>0;if(W!==0)throw new Error("Non-zero carry");y=H,x++}for(var P=v-y;P!==v&&N[P]===0;)P++;for(var R=c.repeat(w);P<v;++P)R+=r.charAt(N[P]);return R}function h(g){if(typeof g!="string")throw new TypeError("Expected String");if(g.length===0)return new Uint8Array;var w=0;if(g[w]!==" "){for(var y=0,x=0;g[w]===c;)y++,w++;for(var S=(g.length-w)*l+1>>>0,v=new Uint8Array(S);g[w];){var N=t[g.charCodeAt(w)];if(N===255)return;for(var W=0,H=S-1;(N!==0||W<x)&&H!==-1;H--,W++)N+=a*v[H]>>>0,v[H]=N%256>>>0,N=N/256>>>0;if(N!==0)throw new Error("Non-zero carry");x=W,w++}if(g[w]!==" "){for(var $=S-x;$!==S&&v[$]===0;)$++;for(var P=new Uint8Array(y+(S-$)),R=y;$!==S;)P[R++]=v[$++];return P}}}function m(g){var w=h(g);if(w)return w;throw new Error(`Non-${e} character`)}return{encode:d,decodeUnsafe:h,decode:m}}var qN=HN,jN=qN,bb=jN;var Wy=class{name;prefix;baseEncode;constructor(e,t,n){this.name=e,this.prefix=t,this.baseEncode=n}encode(e){if(e instanceof Uint8Array)return`${this.prefix}${this.baseEncode(e)}`;throw Error("Unknown type, must be binary type")}},Gy=class{name;prefix;baseDecode;prefixCodePoint;constructor(e,t,n){this.name=e,this.prefix=t;let o=t.codePointAt(0);if(o===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=o,this.baseDecode=n}decode(e){if(typeof e=="string"){if(e.codePointAt(0)!==this.prefixCodePoint)throw Error(`Unable to decode multibase string ${JSON.stringify(e)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);return this.baseDecode(e.slice(this.prefix.length))}else throw Error("Can only multibase decode strings")}or(e){return xb(this,e)}},zy=class{decoders;constructor(e){this.decoders=e}or(e){return xb(this,e)}decode(e){let t=e[0],n=this.decoders[t];if(n!=null)return n.decode(e);throw RangeError(`Unable to decode multibase string ${JSON.stringify(e)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}};function xb(r,e){return new zy({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var Xy=class{name;prefix;baseEncode;baseDecode;encoder;decoder;constructor(e,t,n,o){this.name=e,this.prefix=t,this.baseEncode=n,this.baseDecode=o,this.encoder=new Wy(e,t,n),this.decoder=new Gy(e,t,o)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function xl({name:r,prefix:e,encode:t,decode:n}){return new Xy(r,e,t,n)}function ls({name:r,prefix:e,alphabet:t}){let{encode:n,decode:o}=bb(t,r);return xl({prefix:e,name:r,encode:n,decode:i=>yo(o(i))})}function WN(r,e,t,n){let o={};for(let u=0;u<e.length;++u)o[e[u]]=u;let i=r.length;for(;r[i-1]==="=";)--i;let s=new Uint8Array(i*t/8|0),a=0,c=0,l=0;for(let u=0;u<i;++u){let d=o[r[u]];if(d===void 0)throw new SyntaxError(`Non-${n} character`);c=c<<t|d,a+=t,a>=8&&(a-=8,s[l++]=255&c>>a)}if(a>=t||(255&c<<8-a)!==0)throw new SyntaxError("Unexpected end of data");return s}function GN(r,e,t){let n=e[e.length-1]==="=",o=(1<<t)-1,i="",s=0,a=0;for(let c=0;c<r.length;++c)for(a=a<<8|r[c],s+=8;s>t;)s-=t,i+=e[o&a>>s];if(s!==0&&(i+=e[o&a<<t-s]),n)for(;(i.length*t&7)!==0;)i+="=";return i}function Nt({name:r,prefix:e,bitsPerChar:t,alphabet:n}){return xl({prefix:e,name:r,encode(o){return GN(o,n,t)},decode(o){return WN(o,n,t,r)}})}var zN=ls({prefix:"9",name:"base10",alphabet:"0123456789"});var Qy={};Pt(Qy,{base16:()=>XN,base16upper:()=>YN});var XN=Nt({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),YN=Nt({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var Zy={};Pt(Zy,{base2:()=>QN});var QN=Nt({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var Jy={};Pt(Jy,{base256emoji:()=>rD});var vb=Array.from("\u{1F680}\u{1FA90}\u2604\u{1F6F0}\u{1F30C}\u{1F311}\u{1F312}\u{1F313}\u{1F314}\u{1F315}\u{1F316}\u{1F317}\u{1F318}\u{1F30D}\u{1F30F}\u{1F30E}\u{1F409}\u2600\u{1F4BB}\u{1F5A5}\u{1F4BE}\u{1F4BF}\u{1F602}\u2764\u{1F60D}\u{1F923}\u{1F60A}\u{1F64F}\u{1F495}\u{1F62D}\u{1F618}\u{1F44D}\u{1F605}\u{1F44F}\u{1F601}\u{1F525}\u{1F970}\u{1F494}\u{1F496}\u{1F499}\u{1F622}\u{1F914}\u{1F606}\u{1F644}\u{1F4AA}\u{1F609}\u263A\u{1F44C}\u{1F917}\u{1F49C}\u{1F614}\u{1F60E}\u{1F607}\u{1F339}\u{1F926}\u{1F389}\u{1F49E}\u270C\u2728\u{1F937}\u{1F631}\u{1F60C}\u{1F338}\u{1F64C}\u{1F60B}\u{1F497}\u{1F49A}\u{1F60F}\u{1F49B}\u{1F642}\u{1F493}\u{1F929}\u{1F604}\u{1F600}\u{1F5A4}\u{1F603}\u{1F4AF}\u{1F648}\u{1F447}\u{1F3B6}\u{1F612}\u{1F92D}\u2763\u{1F61C}\u{1F48B}\u{1F440}\u{1F62A}\u{1F611}\u{1F4A5}\u{1F64B}\u{1F61E}\u{1F629}\u{1F621}\u{1F92A}\u{1F44A}\u{1F973}\u{1F625}\u{1F924}\u{1F449}\u{1F483}\u{1F633}\u270B\u{1F61A}\u{1F61D}\u{1F634}\u{1F31F}\u{1F62C}\u{1F643}\u{1F340}\u{1F337}\u{1F63B}\u{1F613}\u2B50\u2705\u{1F97A}\u{1F308}\u{1F608}\u{1F918}\u{1F4A6}\u2714\u{1F623}\u{1F3C3}\u{1F490}\u2639\u{1F38A}\u{1F498}\u{1F620}\u261D\u{1F615}\u{1F33A}\u{1F382}\u{1F33B}\u{1F610}\u{1F595}\u{1F49D}\u{1F64A}\u{1F639}\u{1F5E3}\u{1F4AB}\u{1F480}\u{1F451}\u{1F3B5}\u{1F91E}\u{1F61B}\u{1F534}\u{1F624}\u{1F33C}\u{1F62B}\u26BD\u{1F919}\u2615\u{1F3C6}\u{1F92B}\u{1F448}\u{1F62E}\u{1F646}\u{1F37B}\u{1F343}\u{1F436}\u{1F481}\u{1F632}\u{1F33F}\u{1F9E1}\u{1F381}\u26A1\u{1F31E}\u{1F388}\u274C\u270A\u{1F44B}\u{1F630}\u{1F928}\u{1F636}\u{1F91D}\u{1F6B6}\u{1F4B0}\u{1F353}\u{1F4A2}\u{1F91F}\u{1F641}\u{1F6A8}\u{1F4A8}\u{1F92C}\u2708\u{1F380}\u{1F37A}\u{1F913}\u{1F619}\u{1F49F}\u{1F331}\u{1F616}\u{1F476}\u{1F974}\u25B6\u27A1\u2753\u{1F48E}\u{1F4B8}\u2B07\u{1F628}\u{1F31A}\u{1F98B}\u{1F637}\u{1F57A}\u26A0\u{1F645}\u{1F61F}\u{1F635}\u{1F44E}\u{1F932}\u{1F920}\u{1F927}\u{1F4CC}\u{1F535}\u{1F485}\u{1F9D0}\u{1F43E}\u{1F352}\u{1F617}\u{1F911}\u{1F30A}\u{1F92F}\u{1F437}\u260E\u{1F4A7}\u{1F62F}\u{1F486}\u{1F446}\u{1F3A4}\u{1F647}\u{1F351}\u2744\u{1F334}\u{1F4A3}\u{1F438}\u{1F48C}\u{1F4CD}\u{1F940}\u{1F922}\u{1F445}\u{1F4A1}\u{1F4A9}\u{1F450}\u{1F4F8}\u{1F47B}\u{1F910}\u{1F92E}\u{1F3BC}\u{1F975}\u{1F6A9}\u{1F34E}\u{1F34A}\u{1F47C}\u{1F48D}\u{1F4E3}\u{1F942}"),ZN=vb.reduce((r,e,t)=>(r[t]=e,r),[]),JN=vb.reduce((r,e,t)=>{let n=e.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${e}`);return r[n]=t,r},[]);function eD(r){return r.reduce((e,t)=>(e+=ZN[t],e),"")}function tD(r){let e=[];for(let t of r){let n=t.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${t}`);let o=JN[n];if(o==null)throw new Error(`Non-base256emoji character: ${t}`);e.push(o)}return new Uint8Array(e)}var rD=xl({prefix:"\u{1F680}",name:"base256emoji",encode:eD,decode:tD});var e4={};Pt(e4,{base32:()=>Xt,base32hex:()=>sD,base32hexpad:()=>cD,base32hexpadupper:()=>lD,base32hexupper:()=>aD,base32pad:()=>oD,base32padupper:()=>iD,base32upper:()=>nD,base32z:()=>uD});var Xt=Nt({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),nD=Nt({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),oD=Nt({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),iD=Nt({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),sD=Nt({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),aD=Nt({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),cD=Nt({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),lD=Nt({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),uD=Nt({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var t4={};Pt(t4,{base36:()=>Xo,base36upper:()=>dD});var Xo=ls({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),dD=ls({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var r4={};Pt(r4,{base58btc:()=>He,base58flickr:()=>fD});var He=ls({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),fD=ls({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var n4={};Pt(n4,{base64:()=>Ht,base64pad:()=>hD,base64url:()=>va,base64urlpad:()=>pD});var Ht=Nt({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),hD=Nt({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),va=Nt({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),pD=Nt({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var o4={};Pt(o4,{base8:()=>mD});var mD=Nt({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var i4={};Pt(i4,{identity:()=>gD});var gD=xl({prefix:"\0",name:"identity",encode:r=>wb(r),decode:r=>yb(r)});var zp={};Pt(zp,{code:()=>s4,decode:()=>vD,encode:()=>xD,name:()=>bD});var yD=new TextEncoder,wD=new TextDecoder,bD="json",s4=512;function xD(r){return yD.encode(JSON.stringify(r))}function vD(r){return JSON.parse(wD.decode(r))}var vl={};Pt(vl,{code:()=>Ea,decode:()=>AD,encode:()=>SD,name:()=>ED});var ED="raw",Ea=85;function SD(r){return yo(r)}function AD(r){return yo(r)}var l4={};Pt(l4,{identity:()=>Dr});var vt={};Pt(vt,{Digest:()=>Sa,create:()=>Nr,decode:()=>Ye,equals:()=>c4,hasCode:()=>HD});var _D=Ab,Eb=128,ID=127,TD=~ID,CD=Math.pow(2,31);function Ab(r,e,t){e=e||[],t=t||0;for(var n=t;r>=CD;)e[t++]=r&255|Eb,r/=128;for(;r&TD;)e[t++]=r&255|Eb,r>>>=7;return e[t]=r|0,Ab.bytes=t-n+1,e}var kD=a4,PD=128,Sb=127;function a4(r,n){var t=0,n=n||0,o=0,i=n,s,a=r.length;do{if(i>=a)throw a4.bytes=0,new RangeError("Could not decode varint");s=r[i++],t+=o<28?(s&Sb)<<o:(s&Sb)*Math.pow(2,o),o+=7}while(s>=PD);return a4.bytes=i-n,t}var RD=Math.pow(2,7),ND=Math.pow(2,14),DD=Math.pow(2,21),OD=Math.pow(2,28),LD=Math.pow(2,35),BD=Math.pow(2,42),MD=Math.pow(2,49),UD=Math.pow(2,56),FD=Math.pow(2,63),$D=function(r){return r<RD?1:r<ND?2:r<DD?3:r<OD?4:r<LD?5:r<BD?6:r<MD?7:r<UD?8:r<FD?9:10},KD={encode:_D,decode:kD,encodingLength:$D},VD=KD,Ad=VD;function _d(r,e=0){return[Ad.decode(r,e),Ad.decode.bytes]}function El(r,e,t=0){return Ad.encode(r,e,t),e}function Sl(r){return Ad.encodingLength(r)}function Nr(r,e){let t=e.byteLength,n=Sl(r),o=n+Sl(t),i=new Uint8Array(o+t);return El(r,i,0),El(t,i,n),i.set(e,o),new Sa(r,t,e,i)}function Ye(r){let e=yo(r),[t,n]=_d(e),[o,i]=_d(e.subarray(n)),s=e.subarray(n+i);if(s.byteLength!==o)throw new Error("Incorrect length");return new Sa(t,o,s,e)}function c4(r,e){if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&gb(r.bytes,t.bytes)}}var Sa=class{code;size;digest;bytes;constructor(e,t,n,o){this.code=e,this.size=t,this.digest=n,this.bytes=o}};function HD(r,e){return r.code===e}var _b=0,qD="identity",Ib=yo;function jD(r){return Nr(_b,Ib(r))}var Dr={code:_b,name:qD,encode:Ib,digest:jD};var f4={};Pt(f4,{sha256:()=>yt,sha512:()=>Yp});function d4({name:r,code:e,encode:t}){return new u4(r,e,t)}var u4=class{name;code;encode;constructor(e,t,n){this.name=e,this.code=t,this.encode=n}digest(e){if(e instanceof Uint8Array){let t=this.encode(e);return t instanceof Uint8Array?Nr(this.code,t):t.then(n=>Nr(this.code,n))}else throw Error("Unknown type, must be binary type")}};function Cb(r){return async e=>new Uint8Array(await crypto.subtle.digest(r,e))}var yt=d4({name:"sha2-256",code:18,encode:Cb("SHA-256")}),Yp=d4({name:"sha2-512",code:19,encode:Cb("SHA-512")});function kb(r,e){let{bytes:t,version:n}=r;switch(n){case 0:return GD(t,h4(r),e??He.encoder);default:return zD(t,h4(r),e??Xt.encoder)}}var Pb=new WeakMap;function h4(r){let e=Pb.get(r);if(e==null){let t=new Map;return Pb.set(r,t),t}return e}var le=class r{code;version;multihash;bytes;"/";constructor(e,t,n,o){this.code=t,this.version=e,this.multihash=n,this.bytes=o,this["/"]=o}get asCID(){return this}get byteOffset(){return this.bytes.byteOffset}get byteLength(){return this.bytes.byteLength}toV0(){switch(this.version){case 0:return this;case 1:{let{code:e,multihash:t}=this;if(e!==Id)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==XD)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");return r.createV0(t)}default:throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`)}}toV1(){switch(this.version){case 0:{let{code:e,digest:t}=this.multihash,n=Nr(e,t);return r.createV1(this.code,n)}case 1:return this;default:throw Error(`Can not convert CID version ${this.version} to version 1. This is a bug please report`)}}equals(e){return r.equals(this,e)}static equals(e,t){let n=t;return n!=null&&e.code===n.code&&e.version===n.version&&c4(e.multihash,n.multihash)}toString(e){return kb(this,e)}toJSON(){return{"/":kb(this)}}link(){return this}[Symbol.toStringTag]="CID";[Symbol.for("nodejs.util.inspect.custom")](){return`CID(${this.toString()})`}static asCID(e){if(e==null)return null;let t=e;if(t instanceof r)return t;if(t["/"]!=null&&t["/"]===t.bytes||t.asCID===t){let{version:n,code:o,multihash:i,bytes:s}=t;return new r(n,o,i,s??Rb(n,o,i.bytes))}else if(t[YD]===!0){let{version:n,multihash:o,code:i}=t,s=Ye(o);return r.create(n,i,s)}else return null}static create(e,t,n){if(typeof t!="number")throw new Error("String codecs are no longer supported");if(!(n.bytes instanceof Uint8Array))throw new Error("Invalid digest");switch(e){case 0:{if(t!==Id)throw new Error(`Version 0 CID must use dag-pb (code: ${Id}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let o=Rb(e,t,n.bytes);return new r(e,t,n,o)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,Id,e)}static createV1(e,t){return r.create(1,e,t)}static decode(e){let[t,n]=r.decodeFirst(e);if(n.length!==0)throw new Error("Incorrect length");return t}static decodeFirst(e){let t=r.inspectBytes(e),n=t.size-t.multihashSize,o=yo(e.subarray(n,n+t.multihashSize));if(o.byteLength!==t.multihashSize)throw new Error("Incorrect length");let i=o.subarray(t.multihashSize-t.digestSize),s=new Sa(t.multihashCode,t.digestSize,i,o);return[t.version===0?r.createV0(s):r.createV1(t.codec,s),e.subarray(t.size)]}static inspectBytes(e){let t=0,n=()=>{let[d,h]=_d(e.subarray(t));return t+=h,d},o=n(),i=Id;if(o===18?(o=0,t=0):i=n(),o!==0&&o!==1)throw new RangeError(`Invalid CID version ${o}`);let s=t,a=n(),c=n(),l=t+c,u=l-s;return{version:o,codec:i,multihashCode:a,digestSize:c,multihashSize:u,size:l}}static parse(e,t){let[n,o]=WD(e,t),i=r.decode(o);if(i.version===0&&e[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return h4(i).set(n,e),i}};function WD(r,e){switch(r[0]){case"Q":{let t=e??He;return[He.prefix,t.decode(`${He.prefix}${r}`)]}case He.prefix:{let t=e??He;return[He.prefix,t.decode(r)]}case Xt.prefix:{let t=e??Xt;return[Xt.prefix,t.decode(r)]}case Xo.prefix:{let t=e??Xo;return[Xo.prefix,t.decode(r)]}default:{if(e==null)throw Error("To parse non base32, base36 or base58btc encoded CID multibase decoder must be provided");return[r[0],e.decode(r)]}}}function GD(r,e,t){let{prefix:n}=t;if(n!==He.prefix)throw Error(`Cannot string encode V0 in ${t.name} encoding`);let o=e.get(n);if(o==null){let i=t.encode(r).slice(1);return e.set(n,i),i}else return o}function zD(r,e,t){let{prefix:n}=t,o=e.get(n);if(o==null){let i=t.encode(r);return e.set(n,i),i}else return o}var Id=112,XD=18;function Rb(r,e,t){let n=Sl(r),o=n+Sl(e),i=new Uint8Array(o+t.byteLength);return El(r,i,0),El(e,i,n),i.set(t,o),i}var YD=Symbol.for("@ipld/js-cid/CID");var Aa={...i4,...Zy,...o4,...Yy,...Qy,...e4,...t4,...r4,...n4,...Jy},JW={...f4,...l4};function Db(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var Nb=Db("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),p4=Db("ascii","a",r=>{let e="a";for(let t=0;t<r.length;t++)e+=String.fromCharCode(r[t]);return e},r=>{r=r.substring(1);let e=Ct(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),QD={utf8:Nb,"utf-8":Nb,hex:Aa.base16,latin1:p4,ascii:p4,binary:p4,...Aa},Qp=QD;function V(r,e="utf8"){let t=Qp[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.decoder.decode(`${t.prefix}${r}`)}function m4(r){let e=r??8192,t=e>>>1,n,o=e;return function(s){if(s<1||s>t)return Ct(s);o+s>e&&(n=Ct(e),o=0);let a=n.subarray(o,o+=s);return(o&7)!==0&&(o=(o|7)+1),a}}var _a=class{fn;len;next;val;constructor(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}};function g4(){}var w4=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},ZD=m4();function JD(r){return globalThis.Buffer!=null?Ct(r):ZD(r)}var Cd=class{len;head;tail;states;constructor(){this.len=0,this.head=new _a(g4,0,0),this.tail=this.head,this.states=null}_push(e,t,n){return this.tail=this.tail.next=new _a(e,t,n),this.len+=t,this}uint32(e){return this.len+=(this.tail=this.tail.next=new b4((e=e>>>0)<128?1:e<16384?2:e<2097152?3:e<268435456?4:5,e)).len,this}int32(e){return e<0?this._push(Zp,10,An.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){let t=An.fromBigInt(e);return this._push(Zp,t.length(),t)}uint64Number(e){return this._push(Oy,Ce(e),e)}uint64String(e){return this.uint64(BigInt(e))}int64(e){return this.uint64(e)}int64Number(e){return this.uint64Number(e)}int64String(e){return this.uint64String(e)}sint64(e){let t=An.fromBigInt(e).zzEncode();return this._push(Zp,t.length(),t)}sint64Number(e){let t=An.fromNumber(e).zzEncode();return this._push(Zp,t.length(),t)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push(y4,1,e?1:0)}fixed32(e){return this._push(Td,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=An.fromBigInt(e);return this._push(Td,4,t.lo)._push(Td,4,t.hi)}fixed64Number(e){let t=An.fromNumber(e);return this._push(Td,4,t.lo)._push(Td,4,t.hi)}fixed64String(e){return this.fixed64(BigInt(e))}sfixed64(e){return this.fixed64(e)}sfixed64Number(e){return this.fixed64Number(e)}sfixed64String(e){return this.fixed64String(e)}float(e){return this._push(cb,4,e)}double(e){return this._push(ub,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push(y4,1,0):this.uint32(t)._push(tO,t,e)}string(e){let t=hb(e);return t!==0?this.uint32(t)._push(Vy,t,e):this._push(y4,1,0)}fork(){return this.states=new w4(this),this.head=this.tail=new _a(g4,0,0),this.len=0,this}reset(){return this.states!=null?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new _a(g4,0,0),this.len=0),this}ldelim(){let e=this.head,t=this.tail,n=this.len;return this.reset().uint32(n),n!==0&&(this.tail.next=e.next,this.tail=t,this.len+=n),this}finish(){let e=this.head.next,t=JD(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function y4(r,e,t){e[t]=r&255}function eO(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var b4=class extends _a{next;constructor(e,t){super(eO,e,t),this.next=void 0}};function Zp(r,e,t){for(;r.hi!==0;)e[t++]=r.lo&127|128,r.lo=(r.lo>>>7|r.hi<<25)>>>0,r.hi>>>=7;for(;r.lo>127;)e[t++]=r.lo&127|128,r.lo=r.lo>>>7;e[t++]=r.lo}function Td(r,e,t){e[t]=r&255,e[t+1]=r>>>8&255,e[t+2]=r>>>16&255,e[t+3]=r>>>24}function tO(r,e,t){e.set(r,t)}globalThis.Buffer!=null&&(Cd.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(rO,e,r),this},Cd.prototype.string=function(r){let e=globalThis.Buffer.byteLength(r);return this.uint32(e),e>0&&this._push(nO,e,r),this});function rO(r,e,t){e.set(r,t)}function nO(r,e,t){r.length<40?Vy(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(V(r),t)}function x4(){return new Cd}function Ae(r,e){let t=x4();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}var Al;(function(r){r[r.VARINT=0]="VARINT",r[r.BIT64=1]="BIT64",r[r.LENGTH_DELIMITED=2]="LENGTH_DELIMITED",r[r.START_GROUP=3]="START_GROUP",r[r.END_GROUP=4]="END_GROUP",r[r.BIT32=5]="BIT32"})(Al||(Al={}));function Jp(r,e,t,n){return{name:r,type:e,encode:t,decode:n}}function Et(r){function e(o){if(r[o.toString()]==null)throw new Error("Invalid enum value");return r[o]}let t=function(i,s){let a=e(i);s.int32(a)},n=function(i){let s=i.int32();return e(s)};return Jp("enum",Al.VARINT,t,n)}function _e(r,e){return Jp("message",Al.LENGTH_DELIMITED,r,e)}var at=class extends Error{code="ERR_MAX_LENGTH";name="MaxLengthError"},kd=class extends Error{code="ERR_MAX_SIZE";name="MaxSizeError"};var Ft;(function(r){r.WantBlock="WantBlock",r.WantHave="WantHave"})(Ft||(Ft={}));var v4;(function(r){r[r.WantBlock=0]="WantBlock",r[r.WantHave=1]="WantHave"})(v4||(v4={}));(function(r){r.codec=()=>Et(v4)})(Ft||(Ft={}));var _l;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.cid!=null&&t.cid.byteLength>0&&(n.uint32(10),n.bytes(t.cid)),t.priority!=null&&t.priority!==0&&(n.uint32(16),n.int32(t.priority)),t.cancel!=null&&(n.uint32(24),n.bool(t.cancel)),t.wantType!=null&&(n.uint32(32),Ft.codec().encode(t.wantType,n)),t.sendDontHave!=null&&(n.uint32(40),n.bool(t.sendDontHave)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={cid:ke(0),priority:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.cid=t.bytes();break}case 2:{i.priority=t.int32();break}case 3:{i.cancel=t.bool();break}case 4:{i.wantType=Ft.codec().decode(t);break}case 5:{i.sendDontHave=t.bool();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(_l||(_l={}));var e1;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.entries!=null)for(let i of t.entries)n.uint32(10),_l.codec().encode(i,n);t.full!=null&&(n.uint32(16),n.bool(t.full)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={entries:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{if(o.limits?.entries!=null&&i.entries.length===o.limits.entries)throw new at('Decode error - map field "entries" had too many elements');i.entries.push(_l.codec().decode(t,t.uint32(),{limits:o.limits?.entries$}));break}case 2:{i.full=t.bool();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(e1||(e1={}));var Il;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.prefix!=null&&t.prefix.byteLength>0&&(n.uint32(10),n.bytes(t.prefix)),t.data!=null&&t.data.byteLength>0&&(n.uint32(18),n.bytes(t.data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={prefix:ke(0),data:ke(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.prefix=t.bytes();break}case 2:{i.data=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(Il||(Il={}));var Kn;(function(r){r.HaveBlock="HaveBlock",r.DoNotHaveBlock="DoNotHaveBlock"})(Kn||(Kn={}));var t1;(function(r){r[r.HaveBlock=0]="HaveBlock",r[r.DoNotHaveBlock=1]="DoNotHaveBlock"})(t1||(t1={}));(function(r){r.codec=()=>Et(t1)})(Kn||(Kn={}));var Tl;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.cid!=null&&t.cid.byteLength>0&&(n.uint32(10),n.bytes(t.cid)),t.type!=null&&t1[t.type]!==0&&(n.uint32(16),Kn.codec().encode(t.type,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={cid:ke(0),type:Kn.HaveBlock},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.cid=t.bytes();break}case 2:{i.type=Kn.codec().decode(t);break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(Tl||(Tl={}));var Ia;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.wantlist!=null&&(n.uint32(10),e1.codec().encode(t.wantlist,n)),t.blocks!=null)for(let i of t.blocks)n.uint32(26),Il.codec().encode(i,n);if(t.blockPresences!=null)for(let i of t.blockPresences)n.uint32(34),Tl.codec().encode(i,n);t.pendingBytes!=null&&t.pendingBytes!==0&&(n.uint32(40),n.int32(t.pendingBytes)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={blocks:[],blockPresences:[],pendingBytes:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.wantlist=e1.codec().decode(t,t.uint32(),{limits:o.limits?.wantlist});break}case 3:{if(o.limits?.blocks!=null&&i.blocks.length===o.limits.blocks)throw new at('Decode error - map field "blocks" had too many elements');i.blocks.push(Il.codec().decode(t,t.uint32(),{limits:o.limits?.blocks$}));break}case 4:{if(o.limits?.blockPresences!=null&&i.blockPresences.length===o.limits.blockPresences)throw new at('Decode error - map field "blockPresences" had too many elements');i.blockPresences.push(Tl.codec().decode(t,t.uint32(),{limits:o.limits?.blockPresences$}));break}case 5:{i.pendingBytes=t.int32();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(Ia||(Ia={}));function Ob(r,e){for(let[t,n]of e.wantlist.entries()){let o=r.wantlist.get(t);o!=null&&(o.priority>n.priority&&(n.priority=o.priority),n.cancel=n.cancel??o.cancel,n.wantType=n.wantType??o.wantType,n.sendDontHave=n.sendDontHave??o.sendDontHave),r.wantlist.set(t,n)}for(let[t,n]of e.blockPresences.entries())r.blockPresences.set(t,n);for(let[t,n]of e.blocks.entries())r.blocks.set(t,n);return e.full&&!r.full&&(r.full=!0),r}var r1=class extends Error{static name="BlockTooLargeError";constructor(e="Block too large"){super(e),this.name="BlockTooLargeError"}};var oO=4193648,iO=oO+16;function*Lb(r,e){let t=[...r.wantlist.values()],n=[...r.blockPresences.values()],o=[...r.blocks.values()],i=0,s=0,a=0,c=!1;for(;;){let l={wantlist:{full:r.full??!1,entries:[]},blockPresences:[],blocks:[],pendingBytes:0},u=Ia.encode(l).byteLength,{added:d,hasMore:h,newSize:m}=E4(o,l.blocks,a,e,u,sO);a+=d,u=m;let g=h;({added:d,hasMore:h,newSize:m}=E4(n,l.blockPresences,s,e,u,aO)),s+=d,u=m;let w=h;if({added:d,hasMore:h,newSize:m}=E4(t,l.wantlist.entries,i,e,u,cO),i+=d,u=m,c=!g&&!w&&!h,c||(l.wantlist.full=!1),yield Ia.encode(l),c)break}}function E4(r,e,t,n,o,i){let s=0,a=!1;for(let c=t;c<r.length;c++){let l=r[c],u=i(l);if(u>iO)throw new r1("Cannot send block as after encoding it is over the max message size");let d=o+u;if(d>n){a=!0;break}e.push(l),s++,o=d}return{hasMore:a,added:s,newSize:o}}function sO(r){return S4(3,Il.encode(r))}function aO(r){return S4(4,Tl.encode(r))}function cO(r){return S4(1,_l.encode(r))}function S4(r,e){let t=Ce(r),n=Ce(e.byteLength);return t+n+e.byteLength}var n1=class extends Le{log;libp2p;routing;protocols;running;maxInboundStreams;maxOutboundStreams;messageReceiveTimeout;registrarIds;metrics;sendQueue;runOnLimitedConnections;maxOutgoingMessageSize;maxIncomingMessageSize;constructor(e,t={}){super(),this.log=e.logger.forComponent("helia:bitswap:network"),this.libp2p=e.libp2p,this.routing=e.routing,this.protocols=t.protocols??[Sd],this.registrarIds=[],this.running=!1,this._onStream=this._onStream.bind(this),this.maxInboundStreams=t.maxInboundStreams??1024,this.maxOutboundStreams=t.maxOutboundStreams??1024,this.messageReceiveTimeout=t.messageReceiveTimeout??5e3,this.runOnLimitedConnections=t.runOnLimitedConnections??!1,this.maxIncomingMessageSize=t.maxIncomingMessageSize??4194304,this.maxOutgoingMessageSize=t.maxOutgoingMessageSize??t.maxIncomingMessageSize??4194304,this.metrics={blocksSent:e.metrics?.registerCounter("helia_bitswap_sent_blocks_total"),dataSent:e.metrics?.registerCounter("helia_bitswap_sent_data_bytes_total")},this.sendQueue=new ur({concurrency:t.messageSendConcurrency??50,metrics:e.metrics,metricName:"helia_bitswap_message_send_queue"}),this.sendQueue.addEventListener("error",n=>{this.log.error("error sending wantlist to peer",n.detail)})}async start(){if(this.running)return;this.running=!0,await this.libp2p.handle(this.protocols,this._onStream,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnections});let e={onConnect:t=>{this.safeDispatchEvent("peer:connected",{detail:t})},onDisconnect:t=>{this.safeDispatchEvent("peer:disconnected",{detail:t})}};this.registrarIds=[];for(let t of this.protocols)this.registrarIds.push(await this.libp2p.register(t,e));this.libp2p.getConnections().forEach(t=>{this.safeDispatchEvent("peer:connected",{detail:t.remotePeer})})}async stop(){if(this.running=!1,await this.libp2p.unhandle(this.protocols),this.registrarIds!=null){for(let e of this.registrarIds)this.libp2p.unregister(e);this.registrarIds=[]}}_onStream(e){if(!this.running)return;let{stream:t,connection:n}=e;Promise.resolve().then(async()=>{this.log("incoming new bitswap %s stream from %p",t.protocol,n.remotePeer);let o=()=>{t.status==="open"?t.abort(new zo(`Incoming Bitswap stream timed out after ${this.messageReceiveTimeout}ms`)):this.log("stream aborted with status %s",t.status)},i=AbortSignal.timeout(this.messageReceiveTimeout);i.addEventListener("abort",o),await t.closeWrite(),await rr(t,s=>mo(s,{maxDataLength:this.maxIncomingMessageSize}),async s=>{for await(let a of s)try{let c=Ia.decode(a);this.log("incoming new bitswap %s message from %p on stream",t.protocol,n.remotePeer,t.id),this.safeDispatchEvent("bitswap:message",{detail:{peer:n.remotePeer,message:c}}),i.removeEventListener("abort",o),i=AbortSignal.timeout(this.messageReceiveTimeout),i.addEventListener("abort",o)}catch(c){this.log.error("error reading incoming bitswap message from %p on stream",n.remotePeer,t.id,c),t.abort(c);break}})}).catch(o=>{this.log.error("error handling incoming stream from %p",n.remotePeer,o),t.abort(o)})}async*findProviders(e,t){t?.onProgress?.(new ae("bitswap:network:find-providers",e));for await(let n of this.routing.findProviders(e,t))await this.libp2p.isDialable(n.multiaddrs,{runOnLimitedConnection:this.runOnLimitedConnections})&&(yield n)}async findAndConnect(e,t){await kr(Jr(as(this.findProviders(e,t),t?.maxProviders??3),async n=>this.connectTo(n.id,t))).catch(n=>{this.log.error(n)})}async sendMessage(e,t,n){if(!this.running)throw new Error("network isn't running");let o=this.sendQueue.queue.find(i=>e.equals(i.options.peerId)&&i.status==="queued");if(o!=null){o.options.message=Ob(o.options.message,t),await o.join({signal:n?.signal});return}await this.sendQueue.add(async i=>{let s=i?.message;if(s==null)throw new D("No message to send");this.log("sendMessage to %p",e),i?.onProgress?.(new ae("bitswap:network:send-wantlist",e));let a=await this.libp2p.dialProtocol(e,Sd,i);await a.closeRead();try{await rr(Lb(s,this.maxOutgoingMessageSize),c=>po(c),a),await a.close(i)}catch(c){i?.onProgress?.(new ae("bitswap:network:send-wantlist:error",{peer:e,error:c})),this.log.error("error sending message to %p",e,c),a.abort(c)}this._updateSentStats(s.blocks)},{peerId:e,signal:n?.signal,message:t})}async connectTo(e,t){if(!this.running)throw new En("Network isn't running");t?.onProgress?.(new ae("bitswap:network:dial",e));let[n]=await Promise.all([this.libp2p.dial(e,t),tr(this.libp2p,"peer:identify",t?.signal,{filter:o=>{if(!o.detail.peerId.equals(e))return!1;if(o.detail.protocols.includes(Sd))return!0;throw new vi(`${e} did not support ${Sd}`)}})]);return n}_updateSentStats(e){let t=0;for(let n of e.values())t+=n.data.byteLength;this.metrics.dataSent?.increment(t),this.metrics.blocksSent?.increment(e.size)}};function M(r,e="utf8"){let t=Qp[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.encoder.encode(r).substring(1)}var yO=parseInt("11111",2),A4=parseInt("10000000",2),wO=parseInt("01111111",2),Bb={0:Pd,1:Pd,2:bO,3:EO,4:SO,5:vO,6:xO,16:Pd,22:Pd,48:Pd};function Vn(r,e={offset:0}){let t=r[e.offset]&yO;if(e.offset++,Bb[t]!=null)return Bb[t](r,e);throw new Error("No decoder for tag "+t)}function Rd(r,e){let t=0;if((r[e.offset]&A4)===A4){let n=r[e.offset]&wO,o="0x";e.offset++;for(let i=0;i<n;i++,e.offset++)o+=r[e.offset].toString(16).padStart(2,"0");t=parseInt(o,16)}else t=r[e.offset],e.offset++;return t}function Pd(r,e){Rd(r,e);let t=[];for(;!(e.offset>=r.byteLength);){let n=Vn(r,e);if(n===null)break;t.push(n)}return t}function bO(r,e){let t=Rd(r,e),n=e.offset,o=e.offset+t,i=[];for(let s=n;s<o;s++)s===n&&r[s]===0||i.push(r[s]);return e.offset+=t,Uint8Array.from(i)}function xO(r,e){let t=Rd(r,e),n=e.offset+t,o=r[e.offset];e.offset++;let i=0,s=0;o<40?(i=0,s=o):o<80?(i=1,s=o-40):(i=2,s=o-80);let a=`${i}.${s}`,c=[];for(;e.offset<n;){let l=r[e.offset];if(e.offset++,c.push(l&127),l<128){c.reverse();let u=0;for(let d=0;d<c.length;d++)u+=c[d]<<d*7;a+=`.${u}`,c=[]}}return a}function vO(r,e){return e.offset++,null}function EO(r,e){let t=Rd(r,e),n=r[e.offset];e.offset++;let o=r.subarray(e.offset,e.offset+t-1);if(e.offset+=t,n!==0)throw new Error("Unused bits in bit string is unimplemented");return o}function SO(r,e){let t=Rd(r,e),n=r.subarray(e.offset,e.offset+t);return e.offset+=t,n}function AO(r){let e=r.toString(16);e.length%2===1&&(e="0"+e);let t=new J;for(let n=0;n<e.length;n+=2)t.append(Uint8Array.from([parseInt(`${e[n]}${e[n+1]}`,16)]));return t}function o1(r){if(r.byteLength<128)return Uint8Array.from([r.byteLength]);let e=AO(r.byteLength);return new J(Uint8Array.from([e.byteLength|A4]),e)}function Vr(r){let e=new J,t=128;return(r.subarray()[0]&t)===t&&e.append(Uint8Array.from([0])),e.append(r),new J(Uint8Array.from([2]),o1(e),e)}function Nd(r){let e=Uint8Array.from([0]),t=new J(e,r);return new J(Uint8Array.from([3]),o1(t),t)}function Mb(r){return new J(Uint8Array.from([4]),o1(r),r)}function wo(r,e=48){let t=new J;for(let n of r)t.append(n);return new J(Uint8Array.from([e]),o1(t),t)}var Ub="1.2.840.10045.3.1.7",Fb="1.3.132.0.34",$b="1.3.132.0.35";async function Kb(r="P-256"){let e=await crypto.subtle.generateKey({name:"ECDSA",namedCurve:r},!0,["sign","verify"]);return{publicKey:await crypto.subtle.exportKey("jwk",e.publicKey),privateKey:await crypto.subtle.exportKey("jwk",e.privateKey)}}async function Vb(r,e){let t=await crypto.subtle.importKey("jwk",r,{name:"ECDSA",namedCurve:r.crv??"P-256"},!1,["sign"]),n=await crypto.subtle.sign({name:"ECDSA",hash:{name:"SHA-256"}},t,e.subarray());return new Uint8Array(n,0,n.byteLength)}async function Hb(r,e,t){let n=await crypto.subtle.importKey("jwk",r,{name:"ECDSA",namedCurve:r.crv??"P-256"},!1,["verify"]);return crypto.subtle.verify({name:"ECDSA",hash:{name:"SHA-256"}},n,e,t.subarray())}var _O=Uint8Array.from([6,8,42,134,72,206,61,3,1,7]),IO=Uint8Array.from([6,5,43,129,4,0,34]),TO=Uint8Array.from([6,5,43,129,4,0,35]),qb={ext:!0,kty:"EC",crv:"P-256"},jb={ext:!0,kty:"EC",crv:"P-384"},Wb={ext:!0,kty:"EC",crv:"P-521"},Cl=32,kl=48,Pl=66;function Gb(r){let e=Vn(r);return _4(e)}function _4(r){let e=r[1],t=M(e,"base64url"),n=r[2][1][0],o=1,i,s;if(e.byteLength===Cl)return i=M(n.subarray(o,o+Cl),"base64url"),s=M(n.subarray(o+Cl),"base64url"),new Ca({...qb,key_ops:["sign"],d:t,x:i,y:s});if(e.byteLength===kl)return i=M(n.subarray(o,o+kl),"base64url"),s=M(n.subarray(o+kl),"base64url"),new Ca({...jb,key_ops:["sign"],d:t,x:i,y:s});if(e.byteLength===Pl)return i=M(n.subarray(o,o+Pl),"base64url"),s=M(n.subarray(o+Pl),"base64url"),new Ca({...Wb,key_ops:["sign"],d:t,x:i,y:s});throw new D(`Private key length was wrong length, got ${e.byteLength}, expected 32, 48 or 66`)}function I4(r){let e=Vn(r);return zb(e)}function zb(r){let e=r[1][1][0],t=1,n,o;if(e.byteLength===Cl*2+1)return n=M(e.subarray(t,t+Cl),"base64url"),o=M(e.subarray(t+Cl),"base64url"),new Ta({...qb,key_ops:["verify"],x:n,y:o});if(e.byteLength===kl*2+1)return n=M(e.subarray(t,t+kl),"base64url"),o=M(e.subarray(t+kl),"base64url"),new Ta({...jb,key_ops:["verify"],x:n,y:o});if(e.byteLength===Pl*2+1)return n=M(e.subarray(t,t+Pl),"base64url"),o=M(e.subarray(t+Pl),"base64url"),new Ta({...Wb,key_ops:["verify"],x:n,y:o});throw new D(`coordinates were wrong length, got ${e.byteLength}, expected 65, 97 or 133`)}function Xb(r){return wo([Vr(Uint8Array.from([1])),Mb(V(r.d??"","base64url")),wo([Qb(r.crv)],160),wo([Nd(new J(Uint8Array.from([4]),V(r.x??"","base64url"),V(r.y??"","base64url")))],161)]).subarray()}function Yb(r){return wo([Vr(Uint8Array.from([1])),wo([Qb(r.crv)],160),wo([Nd(new J(Uint8Array.from([4]),V(r.x??"","base64url"),V(r.y??"","base64url")))],161)]).subarray()}function Qb(r){if(r==="P-256")return _O;if(r==="P-384")return IO;if(r==="P-521")return TO;throw new D(`Invalid curve ${r}`)}async function Zb(r="P-256"){let e=await Kb(r);return new Ca(e.privateKey)}var Ta=class{type="ECDSA";jwk;_raw;constructor(e){this.jwk=e}get raw(){return this._raw==null&&(this._raw=Yb(this.jwk)),this._raw}toMultihash(){return Dr.digest(nr(this))}toCID(){return le.createV1(114,this.toMultihash())}toString(){return He.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ge(this.raw,e.raw)}async verify(e,t){return Hb(this.jwk,t,e)}},Ca=class{type="ECDSA";jwk;publicKey;_raw;constructor(e){this.jwk=e,this.publicKey=new Ta({crv:e.crv,ext:e.ext,key_ops:["verify"],kty:"EC",x:e.x,y:e.y})}get raw(){return this._raw==null&&(this._raw=Xb(this.jwk)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ge(this.raw,e.raw)}async sign(e){return Vb(this.jwk,e)}};function us(r){if(!Number.isSafeInteger(r)||r<0)throw new Error("positive integer expected, got "+r)}function CO(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function Rl(r,...e){if(!CO(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error("Uint8Array expected of length "+e+", got length="+r.length)}function ka(r){if(typeof r!="function"||typeof r.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");us(r.outputLen),us(r.blockLen)}function Nl(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function Jb(r,e){Rl(r);let t=e.outputLen;if(r.length<t)throw new Error("digestInto() expects output buffer of length at least "+t)}var Pa=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;function Ra(r){return new DataView(r.buffer,r.byteOffset,r.byteLength)}function bo(r,e){return r<<32-e|r>>>e}function i1(r,e){return r<<e|r>>>32-e>>>0}var Ez=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function";var kO=async()=>{};async function ex(r,e,t){let n=Date.now();for(let o=0;o<r;o++){t(o);let i=Date.now()-n;i>=0&&i<e||(await kO(),n+=i)}}function tx(r){if(typeof r!="string")throw new Error("utf8ToBytes expected string, got "+typeof r);return new Uint8Array(new TextEncoder().encode(r))}function xo(r){return typeof r=="string"&&(r=tx(r)),Rl(r),r}function T4(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];Rl(o),e+=o.length}let t=new Uint8Array(e);for(let n=0,o=0;n<r.length;n++){let i=r[n];t.set(i,o),o+=i.length}return t}var Dl=class{clone(){return this._cloneInto()}};function rx(r,e){if(e!==void 0&&{}.toString.call(e)!=="[object Object]")throw new Error("Options should be object or undefined");return Object.assign(r,e)}function Ol(r){let e=n=>r().update(xo(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function Na(r=32){if(Pa&&typeof Pa.getRandomValues=="function")return Pa.getRandomValues(new Uint8Array(r));if(Pa&&typeof Pa.randomBytes=="function")return Uint8Array.from(Pa.randomBytes(r));throw new Error("crypto.getRandomValues must be defined")}function PO(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),i=BigInt(4294967295),s=Number(t>>o&i),a=Number(t&i),c=n?4:0,l=n?0:4;r.setUint32(e+c,s,n),r.setUint32(e+l,a,n)}function s1(r,e,t){return r&e^~r&t}function a1(r,e,t){return r&e^r&t^e&t}var ds=class extends Dl{constructor(e,t,n,o){super(),this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.buffer=new Uint8Array(e),this.view=Ra(this.buffer)}update(e){Nl(this);let{view:t,buffer:n,blockLen:o}=this;e=xo(e);let i=e.length;for(let s=0;s<i;){let a=Math.min(o-this.pos,i-s);if(a===o){let c=Ra(e);for(;o<=i-s;s+=o)this.process(c,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Nl(this),Jb(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:i}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>o-s&&(this.process(n,0),s=0);for(let d=s;d<o;d++)t[d]=0;PO(n,o-8,BigInt(this.length*8),i),this.process(n,0);let a=Ra(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let l=c/4,u=this.get();if(l>u.length)throw new Error("_sha2: outputLen bigger than state");for(let d=0;d<l;d++)a.setUint32(4*d,u[d],i)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:i,destroyed:s,pos:a}=this;return e.length=o,e.pos=a,e.finished=i,e.destroyed=s,o%t&&e.buffer.set(n),e}};var RO=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),fs=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),hs=new Uint32Array(64),C4=class extends ds{constructor(e=32){super(64,e,8,!1),this.A=fs[0]|0,this.B=fs[1]|0,this.C=fs[2]|0,this.D=fs[3]|0,this.E=fs[4]|0,this.F=fs[5]|0,this.G=fs[6]|0,this.H=fs[7]|0}get(){let{A:e,B:t,C:n,D:o,E:i,F:s,G:a,H:c}=this;return[e,t,n,o,i,s,a,c]}set(e,t,n,o,i,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=i|0,this.F=s|0,this.G=a|0,this.H=c|0}process(e,t){for(let d=0;d<16;d++,t+=4)hs[d]=e.getUint32(t,!1);for(let d=16;d<64;d++){let h=hs[d-15],m=hs[d-2],g=bo(h,7)^bo(h,18)^h>>>3,w=bo(m,17)^bo(m,19)^m>>>10;hs[d]=w+hs[d-7]+g+hs[d-16]|0}let{A:n,B:o,C:i,D:s,E:a,F:c,G:l,H:u}=this;for(let d=0;d<64;d++){let h=bo(a,6)^bo(a,11)^bo(a,25),m=u+h+s1(a,c,l)+RO[d]+hs[d]|0,w=(bo(n,2)^bo(n,13)^bo(n,22))+a1(n,o,i)|0;u=l,l=c,c=a,a=s+m|0,s=i,i=o,o=n,n=m+w|0}n=n+this.A|0,o=o+this.B|0,i=i+this.C|0,s=s+this.D|0,a=a+this.E|0,c=c+this.F|0,l=l+this.G|0,u=u+this.H|0,this.set(n,o,i,s,a,c,l,u)}roundClean(){hs.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var _n=Ol(()=>new C4);var c1=BigInt(4294967295),k4=BigInt(32);function nx(r,e=!1){return e?{h:Number(r&c1),l:Number(r>>k4&c1)}:{h:Number(r>>k4&c1)|0,l:Number(r&c1)|0}}function NO(r,e=!1){let t=new Uint32Array(r.length),n=new Uint32Array(r.length);for(let o=0;o<r.length;o++){let{h:i,l:s}=nx(r[o],e);[t[o],n[o]]=[i,s]}return[t,n]}var DO=(r,e)=>BigInt(r>>>0)<<k4|BigInt(e>>>0),OO=(r,e,t)=>r>>>t,LO=(r,e,t)=>r<<32-t|e>>>t,BO=(r,e,t)=>r>>>t|e<<32-t,MO=(r,e,t)=>r<<32-t|e>>>t,UO=(r,e,t)=>r<<64-t|e>>>t-32,FO=(r,e,t)=>r>>>t-32|e<<64-t,$O=(r,e)=>e,KO=(r,e)=>r,VO=(r,e,t)=>r<<t|e>>>32-t,HO=(r,e,t)=>e<<t|r>>>32-t,qO=(r,e,t)=>e<<t-32|r>>>64-t,jO=(r,e,t)=>r<<t-32|e>>>64-t;function WO(r,e,t,n){let o=(e>>>0)+(n>>>0);return{h:r+t+(o/2**32|0)|0,l:o|0}}var GO=(r,e,t)=>(r>>>0)+(e>>>0)+(t>>>0),zO=(r,e,t,n)=>e+t+n+(r/2**32|0)|0,XO=(r,e,t,n)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0),YO=(r,e,t,n,o)=>e+t+n+o+(r/2**32|0)|0,QO=(r,e,t,n,o)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0)+(o>>>0),ZO=(r,e,t,n,o,i)=>e+t+n+o+i+(r/2**32|0)|0;var JO={fromBig:nx,split:NO,toBig:DO,shrSH:OO,shrSL:LO,rotrSH:BO,rotrSL:MO,rotrBH:UO,rotrBL:FO,rotr32H:$O,rotr32L:KO,rotlSH:VO,rotlSL:HO,rotlBH:qO,rotlBL:jO,add:WO,add3L:GO,add3H:zO,add4L:XO,add4H:YO,add5H:ZO,add5L:QO},De=JO;var[eL,tL]=De.split(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(r=>BigInt(r))),ps=new Uint32Array(80),ms=new Uint32Array(80),P4=class extends ds{constructor(e=64){super(128,e,16,!1),this.Ah=1779033703,this.Al=-205731576,this.Bh=-1150833019,this.Bl=-2067093701,this.Ch=1013904242,this.Cl=-23791573,this.Dh=-1521486534,this.Dl=1595750129,this.Eh=1359893119,this.El=-1377402159,this.Fh=-1694144372,this.Fl=725511199,this.Gh=528734635,this.Gl=-79577749,this.Hh=1541459225,this.Hl=327033209}get(){let{Ah:e,Al:t,Bh:n,Bl:o,Ch:i,Cl:s,Dh:a,Dl:c,Eh:l,El:u,Fh:d,Fl:h,Gh:m,Gl:g,Hh:w,Hl:y}=this;return[e,t,n,o,i,s,a,c,l,u,d,h,m,g,w,y]}set(e,t,n,o,i,s,a,c,l,u,d,h,m,g,w,y){this.Ah=e|0,this.Al=t|0,this.Bh=n|0,this.Bl=o|0,this.Ch=i|0,this.Cl=s|0,this.Dh=a|0,this.Dl=c|0,this.Eh=l|0,this.El=u|0,this.Fh=d|0,this.Fl=h|0,this.Gh=m|0,this.Gl=g|0,this.Hh=w|0,this.Hl=y|0}process(e,t){for(let v=0;v<16;v++,t+=4)ps[v]=e.getUint32(t),ms[v]=e.getUint32(t+=4);for(let v=16;v<80;v++){let N=ps[v-15]|0,W=ms[v-15]|0,H=De.rotrSH(N,W,1)^De.rotrSH(N,W,8)^De.shrSH(N,W,7),$=De.rotrSL(N,W,1)^De.rotrSL(N,W,8)^De.shrSL(N,W,7),P=ps[v-2]|0,R=ms[v-2]|0,X=De.rotrSH(P,R,19)^De.rotrBH(P,R,61)^De.shrSH(P,R,6),q=De.rotrSL(P,R,19)^De.rotrBL(P,R,61)^De.shrSL(P,R,6),j=De.add4L($,q,ms[v-7],ms[v-16]),ne=De.add4H(j,H,X,ps[v-7],ps[v-16]);ps[v]=ne|0,ms[v]=j|0}let{Ah:n,Al:o,Bh:i,Bl:s,Ch:a,Cl:c,Dh:l,Dl:u,Eh:d,El:h,Fh:m,Fl:g,Gh:w,Gl:y,Hh:x,Hl:S}=this;for(let v=0;v<80;v++){let N=De.rotrSH(d,h,14)^De.rotrSH(d,h,18)^De.rotrBH(d,h,41),W=De.rotrSL(d,h,14)^De.rotrSL(d,h,18)^De.rotrBL(d,h,41),H=d&m^~d&w,$=h&g^~h&y,P=De.add5L(S,W,$,tL[v],ms[v]),R=De.add5H(P,x,N,H,eL[v],ps[v]),X=P|0,q=De.rotrSH(n,o,28)^De.rotrBH(n,o,34)^De.rotrBH(n,o,39),j=De.rotrSL(n,o,28)^De.rotrBL(n,o,34)^De.rotrBL(n,o,39),ne=n&i^n&a^i&a,B=o&s^o&c^s&c;x=w|0,S=y|0,w=m|0,y=g|0,m=d|0,g=h|0,{h:d,l:h}=De.add(l|0,u|0,R|0,X|0),l=a|0,u=c|0,a=i|0,c=s|0,i=n|0,s=o|0;let L=De.add3L(X,j,B);n=De.add3H(L,R,q,ne),o=L|0}({h:n,l:o}=De.add(this.Ah|0,this.Al|0,n|0,o|0)),{h:i,l:s}=De.add(this.Bh|0,this.Bl|0,i|0,s|0),{h:a,l:c}=De.add(this.Ch|0,this.Cl|0,a|0,c|0),{h:l,l:u}=De.add(this.Dh|0,this.Dl|0,l|0,u|0),{h:d,l:h}=De.add(this.Eh|0,this.El|0,d|0,h|0),{h:m,l:g}=De.add(this.Fh|0,this.Fl|0,m|0,g|0),{h:w,l:y}=De.add(this.Gh|0,this.Gl|0,w|0,y|0),{h:x,l:S}=De.add(this.Hh|0,this.Hl|0,x|0,S|0),this.set(n,o,i,s,a,c,l,u,d,h,m,g,w,y,x,S)}roundClean(){ps.fill(0),ms.fill(0)}destroy(){this.buffer.fill(0),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}};var Si=Ol(()=>new P4);var O4=BigInt(0),D4=BigInt(1);function Da(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function L4(r){if(!Da(r))throw new Error("Uint8Array expected")}function Yo(r,e){if(typeof e!="boolean")throw new Error(r+" boolean expected, got "+e)}function Dd(r){let e=r.toString(16);return e.length&1?"0"+e:e}function sx(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);return r===""?O4:BigInt("0x"+r)}var ax=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",rL=Array.from({length:256},(r,e)=>e.toString(16).padStart(2,"0"));function gs(r){if(L4(r),ax)return r.toHex();let e="";for(let t=0;t<r.length;t++)e+=rL[r[t]];return e}var Ai={_0:48,_9:57,A:65,F:70,a:97,f:102};function ox(r){if(r>=Ai._0&&r<=Ai._9)return r-Ai._0;if(r>=Ai.A&&r<=Ai.F)return r-(Ai.A-10);if(r>=Ai.a&&r<=Ai.f)return r-(Ai.a-10)}function Od(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);if(ax)return Uint8Array.fromHex(r);let e=r.length,t=e/2;if(e%2)throw new Error("hex string expected, got unpadded hex of length "+e);let n=new Uint8Array(t);for(let o=0,i=0;o<t;o++,i+=2){let s=ox(r.charCodeAt(i)),a=ox(r.charCodeAt(i+1));if(s===void 0||a===void 0){let c=r[i]+r[i+1];throw new Error('hex string expected, got non-hex character "'+c+'" at index '+i)}n[o]=s*16+a}return n}function _i(r){return sx(gs(r))}function Qo(r){return L4(r),sx(gs(Uint8Array.from(r).reverse()))}function Oa(r,e){return Od(r.toString(16).padStart(e*2,"0"))}function ys(r,e){return Oa(r,e).reverse()}function ft(r,e,t){let n;if(typeof e=="string")try{n=Od(e)}catch(i){throw new Error(r+" must be hex string or Uint8Array, cause: "+i)}else if(Da(e))n=Uint8Array.from(e);else throw new Error(r+" must be hex string or Uint8Array");let o=n.length;if(typeof t=="number"&&o!==t)throw new Error(r+" of length "+t+" expected, got "+o);return n}function ws(...r){let e=0;for(let n=0;n<r.length;n++){let o=r[n];L4(o),e+=o.length}let t=new Uint8Array(e);for(let n=0,o=0;n<r.length;n++){let i=r[n];t.set(i,o),o+=i.length}return t}var R4=r=>typeof r=="bigint"&&O4<=r;function l1(r,e,t){return R4(r)&&R4(e)&&R4(t)&&e<=r&&r<t}function Or(r,e,t,n){if(!l1(e,t,n))throw new Error("expected valid "+r+": "+t+" <= n < "+n+", got "+e)}function cx(r){let e;for(e=0;r>O4;r>>=D4,e+=1);return e}var La=r=>(D4<<BigInt(r))-D4,N4=r=>new Uint8Array(r),ix=r=>Uint8Array.from(r);function lx(r,e,t){if(typeof r!="number"||r<2)throw new Error("hashLen must be a number");if(typeof e!="number"||e<2)throw new Error("qByteLen must be a number");if(typeof t!="function")throw new Error("hmacFn must be a function");let n=N4(r),o=N4(r),i=0,s=()=>{n.fill(1),o.fill(0),i=0},a=(...d)=>t(o,n,...d),c=(d=N4(0))=>{o=a(ix([0]),d),n=a(),d.length!==0&&(o=a(ix([1]),d),n=a())},l=()=>{if(i++>=1e3)throw new Error("drbg: tried 1000 values");let d=0,h=[];for(;d<e;){n=a();let m=n.slice();h.push(m),d+=n.length}return ws(...h)};return(d,h)=>{s(),c(d);let m;for(;!(m=h(l()));)c();return s(),m}}var nL={bigint:r=>typeof r=="bigint",function:r=>typeof r=="function",boolean:r=>typeof r=="boolean",string:r=>typeof r=="string",stringOrUint8Array:r=>typeof r=="string"||Da(r),isSafeInteger:r=>Number.isSafeInteger(r),array:r=>Array.isArray(r),field:(r,e)=>e.Fp.isValid(r),hash:r=>typeof r=="function"&&Number.isSafeInteger(r.outputLen)};function vo(r,e,t={}){let n=(o,i,s)=>{let a=nL[i];if(typeof a!="function")throw new Error("invalid validator function");let c=r[o];if(!(s&&c===void 0)&&!a(c,r))throw new Error("param "+String(o)+" is invalid. Expected "+i+", got "+c)};for(let[o,i]of Object.entries(e))n(o,i,!1);for(let[o,i]of Object.entries(t))n(o,i,!0);return r}function Ll(r){let e=new WeakMap;return(t,...n)=>{let o=e.get(t);if(o!==void 0)return o;let i=r(t,...n);return e.set(t,i),i}}var Yt=BigInt(0),St=BigInt(1),Ba=BigInt(2),oL=BigInt(3),B4=BigInt(4),ux=BigInt(5),dx=BigInt(8),iL=BigInt(9),sL=BigInt(16);function Je(r,e){let t=r%e;return t>=Yt?t:e+t}function M4(r,e,t){if(e<Yt)throw new Error("invalid exponent, negatives unsupported");if(t<=Yt)throw new Error("invalid modulus");if(t===St)return Yt;let n=St;for(;e>Yt;)e&St&&(n=n*r%t),r=r*r%t,e>>=St;return n}function wt(r,e,t){let n=r;for(;e-- >Yt;)n*=n,n%=t;return n}function u1(r,e){if(r===Yt)throw new Error("invert: expected non-zero number");if(e<=Yt)throw new Error("invert: expected positive modulus, got "+e);let t=Je(r,e),n=e,o=Yt,i=St,s=St,a=Yt;for(;t!==Yt;){let l=n/t,u=n%t,d=o-s*l,h=i-a*l;n=t,t=u,o=s,i=a,s=d,a=h}if(n!==St)throw new Error("invert: does not exist");return Je(o,e)}function aL(r){let e=(r-St)/Ba,t,n,o;for(t=r-St,n=0;t%Ba===Yt;t/=Ba,n++);for(o=Ba;o<r&&M4(o,e,r)!==r-St;o++)if(o>1e3)throw new Error("Cannot find square root: likely non-prime P");if(n===1){let s=(r+St)/B4;return function(c,l){let u=c.pow(l,s);if(!c.eql(c.sqr(u),l))throw new Error("Cannot find square root");return u}}let i=(t+St)/Ba;return function(a,c){if(a.pow(c,e)===a.neg(a.ONE))throw new Error("Cannot find square root");let l=n,u=a.pow(a.mul(a.ONE,o),t),d=a.pow(c,i),h=a.pow(c,t);for(;!a.eql(h,a.ONE);){if(a.eql(h,a.ZERO))return a.ZERO;let m=1;for(let w=a.sqr(h);m<l&&!a.eql(w,a.ONE);m++)w=a.sqr(w);let g=a.pow(u,St<<BigInt(l-m-1));u=a.sqr(g),d=a.mul(d,g),h=a.mul(h,u),l=m}return d}}function cL(r){if(r%B4===oL){let e=(r+St)/B4;return function(n,o){let i=n.pow(o,e);if(!n.eql(n.sqr(i),o))throw new Error("Cannot find square root");return i}}if(r%dx===ux){let e=(r-ux)/dx;return function(n,o){let i=n.mul(o,Ba),s=n.pow(i,e),a=n.mul(o,s),c=n.mul(n.mul(a,Ba),s),l=n.mul(a,n.sub(c,n.ONE));if(!n.eql(n.sqr(l),o))throw new Error("Cannot find square root");return l}}return r%sL,aL(r)}var fx=(r,e)=>(Je(r,e)&St)===St,lL=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function U4(r){let e={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},t=lL.reduce((n,o)=>(n[o]="function",n),e);return vo(r,t)}function uL(r,e,t){if(t<Yt)throw new Error("invalid exponent, negatives unsupported");if(t===Yt)return r.ONE;if(t===St)return e;let n=r.ONE,o=e;for(;t>Yt;)t&St&&(n=r.mul(n,o)),o=r.sqr(o),t>>=St;return n}function dL(r,e){let t=new Array(e.length),n=e.reduce((i,s,a)=>r.is0(s)?i:(t[a]=i,r.mul(i,s)),r.ONE),o=r.inv(n);return e.reduceRight((i,s,a)=>r.is0(s)?i:(t[a]=r.mul(i,t[a]),r.mul(i,s)),o),t}function F4(r,e){let t=e!==void 0?e:r.toString(2).length,n=Math.ceil(t/8);return{nBitLength:t,nByteLength:n}}function bs(r,e,t=!1,n={}){if(r<=Yt)throw new Error("invalid field: expected ORDER > 0, got "+r);let{nBitLength:o,nByteLength:i}=F4(r,e);if(i>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");let s,a=Object.freeze({ORDER:r,isLE:t,BITS:o,BYTES:i,MASK:La(o),ZERO:Yt,ONE:St,create:c=>Je(c,r),isValid:c=>{if(typeof c!="bigint")throw new Error("invalid field element: expected bigint, got "+typeof c);return Yt<=c&&c<r},is0:c=>c===Yt,isOdd:c=>(c&St)===St,neg:c=>Je(-c,r),eql:(c,l)=>c===l,sqr:c=>Je(c*c,r),add:(c,l)=>Je(c+l,r),sub:(c,l)=>Je(c-l,r),mul:(c,l)=>Je(c*l,r),pow:(c,l)=>uL(a,c,l),div:(c,l)=>Je(c*u1(l,r),r),sqrN:c=>c*c,addN:(c,l)=>c+l,subN:(c,l)=>c-l,mulN:(c,l)=>c*l,inv:c=>u1(c,r),sqrt:n.sqrt||(c=>(s||(s=cL(r)),s(a,c))),invertBatch:c=>dL(a,c),cmov:(c,l,u)=>u?l:c,toBytes:c=>t?ys(c,i):Oa(c,i),fromBytes:c=>{if(c.length!==i)throw new Error("Field.fromBytes: expected "+i+" bytes, got "+c.length);return t?Qo(c):_i(c)}});return Object.freeze(a)}function hx(r){if(typeof r!="bigint")throw new Error("field order must be bigint");let e=r.toString(2).length;return Math.ceil(e/8)}function $4(r){let e=hx(r);return e+Math.ceil(e/2)}function px(r,e,t=!1){let n=r.length,o=hx(e),i=$4(e);if(n<16||n<i||n>1024)throw new Error("expected "+i+"-1024 bytes of input, got "+n);let s=t?Qo(r):_i(r),a=Je(s,e-St)+St;return t?ys(a,o):Oa(a,o)}var mx=BigInt(0),j4=BigInt(1);function K4(r,e){let t=e.negate();return r?t:e}function yx(r,e){if(!Number.isSafeInteger(r)||r<=0||r>e)throw new Error("invalid window size, expected [1.."+e+"], got W="+r)}function V4(r,e){yx(r,e);let t=Math.ceil(e/r)+1,n=2**(r-1),o=2**r,i=La(r),s=BigInt(r);return{windows:t,windowSize:n,mask:i,maxNumber:o,shiftBy:s}}function gx(r,e,t){let{windowSize:n,mask:o,maxNumber:i,shiftBy:s}=t,a=Number(r&o),c=r>>s;a>n&&(a-=i,c+=j4);let l=e*n,u=l+Math.abs(a)-1,d=a===0,h=a<0,m=e%2!==0;return{nextN:c,offset:u,isZero:d,isNeg:h,isNegF:m,offsetF:l}}function fL(r,e){if(!Array.isArray(r))throw new Error("array expected");r.forEach((t,n)=>{if(!(t instanceof e))throw new Error("invalid point at index "+n)})}function hL(r,e){if(!Array.isArray(r))throw new Error("array of scalars expected");r.forEach((t,n)=>{if(!e.isValid(t))throw new Error("invalid scalar at index "+n)})}var H4=new WeakMap,wx=new WeakMap;function q4(r){return wx.get(r)||1}function d1(r,e){return{constTimeNegate:K4,hasPrecomputes(t){return q4(t)!==1},unsafeLadder(t,n,o=r.ZERO){let i=t;for(;n>mx;)n&j4&&(o=o.add(i)),i=i.double(),n>>=j4;return o},precomputeWindow(t,n){let{windows:o,windowSize:i}=V4(n,e),s=[],a=t,c=a;for(let l=0;l<o;l++){c=a,s.push(c);for(let u=1;u<i;u++)c=c.add(a),s.push(c);a=c.double()}return s},wNAF(t,n,o){let i=r.ZERO,s=r.BASE,a=V4(t,e);for(let c=0;c<a.windows;c++){let{nextN:l,offset:u,isZero:d,isNeg:h,isNegF:m,offsetF:g}=gx(o,c,a);o=l,d?s=s.add(K4(m,n[g])):i=i.add(K4(h,n[u]))}return{p:i,f:s}},wNAFUnsafe(t,n,o,i=r.ZERO){let s=V4(t,e);for(let a=0;a<s.windows&&o!==mx;a++){let{nextN:c,offset:l,isZero:u,isNeg:d}=gx(o,a,s);if(o=c,!u){let h=n[l];i=i.add(d?h.negate():h)}}return i},getPrecomputes(t,n,o){let i=H4.get(n);return i||(i=this.precomputeWindow(n,t),t!==1&&H4.set(n,o(i))),i},wNAFCached(t,n,o){let i=q4(t);return this.wNAF(i,this.getPrecomputes(i,t,o),n)},wNAFCachedUnsafe(t,n,o,i){let s=q4(t);return s===1?this.unsafeLadder(t,n,i):this.wNAFUnsafe(s,this.getPrecomputes(s,t,o),n,i)},setWindowSize(t,n){yx(n,e),wx.set(t,n),H4.delete(t)}}}function f1(r,e,t,n){if(fL(t,r),hL(n,e),t.length!==n.length)throw new Error("arrays of points and scalars must have equal length");let o=r.ZERO,i=cx(BigInt(t.length)),s=i>12?i-3:i>4?i-2:i?2:1,a=La(s),c=new Array(Number(a)+1).fill(o),l=Math.floor((e.BITS-1)/s)*s,u=o;for(let d=l;d>=0;d-=s){c.fill(o);for(let m=0;m<n.length;m++){let g=n[m],w=Number(g>>BigInt(d)&a);c[w]=c[w].add(t[m])}let h=o;for(let m=c.length-1,g=o;m>0;m--)g=g.add(c[m]),h=h.add(g);if(u=u.add(h),d!==0)for(let m=0;m<s;m++)u=u.double()}return u}function Ld(r){return U4(r.Fp),vo(r,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...F4(r.n,r.nBitLength),...r,p:r.Fp.ORDER})}var Zo=BigInt(0),Hr=BigInt(1),bx=BigInt(2),pL=BigInt(8),mL={zip215:!0};function gL(r){let e=Ld(r);return vo(r,{hash:"function",a:"bigint",d:"bigint",randomBytes:"function"},{adjustScalarBytes:"function",domain:"function",uvRatio:"function",mapToCurve:"function"}),Object.freeze({...e})}function xx(r){let e=gL(r),{Fp:t,n,prehash:o,hash:i,randomBytes:s,nByteLength:a,h:c}=e,l=bx<<BigInt(a*8)-Hr,u=t.create,d=bs(e.n,e.nBitLength),h=e.uvRatio||((O,I)=>{try{return{isValid:!0,value:t.sqrt(O*t.inv(I))}}catch{return{isValid:!1,value:Zo}}}),m=e.adjustScalarBytes||(O=>O),g=e.domain||((O,I,k)=>{if(Yo("phflag",k),I.length||k)throw new Error("Contexts/pre-hash are not supported");return O});function w(O,I,k=!1){let z=k?Hr:Zo;Or("coordinate "+O,I,z,l)}function y(O){if(!(O instanceof v))throw new Error("ExtendedPoint expected")}let x=Ll((O,I)=>{let{ex:k,ey:z,ez:re}=O,F=O.is0();I==null&&(I=F?pL:t.inv(re));let xe=u(k*I),Pe=u(z*I),he=u(re*I);if(F)return{x:Zo,y:Hr};if(he!==Hr)throw new Error("invZ was invalid");return{x:xe,y:Pe}}),S=Ll(O=>{let{a:I,d:k}=e;if(O.is0())throw new Error("bad point: ZERO");let{ex:z,ey:re,ez:F,et:xe}=O,Pe=u(z*z),he=u(re*re),Ue=u(F*F),rt=u(Ue*Ue),Ze=u(Pe*I),ut=u(Ue*u(Ze+he)),mt=u(rt+u(k*u(Pe*he)));if(ut!==mt)throw new Error("bad point: equation left != right (1)");let Bt=u(z*re),Tt=u(F*xe);if(Bt!==Tt)throw new Error("bad point: equation left != right (2)");return!0});class v{constructor(I,k,z,re){w("x",I),w("y",k),w("z",z,!0),w("t",re),this.ex=I,this.ey=k,this.ez=z,this.et=re,Object.freeze(this)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(I){if(I instanceof v)throw new Error("extended point not allowed");let{x:k,y:z}=I||{};return w("x",k),w("y",z),new v(k,z,Hr,u(k*z))}static normalizeZ(I){let k=t.invertBatch(I.map(z=>z.ez));return I.map((z,re)=>z.toAffine(k[re])).map(v.fromAffine)}static msm(I,k){return f1(v,d,I,k)}_setWindowSize(I){H.setWindowSize(this,I)}assertValidity(){S(this)}equals(I){y(I);let{ex:k,ey:z,ez:re}=this,{ex:F,ey:xe,ez:Pe}=I,he=u(k*Pe),Ue=u(F*re),rt=u(z*Pe),Ze=u(xe*re);return he===Ue&&rt===Ze}is0(){return this.equals(v.ZERO)}negate(){return new v(u(-this.ex),this.ey,this.ez,u(-this.et))}double(){let{a:I}=e,{ex:k,ey:z,ez:re}=this,F=u(k*k),xe=u(z*z),Pe=u(bx*u(re*re)),he=u(I*F),Ue=k+z,rt=u(u(Ue*Ue)-F-xe),Ze=he+xe,ut=Ze-Pe,mt=he-xe,Bt=u(rt*ut),Tt=u(Ze*mt),Tr=u(rt*mt),vn=u(ut*Ze);return new v(Bt,Tt,vn,Tr)}add(I){y(I);let{a:k,d:z}=e,{ex:re,ey:F,ez:xe,et:Pe}=this,{ex:he,ey:Ue,ez:rt,et:Ze}=I,ut=u(re*he),mt=u(F*Ue),Bt=u(Pe*z*Ze),Tt=u(xe*rt),Tr=u((re+F)*(he+Ue)-ut-mt),vn=Tt-Bt,bi=Tt+Bt,bd=u(mt-k*ut),vp=u(Tr*vn),Ep=u(bi*bd),Sp=u(Tr*bd),Ap=u(vn*bi);return new v(vp,Ep,Ap,Sp)}subtract(I){return this.add(I.negate())}wNAF(I){return H.wNAFCached(this,I,v.normalizeZ)}multiply(I){let k=I;Or("scalar",k,Hr,n);let{p:z,f:re}=this.wNAF(k);return v.normalizeZ([z,re])[0]}multiplyUnsafe(I,k=v.ZERO){let z=I;return Or("scalar",z,Zo,n),z===Zo?W:this.is0()||z===Hr?this:H.wNAFCachedUnsafe(this,z,v.normalizeZ,k)}isSmallOrder(){return this.multiplyUnsafe(c).is0()}isTorsionFree(){return H.unsafeLadder(this,n).is0()}toAffine(I){return x(this,I)}clearCofactor(){let{h:I}=e;return I===Hr?this:this.multiplyUnsafe(I)}static fromHex(I,k=!1){let{d:z,a:re}=e,F=t.BYTES;I=ft("pointHex",I,F),Yo("zip215",k);let xe=I.slice(),Pe=I[F-1];xe[F-1]=Pe&-129;let he=Qo(xe),Ue=k?l:t.ORDER;Or("pointHex.y",he,Zo,Ue);let rt=u(he*he),Ze=u(rt-Hr),ut=u(z*rt-re),{isValid:mt,value:Bt}=h(Ze,ut);if(!mt)throw new Error("Point.fromHex: invalid y coordinate");let Tt=(Bt&Hr)===Hr,Tr=(Pe&128)!==0;if(!k&&Bt===Zo&&Tr)throw new Error("Point.fromHex: x=0 and x_0=1");return Tr!==Tt&&(Bt=u(-Bt)),v.fromAffine({x:Bt,y:he})}static fromPrivateKey(I){let{scalar:k}=R(I);return N.multiply(k)}toRawBytes(){let{x:I,y:k}=this.toAffine(),z=ys(k,t.BYTES);return z[z.length-1]|=I&Hr?128:0,z}toHex(){return gs(this.toRawBytes())}}v.BASE=new v(e.Gx,e.Gy,Hr,u(e.Gx*e.Gy)),v.ZERO=new v(Zo,Hr,Hr,Zo);let{BASE:N,ZERO:W}=v,H=d1(v,a*8);function $(O){return Je(O,n)}function P(O){return $(Qo(O))}function R(O){let I=t.BYTES;O=ft("private key",O,I);let k=ft("hashed private key",i(O),2*I),z=m(k.slice(0,I)),re=k.slice(I,2*I),F=P(z);return{head:z,prefix:re,scalar:F}}function X(O){let{head:I,prefix:k,scalar:z}=R(O),re=N.multiply(z),F=re.toRawBytes();return{head:I,prefix:k,scalar:z,point:re,pointBytes:F}}function q(O){return X(O).pointBytes}function j(O=new Uint8Array,...I){let k=ws(...I);return P(i(g(k,ft("context",O),!!o)))}function ne(O,I,k={}){O=ft("message",O),o&&(O=o(O));let{prefix:z,scalar:re,pointBytes:F}=X(I),xe=j(k.context,z,O),Pe=N.multiply(xe).toRawBytes(),he=j(k.context,Pe,F,O),Ue=$(xe+he*re);Or("signature.s",Ue,Zo,n);let rt=ws(Pe,ys(Ue,t.BYTES));return ft("result",rt,t.BYTES*2)}let B=mL;function L(O,I,k,z=B){let{context:re,zip215:F}=z,xe=t.BYTES;O=ft("signature",O,2*xe),I=ft("message",I),k=ft("publicKey",k,xe),F!==void 0&&Yo("zip215",F),o&&(I=o(I));let Pe=Qo(O.slice(xe,2*xe)),he,Ue,rt;try{he=v.fromHex(k,F),Ue=v.fromHex(O.slice(0,xe),F),rt=N.multiplyUnsafe(Pe)}catch{return!1}if(!F&&he.isSmallOrder())return!1;let Ze=j(re,Ue.toRawBytes(),he.toRawBytes(),I);return Ue.add(he.multiplyUnsafe(Ze)).subtract(rt).clearCofactor().equals(v.ZERO)}return N._setWindowSize(8),{CURVE:e,getPublicKey:q,sign:ne,verify:L,ExtendedPoint:v,utils:{getExtendedPublicKey:X,randomPrivateKey:()=>s(t.BYTES),precompute(O=8,I=v.BASE){return I._setWindowSize(O),I.multiply(BigInt(3)),I}}}}var Bl=BigInt(0),W4=BigInt(1);function yL(r){return vo(r,{a:"bigint"},{montgomeryBits:"isSafeInteger",nByteLength:"isSafeInteger",adjustScalarBytes:"function",domain:"function",powPminus2:"function",Gu:"bigint"}),Object.freeze({...r})}function vx(r){let e=yL(r),{P:t}=e,n=S=>Je(S,t),o=e.montgomeryBits,i=Math.ceil(o/8),s=e.nByteLength,a=e.adjustScalarBytes||(S=>S),c=e.powPminus2||(S=>M4(S,t-BigInt(2),t));function l(S,v,N){let W=n(S*(v-N));return v=n(v-W),N=n(N+W),[v,N]}let u=(e.a-BigInt(2))/BigInt(4);function d(S,v){Or("u",S,Bl,t),Or("scalar",v,Bl,t);let N=v,W=S,H=W4,$=Bl,P=S,R=W4,X=Bl,q;for(let ne=BigInt(o-1);ne>=Bl;ne--){let B=N>>ne&W4;X^=B,q=l(X,H,P),H=q[0],P=q[1],q=l(X,$,R),$=q[0],R=q[1],X=B;let L=H+$,K=n(L*L),O=H-$,I=n(O*O),k=K-I,z=P+R,re=P-R,F=n(re*L),xe=n(z*O),Pe=F+xe,he=F-xe;P=n(Pe*Pe),R=n(W*n(he*he)),H=n(K*I),$=n(k*(K+n(u*k)))}q=l(X,H,P),H=q[0],P=q[1],q=l(X,$,R),$=q[0],R=q[1];let j=c($);return n(H*j)}function h(S){return ys(n(S),i)}function m(S){let v=ft("u coordinate",S,i);return s===32&&(v[31]&=127),Qo(v)}function g(S){let v=ft("scalar",S),N=v.length;if(N!==i&&N!==s){let W=""+i+" or "+s;throw new Error("invalid scalar, expected "+W+" bytes, got "+N)}return Qo(a(v))}function w(S,v){let N=m(v),W=g(S),H=d(N,W);if(H===Bl)throw new Error("invalid private or public key received");return h(H)}let y=h(e.Gu);function x(S){return w(S,y)}return{scalarMult:w,scalarMultBase:x,getSharedSecret:(S,v)=>w(S,v),getPublicKey:S=>x(S),utils:{randomPrivateKey:()=>e.randomBytes(e.nByteLength)},GuBytes:y}}var Bd=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),Ex=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752"),aX=BigInt(0),wL=BigInt(1),Sx=BigInt(2),bL=BigInt(3),xL=BigInt(5),vL=BigInt(8);function _x(r){let e=BigInt(10),t=BigInt(20),n=BigInt(40),o=BigInt(80),i=Bd,a=r*r%i*r%i,c=wt(a,Sx,i)*a%i,l=wt(c,wL,i)*r%i,u=wt(l,xL,i)*l%i,d=wt(u,e,i)*u%i,h=wt(d,t,i)*d%i,m=wt(h,n,i)*h%i,g=wt(m,o,i)*m%i,w=wt(g,o,i)*m%i,y=wt(w,e,i)*u%i;return{pow_p_5_8:wt(y,Sx,i)*r%i,b2:a}}function Ix(r){return r[0]&=248,r[31]&=127,r[31]|=64,r}function EL(r,e){let t=Bd,n=Je(e*e*e,t),o=Je(n*n*e,t),i=_x(r*o).pow_p_5_8,s=Je(r*n*i,t),a=Je(e*s*s,t),c=s,l=Je(s*Ex,t),u=a===r,d=a===Je(-r,t),h=a===Je(-r*Ex,t);return u&&(s=c),(d||h)&&(s=l),fx(s,t)&&(s=Je(-s,t)),{isValid:u||d,value:s}}var Ax=bs(Bd,void 0,!0),SL={a:Ax.create(BigInt(-1)),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),Fp:Ax,n:BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),h:vL,Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960"),hash:Si,randomBytes:Na,adjustScalarBytes:Ix,uvRatio:EL},Md=xx(SL);var Ud=vx({P:Bd,a:BigInt(486662),montgomeryBits:255,nByteLength:32,Gu:BigInt(9),powPminus2:r=>{let e=Bd,{pow_p_5_8:t,b2:n}=_x(r);return Je(wt(t,bL,e)*n,e)},adjustScalarBytes:Ix,randomBytes:Na});var Ma=32,Hn=64,G4=32;function Tx(){let r=Md.utils.randomPrivateKey(),e=Md.getPublicKey(r);return{privateKey:AL(r,e),publicKey:e}}function Cx(r,e){let t=r.subarray(0,G4);return Md.sign(e instanceof Uint8Array?e:e.subarray(),t)}function kx(r,e,t){return Md.verify(e,t instanceof Uint8Array?t:t.subarray(),r)}function AL(r,e){let t=new Uint8Array(Hn);for(let n=0;n<G4;n++)t[n]=r[n],t[G4+n]=e[n];return t}var Fd=class{type="Ed25519";raw;constructor(e){this.raw=Ul(e,Ma)}toMultihash(){return Dr.digest(nr(this))}toCID(){return le.createV1(114,this.toMultihash())}toString(){return He.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ge(this.raw,e.raw)}verify(e,t){return kx(this.raw,t,e)}},Ml=class{type="Ed25519";raw;publicKey;constructor(e,t){this.raw=Ul(e,Hn),this.publicKey=new Fd(t)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ge(this.raw,e.raw)}sign(e){return Cx(this.raw,e)}};function z4(r){if(r.length>Hn){r=Ul(r,Hn+Ma);let n=r.subarray(0,Hn),o=r.subarray(Hn,r.length);return new Ml(n,o)}r=Ul(r,Hn);let e=r.subarray(0,Hn),t=r.subarray(Ma);return new Ml(e,t)}function X4(r){return r=Ul(r,Ma),new Fd(r)}async function Rx(){let{privateKey:r,publicKey:e}=Tx();return new Ml(r,e)}function Ul(r,e){if(r=Uint8Array.from(r??[]),r.length!==e)throw new D(`Key must be a Uint8Array of length ${e}, got ${r.length}`);return r}var ht;(function(r){r.RSA="RSA",r.Ed25519="Ed25519",r.secp256k1="secp256k1",r.ECDSA="ECDSA"})(ht||(ht={}));var Y4;(function(r){r[r.RSA=0]="RSA",r[r.Ed25519=1]="Ed25519",r[r.secp256k1=2]="secp256k1",r[r.ECDSA=3]="ECDSA"})(Y4||(Y4={}));(function(r){r.codec=()=>Et(Y4)})(ht||(ht={}));var Jo;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),ht.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.Type=ht.codec().decode(t);break}case 2:{i.Data=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(Jo||(Jo={}));var $d;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),ht.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.Type=ht.codec().decode(t);break}case 2:{i.Data=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})($d||($d={}));function qr(r){if(isNaN(r)||r<=0)throw new D("random bytes length must be a Number bigger than 0");return Na(r)}var Kd=class extends Error{constructor(e="An error occurred while signing a message"){super(e),this.name="SigningError"}},Vd=class extends Error{constructor(e="An error occurred while verifying a message"){super(e),this.name="VerificationError"}},h1=class extends Error{constructor(e="Missing Web Crypto API"){super(e),this.name="WebCryptoMissingError"}};var Dx={get(r=globalThis){let e=r.crypto;if(e?.subtle==null)throw new h1("Missing Web Crypto API. The most likely cause of this error is that this page is being accessed from an insecure context (i.e. not HTTPS). For more information and possible resolutions see https://github.com/libp2p/js-libp2p/blob/main/packages/crypto/README.md#web-crypto-api");return e}};var en=Dx;var qd={};Pt(qd,{MAX_RSA_KEY_SIZE:()=>Q4,generateRSAKeyPair:()=>s6,jwkToJWKKeyPair:()=>Bx,jwkToPkcs1:()=>CL,jwkToPkix:()=>t6,jwkToRSAPrivateKey:()=>i6,pkcs1MessageToJwk:()=>J4,pkcs1MessageToRSAPrivateKey:()=>p1,pkcs1ToJwk:()=>TL,pkcs1ToRSAPrivateKey:()=>r6,pkixMessageToJwk:()=>e6,pkixMessageToRSAPublicKey:()=>o6,pkixToJwk:()=>kL,pkixToRSAPublicKey:()=>n6});var Fl=class{type="RSA";jwk;_raw;_multihash;constructor(e,t){this.jwk=e,this._multihash=t}get raw(){return this._raw==null&&(this._raw=qd.jwkToPkix(this.jwk)),this._raw}toMultihash(){return this._multihash}toCID(){return le.createV1(114,this._multihash)}toString(){return He.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ge(this.raw,e.raw)}verify(e,t){return Lx(this.jwk,t,e)}},Hd=class{type="RSA";jwk;_raw;publicKey;constructor(e,t){this.jwk=e,this.publicKey=t}get raw(){return this._raw==null&&(this._raw=qd.jwkToPkcs1(this.jwk)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ge(this.raw,e.raw)}sign(e){return Ox(this.jwk,e)}};var Q4=8192,Z4=18,_L=1062,IL=Uint8Array.from([48,13,6,9,42,134,72,134,247,13,1,1,1,5,0]);function TL(r){let e=Vn(r);return J4(e)}function J4(r){return{n:M(r[1],"base64url"),e:M(r[2],"base64url"),d:M(r[3],"base64url"),p:M(r[4],"base64url"),q:M(r[5],"base64url"),dp:M(r[6],"base64url"),dq:M(r[7],"base64url"),qi:M(r[8],"base64url"),kty:"RSA"}}function CL(r){if(r.n==null||r.e==null||r.d==null||r.p==null||r.q==null||r.dp==null||r.dq==null||r.qi==null)throw new D("JWK was missing components");return wo([Vr(Uint8Array.from([0])),Vr(V(r.n,"base64url")),Vr(V(r.e,"base64url")),Vr(V(r.d,"base64url")),Vr(V(r.p,"base64url")),Vr(V(r.q,"base64url")),Vr(V(r.dp,"base64url")),Vr(V(r.dq,"base64url")),Vr(V(r.qi,"base64url"))]).subarray()}function kL(r){let e=Vn(r,{offset:0});return e6(e)}function e6(r){let e=Vn(r[1],{offset:0});return{kty:"RSA",n:M(e[0],"base64url"),e:M(e[1],"base64url")}}function t6(r){if(r.n==null||r.e==null)throw new D("JWK was missing components");return wo([IL,Nd(wo([Vr(V(r.n,"base64url")),Vr(V(r.e,"base64url"))]))]).subarray()}function r6(r){let e=Vn(r);return p1(e)}function p1(r){let e=J4(r);return i6(e)}function n6(r,e){if(r.byteLength>=_L)throw new xi("Key size is too large");let t=Vn(r,{offset:0});return o6(t,r,e)}function o6(r,e,t){let n=e6(r);if(t==null){let o=_n(Jo.encode({Type:ht.RSA,Data:e}));t=Nr(Z4,o)}return new Fl(n,t)}function i6(r){if(Ux(r)>Q4)throw new D("Key size is too large");let e=Bx(r),t=_n(Jo.encode({Type:ht.RSA,Data:t6(e.publicKey)})),n=Nr(Z4,t);return new Hd(e.privateKey,new Fl(e.publicKey,n))}async function s6(r){if(r>Q4)throw new D("Key size is too large");let e=await Mx(r),t=_n(Jo.encode({Type:ht.RSA,Data:t6(e.publicKey)})),n=Nr(Z4,t);return new Hd(e.privateKey,new Fl(e.publicKey,n))}function Bx(r){if(r==null)throw new D("Missing key parameter");return{privateKey:r,publicKey:{kty:r.kty,n:r.n,e:r.e}}}async function Mx(r){let e=await en.get().subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:r,publicExponent:new Uint8Array([1,0,1]),hash:{name:"SHA-256"}},!0,["sign","verify"]),t=await PL(e);return{privateKey:t[0],publicKey:t[1]}}async function Ox(r,e){let t=await en.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]),n=await en.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},t,e instanceof Uint8Array?e:e.subarray());return new Uint8Array(n,0,n.byteLength)}async function Lx(r,e,t){let n=await en.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);return en.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},n,e,t instanceof Uint8Array?t:t.subarray())}async function PL(r){if(r.privateKey==null||r.publicKey==null)throw new D("Private and public key are required");return Promise.all([en.get().subtle.exportKey("jwk",r.privateKey),en.get().subtle.exportKey("jwk",r.publicKey)])}function Ux(r){if(r.kty!=="RSA")throw new D("invalid key type");if(r.n==null)throw new D("invalid key modulus");return V(r.n,"base64url").length*8}var m1=class extends Dl{constructor(e,t){super(),this.finished=!1,this.destroyed=!1,ka(e);let n=xo(t);if(this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let o=this.blockLen,i=new Uint8Array(o);i.set(n.length>o?e.create().update(n).digest():n);for(let s=0;s<i.length;s++)i[s]^=54;this.iHash.update(i),this.oHash=e.create();for(let s=0;s<i.length;s++)i[s]^=106;this.oHash.update(i),i.fill(0)}update(e){return Nl(this),this.iHash.update(e),this}digestInto(e){Nl(this),Rl(e,this.outputLen),this.finished=!0,this.iHash.digestInto(e),this.oHash.update(e),this.oHash.digestInto(e),this.destroy()}digest(){let e=new Uint8Array(this.oHash.outputLen);return this.digestInto(e),e}_cloneInto(e){e||(e=Object.create(Object.getPrototypeOf(this),{}));let{oHash:t,iHash:n,finished:o,destroyed:i,blockLen:s,outputLen:a}=this;return e=e,e.finished=o,e.destroyed=i,e.blockLen=s,e.outputLen=a,e.oHash=t._cloneInto(e.oHash),e.iHash=n._cloneInto(e.iHash),e}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}},xs=(r,e,t)=>new m1(r,e).update(t).digest();xs.create=(r,e)=>new m1(r,e);function Fx(r){r.lowS!==void 0&&Yo("lowS",r.lowS),r.prehash!==void 0&&Yo("prehash",r.prehash)}function RL(r){let e=Ld(r);vo(e,{a:"field",b:"field"},{allowedPrivateKeyLengths:"array",wrapPrivateKey:"boolean",isTorsionFree:"function",clearCofactor:"function",allowInfinityPoint:"boolean",fromBytes:"function",toBytes:"function"});let{endo:t,Fp:n,a:o}=e;if(t){if(!n.eql(o,n.ZERO))throw new Error("invalid endomorphism, can only be defined for Koblitz curves that have a=0");if(typeof t!="object"||typeof t.beta!="bigint"||typeof t.splitScalar!="function")throw new Error("invalid endomorphism, expected beta: bigint and splitScalar: function")}return Object.freeze({...e})}var a6=class extends Error{constructor(e=""){super(e)}},Ii={Err:a6,_tlv:{encode:(r,e)=>{let{Err:t}=Ii;if(r<0||r>256)throw new t("tlv.encode: wrong tag");if(e.length&1)throw new t("tlv.encode: unpadded data");let n=e.length/2,o=Dd(n);if(o.length/2&128)throw new t("tlv.encode: long form length too big");let i=n>127?Dd(o.length/2|128):"";return Dd(r)+i+o+e},decode(r,e){let{Err:t}=Ii,n=0;if(r<0||r>256)throw new t("tlv.encode: wrong tag");if(e.length<2||e[n++]!==r)throw new t("tlv.decode: wrong tlv");let o=e[n++],i=!!(o&128),s=0;if(!i)s=o;else{let c=o&127;if(!c)throw new t("tlv.decode(long): indefinite length not supported");if(c>4)throw new t("tlv.decode(long): byte length is too big");let l=e.subarray(n,n+c);if(l.length!==c)throw new t("tlv.decode: length bytes not complete");if(l[0]===0)throw new t("tlv.decode(long): zero leftmost byte");for(let u of l)s=s<<8|u;if(n+=c,s<128)throw new t("tlv.decode(long): not minimal encoding")}let a=e.subarray(n,n+s);if(a.length!==s)throw new t("tlv.decode: wrong value length");return{v:a,l:e.subarray(n+s)}}},_int:{encode(r){let{Err:e}=Ii;if(r<Ti)throw new e("integer: negative integers are not allowed");let t=Dd(r);if(Number.parseInt(t[0],16)&8&&(t="00"+t),t.length&1)throw new e("unexpected DER parsing assertion: unpadded hex");return t},decode(r){let{Err:e}=Ii;if(r[0]&128)throw new e("invalid signature integer: negative");if(r[0]===0&&!(r[1]&128))throw new e("invalid signature integer: unnecessary leading zero");return _i(r)}},toSig(r){let{Err:e,_int:t,_tlv:n}=Ii,o=ft("signature",r),{v:i,l:s}=n.decode(48,o);if(s.length)throw new e("invalid signature: left bytes after parsing");let{v:a,l:c}=n.decode(2,i),{v:l,l:u}=n.decode(2,c);if(u.length)throw new e("invalid signature: left bytes after parsing");return{r:t.decode(a),s:t.decode(l)}},hexFromSig(r){let{_tlv:e,_int:t}=Ii,n=e.encode(2,t.encode(r.r)),o=e.encode(2,t.encode(r.s)),i=n+o;return e.encode(48,i)}},Ti=BigInt(0),or=BigInt(1),tY=BigInt(2),$x=BigInt(3),rY=BigInt(4);function NL(r){let e=RL(r),{Fp:t}=e,n=bs(e.n,e.nBitLength),o=e.toBytes||((w,y,x)=>{let S=y.toAffine();return ws(Uint8Array.from([4]),t.toBytes(S.x),t.toBytes(S.y))}),i=e.fromBytes||(w=>{let y=w.subarray(1),x=t.fromBytes(y.subarray(0,t.BYTES)),S=t.fromBytes(y.subarray(t.BYTES,2*t.BYTES));return{x,y:S}});function s(w){let{a:y,b:x}=e,S=t.sqr(w),v=t.mul(S,w);return t.add(t.add(v,t.mul(w,y)),x)}if(!t.eql(t.sqr(e.Gy),s(e.Gx)))throw new Error("bad generator point: equation left != right");function a(w){return l1(w,or,e.n)}function c(w){let{allowedPrivateKeyLengths:y,nByteLength:x,wrapPrivateKey:S,n:v}=e;if(y&&typeof w!="bigint"){if(Da(w)&&(w=gs(w)),typeof w!="string"||!y.includes(w.length))throw new Error("invalid private key");w=w.padStart(x*2,"0")}let N;try{N=typeof w=="bigint"?w:_i(ft("private key",w,x))}catch{throw new Error("invalid private key, expected hex or "+x+" bytes, got "+typeof w)}return S&&(N=Je(N,v)),Or("private key",N,or,v),N}function l(w){if(!(w instanceof h))throw new Error("ProjectivePoint expected")}let u=Ll((w,y)=>{let{px:x,py:S,pz:v}=w;if(t.eql(v,t.ONE))return{x,y:S};let N=w.is0();y==null&&(y=N?t.ONE:t.inv(v));let W=t.mul(x,y),H=t.mul(S,y),$=t.mul(v,y);if(N)return{x:t.ZERO,y:t.ZERO};if(!t.eql($,t.ONE))throw new Error("invZ was invalid");return{x:W,y:H}}),d=Ll(w=>{if(w.is0()){if(e.allowInfinityPoint&&!t.is0(w.py))return;throw new Error("bad point: ZERO")}let{x:y,y:x}=w.toAffine();if(!t.isValid(y)||!t.isValid(x))throw new Error("bad point: x or y not FE");let S=t.sqr(x),v=s(y);if(!t.eql(S,v))throw new Error("bad point: equation left != right");if(!w.isTorsionFree())throw new Error("bad point: not in prime-order subgroup");return!0});class h{constructor(y,x,S){if(y==null||!t.isValid(y))throw new Error("x required");if(x==null||!t.isValid(x))throw new Error("y required");if(S==null||!t.isValid(S))throw new Error("z required");this.px=y,this.py=x,this.pz=S,Object.freeze(this)}static fromAffine(y){let{x,y:S}=y||{};if(!y||!t.isValid(x)||!t.isValid(S))throw new Error("invalid affine point");if(y instanceof h)throw new Error("projective point not allowed");let v=N=>t.eql(N,t.ZERO);return v(x)&&v(S)?h.ZERO:new h(x,S,t.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(y){let x=t.invertBatch(y.map(S=>S.pz));return y.map((S,v)=>S.toAffine(x[v])).map(h.fromAffine)}static fromHex(y){let x=h.fromAffine(i(ft("pointHex",y)));return x.assertValidity(),x}static fromPrivateKey(y){return h.BASE.multiply(c(y))}static msm(y,x){return f1(h,n,y,x)}_setWindowSize(y){g.setWindowSize(this,y)}assertValidity(){d(this)}hasEvenY(){let{y}=this.toAffine();if(t.isOdd)return!t.isOdd(y);throw new Error("Field doesn't support isOdd")}equals(y){l(y);let{px:x,py:S,pz:v}=this,{px:N,py:W,pz:H}=y,$=t.eql(t.mul(x,H),t.mul(N,v)),P=t.eql(t.mul(S,H),t.mul(W,v));return $&&P}negate(){return new h(this.px,t.neg(this.py),this.pz)}double(){let{a:y,b:x}=e,S=t.mul(x,$x),{px:v,py:N,pz:W}=this,H=t.ZERO,$=t.ZERO,P=t.ZERO,R=t.mul(v,v),X=t.mul(N,N),q=t.mul(W,W),j=t.mul(v,N);return j=t.add(j,j),P=t.mul(v,W),P=t.add(P,P),H=t.mul(y,P),$=t.mul(S,q),$=t.add(H,$),H=t.sub(X,$),$=t.add(X,$),$=t.mul(H,$),H=t.mul(j,H),P=t.mul(S,P),q=t.mul(y,q),j=t.sub(R,q),j=t.mul(y,j),j=t.add(j,P),P=t.add(R,R),R=t.add(P,R),R=t.add(R,q),R=t.mul(R,j),$=t.add($,R),q=t.mul(N,W),q=t.add(q,q),R=t.mul(q,j),H=t.sub(H,R),P=t.mul(q,X),P=t.add(P,P),P=t.add(P,P),new h(H,$,P)}add(y){l(y);let{px:x,py:S,pz:v}=this,{px:N,py:W,pz:H}=y,$=t.ZERO,P=t.ZERO,R=t.ZERO,X=e.a,q=t.mul(e.b,$x),j=t.mul(x,N),ne=t.mul(S,W),B=t.mul(v,H),L=t.add(x,S),K=t.add(N,W);L=t.mul(L,K),K=t.add(j,ne),L=t.sub(L,K),K=t.add(x,v);let O=t.add(N,H);return K=t.mul(K,O),O=t.add(j,B),K=t.sub(K,O),O=t.add(S,v),$=t.add(W,H),O=t.mul(O,$),$=t.add(ne,B),O=t.sub(O,$),R=t.mul(X,K),$=t.mul(q,B),R=t.add($,R),$=t.sub(ne,R),R=t.add(ne,R),P=t.mul($,R),ne=t.add(j,j),ne=t.add(ne,j),B=t.mul(X,B),K=t.mul(q,K),ne=t.add(ne,B),B=t.sub(j,B),B=t.mul(X,B),K=t.add(K,B),j=t.mul(ne,K),P=t.add(P,j),j=t.mul(O,K),$=t.mul(L,$),$=t.sub($,j),j=t.mul(L,ne),R=t.mul(O,R),R=t.add(R,j),new h($,P,R)}subtract(y){return this.add(y.negate())}is0(){return this.equals(h.ZERO)}wNAF(y){return g.wNAFCached(this,y,h.normalizeZ)}multiplyUnsafe(y){let{endo:x,n:S}=e;Or("scalar",y,Ti,S);let v=h.ZERO;if(y===Ti)return v;if(this.is0()||y===or)return this;if(!x||g.hasPrecomputes(this))return g.wNAFCachedUnsafe(this,y,h.normalizeZ);let{k1neg:N,k1:W,k2neg:H,k2:$}=x.splitScalar(y),P=v,R=v,X=this;for(;W>Ti||$>Ti;)W&or&&(P=P.add(X)),$&or&&(R=R.add(X)),X=X.double(),W>>=or,$>>=or;return N&&(P=P.negate()),H&&(R=R.negate()),R=new h(t.mul(R.px,x.beta),R.py,R.pz),P.add(R)}multiply(y){let{endo:x,n:S}=e;Or("scalar",y,or,S);let v,N;if(x){let{k1neg:W,k1:H,k2neg:$,k2:P}=x.splitScalar(y),{p:R,f:X}=this.wNAF(H),{p:q,f:j}=this.wNAF(P);R=g.constTimeNegate(W,R),q=g.constTimeNegate($,q),q=new h(t.mul(q.px,x.beta),q.py,q.pz),v=R.add(q),N=X.add(j)}else{let{p:W,f:H}=this.wNAF(y);v=W,N=H}return h.normalizeZ([v,N])[0]}multiplyAndAddUnsafe(y,x,S){let v=h.BASE,N=(H,$)=>$===Ti||$===or||!H.equals(v)?H.multiplyUnsafe($):H.multiply($),W=N(this,x).add(N(y,S));return W.is0()?void 0:W}toAffine(y){return u(this,y)}isTorsionFree(){let{h:y,isTorsionFree:x}=e;if(y===or)return!0;if(x)return x(h,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){let{h:y,clearCofactor:x}=e;return y===or?this:x?x(h,this):this.multiplyUnsafe(e.h)}toRawBytes(y=!0){return Yo("isCompressed",y),this.assertValidity(),o(h,this,y)}toHex(y=!0){return Yo("isCompressed",y),gs(this.toRawBytes(y))}}h.BASE=new h(e.Gx,e.Gy,t.ONE),h.ZERO=new h(t.ZERO,t.ONE,t.ZERO);let m=e.nBitLength,g=d1(h,e.endo?Math.ceil(m/2):m);return{CURVE:e,ProjectivePoint:h,normPrivateKeyToScalar:c,weierstrassEquation:s,isWithinCurveOrder:a}}function DL(r){let e=Ld(r);return vo(e,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...e})}function Kx(r){let e=DL(r),{Fp:t,n}=e,o=t.BYTES+1,i=2*t.BYTES+1;function s(B){return Je(B,n)}function a(B){return u1(B,n)}let{ProjectivePoint:c,normPrivateKeyToScalar:l,weierstrassEquation:u,isWithinCurveOrder:d}=NL({...e,toBytes(B,L,K){let O=L.toAffine(),I=t.toBytes(O.x),k=ws;return Yo("isCompressed",K),K?k(Uint8Array.from([L.hasEvenY()?2:3]),I):k(Uint8Array.from([4]),I,t.toBytes(O.y))},fromBytes(B){let L=B.length,K=B[0],O=B.subarray(1);if(L===o&&(K===2||K===3)){let I=_i(O);if(!l1(I,or,t.ORDER))throw new Error("Point is not on curve");let k=u(I),z;try{z=t.sqrt(k)}catch(xe){let Pe=xe instanceof Error?": "+xe.message:"";throw new Error("Point is not on curve"+Pe)}let re=(z&or)===or;return(K&1)===1!==re&&(z=t.neg(z)),{x:I,y:z}}else if(L===i&&K===4){let I=t.fromBytes(O.subarray(0,t.BYTES)),k=t.fromBytes(O.subarray(t.BYTES,2*t.BYTES));return{x:I,y:k}}else{let I=o,k=i;throw new Error("invalid Point, expected length of "+I+", or uncompressed "+k+", got "+L)}}}),h=B=>gs(Oa(B,e.nByteLength));function m(B){let L=n>>or;return B>L}function g(B){return m(B)?s(-B):B}let w=(B,L,K)=>_i(B.slice(L,K));class y{constructor(L,K,O){Or("r",L,or,n),Or("s",K,or,n),this.r=L,this.s=K,O!=null&&(this.recovery=O),Object.freeze(this)}static fromCompact(L){let K=e.nByteLength;return L=ft("compactSignature",L,K*2),new y(w(L,0,K),w(L,K,2*K))}static fromDER(L){let{r:K,s:O}=Ii.toSig(ft("DER",L));return new y(K,O)}assertValidity(){}addRecoveryBit(L){return new y(this.r,this.s,L)}recoverPublicKey(L){let{r:K,s:O,recovery:I}=this,k=H(ft("msgHash",L));if(I==null||![0,1,2,3].includes(I))throw new Error("recovery id invalid");let z=I===2||I===3?K+e.n:K;if(z>=t.ORDER)throw new Error("recovery id 2 or 3 invalid");let re=(I&1)===0?"02":"03",F=c.fromHex(re+h(z)),xe=a(z),Pe=s(-k*xe),he=s(O*xe),Ue=c.BASE.multiplyAndAddUnsafe(F,Pe,he);if(!Ue)throw new Error("point at infinify");return Ue.assertValidity(),Ue}hasHighS(){return m(this.s)}normalizeS(){return this.hasHighS()?new y(this.r,s(-this.s),this.recovery):this}toDERRawBytes(){return Od(this.toDERHex())}toDERHex(){return Ii.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return Od(this.toCompactHex())}toCompactHex(){return h(this.r)+h(this.s)}}let x={isValidPrivateKey(B){try{return l(B),!0}catch{return!1}},normPrivateKeyToScalar:l,randomPrivateKey:()=>{let B=$4(e.n);return px(e.randomBytes(B),e.n)},precompute(B=8,L=c.BASE){return L._setWindowSize(B),L.multiply(BigInt(3)),L}};function S(B,L=!0){return c.fromPrivateKey(B).toRawBytes(L)}function v(B){let L=Da(B),K=typeof B=="string",O=(L||K)&&B.length;return L?O===o||O===i:K?O===2*o||O===2*i:B instanceof c}function N(B,L,K=!0){if(v(B))throw new Error("first arg must be private key");if(!v(L))throw new Error("second arg must be public key");return c.fromHex(L).multiply(l(B)).toRawBytes(K)}let W=e.bits2int||function(B){if(B.length>8192)throw new Error("input is too large");let L=_i(B),K=B.length*8-e.nBitLength;return K>0?L>>BigInt(K):L},H=e.bits2int_modN||function(B){return s(W(B))},$=La(e.nBitLength);function P(B){return Or("num < 2^"+e.nBitLength,B,Ti,$),Oa(B,e.nByteLength)}function R(B,L,K=X){if(["recovered","canonical"].some(Ze=>Ze in K))throw new Error("sign() legacy options not supported");let{hash:O,randomBytes:I}=e,{lowS:k,prehash:z,extraEntropy:re}=K;k==null&&(k=!0),B=ft("msgHash",B),Fx(K),z&&(B=ft("prehashed msgHash",O(B)));let F=H(B),xe=l(L),Pe=[P(xe),P(F)];if(re!=null&&re!==!1){let Ze=re===!0?I(t.BYTES):re;Pe.push(ft("extraEntropy",Ze))}let he=ws(...Pe),Ue=F;function rt(Ze){let ut=W(Ze);if(!d(ut))return;let mt=a(ut),Bt=c.BASE.multiply(ut).toAffine(),Tt=s(Bt.x);if(Tt===Ti)return;let Tr=s(mt*s(Ue+Tt*xe));if(Tr===Ti)return;let vn=(Bt.x===Tt?0:2)|Number(Bt.y&or),bi=Tr;return k&&m(Tr)&&(bi=g(Tr),vn^=1),new y(Tt,bi,vn)}return{seed:he,k2sig:rt}}let X={lowS:e.lowS,prehash:!1},q={lowS:e.lowS,prehash:!1};function j(B,L,K=X){let{seed:O,k2sig:I}=R(B,L,K),k=e;return lx(k.hash.outputLen,k.nByteLength,k.hmac)(O,I)}c.BASE._setWindowSize(8);function ne(B,L,K,O=q){let I=B;L=ft("msgHash",L),K=ft("publicKey",K);let{lowS:k,prehash:z,format:re}=O;if(Fx(O),"strict"in O)throw new Error("options.strict was renamed to lowS");if(re!==void 0&&re!=="compact"&&re!=="der")throw new Error("format must be compact or der");let F=typeof I=="string"||Da(I),xe=!F&&!re&&typeof I=="object"&&I!==null&&typeof I.r=="bigint"&&typeof I.s=="bigint";if(!F&&!xe)throw new Error("invalid signature, expected Uint8Array, hex string or Signature instance");let Pe,he;try{if(xe&&(Pe=new y(I.r,I.s)),F){try{re!=="compact"&&(Pe=y.fromDER(I))}catch(vn){if(!(vn instanceof Ii.Err))throw vn}!Pe&&re!=="der"&&(Pe=y.fromCompact(I))}he=c.fromHex(K)}catch{return!1}if(!Pe||k&&Pe.hasHighS())return!1;z&&(L=e.hash(L));let{r:Ue,s:rt}=Pe,Ze=H(L),ut=a(rt),mt=s(Ze*ut),Bt=s(Ue*ut),Tt=c.BASE.multiplyAndAddUnsafe(he,mt,Bt)?.toAffine();return Tt?s(Tt.x)===Ue:!1}return{CURVE:e,getPublicKey:S,getSharedSecret:N,sign:j,verify:ne,ProjectivePoint:c,Signature:y,utils:x}}function OL(r){return{hash:r,hmac:(e,...t)=>xs(r,e,T4(...t)),randomBytes:Na}}function Vx(r,e){let t=n=>Kx({...r,...OL(n)});return{...t(e),create:t}}var jx=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),Hx=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),LL=BigInt(1),c6=BigInt(2),qx=(r,e)=>(r+e/c6)/e;function BL(r){let e=jx,t=BigInt(3),n=BigInt(6),o=BigInt(11),i=BigInt(22),s=BigInt(23),a=BigInt(44),c=BigInt(88),l=r*r*r%e,u=l*l*r%e,d=wt(u,t,e)*u%e,h=wt(d,t,e)*u%e,m=wt(h,c6,e)*l%e,g=wt(m,o,e)*m%e,w=wt(g,i,e)*g%e,y=wt(w,a,e)*w%e,x=wt(y,c,e)*y%e,S=wt(x,a,e)*w%e,v=wt(S,t,e)*u%e,N=wt(v,s,e)*g%e,W=wt(N,n,e)*l%e,H=wt(W,c6,e);if(!l6.eql(l6.sqr(H),r))throw new Error("Cannot find square root");return H}var l6=bs(jx,void 0,void 0,{sqrt:BL}),qn=Vx({a:BigInt(0),b:BigInt(7),Fp:l6,n:Hx,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:r=>{let e=Hx,t=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-LL*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),o=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),i=t,s=BigInt("0x100000000000000000000000000000000"),a=qx(i*r,e),c=qx(-n*r,e),l=Je(r-a*t-c*o,e),u=Je(-a*n-c*i,e),d=l>s,h=u>s;if(d&&(l=e-l),h&&(u=e-u),l>s||u>s)throw new Error("splitScalar: Endomorphism failed, k="+r);return{k1neg:d,k1:l,k2neg:h,k2:u}}}},_n),dY=BigInt(0);var fY=qn.ProjectivePoint;function u6(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var Wx=32;function Gx(r,e){let t=yt.digest(e instanceof Uint8Array?e:e.subarray());if(u6(t))return t.then(({digest:n})=>qn.sign(n,r).toDERRawBytes()).catch(n=>{throw new Kd(String(n))});try{return qn.sign(t.digest,r).toDERRawBytes()}catch(n){throw new Kd(String(n))}}function zx(r,e,t){let n=yt.digest(t instanceof Uint8Array?t:t.subarray());if(u6(n))return n.then(({digest:o})=>qn.verify(e,o,r)).catch(o=>{throw new Vd(String(o))});try{return qn.verify(e,n.digest,r)}catch(o){throw new Vd(String(o))}}var jd=class{type="secp256k1";raw;_key;constructor(e){this._key=Qx(e),this.raw=Xx(this._key)}toMultihash(){return Dr.digest(nr(this))}toCID(){return le.createV1(114,this.toMultihash())}toString(){return He.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ge(this.raw,e.raw)}verify(e,t){return zx(this._key,t,e)}},Wd=class{type="secp256k1";raw;publicKey;constructor(e,t){this.raw=Yx(e),this.publicKey=new jd(t??Zx(e))}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ge(this.raw,e.raw)}sign(e){return Gx(this.raw,e)}};function d6(r){return new Wd(r)}function f6(r){return new jd(r)}async function Jx(){let r=ML();return new Wd(r)}function Xx(r){return qn.ProjectivePoint.fromHex(r).toRawBytes(!0)}function Yx(r){try{return qn.getPublicKey(r,!0),r}catch(e){throw new vd(String(e))}}function Qx(r){try{return qn.ProjectivePoint.fromHex(r),r}catch(e){throw new xi(String(e))}}function Zx(r){try{return qn.getPublicKey(r,!0)}catch(e){throw new vd(String(e))}}function ML(){return qn.utils.randomPrivateKey()}async function $l(r,e){if(r==="Ed25519")return Rx();if(r==="secp256k1")return Jx();if(r==="RSA")return s6(UL(e));if(r==="ECDSA")return Zb(FL(e));throw new ho}function $t(r,e){let{Type:t,Data:n}=Jo.decode(r),o=n??new Uint8Array;switch(t){case ht.RSA:return n6(o,e);case ht.Ed25519:return X4(o);case ht.secp256k1:return f6(o);case ht.ECDSA:return I4(o);default:throw new ho}}function g1(r){let{Type:e,Data:t}=Jo.decode(r.digest),n=t??new Uint8Array;switch(e){case ht.Ed25519:return X4(n);case ht.secp256k1:return f6(n);case ht.ECDSA:return I4(n);default:throw new ho}}function nr(r){return Jo.encode({Type:ht[r.type],Data:r.raw})}function ev(r){let e=$d.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case ht.RSA:return r6(t);case ht.Ed25519:return z4(t);case ht.secp256k1:return d6(t);case ht.ECDSA:return Gb(t);default:throw new ho}}function tv(r){if(r.byteLength===Hn)return z4(r);if(r.byteLength===Wx)return d6(r);let e=Vn(r),t=e[2]?.[0];if(t===Ub||t===Fb||t===$b)return _4(e);if(e.length>8)return p1(e);throw new D("Could not extract private key from raw bytes")}function Ua(r){return $d.encode({Type:ht[r.type],Data:r.raw})}function UL(r){return r==null?2048:parseInt(r,10)}function FL(r){if(r==="P-256"||r==null)return"P-256";if(r==="P-384")return"P-384";if(r==="P-521")return"P-521";throw new D("Unsupported curve, should be P-256, P-384 or P-521")}async function y1(r){if(r.type==="RSA")return{privateKey:await crypto.subtle.importKey("jwk",r.jwk,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["sign"]),publicKey:await crypto.subtle.importKey("jwk",r.publicKey.jwk,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!0,["verify"])};if(r.type==="ECDSA")return{privateKey:await crypto.subtle.importKey("jwk",r.jwk,{name:"ECDSA",namedCurve:r.jwk.crv??"P-256"},!0,["sign"]),publicKey:await crypto.subtle.importKey("jwk",r.publicKey.jwk,{name:"ECDSA",namedCurve:r.publicKey.jwk.crv??"P-256"},!0,["verify"])};throw new D("Only RSA and ECDSA keys are supported")}var rv=Symbol.for("nodejs.util.inspect.custom"),$L=114,Gd=class{type;multihash;publicKey;string;constructor(e){this.type=e.type,this.multihash=e.multihash,Object.defineProperty(this,"string",{enumerable:!1,writable:!0})}get[Symbol.toStringTag](){return`PeerId(${this.toString()})`}[Ip]=!0;toString(){return this.string==null&&(this.string=He.encode(this.multihash.bytes).slice(1)),this.string}toMultihash(){return this.multihash}toCID(){return le.createV1($L,this.multihash)}toJSON(){return this.toString()}equals(e){if(e==null)return!1;if(e instanceof Uint8Array)return ge(this.multihash.bytes,e);if(typeof e=="string")return this.toString()===e;if(e?.toMultihash()?.bytes!=null)return ge(this.multihash.bytes,e.toMultihash().bytes);throw new Error("not valid Id")}[rv](){return`PeerId(${this.toString()})`}},zd=class extends Gd{type="RSA";publicKey;constructor(e){super({...e,type:"RSA"}),this.publicKey=e.publicKey}},Xd=class extends Gd{type="Ed25519";publicKey;constructor(e){super({...e,type:"Ed25519"}),this.publicKey=e.publicKey}},Yd=class extends Gd{type="secp256k1";publicKey;constructor(e){super({...e,type:"secp256k1"}),this.publicKey=e.publicKey}},KL=2336,Qd=class{type="url";multihash;publicKey;url;constructor(e){this.url=e.toString(),this.multihash=Dr.digest(V(this.url))}[rv](){return`PeerId(${this.url})`}[Ip]=!0;toString(){return this.toCID().toString()}toMultihash(){return this.multihash}toCID(){return le.createV1(KL,this.toMultihash())}toJSON(){return this.toString()}equals(e){return e==null?!1:(e instanceof Uint8Array&&(e=M(e)),e.toString()===this.toString())}};var VL=114,nv=2336;function bt(r,e){let t;if(r.charAt(0)==="1"||r.charAt(0)==="Q")t=Ye(He.decode(`z${r}`));else{if(r.startsWith("k51qzi5uqu5")||r.startsWith("kzwfwjn5ji4")||r.startsWith("k2k4r8")||r.startsWith("bafz"))return Eo(le.parse(r));if(e==null)throw new D('Please pass a multibase decoder for strings that do not start with "1" or "Q"');t=Ye(e.decode(r))}return qt(t)}function ei(r){if(r.type==="Ed25519")return new Xd({multihash:r.toCID().multihash,publicKey:r});if(r.type==="secp256k1")return new Yd({multihash:r.toCID().multihash,publicKey:r});if(r.type==="RSA")return new zd({multihash:r.toCID().multihash,publicKey:r});throw new ho}function ov(r){return ei(r.publicKey)}function qt(r){if(qL(r))return new zd({multihash:r});if(HL(r))try{let e=g1(r);if(e.type==="Ed25519")return new Xd({multihash:r,publicKey:e});if(e.type==="secp256k1")return new Yd({multihash:r,publicKey:e})}catch{let t=M(r.digest);return new Qd(new URL(t))}throw new is("Supplied PeerID Multihash is invalid")}function Eo(r){if(r?.multihash==null||r.version==null||r.version===1&&r.code!==VL&&r.code!==nv)throw new Np("Supplied PeerID CID is invalid");if(r.code===nv){let e=M(r.multihash.digest);return new Qd(new URL(e))}return qt(r.multihash)}function HL(r){return r.code===Dr.code}function qL(r){return r.code===yt.code}function Fa(r,e){let t={[Symbol.iterator]:()=>t,next:()=>{let n=r.next(),o=n.value;return n.done===!0||o==null?{done:!0,value:void 0}:{done:!1,value:e(o)}}};return t}function w1(r){let e=Ye(He.decode(`z${r}`));return qt(e)}var ir=class{map;constructor(e){if(this.map=new Map,e!=null)for(let[t,n]of e.entries())this.map.set(t.toString(),{key:t,value:n})}[Symbol.iterator](){return this.entries()}clear(){this.map.clear()}delete(e){return this.map.delete(e.toString())}entries(){return Fa(this.map.entries(),e=>[e[1].key,e[1].value])}forEach(e){this.map.forEach((t,n)=>{e(t.value,t.key,this)})}get(e){return this.map.get(e.toString())?.value}has(e){return this.map.has(e.toString())}set(e,t){this.map.set(e.toString(),{key:e,value:t})}keys(){return Fa(this.map.values(),e=>e.key)}values(){return Fa(this.map.values(),e=>e.value)}get size(){return this.map.size}};var jr=class r{set;constructor(e){if(this.set=new Set,e!=null)for(let t of e)this.set.add(t.toString())}get size(){return this.set.size}[Symbol.iterator](){return this.values()}add(e){this.set.add(e.toString())}clear(){this.set.clear()}delete(e){this.set.delete(e.toString())}entries(){return Fa(this.set.entries(),e=>{let t=w1(e[0]);return[t,t]})}forEach(e){this.set.forEach(t=>{let n=w1(t);e(n,n,this)})}has(e){return this.set.has(e.toString())}values(){return Fa(this.set.values(),e=>w1(e))}intersection(e){let t=new r;for(let n of e)this.has(n)&&t.add(n);return t}difference(e){let t=new r;for(let n of this)e.has(n)||t.add(n);return t}union(e){let t=new r;for(let n of e)t.add(n);for(let n of this)t.add(n);return t}};function h6(){return new jr}function iv(r,e,t,n){ka(r);let o=rx({dkLen:32,asyncTick:10},n),{c:i,dkLen:s,asyncTick:a}=o;if(us(i),us(s),us(a),i<1)throw new Error("PBKDF2: iterations (c) should be >= 1");let c=xo(e),l=xo(t),u=new Uint8Array(s),d=xs.create(r,c),h=d._cloneInto().update(l);return{c:i,dkLen:s,asyncTick:a,DK:u,PRF:d,PRFSalt:h}}function sv(r,e,t,n,o){return r.destroy(),e.destroy(),n&&n.destroy(),o.fill(0),t}function av(r,e,t,n){let{c:o,dkLen:i,DK:s,PRF:a,PRFSalt:c}=iv(r,e,t,n),l,u=new Uint8Array(4),d=Ra(u),h=new Uint8Array(a.outputLen);for(let m=1,g=0;g<i;m++,g+=a.outputLen){let w=s.subarray(g,g+a.outputLen);d.setInt32(0,m,!1),(l=c._cloneInto(l)).update(u).digestInto(h),w.set(h.subarray(0,w.length));for(let y=1;y<o;y++){a._cloneInto(l).update(h).digestInto(h);for(let x=0;x<w.length;x++)w[x]^=h[x]}}return sv(a,c,s,l,h)}async function b1(r,e,t,n){let{c:o,dkLen:i,asyncTick:s,DK:a,PRF:c,PRFSalt:l}=iv(r,e,t,n),u,d=new Uint8Array(4),h=Ra(d),m=new Uint8Array(c.outputLen);for(let g=1,w=0;w<i;g++,w+=c.outputLen){let y=a.subarray(w,w+c.outputLen);h.setInt32(0,g,!1),(u=l._cloneInto(u)).update(d).digestInto(m),y.set(m.subarray(0,y.length)),await ex(o-1,s,()=>{c._cloneInto(u).update(m).digestInto(m);for(let x=0;x<y.length;x++)y[x]^=m[x]})}return sv(c,l,a,u,m)}var Zd=new Uint32Array([1732584193,4023233417,2562383102,271733878,3285377520]),vs=new Uint32Array(80),x1=class extends ds{constructor(){super(64,20,8,!1),this.A=Zd[0]|0,this.B=Zd[1]|0,this.C=Zd[2]|0,this.D=Zd[3]|0,this.E=Zd[4]|0}get(){let{A:e,B:t,C:n,D:o,E:i}=this;return[e,t,n,o,i]}set(e,t,n,o,i){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=i|0}process(e,t){for(let c=0;c<16;c++,t+=4)vs[c]=e.getUint32(t,!1);for(let c=16;c<80;c++)vs[c]=i1(vs[c-3]^vs[c-8]^vs[c-14]^vs[c-16],1);let{A:n,B:o,C:i,D:s,E:a}=this;for(let c=0;c<80;c++){let l,u;c<20?(l=s1(o,i,s),u=1518500249):c<40?(l=o^i^s,u=1859775393):c<60?(l=a1(o,i,s),u=2400959708):(l=o^i^s,u=3395469782);let d=i1(n,5)+l+a+u+vs[c]|0;a=s,s=i,i=i1(o,30),o=n,n=d}n=n+this.A|0,o=o+this.B|0,i=i+this.C|0,s=s+this.D|0,a=a+this.E|0,this.set(n,o,i,s,a)}roundClean(){vs.fill(0)}destroy(){this.set(0,0,0,0,0),this.buffer.fill(0)}},p6=Ol(()=>new x1),SQ=2**32;var cv={sha1:p6,"sha2-256":_n,"sha2-512":Si};function Jd(r,e,t,n,o){if(o!=="sha1"&&o!=="sha2-256"&&o!=="sha2-512"){let a=Object.keys(cv).join(" / ");throw new D(`Hash '${o}' is unknown or not supported. Must be ${a}`)}let i=cv[o],s=av(i,r,e,{c:t,dkLen:n});return Ht.encode(s).substring(1)}var m6={32:16777619n,64:1099511628211n,128:309485009821345068724781371n,256:374144419156711147060143317175368453031918731002211n,512:35835915874844867368919076489095108449946327955754392558399825615420669938882575126094039892345713852759n,1024:5016456510113118655434598811035278955030765345404790744303017523831112055108147451509157692220295382716162651878526895249385292291816524375083746691371804094271873160484737966720260389217684476157468082573n},lv={32:2166136261n,64:14695981039346656037n,128:144066263297769815596495629667062367629n,256:100029257958052580907070968620625704837092796014241193945225284501741471925557n,512:9659303129496669498009435400716310466090418745672637896108374329434462657994582932197716438449813051892206539805784495328239340083876191928701583869517785n,1024:14197795064947621068722070641403218320880622795441933960878474914617582723252296732303717722150864096521202355549365628174669108571814760471015076148029755969804077320157692458563003215304957150157403644460363550505412711285966361610267868082893823963790439336411086884584107735010676915n},uv=new globalThis.TextEncoder;function jL(r,e){let t=m6[e],n=lv[e];for(let o=0;o<r.length;o++)n^=BigInt(r[o]),n=BigInt.asUintN(e,n*t);return n}function WL(r,e,t){if(t.length===0)throw new Error("The `utf8Buffer` option must have a length greater than zero");let n=m6[e],o=lv[e],i=r;for(;i.length>0;){let s=uv.encodeInto(i,t);i=i.slice(s.read);for(let a=0;a<s.written;a++)o^=BigInt(t[a]),o=BigInt.asUintN(e,o*n)}return o}function g6(r,{size:e=32,utf8Buffer:t}={}){if(!m6[e])throw new Error("The `size` option must be one of 32, 64, 128, 256, 512, or 1024");if(typeof r=="string"){if(t)return WL(r,e,t);r=uv.encode(r)}return jL(r,e)}var ef={hash:r=>Number(g6(r,{size:32})),hashV:(r,e)=>GL(ef.hash(r,e))};function GL(r){let e=r.toString(16);return e.length%2===1&&(e=`0${e}`),V(e,"base16")}var y6=64,So=class{fp;h;seed;constructor(e,t,n,o=2){if(o>y6)throw new TypeError("Invalid Fingerprint Size");let i=t.hashV(e,n),s=ke(o);for(let a=0;a<s.length;a++)s[a]=i[a];s.length===0&&(s[0]=7),this.fp=s,this.h=t,this.seed=n}hash(){return this.h.hash(this.fp,this.seed)}equals(e){return e?.fp instanceof Uint8Array?ge(this.fp,e.fp):!1}};function $a(r,e){return Math.floor(Math.random()*(e-r))+r}var Ka=class{contents;constructor(e){this.contents=new Array(e).fill(null)}has(e){if(!(e instanceof So))throw new TypeError("Invalid Fingerprint");return this.contents.some(t=>e.equals(t))}add(e){if(!(e instanceof So))throw new TypeError("Invalid Fingerprint");for(let t=0;t<this.contents.length;t++)if(this.contents[t]==null)return this.contents[t]=e,!0;return!0}swap(e){if(!(e instanceof So))throw new TypeError("Invalid Fingerprint");let t=$a(0,this.contents.length-1),n=this.contents[t];return this.contents[t]=e,n}remove(e){if(!(e instanceof So))throw new TypeError("Invalid Fingerprint");let t=this.contents.findIndex(n=>e.equals(n));return t>-1?(this.contents[t]=null,!0):!1}};var zL=500,tf=class{bucketSize;filterSize;fingerprintSize;buckets;count;hash;seed;constructor(e){this.filterSize=e.filterSize,this.bucketSize=e.bucketSize??4,this.fingerprintSize=e.fingerprintSize??2,this.count=0,this.buckets=[],this.hash=e.hash??ef,this.seed=e.seed??$a(0,Math.pow(2,10))}add(e){typeof e=="string"&&(e=V(e));let t=new So(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,o=(n^t.hash())%this.filterSize;if(this.buckets[n]==null&&(this.buckets[n]=new Ka(this.bucketSize)),this.buckets[o]==null&&(this.buckets[o]=new Ka(this.bucketSize)),this.buckets[n].add(t)||this.buckets[o].add(t))return this.count++,!0;let i=[n,o],s=i[$a(0,i.length-1)];this.buckets[s]==null&&(this.buckets[s]=new Ka(this.bucketSize));for(let a=0;a<zL;a++){let c=this.buckets[s].swap(t);if(c!=null&&(s=(s^c.hash())%this.filterSize,this.buckets[s]==null&&(this.buckets[s]=new Ka(this.bucketSize)),this.buckets[s].add(c)))return this.count++,!0}return!1}has(e){typeof e=="string"&&(e=V(e));let t=new So(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,o=this.buckets[n]?.has(t)??!1;if(o)return o;let i=(n^t.hash())%this.filterSize;return this.buckets[i]?.has(t)??!1}remove(e){typeof e=="string"&&(e=V(e));let t=new So(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,o=this.buckets[n]?.remove(t)??!1;if(o)return this.count--,o;let i=(n^t.hash())%this.filterSize,s=this.buckets[i]?.remove(t)??!1;return s&&this.count--,s}get reliable(){return Math.floor(100*(this.count/this.filterSize))<=90}},XL={1:.5,2:.84,4:.95,8:.98};function YL(r=.001){return r>.002?2:r>1e-5?4:8}function dv(r,e=.001){let t=YL(e),n=XL[t],o=Math.round(r/n),i=Math.min(Math.ceil(Math.log2(1/e)+Math.log2(2*t)),y6);return{filterSize:o,bucketSize:t,fingerprintSize:i}}var v1=class{filterSize;bucketSize;fingerprintSize;scale;filterSeries;hash;seed;constructor(e){this.bucketSize=e.bucketSize??4,this.filterSize=e.filterSize??(1<<18)/this.bucketSize,this.fingerprintSize=e.fingerprintSize??2,this.scale=e.scale??2,this.hash=e.hash??ef,this.seed=e.seed??$a(0,Math.pow(2,10)),this.filterSeries=[new tf({filterSize:this.filterSize,bucketSize:this.bucketSize,fingerprintSize:this.fingerprintSize,hash:this.hash,seed:this.seed})]}add(e){if(typeof e=="string"&&(e=V(e)),this.has(e))return!0;let t=this.filterSeries.find(n=>n.reliable);if(t==null){let n=this.filterSize*Math.pow(this.scale,this.filterSeries.length);t=new tf({filterSize:n,bucketSize:this.bucketSize,fingerprintSize:this.fingerprintSize,hash:this.hash,seed:this.seed}),this.filterSeries.push(t)}return t.add(e)}has(e){typeof e=="string"&&(e=V(e));for(let t=0;t<this.filterSeries.length;t++)if(this.filterSeries[t].has(e))return!0;return!1}remove(e){typeof e=="string"&&(e=V(e));for(let t=0;t<this.filterSeries.length;t++)if(this.filterSeries[t].remove(e))return!0;return!1}get count(){return this.filterSeries.reduce((e,t)=>e+t.count,0)}};function tn(r,e=.001,t){return new v1({...dv(r,e),...t??{}})}var E1=class{filter;constructor(e,t){this.filter=tn(e,t)}has(e){return this.filter.has(e.toMultihash().bytes)}add(e){this.filter.add(e.toMultihash().bytes)}remove(e){this.filter.remove?.(e.toMultihash().bytes)}};function w6(r,e=.001){return new E1(r,e)}var b6=class extends ir{metric;constructor(e){super();let{name:t,metrics:n}=e;this.metric=n.registerMetric(t),this.updateComponentMetric()}set(e,t){return super.set(e,t),this.updateComponentMetric(),this}delete(e){let t=super.delete(e);return this.updateComponentMetric(),t}clear(){super.clear(),this.updateComponentMetric()}updateComponentMetric(){this.metric.update(this.size)}};function rf(r){let{name:e,metrics:t}=r,n;return t!=null?n=new b6({name:e,metrics:t}):n=new ir,n}var Ci=class{full;pendingBytes;wantlist;blocks;blockPresences;constructor(e=!1,t=0){this.full=e,this.wantlist=new Map,this.blocks=new Map,this.blockPresences=new Map,this.pendingBytes=0}addWantlistEntry(e,t){let n=Ht.encode(e.multihash.bytes);this.wantlist.set(n,t)}addBlockPresence(e,t){let n=Ht.encode(e.multihash.bytes);this.blockPresences.set(n,t)}addBlock(e,t){let n=Ht.encode(e.multihash.bytes);this.blocks.set(n,t)}};function QL(r){let e=new Uint8Array(r.reduce((n,o)=>n+Ce(o),0)),t=0;for(let n of r)e=Fe(n,e,t),t+=Ce(n);return e}var fv=QL;function x6(r){return fv([r.version,r.code,r.multihash.code,r.multihash.digest.byteLength])}var S1=class{peerId;blockstore;network;wants;exchangeCount;bytesSent;bytesReceived;lastExchange;maxSizeReplaceHasWithBlock;log;constructor(e,t){this.peerId=e.peerId,this.blockstore=e.blockstore,this.network=e.network,this.wants=new Map,this.log=e.logger.forComponent(`helia:bitswap:ledger:${e.peerId}`),this.exchangeCount=0,this.bytesSent=0,this.bytesReceived=0,this.maxSizeReplaceHasWithBlock=t.maxSizeReplaceHasWithBlock??1024}sentBytes(e){this.exchangeCount++,this.lastExchange=new Date().getTime(),this.bytesSent+=e}receivedBytes(e){this.exchangeCount++,this.lastExchange=new Date().getTime(),this.bytesReceived+=e}debtRatio(){return this.bytesSent/(this.bytesReceived+1)}async sendBlocksToPeer(e){let t=new Ci,n=new Set;for(let[o,i]of this.wants.entries())try{let s=await this.blockstore.get(i.cid,e);i.wantType===Ft.WantHave?s.byteLength<this.maxSizeReplaceHasWithBlock?(this.log("sending have and block for %c",i.cid),n.add(o),t.addBlock(i.cid,{data:s,prefix:x6(i.cid)})):(this.log("sending have for %c",i.cid),t.addBlockPresence(i.cid,{cid:i.cid.bytes,type:Kn.HaveBlock})):(this.log("sending block for %c",i.cid),n.add(o),t.addBlock(i.cid,{data:s,prefix:x6(i.cid)}))}catch(s){if(s.name!=="NotFoundError")throw s;if(this.log("do not have block for %c",i.cid),!i.sendDontHave||i.sentDoNotHave===!0)continue;i.sentDoNotHave=!0,t.addBlockPresence(i.cid,{cid:i.cid.bytes,type:Kn.DoNotHaveBlock})}if(t.blocks.size>0||t.blockPresences.size>0){this.log("sending message"),await this.network.sendMessage(this.peerId,t,e),this.log("sent message"),this.sentBytes([...t.blocks.values()].reduce((o,i)=>o+i.data.byteLength,0));for(let o of n)this.wants.delete(o)}}};var A1=class{blockstore;network;ledgerMap;maxSizeReplaceHasWithBlock;log;logger;constructor(e,t={}){this.blockstore=e.blockstore,this.network=e.network,this.maxSizeReplaceHasWithBlock=t.maxSizeReplaceHasWithBlock,this.log=e.logger.forComponent("helia:bitswap:peer-want-lists"),this.logger=e.logger,this.ledgerMap=rf({name:"helia_bitswap_ledger_map",metrics:e.metrics}),this.network.addEventListener("bitswap:message",n=>{this.receiveMessage(n.detail.peer,n.detail.message).catch(o=>{this.log.error("error receiving bitswap message from %p",n.detail.peer,o)})}),this.network.addEventListener("peer:disconnected",n=>{this.peerDisconnected(n.detail)})}ledgerForPeer(e){let t=this.ledgerMap.get(e);if(t!=null)return{peer:t.peerId,value:t.debtRatio(),sent:t.bytesSent,received:t.bytesReceived,exchanged:t.exchangeCount}}wantListForPeer(e){let t=this.ledgerMap.get(e);if(t!=null)return[...t.wants.values()]}peers(){return Array.from(this.ledgerMap.values()).map(e=>e.peerId)}async receiveMessage(e,t){let n=this.ledgerMap.get(e);if(n==null&&(n=new S1({peerId:e,blockstore:this.blockstore,network:this.network,logger:this.logger},{maxSizeReplaceHasWithBlock:this.maxSizeReplaceHasWithBlock}),this.ledgerMap.set(e,n)),n.receivedBytes(t.blocks?.reduce((o,i)=>o+i.data.byteLength,0)??0),t.wantlist!=null){t.wantlist.full===!0&&n.wants.clear();for(let o of t.wantlist.entries){let i=le.decode(o.cid),s=M(i.multihash.bytes,"base64");o.cancel===!0?(this.log("peer %p cancelled want of block for %c",e,i),n.wants.delete(s)):(o.wantType===Ft.WantHave?this.log("peer %p wanted block presence for %c",e,i):this.log("peer %p wanted block for %c",e,i),n.wants.set(s,{cid:i,priority:o.priority,wantType:o.wantType??Ft.WantBlock,sendDontHave:o.sendDontHave??!1}))}}this.log("send blocks to peer"),await n.sendBlocksToPeer()}async receivedBlock(e,t){let n=M(e.multihash.bytes,"base64"),o=[];for(let i of this.ledgerMap.values())i.wants.has(n)&&o.push(i);await Promise.all(o.map(async i=>i.sendBlocksToPeer(t)))}peerDisconnected(e){this.ledgerMap.delete(e)}};function ZL(r,e){try{if(typeof r=="string"&&r.length>0)return JL(r);if(typeof r=="number"&&isFinite(r))return e?.long?tB(r):eB(r);throw new Error("Value is not a string or number.")}catch(t){let n=rB(t)?`${t.message}. value=${JSON.stringify(r)}`:"An unknown error has occured.";throw new Error(n)}}function JL(r){if(r=String(r),r.length>100)throw new Error("Value exceeds the maximum length of 100 characters.");let e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(r);if(!e)return NaN;let t=parseFloat(e[1]),n=(e[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return t*315576e5;case"weeks":case"week":case"w":return t*6048e5;case"days":case"day":case"d":return t*864e5;case"hours":case"hour":case"hrs":case"hr":case"h":return t*36e5;case"minutes":case"minute":case"mins":case"min":case"m":return t*6e4;case"seconds":case"second":case"secs":case"sec":case"s":return t*1e3;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:throw new Error(`The unit ${n} was matched, but no matching case exists.`)}}var I1=ZL;function eB(r){let e=Math.abs(r);return e>=864e5?`${Math.round(r/864e5)}d`:e>=36e5?`${Math.round(r/36e5)}h`:e>=6e4?`${Math.round(r/6e4)}m`:e>=1e3?`${Math.round(r/1e3)}s`:`${r}ms`}function tB(r){let e=Math.abs(r);return e>=864e5?_1(r,e,864e5,"day"):e>=36e5?_1(r,e,36e5,"hour"):e>=6e4?_1(r,e,6e4,"minute"):e>=1e3?_1(r,e,1e3,"second"):`${r} ms`}function _1(r,e,t,n){let o=e>=t*1.5;return`${Math.round(r/t)} ${n}${o?"s":""}`}function rB(r){return typeof r=="object"&&r!==null&&"message"in r}function v6(r){t.debug=t,t.default=t,t.coerce=c,t.disable=i,t.enable=o,t.enabled=s,t.humanize=I1,t.destroy=l,Object.keys(r).forEach(u=>{t[u]=r[u]}),t.names=[],t.skips=[],t.formatters={};function e(u){let d=0;for(let h=0;h<u.length;h++)d=(d<<5)-d+u.charCodeAt(h),d|=0;return t.colors[Math.abs(d)%t.colors.length]}t.selectColor=e;function t(u){let d,h=null,m,g;function w(...y){if(!w.enabled)return;let x=w,S=Number(new Date),v=S-(d||S);x.diff=v,x.prev=d,x.curr=S,d=S,y[0]=t.coerce(y[0]),typeof y[0]!="string"&&y.unshift("%O");let N=0;y[0]=y[0].replace(/%([a-zA-Z%])/g,(H,$)=>{if(H==="%%")return"%";N++;let P=t.formatters[$];if(typeof P=="function"){let R=y[N];H=P.call(x,R),y.splice(N,1),N--}return H}),t.formatArgs.call(x,y),(x.log||t.log).apply(x,y)}return w.namespace=u,w.useColors=t.useColors(),w.color=t.selectColor(u),w.extend=n,w.destroy=t.destroy,Object.defineProperty(w,"enabled",{enumerable:!0,configurable:!1,get:()=>h!==null?h:(m!==t.namespaces&&(m=t.namespaces,g=t.enabled(u)),g),set:y=>{h=y}}),typeof t.init=="function"&&t.init(w),w}function n(u,d){let h=t(this.namespace+(typeof d>"u"?":":d)+u);return h.log=this.log,h}function o(u){t.save(u),t.namespaces=u,t.names=[],t.skips=[];let d,h=(typeof u=="string"?u:"").split(/[\s,]+/),m=h.length;for(d=0;d<m;d++)h[d]&&(u=h[d].replace(/\*/g,".*?"),u[0]==="-"?t.skips.push(new RegExp("^"+u.substr(1)+"$")):t.names.push(new RegExp("^"+u+"$")))}function i(){let u=[...t.names.map(a),...t.skips.map(a).map(d=>"-"+d)].join(",");return t.enable(""),u}function s(u){if(u[u.length-1]==="*")return!0;let d,h;for(d=0,h=t.skips.length;d<h;d++)if(t.skips[d].test(u))return!1;for(d=0,h=t.names.length;d<h;d++)if(t.names[d].test(u))return!0;return!1}function a(u){return u.toString().substring(2,u.toString().length-2).replace(/\.\*\?$/,"*")}function c(u){return u instanceof Error?u.stack??u.message:u}function l(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return t.setupFormatters(t.formatters),t.enable(t.load()),t}var T1=lB(),nB=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function oB(){return typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)?!0:typeof navigator<"u"&&navigator.userAgent?.toLowerCase().match(/(edge|trident)\/(\d+)/)!=null?!1:typeof document<"u"&&document.documentElement?.style?.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent?.toLowerCase().match(/firefox\/(\d+)/)!=null&&parseInt(RegExp.$1,10)>=31||typeof navigator<"u"&&navigator.userAgent?.toLowerCase().match(/applewebkit\/(\d+)/)}function iB(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+I1(this.diff),!this.useColors)return;let e="color: "+this.color;r.splice(1,0,e,"color: inherit");let t=0,n=0;r[0].replace(/%[a-zA-Z%]/g,o=>{o!=="%%"&&(t++,o==="%c"&&(n=t))}),r.splice(n,0,e)}var sB=console.debug??console.log??(()=>{});function aB(r){try{r?T1?.setItem("debug",r):T1?.removeItem("debug")}catch{}}function cB(){let r;try{r=T1?.getItem("debug")}catch{}return!r&&typeof globalThis.process<"u"&&"env"in globalThis.process&&(r=globalThis.process.env.DEBUG),r}function lB(){try{return localStorage}catch{}}function uB(r){r.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}}}var hv=v6({formatArgs:iB,save:aB,load:cB,useColors:oB,setupFormatters:uB,colors:nB,storage:T1,log:sB});var rn=hv;rn.formatters.b=r=>r==null?"undefined":He.baseEncode(r);rn.formatters.t=r=>r==null?"undefined":Xt.baseEncode(r);rn.formatters.m=r=>r==null?"undefined":Ht.baseEncode(r);rn.formatters.p=r=>r==null?"undefined":r.toString();rn.formatters.c=r=>r==null?"undefined":r.toString();rn.formatters.k=r=>r==null?"undefined":r.toString();rn.formatters.a=r=>r==null?"undefined":r.toString();rn.formatters.e=r=>r==null?"undefined":pv(r.stack)??pv(r.message)??r.toString();function dB(r){let e=()=>{};return e.enabled=!1,e.color="",e.diff=0,e.log=()=>{},e.namespace=r,e.destroy=()=>!0,e.extend=()=>e,e}function Es(){return{forComponent(r){return In(r)}}}function In(r){let e=dB(`${r}:trace`);return rn.enabled(`${r}:trace`)&&rn.names.map(t=>t.toString()).find(t=>t.includes(":trace"))!=null&&(e=rn(`${r}:trace`)),Object.assign(rn(r),{error:rn(`${r}:error`),trace:e})}function pv(r){if(r!=null&&(r=r.trim(),r.length!==0))return r}var S6=Vt(gv(),1);var of=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},A6=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},yv=r=>globalThis.DOMException===void 0?new A6(r):new DOMException(r),wv=r=>{let e=r.reason===void 0?yv("This operation was aborted."):r.reason;return e instanceof Error?e:yv(e)};function Ao(r,e){let{milliseconds:t,fallback:n,message:o,customTimers:i={setTimeout,clearTimeout}}=e,s,a,l=new Promise((u,d)=>{if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);if(e.signal){let{signal:m}=e;m.aborted&&d(wv(m)),a=()=>{d(wv(m))},m.addEventListener("abort",a,{once:!0})}if(t===Number.POSITIVE_INFINITY){r.then(u,d);return}let h=new of;s=i.setTimeout.call(void 0,()=>{if(n){try{u(n())}catch(m){d(m)}return}typeof r.cancel=="function"&&r.cancel(),o===!1?u():o instanceof Error?d(o):(h.message=o??`Promise timed out after ${t} milliseconds`,d(h))},t),(async()=>{try{u(await r)}catch(m){d(m)}})()}).finally(()=>{l.clear(),a&&e.signal&&e.signal.removeEventListener("abort",a)});return l.clear=()=>{i.clearTimeout.call(void 0,s),s=void 0},l}function _6(r,e,t){let n=0,o=r.length;for(;o>0;){let i=Math.trunc(o/2),s=n+i;t(r[s],e)<=0?(n=++s,o-=i+1):o=i}return n}var sf=class{#e=[];enqueue(e,t){t={priority:0,...t};let n={priority:t.priority,id:t.id,run:e};if(this.size===0||this.#e[this.size-1].priority>=t.priority){this.#e.push(n);return}let o=_6(this.#e,n,(i,s)=>s.priority-i.priority);this.#e.splice(o,0,n)}setPriority(e,t){let n=this.#e.findIndex(i=>i.id===e);if(n===-1)throw new ReferenceError(`No promise function with the id "${e}" exists in the queue.`);let[o]=this.#e.splice(n,1);this.enqueue(o.run,{priority:t,id:e})}dequeue(){return this.#e.shift()?.run}filter(e){return this.#e.filter(t=>t.priority===e.priority).map(t=>t.run)}get size(){return this.#e.length}};var ti=class extends S6.default{#e;#t;#r=0;#o;#a;#l=0;#i;#u;#n;#m;#s=0;#d;#c;#g;#b=1n;timeout;constructor(e){if(super(),e={carryoverConcurrencyCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:sf,...e},!(typeof e.intervalCap=="number"&&e.intervalCap>=1))throw new TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${e.intervalCap?.toString()??""}\` (${typeof e.intervalCap})`);if(e.interval===void 0||!(Number.isFinite(e.interval)&&e.interval>=0))throw new TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${e.interval?.toString()??""}\` (${typeof e.interval})`);this.#e=e.carryoverConcurrencyCount,this.#t=e.intervalCap===Number.POSITIVE_INFINITY||e.interval===0,this.#o=e.intervalCap,this.#a=e.interval,this.#n=new e.queueClass,this.#m=e.queueClass,this.concurrency=e.concurrency,this.timeout=e.timeout,this.#g=e.throwOnTimeout===!0,this.#c=e.autoStart===!1}get#x(){return this.#t||this.#r<this.#o}get#v(){return this.#s<this.#d}#E(){this.#s--,this.#f(),this.emit("next")}#S(){this.#w(),this.#y(),this.#u=void 0}get#A(){let e=Date.now();if(this.#i===void 0){let t=this.#l-e;if(t<0)this.#r=this.#e?this.#s:0;else return this.#u===void 0&&(this.#u=setTimeout(()=>{this.#S()},t)),!0}return!1}#f(){if(this.#n.size===0)return this.#i&&clearInterval(this.#i),this.#i=void 0,this.emit("empty"),this.#s===0&&this.emit("idle"),!1;if(!this.#c){let e=!this.#A;if(this.#x&&this.#v){let t=this.#n.dequeue();return t?(this.emit("active"),t(),e&&this.#y(),!0):!1}}return!1}#y(){this.#t||this.#i!==void 0||(this.#i=setInterval(()=>{this.#w()},this.#a),this.#l=Date.now()+this.#a)}#w(){this.#r===0&&this.#s===0&&this.#i&&(clearInterval(this.#i),this.#i=void 0),this.#r=this.#e?this.#s:0,this.#h()}#h(){for(;this.#f(););}get concurrency(){return this.#d}set concurrency(e){if(!(typeof e=="number"&&e>=1))throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${e}\` (${typeof e})`);this.#d=e,this.#h()}async#_(e){return new Promise((t,n)=>{e.addEventListener("abort",()=>{n(e.reason)},{once:!0})})}setPriority(e,t){this.#n.setPriority(e,t)}async add(e,t={}){return t.id??=(this.#b++).toString(),t={timeout:this.timeout,throwOnTimeout:this.#g,...t},new Promise((n,o)=>{this.#n.enqueue(async()=>{this.#s++,this.#r++;try{t.signal?.throwIfAborted();let i=e({signal:t.signal});t.timeout&&(i=Ao(Promise.resolve(i),{milliseconds:t.timeout})),t.signal&&(i=Promise.race([i,this.#_(t.signal)]));let s=await i;n(s),this.emit("completed",s)}catch(i){if(i instanceof of&&!t.throwOnTimeout){n();return}o(i),this.emit("error",i)}finally{this.#E()}},t),this.emit("add"),this.#f()})}async addAll(e,t){return Promise.all(e.map(async n=>this.add(n,t)))}start(){return this.#c?(this.#c=!1,this.#h(),this):this}pause(){this.#c=!0}clear(){this.#n=new this.#m}async onEmpty(){this.#n.size!==0&&await this.#p("empty")}async onSizeLessThan(e){this.#n.size<e||await this.#p("next",()=>this.#n.size<e)}async onIdle(){this.#s===0&&this.#n.size===0||await this.#p("idle")}async#p(e,t){return new Promise(n=>{let o=()=>{t&&!t()||(this.off(e,o),n())};this.on(e,o)})}get size(){return this.#n.size}sizeBy(e){return this.#n.filter(e).length}get pending(){return this.#s}get isPaused(){return this.#c}};function k1(r){let e=[Tn.A];return r==null?e:Array.isArray(r)?r.length===0?e:r:[r]}var I6=60;function P1(r){return{Status:r.Status??0,TC:r.TC??r.flag_tc??!1,RD:r.RD??r.flag_rd??!1,RA:r.RA??r.flag_ra??!1,AD:r.AD??r.flag_ad??!1,CD:r.CD??r.flag_cd??!1,Question:(r.Question??r.questions??[]).map(e=>({name:e.name,type:Tn[e.type]})),Answer:(r.Answer??r.answers??[]).map(e=>({name:e.name,type:Tn[e.type],TTL:e.TTL??e.ttl??I6,data:e.data instanceof Uint8Array?M(e.data):e.data}))}}var pB=4;function T6(r,e={}){let t=new ti({concurrency:e.queryConcurrency??pB});return async(n,o={})=>{let i=new URLSearchParams;i.set("name",n),k1(o.types).forEach(a=>{i.append("type",Tn[a])}),o.onProgress?.(new ae("dns:query",{detail:n}));let s=await t.add(async()=>{let a=await fetch(`${r}?${i}`,{headers:{accept:"application/dns-json"},signal:o?.signal});if(a.status!==200)throw new Error(`Unexpected HTTP status: ${a.status} - ${a.statusText}`);let c=P1(await a.json());return o.onProgress?.(new ae("dns:response",{detail:c})),c},{signal:o.signal});if(s==null)throw new Error("No DNS response received");return s}}function bv(){return[T6("https://cloudflare-dns.com/dns-query"),T6("https://dns.google/resolve")]}var Ev=Vt(vv(),1);var C6=class{lru;constructor(e){this.lru=(0,Ev.default)(e)}get(e,t){let n=!0,o=[];for(let i of t){let s=this.getAnswers(e,i);if(s.length===0){n=!1;break}o.push(...s)}if(n)return P1({answers:o})}getAnswers(e,t){let n=`${e.toLowerCase()}-${t}`,o=this.lru.get(n);if(o!=null){let i=o.filter(s=>s.expires>Date.now()).map(({expires:s,value:a})=>({...a,TTL:Math.round((s-Date.now())/1e3),type:Tn[a.type]}));return i.length===0&&this.lru.remove(n),i}return[]}add(e,t){let n=`${e.toLowerCase()}-${t.type}`,o=this.lru.get(n)??[];o.push({expires:Date.now()+(t.TTL??I6)*1e3,value:t}),this.lru.set(n,o)}remove(e,t){let n=`${e.toLowerCase()}-${t}`;this.lru.remove(n)}clear(){this.lru.clear()}};function Sv(r){return new C6(r)}var mB=1e3,R1=class{resolvers;cache;constructor(e){this.resolvers={},this.cache=Sv(e.cacheSize??mB),Object.entries(e.resolvers??{}).forEach(([t,n])=>{Array.isArray(n)||(n=[n]),t.endsWith(".")||(t=`${t}.`),this.resolvers[t]=n}),this.resolvers["."]==null&&(this.resolvers["."]=bv())}async query(e,t={}){let n=k1(t.types),o=t.cached!==!1?this.cache.get(e,n):void 0;if(o!=null)return t.onProgress?.(new ae("dns:cache",{detail:o})),o;let i=`${e.split(".").pop()}.`,s=(this.resolvers[i]??this.resolvers["."]).sort(()=>Math.random()>.5?-1:1),a=[];for(let c of s){if(t.signal?.aborted===!0)break;try{let l=await c(e,{...t,types:n});for(let u of l.Answer)this.cache.add(e,u);return l}catch(l){a.push(l),t.onProgress?.(new ae("dns:error",{detail:l}))}}throw a.length===1?a[0]:new AggregateError(a,`DNS lookup of ${e} ${n} failed`)}};var Tn;(function(r){r[r.A=1]="A",r[r.CNAME=5]="CNAME",r[r.TXT=16]="TXT",r[r.AAAA=28]="AAAA"})(Tn||(Tn={}));function N1(r={}){return new R1(r)}var gB=["string","number","bigint","symbol"],yB=["Function","Generator","AsyncGenerator","GeneratorFunction","AsyncGeneratorFunction","AsyncFunction","Observable","Array","Buffer","Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","HTMLElement","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function Av(r){if(r===null)return"null";if(r===void 0)return"undefined";if(r===!0||r===!1)return"boolean";let e=typeof r;if(gB.includes(e))return e;if(e==="function")return"Function";if(Array.isArray(r))return"Array";if(wB(r))return"Buffer";let t=bB(r);return t||"Object"}function wB(r){return r&&r.constructor&&r.constructor.isBuffer&&r.constructor.isBuffer.call(null,r)}function bB(r){let e=Object.prototype.toString.call(r).slice(8,-1);if(yB.includes(e))return e}var E=class{constructor(e,t,n){this.major=e,this.majorEncoded=e<<5,this.name=t,this.terminal=n}toString(){return`Type[${this.major}].${this.name}`}compare(e){return this.major<e.major?-1:this.major>e.major?1:0}};E.uint=new E(0,"uint",!0);E.negint=new E(1,"negint",!0);E.bytes=new E(2,"bytes",!0);E.string=new E(3,"string",!0);E.array=new E(4,"array",!1);E.map=new E(5,"map",!1);E.tag=new E(6,"tag",!1);E.float=new E(7,"float",!0);E.false=new E(7,"false",!0);E.true=new E(7,"true",!0);E.null=new E(7,"null",!0);E.undefined=new E(7,"undefined",!0);E.break=new E(7,"break",!0);var G=class{constructor(e,t,n){this.type=e,this.value=t,this.encodedLength=n,this.encodedBytes=void 0,this.byteValue=void 0}toString(){return`Token[${this.type}].${this.value}`}};var Kl=globalThis.process&&!globalThis.process.browser&&globalThis.Buffer&&typeof globalThis.Buffer.isBuffer=="function",xB=new TextDecoder,vB=new TextEncoder;function D1(r){return Kl&&globalThis.Buffer.isBuffer(r)}function af(r){return r instanceof Uint8Array?D1(r)?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r:Uint8Array.from(r)}var Cv=Kl?(r,e,t)=>t-e>64?globalThis.Buffer.from(r.subarray(e,t)).toString("utf8"):Iv(r,e,t):(r,e,t)=>t-e>64?xB.decode(r.subarray(e,t)):Iv(r,e,t),O1=Kl?r=>r.length>64?globalThis.Buffer.from(r):_v(r):r=>r.length>64?vB.encode(r):_v(r),ri=r=>Uint8Array.from(r),Vl=Kl?(r,e,t)=>D1(r)?new Uint8Array(r.subarray(e,t)):r.slice(e,t):(r,e,t)=>r.slice(e,t),kv=Kl?(r,e)=>(r=r.map(t=>t instanceof Uint8Array?t:globalThis.Buffer.from(t)),af(globalThis.Buffer.concat(r,e))):(r,e)=>{let t=new Uint8Array(e),n=0;for(let o of r)n+o.length>t.length&&(o=o.subarray(0,t.length-n)),t.set(o,n),n+=o.length;return t},Pv=Kl?r=>globalThis.Buffer.allocUnsafe(r):r=>new Uint8Array(r);function Rv(r,e){if(D1(r)&&D1(e))return r.compare(e);for(let t=0;t<r.length;t++)if(r[t]!==e[t])return r[t]<e[t]?-1:1;return 0}function _v(r){let e=[],t=0;for(let n=0;n<r.length;n++){let o=r.charCodeAt(n);o<128?e[t++]=o:o<2048?(e[t++]=o>>6|192,e[t++]=o&63|128):(o&64512)===55296&&n+1<r.length&&(r.charCodeAt(n+1)&64512)===56320?(o=65536+((o&1023)<<10)+(r.charCodeAt(++n)&1023),e[t++]=o>>18|240,e[t++]=o>>12&63|128,e[t++]=o>>6&63|128,e[t++]=o&63|128):(e[t++]=o>>12|224,e[t++]=o>>6&63|128,e[t++]=o&63|128)}return e}function Iv(r,e,t){let n=[];for(;e<t;){let o=r[e],i=null,s=o>239?4:o>223?3:o>191?2:1;if(e+s<=t){let a,c,l,u;switch(s){case 1:o<128&&(i=o);break;case 2:a=r[e+1],(a&192)===128&&(u=(o&31)<<6|a&63,u>127&&(i=u));break;case 3:a=r[e+1],c=r[e+2],(a&192)===128&&(c&192)===128&&(u=(o&15)<<12|(a&63)<<6|c&63,u>2047&&(u<55296||u>57343)&&(i=u));break;case 4:a=r[e+1],c=r[e+2],l=r[e+3],(a&192)===128&&(c&192)===128&&(l&192)===128&&(u=(o&15)<<18|(a&63)<<12|(c&63)<<6|l&63,u>65535&&u<1114112&&(i=u))}}i===null?(i=65533,s=1):i>65535&&(i-=65536,n.push(i>>>10&1023|55296),i=56320|i&1023),n.push(i),e+=s}return k6(n)}var Tv=4096;function k6(r){let e=r.length;if(e<=Tv)return String.fromCharCode.apply(String,r);let t="",n=0;for(;n<e;)t+=String.fromCharCode.apply(String,r.slice(n,n+=Tv));return t}var EB=256,cf=class{constructor(e=EB){this.chunkSize=e,this.cursor=0,this.maxCursor=-1,this.chunks=[],this._initReuseChunk=null}reset(){this.cursor=0,this.maxCursor=-1,this.chunks.length&&(this.chunks=[]),this._initReuseChunk!==null&&(this.chunks.push(this._initReuseChunk),this.maxCursor=this._initReuseChunk.length-1)}push(e){let t=this.chunks[this.chunks.length-1];if(this.cursor+e.length<=this.maxCursor+1){let o=t.length-(this.maxCursor-this.cursor)-1;t.set(e,o)}else{if(t){let o=t.length-(this.maxCursor-this.cursor)-1;o<t.length&&(this.chunks[this.chunks.length-1]=t.subarray(0,o),this.maxCursor=this.cursor-1)}e.length<64&&e.length<this.chunkSize?(t=Pv(this.chunkSize),this.chunks.push(t),this.maxCursor+=t.length,this._initReuseChunk===null&&(this._initReuseChunk=t),t.set(e,0)):(this.chunks.push(e),this.maxCursor+=e.length)}this.cursor+=e.length}toBytes(e=!1){let t;if(this.chunks.length===1){let n=this.chunks[0];e&&this.cursor>n.length/2?(t=this.cursor===n.length?n:n.subarray(0,this.cursor),this._initReuseChunk=null,this.chunks=[]):t=Vl(n,0,this.cursor)}else t=kv(this.chunks,this.cursor);return e&&this.reset(),t}};var me="CBOR decode error:",ki="CBOR encode error:",lf=[];lf[23]=1;lf[24]=2;lf[25]=3;lf[26]=5;lf[27]=9;function Pi(r,e,t){if(r.length-e<t)throw new Error(`${me} not enough data for type`)}var sr=[24,256,65536,4294967296,BigInt("18446744073709551616")];function Cn(r,e,t){Pi(r,e,1);let n=r[e];if(t.strict===!0&&n<sr[0])throw new Error(`${me} integer encoded in more bytes than necessary (strict decode)`);return n}function kn(r,e,t){Pi(r,e,2);let n=r[e]<<8|r[e+1];if(t.strict===!0&&n<sr[1])throw new Error(`${me} integer encoded in more bytes than necessary (strict decode)`);return n}function Pn(r,e,t){Pi(r,e,4);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3];if(t.strict===!0&&n<sr[2])throw new Error(`${me} integer encoded in more bytes than necessary (strict decode)`);return n}function Rn(r,e,t){Pi(r,e,8);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3],o=r[e+4]*16777216+(r[e+5]<<16)+(r[e+6]<<8)+r[e+7],i=(BigInt(n)<<BigInt(32))+BigInt(o);if(t.strict===!0&&i<sr[3])throw new Error(`${me} integer encoded in more bytes than necessary (strict decode)`);if(i<=Number.MAX_SAFE_INTEGER)return Number(i);if(t.allowBigInt===!0)return i;throw new Error(`${me} integers outside of the safe integer range are not supported`)}function Nv(r,e,t,n){return new G(E.uint,Cn(r,e+1,n),2)}function Dv(r,e,t,n){return new G(E.uint,kn(r,e+1,n),3)}function Ov(r,e,t,n){return new G(E.uint,Pn(r,e+1,n),5)}function Lv(r,e,t,n){return new G(E.uint,Rn(r,e+1,n),9)}function jn(r,e){return fr(r,0,e.value)}function fr(r,e,t){if(t<sr[0]){let n=Number(t);r.push([e|n])}else if(t<sr[1]){let n=Number(t);r.push([e|24,n])}else if(t<sr[2]){let n=Number(t);r.push([e|25,n>>>8,n&255])}else if(t<sr[3]){let n=Number(t);r.push([e|26,n>>>24&255,n>>>16&255,n>>>8&255,n&255])}else{let n=BigInt(t);if(n<sr[4]){let o=[e|27,0,0,0,0,0,0,0],i=Number(n&BigInt(4294967295)),s=Number(n>>BigInt(32)&BigInt(4294967295));o[8]=i&255,i=i>>8,o[7]=i&255,i=i>>8,o[6]=i&255,i=i>>8,o[5]=i&255,o[4]=s&255,s=s>>8,o[3]=s&255,s=s>>8,o[2]=s&255,s=s>>8,o[1]=s&255,r.push(o)}else throw new Error(`${me} encountered BigInt larger than allowable range`)}}jn.encodedSize=function(e){return fr.encodedSize(e.value)};fr.encodedSize=function(e){return e<sr[0]?1:e<sr[1]?2:e<sr[2]?3:e<sr[3]?5:9};jn.compareTokens=function(e,t){return e.value<t.value?-1:e.value>t.value?1:0};function Bv(r,e,t,n){return new G(E.negint,-1-Cn(r,e+1,n),2)}function Mv(r,e,t,n){return new G(E.negint,-1-kn(r,e+1,n),3)}function Uv(r,e,t,n){return new G(E.negint,-1-Pn(r,e+1,n),5)}var P6=BigInt(-1),Fv=BigInt(1);function $v(r,e,t,n){let o=Rn(r,e+1,n);if(typeof o!="bigint"){let i=-1-o;if(i>=Number.MIN_SAFE_INTEGER)return new G(E.negint,i,9)}if(n.allowBigInt!==!0)throw new Error(`${me} integers outside of the safe integer range are not supported`);return new G(E.negint,P6-BigInt(o),9)}function L1(r,e){let t=e.value,n=typeof t=="bigint"?t*P6-Fv:t*-1-1;fr(r,e.type.majorEncoded,n)}L1.encodedSize=function(e){let t=e.value,n=typeof t=="bigint"?t*P6-Fv:t*-1-1;return n<sr[0]?1:n<sr[1]?2:n<sr[2]?3:n<sr[3]?5:9};L1.compareTokens=function(e,t){return e.value<t.value?1:e.value>t.value?-1:0};function uf(r,e,t,n){Pi(r,e,t+n);let o=Vl(r,e+t,e+t+n);return new G(E.bytes,o,t+n)}function Kv(r,e,t,n){return uf(r,e,1,t)}function Vv(r,e,t,n){return uf(r,e,2,Cn(r,e+1,n))}function Hv(r,e,t,n){return uf(r,e,3,kn(r,e+1,n))}function qv(r,e,t,n){return uf(r,e,5,Pn(r,e+1,n))}function jv(r,e,t,n){let o=Rn(r,e+1,n);if(typeof o=="bigint")throw new Error(`${me} 64-bit integer bytes lengths not supported`);return uf(r,e,9,o)}function B1(r){return r.encodedBytes===void 0&&(r.encodedBytes=r.type===E.string?O1(r.value):r.value),r.encodedBytes}function Hl(r,e){let t=B1(e);fr(r,e.type.majorEncoded,t.length),r.push(t)}Hl.encodedSize=function(e){let t=B1(e);return fr.encodedSize(t.length)+t.length};Hl.compareTokens=function(e,t){return AB(B1(e),B1(t))};function AB(r,e){return r.length<e.length?-1:r.length>e.length?1:Rv(r,e)}function df(r,e,t,n,o){let i=t+n;Pi(r,e,i);let s=new G(E.string,Cv(r,e+t,e+i),i);return o.retainStringBytes===!0&&(s.byteValue=Vl(r,e+t,e+i)),s}function Wv(r,e,t,n){return df(r,e,1,t,n)}function Gv(r,e,t,n){return df(r,e,2,Cn(r,e+1,n),n)}function zv(r,e,t,n){return df(r,e,3,kn(r,e+1,n),n)}function Xv(r,e,t,n){return df(r,e,5,Pn(r,e+1,n),n)}function Yv(r,e,t,n){let o=Rn(r,e+1,n);if(typeof o=="bigint")throw new Error(`${me} 64-bit integer string lengths not supported`);return df(r,e,9,o,n)}var Qv=Hl;function ql(r,e,t,n){return new G(E.array,n,t)}function Zv(r,e,t,n){return ql(r,e,1,t)}function Jv(r,e,t,n){return ql(r,e,2,Cn(r,e+1,n))}function eE(r,e,t,n){return ql(r,e,3,kn(r,e+1,n))}function tE(r,e,t,n){return ql(r,e,5,Pn(r,e+1,n))}function rE(r,e,t,n){let o=Rn(r,e+1,n);if(typeof o=="bigint")throw new Error(`${me} 64-bit integer array lengths not supported`);return ql(r,e,9,o)}function nE(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${me} indefinite length items not allowed`);return ql(r,e,1,1/0)}function M1(r,e){fr(r,E.array.majorEncoded,e.value)}M1.compareTokens=jn.compareTokens;M1.encodedSize=function(e){return fr.encodedSize(e.value)};function jl(r,e,t,n){return new G(E.map,n,t)}function oE(r,e,t,n){return jl(r,e,1,t)}function iE(r,e,t,n){return jl(r,e,2,Cn(r,e+1,n))}function sE(r,e,t,n){return jl(r,e,3,kn(r,e+1,n))}function aE(r,e,t,n){return jl(r,e,5,Pn(r,e+1,n))}function cE(r,e,t,n){let o=Rn(r,e+1,n);if(typeof o=="bigint")throw new Error(`${me} 64-bit integer map lengths not supported`);return jl(r,e,9,o)}function lE(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${me} indefinite length items not allowed`);return jl(r,e,1,1/0)}function U1(r,e){fr(r,E.map.majorEncoded,e.value)}U1.compareTokens=jn.compareTokens;U1.encodedSize=function(e){return fr.encodedSize(e.value)};function uE(r,e,t,n){return new G(E.tag,t,1)}function dE(r,e,t,n){return new G(E.tag,Cn(r,e+1,n),2)}function fE(r,e,t,n){return new G(E.tag,kn(r,e+1,n),3)}function hE(r,e,t,n){return new G(E.tag,Pn(r,e+1,n),5)}function pE(r,e,t,n){return new G(E.tag,Rn(r,e+1,n),9)}function F1(r,e){fr(r,E.tag.majorEncoded,e.value)}F1.compareTokens=jn.compareTokens;F1.encodedSize=function(e){return fr.encodedSize(e.value)};var PB=20,RB=21,NB=22,DB=23;function mE(r,e,t,n){if(n.allowUndefined===!1)throw new Error(`${me} undefined values are not supported`);return n.coerceUndefinedToNull===!0?new G(E.null,null,1):new G(E.undefined,void 0,1)}function gE(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${me} indefinite length items not allowed`);return new G(E.break,void 0,1)}function R6(r,e,t){if(t){if(t.allowNaN===!1&&Number.isNaN(r))throw new Error(`${me} NaN values are not supported`);if(t.allowInfinity===!1&&(r===1/0||r===-1/0))throw new Error(`${me} Infinity values are not supported`)}return new G(E.float,r,e)}function yE(r,e,t,n){return R6(N6(r,e+1),3,n)}function wE(r,e,t,n){return R6(D6(r,e+1),5,n)}function bE(r,e,t,n){return R6(SE(r,e+1),9,n)}function $1(r,e,t){let n=e.value;if(n===!1)r.push([E.float.majorEncoded|PB]);else if(n===!0)r.push([E.float.majorEncoded|RB]);else if(n===null)r.push([E.float.majorEncoded|NB]);else if(n===void 0)r.push([E.float.majorEncoded|DB]);else{let o,i=!1;(!t||t.float64!==!0)&&(vE(n),o=N6(_o,1),n===o||Number.isNaN(n)?(_o[0]=249,r.push(_o.slice(0,3)),i=!0):(EE(n),o=D6(_o,1),n===o&&(_o[0]=250,r.push(_o.slice(0,5)),i=!0))),i||(OB(n),o=SE(_o,1),_o[0]=251,r.push(_o.slice(0,9)))}}$1.encodedSize=function(e,t){let n=e.value;if(n===!1||n===!0||n===null||n===void 0)return 1;if(!t||t.float64!==!0){vE(n);let o=N6(_o,1);if(n===o||Number.isNaN(n))return 3;if(EE(n),o=D6(_o,1),n===o)return 5}return 9};var xE=new ArrayBuffer(9),Wn=new DataView(xE,1),_o=new Uint8Array(xE,0);function vE(r){if(r===1/0)Wn.setUint16(0,31744,!1);else if(r===-1/0)Wn.setUint16(0,64512,!1);else if(Number.isNaN(r))Wn.setUint16(0,32256,!1);else{Wn.setFloat32(0,r);let e=Wn.getUint32(0),t=(e&2139095040)>>23,n=e&8388607;if(t===255)Wn.setUint16(0,31744,!1);else if(t===0)Wn.setUint16(0,(r&2147483648)>>16|n>>13,!1);else{let o=t-127;o<-24?Wn.setUint16(0,0):o<-14?Wn.setUint16(0,(e&2147483648)>>16|1<<24+o,!1):Wn.setUint16(0,(e&2147483648)>>16|o+15<<10|n>>13,!1)}}}function N6(r,e){if(r.length-e<2)throw new Error(`${me} not enough data for float16`);let t=(r[e]<<8)+r[e+1];if(t===31744)return 1/0;if(t===64512)return-1/0;if(t===32256)return NaN;let n=t>>10&31,o=t&1023,i;return n===0?i=o*2**-24:n!==31?i=(o+1024)*2**(n-25):i=o===0?1/0:NaN,t&32768?-i:i}function EE(r){Wn.setFloat32(0,r,!1)}function D6(r,e){if(r.length-e<4)throw new Error(`${me} not enough data for float32`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,4).getFloat32(0,!1)}function OB(r){Wn.setFloat64(0,r,!1)}function SE(r,e){if(r.length-e<8)throw new Error(`${me} not enough data for float64`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,8).getFloat64(0,!1)}$1.compareTokens=jn.compareTokens;function Qe(r,e,t){throw new Error(`${me} encountered invalid minor (${t}) for major ${r[e]>>>5}`)}function K1(r){return()=>{throw new Error(`${me} ${r}`)}}var te=[];for(let r=0;r<=23;r++)te[r]=Qe;te[24]=Nv;te[25]=Dv;te[26]=Ov;te[27]=Lv;te[28]=Qe;te[29]=Qe;te[30]=Qe;te[31]=Qe;for(let r=32;r<=55;r++)te[r]=Qe;te[56]=Bv;te[57]=Mv;te[58]=Uv;te[59]=$v;te[60]=Qe;te[61]=Qe;te[62]=Qe;te[63]=Qe;for(let r=64;r<=87;r++)te[r]=Kv;te[88]=Vv;te[89]=Hv;te[90]=qv;te[91]=jv;te[92]=Qe;te[93]=Qe;te[94]=Qe;te[95]=K1("indefinite length bytes/strings are not supported");for(let r=96;r<=119;r++)te[r]=Wv;te[120]=Gv;te[121]=zv;te[122]=Xv;te[123]=Yv;te[124]=Qe;te[125]=Qe;te[126]=Qe;te[127]=K1("indefinite length bytes/strings are not supported");for(let r=128;r<=151;r++)te[r]=Zv;te[152]=Jv;te[153]=eE;te[154]=tE;te[155]=rE;te[156]=Qe;te[157]=Qe;te[158]=Qe;te[159]=nE;for(let r=160;r<=183;r++)te[r]=oE;te[184]=iE;te[185]=sE;te[186]=aE;te[187]=cE;te[188]=Qe;te[189]=Qe;te[190]=Qe;te[191]=lE;for(let r=192;r<=215;r++)te[r]=uE;te[216]=dE;te[217]=fE;te[218]=hE;te[219]=pE;te[220]=Qe;te[221]=Qe;te[222]=Qe;te[223]=Qe;for(let r=224;r<=243;r++)te[r]=K1("simple values are not supported");te[244]=Qe;te[245]=Qe;te[246]=Qe;te[247]=mE;te[248]=K1("simple values are not supported");te[249]=yE;te[250]=wE;te[251]=bE;te[252]=Qe;te[253]=Qe;te[254]=Qe;te[255]=gE;var Io=[];for(let r=0;r<24;r++)Io[r]=new G(E.uint,r,1);for(let r=-1;r>=-24;r--)Io[31-r]=new G(E.negint,r,1);Io[64]=new G(E.bytes,new Uint8Array(0),1);Io[96]=new G(E.string,"",1);Io[128]=new G(E.array,0,1);Io[160]=new G(E.map,0,1);Io[244]=new G(E.false,!1,1);Io[245]=new G(E.true,!0,1);Io[246]=new G(E.null,null,1);function AE(r){switch(r.type){case E.false:return ri([244]);case E.true:return ri([245]);case E.null:return ri([246]);case E.bytes:return r.value.length?void 0:ri([64]);case E.string:return r.value===""?ri([96]):void 0;case E.array:return r.value===0?ri([128]):void 0;case E.map:return r.value===0?ri([160]):void 0;case E.uint:return r.value<24?ri([Number(r.value)]):void 0;case E.negint:if(r.value>=-24)return ri([31-Number(r.value)])}}var BB={float64:!1,mapSorter:FB,quickEncodeToken:AE};function MB(){let r=[];return r[E.uint.major]=jn,r[E.negint.major]=L1,r[E.bytes.major]=Hl,r[E.string.major]=Qv,r[E.array.major]=M1,r[E.map.major]=U1,r[E.tag.major]=F1,r[E.float.major]=$1,r}var _E=MB(),O6=new cf,H1=class r{constructor(e,t){this.obj=e,this.parent=t}includes(e){let t=this;do if(t.obj===e)return!0;while(t=t.parent);return!1}static createCheck(e,t){if(e&&e.includes(t))throw new Error(`${ki} object contains circular references`);return new r(t,e)}},Ss={null:new G(E.null,null),undefined:new G(E.undefined,void 0),true:new G(E.true,!0),false:new G(E.false,!1),emptyArray:new G(E.array,0),emptyMap:new G(E.map,0)},As={number(r,e,t,n){return!Number.isInteger(r)||!Number.isSafeInteger(r)?new G(E.float,r):r>=0?new G(E.uint,r):new G(E.negint,r)},bigint(r,e,t,n){return r>=BigInt(0)?new G(E.uint,r):new G(E.negint,r)},Uint8Array(r,e,t,n){return new G(E.bytes,r)},string(r,e,t,n){return new G(E.string,r)},boolean(r,e,t,n){return r?Ss.true:Ss.false},null(r,e,t,n){return Ss.null},undefined(r,e,t,n){return Ss.undefined},ArrayBuffer(r,e,t,n){return new G(E.bytes,new Uint8Array(r))},DataView(r,e,t,n){return new G(E.bytes,new Uint8Array(r.buffer,r.byteOffset,r.byteLength))},Array(r,e,t,n){if(!r.length)return t.addBreakTokens===!0?[Ss.emptyArray,new G(E.break)]:Ss.emptyArray;n=H1.createCheck(n,r);let o=[],i=0;for(let s of r)o[i++]=V1(s,t,n);return t.addBreakTokens?[new G(E.array,r.length),o,new G(E.break)]:[new G(E.array,r.length),o]},Object(r,e,t,n){let o=e!=="Object",i=o?r.keys():Object.keys(r),s=o?r.size:i.length;if(!s)return t.addBreakTokens===!0?[Ss.emptyMap,new G(E.break)]:Ss.emptyMap;n=H1.createCheck(n,r);let a=[],c=0;for(let l of i)a[c++]=[V1(l,t,n),V1(o?r.get(l):r[l],t,n)];return UB(a,t),t.addBreakTokens?[new G(E.map,s),a,new G(E.break)]:[new G(E.map,s),a]}};As.Map=As.Object;As.Buffer=As.Uint8Array;for(let r of"Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64".split(" "))As[`${r}Array`]=As.DataView;function V1(r,e={},t){let n=Av(r),o=e&&e.typeEncoders&&e.typeEncoders[n]||As[n];if(typeof o=="function"){let s=o(r,n,e,t);if(s!=null)return s}let i=As[n];if(!i)throw new Error(`${ki} unsupported type: ${n}`);return i(r,n,e,t)}function UB(r,e){e.mapSorter&&r.sort(e.mapSorter)}function FB(r,e){let t=Array.isArray(r[0])?r[0][0]:r[0],n=Array.isArray(e[0])?e[0][0]:e[0];if(t.type!==n.type)return t.type.compare(n.type);let o=t.type.major,i=_E[o].compareTokens(t,n);return i===0&&console.warn("WARNING: complex key types used, CBOR key sorting guarantees are gone"),i}function IE(r,e,t,n){if(Array.isArray(e))for(let o of e)IE(r,o,t,n);else t[e.type.major](r,e,n)}function L6(r,e,t){let n=V1(r,t);if(!Array.isArray(n)&&t.quickEncodeToken){let o=t.quickEncodeToken(n);if(o)return o;let i=e[n.type.major];if(i.encodedSize){let s=i.encodedSize(n,t),a=new cf(s);if(i(a,n,t),a.chunks.length!==1)throw new Error(`Unexpected error: pre-calculated length for ${n} was wrong`);return af(a.chunks[0])}}return O6.reset(),IE(O6,n,e,t),O6.toBytes(!0)}function _s(r,e){return e=Object.assign({},BB,e),L6(r,_E,e)}var $B={strict:!1,allowIndefinite:!0,allowUndefined:!0,allowBigInt:!0},q1=class{constructor(e,t={}){this._pos=0,this.data=e,this.options=t}pos(){return this._pos}done(){return this._pos>=this.data.length}next(){let e=this.data[this._pos],t=Io[e];if(t===void 0){let n=te[e];if(!n)throw new Error(`${me} no decoder for major type ${e>>>5} (byte 0x${e.toString(16).padStart(2,"0")})`);let o=e&31;t=n(this.data,this._pos,o,this.options)}return this._pos+=t.encodedLength,t}},ff=Symbol.for("DONE"),j1=Symbol.for("BREAK");function KB(r,e,t){let n=[];for(let o=0;o<r.value;o++){let i=Wl(e,t);if(i===j1){if(r.value===1/0)break;throw new Error(`${me} got unexpected break to lengthed array`)}if(i===ff)throw new Error(`${me} found array but not enough entries (got ${o}, expected ${r.value})`);n[o]=i}return n}function VB(r,e,t){let n=t.useMaps===!0,o=n?void 0:{},i=n?new Map:void 0;for(let s=0;s<r.value;s++){let a=Wl(e,t);if(a===j1){if(r.value===1/0)break;throw new Error(`${me} got unexpected break to lengthed map`)}if(a===ff)throw new Error(`${me} found map but not enough entries (got ${s} [no key], expected ${r.value})`);if(n!==!0&&typeof a!="string")throw new Error(`${me} non-string keys not supported (got ${typeof a})`);if(t.rejectDuplicateMapKeys===!0&&(n&&i.has(a)||!n&&a in o))throw new Error(`${me} found repeat map key "${a}"`);let c=Wl(e,t);if(c===ff)throw new Error(`${me} found map but not enough entries (got ${s} [no value], expected ${r.value})`);n?i.set(a,c):o[a]=c}return n?i:o}function Wl(r,e){if(r.done())return ff;let t=r.next();if(t.type===E.break)return j1;if(t.type.terminal)return t.value;if(t.type===E.array)return KB(t,r,e);if(t.type===E.map)return VB(t,r,e);if(t.type===E.tag){if(e.tags&&typeof e.tags[t.value]=="function"){let n=Wl(r,e);return e.tags[t.value](n)}throw new Error(`${me} tag not supported (${t.value})`)}throw new Error("unsupported")}function B6(r,e){if(!(r instanceof Uint8Array))throw new Error(`${me} data to decode must be a Uint8Array`);e=Object.assign({},$B,e);let t=e.tokenizer||new q1(r,e),n=Wl(t,e);if(n===ff)throw new Error(`${me} did not find any content to decode`);if(n===j1)throw new Error(`${me} got unexpected break`);return[n,r.subarray(t.pos())]}function Nn(r,e){let[t,n]=B6(r,e);if(n.length>0)throw new Error(`${me} too many terminals, data makes no sense`);return t}var Ri="/",TE=new TextEncoder().encode(Ri),W1=TE[0],ct=class r{_buf;constructor(e,t){if(typeof e=="string")this._buf=V(e);else if(e instanceof Uint8Array)this._buf=e;else throw new Error("Invalid key, should be String of Uint8Array");if(t==null&&(t=!0),t&&this.clean(),this._buf.byteLength===0||this._buf[0]!==W1)throw new Error("Invalid key")}toString(e="utf8"){return M(this._buf,e)}uint8Array(){return this._buf}get[Symbol.toStringTag](){return`Key(${this.toString()})`}static withNamespaces(e){return new r(e.join(Ri))}static random(){return new r(Math.random().toString().substring(2))}static asKey(e){return e instanceof Uint8Array||typeof e=="string"?new r(e):typeof e.uint8Array=="function"?new r(e.uint8Array()):null}clean(){if((this._buf==null||this._buf.byteLength===0)&&(this._buf=TE),this._buf[0]!==W1){let e=new Uint8Array(this._buf.byteLength+1);e.fill(W1,0,1),e.set(this._buf,1),this._buf=e}for(;this._buf.byteLength>1&&this._buf[this._buf.byteLength-1]===W1;)this._buf=this._buf.subarray(0,-1)}less(e){let t=this.list(),n=e.list();for(let o=0;o<t.length;o++){if(n.length<o+1)return!1;let i=t[o],s=n[o];if(i<s)return!0;if(i>s)return!1}return t.length<n.length}reverse(){return r.withNamespaces(this.list().slice().reverse())}namespaces(){return this.list()}baseNamespace(){let e=this.namespaces();return e[e.length-1]}list(){return this.toString().split(Ri).slice(1)}type(){return HB(this.baseNamespace())}name(){return qB(this.baseNamespace())}instance(e){return new r(this.toString()+":"+e)}path(){let e=this.parent().toString();return e.endsWith(Ri)||(e+=Ri),e+=this.type(),new r(e)}parent(){let e=this.list();return e.length===1?new r(Ri):new r(e.slice(0,-1).join(Ri))}child(e){return this.toString()===Ri?e:e.toString()===Ri?this:new r(this.toString()+e.toString(),!1)}isAncestorOf(e){return e.toString()===this.toString()?!1:e.toString().startsWith(this.toString())}isDecendantOf(e){return e.toString()===this.toString()?!1:this.toString().startsWith(e.toString())}isTopLevel(){return this.list().length===1}concat(...e){return r.withNamespaces([...this.namespaces(),...jB(e.map(t=>t.namespaces()))])}};function HB(r){let e=r.split(":");return e.length<2?"":e.slice(0,-1).join(":")}function qB(r){let e=r.split(":");return e[e.length-1]}function jB(r){return[].concat(...r)}function G1({enumerable:r=!0,configurable:e=!1}={}){return{enumerable:r,configurable:e,writable:!1}}function*WB(r,e){if(e!=null&&typeof e=="object")if(Array.isArray(e))for(let[t,n]of e.entries()){let o=[...r,t],i=le.asCID(n);i!=null?yield[o.join("/"),i]:typeof n=="object"&&(yield*U6(n,o))}else{let t=le.asCID(e);t!=null?yield[r.join("/"),t]:yield*U6(e,r)}}function*U6(r,e){if(r==null||r instanceof Uint8Array)return;let t=le.asCID(r);t!=null&&(yield[e.join("/"),t]);for(let[n,o]of Object.entries(r)){let i=[...e,n];yield*WB(i,o)}}function*GB(r,e){if(Array.isArray(e))for(let[t,n]of e.entries()){let o=[...r,t];yield o.join("/"),typeof n=="object"&&le.asCID(n)==null&&(yield*F6(n,o))}else yield*F6(e,r)}function*F6(r,e){if(!(r==null||typeof r!="object"))for(let[t,n]of Object.entries(r)){let o=[...e,t];yield o.join("/"),n!=null&&!(n instanceof Uint8Array)&&typeof n=="object"&&le.asCID(n)==null&&(yield*GB(o,n))}}function zB(r,e){let t=r;for(let[n,o]of e.entries()){if(t=t[o],t==null)throw new Error(`Object has no property at ${e.slice(0,n+1).map(s=>`[${JSON.stringify(s)}]`).join("")}`);let i=le.asCID(t);if(i!=null)return{value:i,remaining:e.slice(n+1).join("/")}}return{value:t}}var $6=class{cid;bytes;value;asBlock;constructor({cid:e,bytes:t,value:n}){if(e==null||t==null||typeof n>"u")throw new Error("Missing required argument");this.cid=e,this.bytes=t,this.value=n,this.asBlock=this,Object.defineProperties(this,{cid:G1(),bytes:G1(),value:G1(),asBlock:G1()})}links(){return U6(this.value,[])}tree(){return F6(this.value,[])}get(e="/"){return zB(this.value,e.split("/").filter(Boolean))}};function CE({bytes:r,cid:e,value:t,codec:n}){let o=t!==void 0?t:n?.decode(r);if(o===void 0)throw new Error('Missing required argument, must either provide "value" or "codec"');return new $6({cid:e,bytes:r,value:o})}var RE="/pin/",kE="/pinned-block/",K6=Xo,PE=1;function z1(r){return r.version===0&&(r=r.toV1()),new ct(`${RE}${r.toString(K6)}`)}var X1=class{datastore;blockstore;getCodec;constructor(e,t,n){this.datastore=e,this.blockstore=t,this.getCodec=n}async*add(e,t={}){let n=z1(e);if(await this.datastore.has(n))throw new Error("Already pinned");let o=Math.round(t.depth??1/0);if(o<0)throw new Error("Depth must be greater than or equal to 0");let i=new $r({concurrency:PE});for await(let a of this.#e(e,i,{...t,depth:o}))await this.#t(a,c=>c.pinnedBy.find(l=>ge(l,e.bytes))!=null?!1:(c.pinCount++,c.pinnedBy.push(e.bytes),!0),t),yield a;let s={depth:o,metadata:t.metadata??{}};await this.datastore.put(n,_s(s),t)}async*#e(e,t,n){if(n.depth===-1)return;let o=await this.getCodec(e.code),i=await this.blockstore.get(e,n),s=CE({bytes:i,cid:e,codec:o});yield e;for await(let[,a]of s.links())yield*await t.add(async()=>this.#e(a,t,{...n,depth:n.depth-1}))}async#t(e,t,n){let o=new ct(`${kE}${K6.encode(e.multihash.bytes)}`),i={pinCount:0,pinnedBy:[]};try{i=Nn(await this.datastore.get(o,n))}catch(a){if(a.name!=="NotFoundError")throw a}if(t(i)){if(i.pinCount===0&&await this.datastore.has(o)){await this.datastore.delete(o);return}await this.datastore.put(o,_s(i),n),n.onProgress?.(new ae("helia:pin:add",e))}}async*rm(e,t={}){let n=z1(e),o=await this.datastore.get(n,t),i=Nn(o);await this.datastore.delete(n,t);let s=new $r({concurrency:PE});for await(let a of this.#e(e,s,{...t,depth:i.depth}))await this.#t(a,c=>(c.pinCount--,c.pinnedBy=c.pinnedBy.filter(l=>ge(l,e.bytes)),!0),{...t,depth:i.depth}),yield a}async*ls(e={}){for await(let{key:t,value:n}of this.datastore.query({prefix:RE+(e.cid!=null?`${e.cid.toString(Xo)}`:"")},e)){let o=le.parse(t.toString().substring(5),Xo),i=Nn(n);yield{cid:o,...i}}}async isPinned(e,t={}){let n=new ct(`${kE}${K6.encode(e.multihash.bytes)}`);return this.datastore.has(n,t)}async get(e,t){let n=z1(e),o=await this.datastore.get(n,t);return Nn(o)}async setMetadata(e,t,n){let o=z1(e),i=await this.datastore.get(o,n),s=Nn(i);s.metadata=t??{},await this.datastore.put(o,_s(s),n)}};var V6=1,H6=5;var hf=class extends Error{static name="InsufficientProvidersError";constructor(e="Insufficient providers found"){super(e),this.name="InsufficientProvidersError"}},Is=class extends Error{static name="NoRoutersAvailableError";constructor(e="No routers available"){super(e),this.name="NoRoutersAvailableError"}},pf=class extends Error{static name="UnknownHashAlgorithmError";constructor(e="Unknown hash algorithm"){super(e),this.name="UnknownHashAlgorithmError"}},mf=class extends Error{static name="UnknownCodecError";constructor(e="Unknown codec"){super(e),this.name="UnknownCodecError"}};var XB=5,Y1=class{log;routers;providerLookupConcurrency;constructor(e,t){this.log=e.logger.forComponent("helia:routing"),this.routers=t.routers??[],this.providerLookupConcurrency=t.providerLookupConcurrency??XB,this.findProviders=e.metrics?.traceFunction("helia.routing.findProviders",this.findProviders.bind(this),{optionsIndex:1})??this.findProviders,this.provide=e.metrics?.traceFunction("helia.routing.provide",this.provide.bind(this),{optionsIndex:1})??this.provide,this.cancelReprovide=e.metrics?.traceFunction("helia.routing.cancelReprovide",this.cancelReprovide.bind(this),{optionsIndex:1})??this.cancelReprovide,this.put=e.metrics?.traceFunction("helia.routing.put",this.put.bind(this),{optionsIndex:2})??this.put,this.get=e.metrics?.traceFunction("helia.routing.get",this.get.bind(this),{optionsIndex:1})??this.get,this.findPeer=e.metrics?.traceFunction("helia.routing.findPeer",this.findPeer.bind(this),{optionsIndex:1})??this.findPeer,this.getClosestPeers=e.metrics?.traceFunction("helia.routing.getClosestPeers",this.getClosestPeers.bind(this),{optionsIndex:1})??this.getClosestPeers}async start(){await lr(...this.routers)}async stop(){await Cr(...this.routers)}async*findProviders(e,t={}){if(this.routers.length===0)throw new Is("No content routers available");let n=new ur({concurrency:this.providerLookupConcurrency});n.addEventListener("error",()=>{});for await(let o of Kr(n.toGenerator(),...Ha(this.routers,"findProviders").map(i=>i.findProviders(e,t))))if(o!=null){if(o.multiaddrs.length===0){if(n.find(o.id)!=null)continue;n.add(async()=>{try{let i=await this.findPeer(o.id,t);return i.multiaddrs.length===0?null:i}catch(i){return this.log.error("could not load multiaddrs for peer %p",o.id,i),null}},{peerId:o.id,signal:t.signal}).catch(i=>{this.log.error("could not load multiaddrs for peer %p",o.id,i)})}yield o}}async provide(e,t={}){if(this.routers.length===0)throw new Is("No content routers available");await Promise.all(Ha(this.routers,"provide").map(async n=>{await n.provide(e,t)}))}async cancelReprovide(e,t={}){await Promise.all(Ha(this.routers,"cancelReprovide").map(async n=>{await n.cancelReprovide(e,t)}))}async put(e,t,n){await Promise.all(Ha(this.routers,"put").map(async o=>{await o.put(e,t,n)}))}async get(e,t){return Promise.any(Ha(this.routers,"get").map(async n=>n.get(e,t)))}async findPeer(e,t){if(this.routers.length===0)throw new Is("No peer routers available");let n=this,o=Kr(...Ha(this.routers,"findPeer").map(i=>async function*(){try{yield await i.findPeer(e,t)}catch(s){n.log.error(s)}}()));for await(let i of o)if(i!=null)return i;throw new ze("Could not find peer in routing")}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new Is("No peer routers available");for await(let n of Kr(...Ha(this.routers,"getClosestPeers").map(o=>o.getClosestPeers(e,t))))n!=null&&(yield n)}};function Ha(r,e){return r.filter(t=>t[e]!=null)}var Ts={},Gl=r=>{r.addEventListener("message",e=>{Gl.dispatchEvent("message",r,e)}),r.port!=null&&r.port.addEventListener("message",e=>{Gl.dispatchEvent("message",r,e)})};Gl.addEventListener=(r,e)=>{Ts[r]==null&&(Ts[r]=[]),Ts[r].push(e)};Gl.removeEventListener=(r,e)=>{Ts[r]!=null&&(Ts[r]=Ts[r].filter(t=>t===e))};Gl.dispatchEvent=function(r,e,t){Ts[r]!=null&&Ts[r].forEach(n=>n(e,t))};var q6=Gl;var j6="lock:worker:request-read",W6="lock:worker:release-read",G6="lock:master:grant-read",z6="lock:worker:request-write",X6="lock:worker:release-write",Y6="lock:master:grant-write";var NE=(r=21)=>Math.random().toString().substring(2);var DE=(r,e,t,n,o)=>(i,s)=>{if(s.data.type!==t)return;let a={type:s.data.type,name:s.data.name,identifier:s.data.identifier};r.dispatchEvent(new MessageEvent(e,{data:{name:a.name,handler:async()=>{i.postMessage({type:o,name:a.name,identifier:a.identifier}),await new Promise(c=>{let l=u=>{if(u?.data==null)return;let d={type:u.data.type,name:u.data.name,identifier:u.data.identifier};d.type===n&&d.identifier===a.identifier&&(i.removeEventListener("message",l),c())};i.addEventListener("message",l)})}}}))},OE=(r,e,t,n)=>async()=>{let o=NE();return globalThis.postMessage({type:e,identifier:o,name:r}),new Promise(i=>{let s=a=>{if(a?.data==null)return;let c={type:a.data.type,identifier:a.data.identifier};c.type===t&&c.identifier===o&&(globalThis.removeEventListener("message",s),i(()=>{globalThis.postMessage({type:n,identifier:o,name:r})}))};globalThis.addEventListener("message",s)})},YB={singleProcess:!1},LE=r=>{if(r=Object.assign({},YB,r),!!globalThis.document||r.singleProcess){let t=new EventTarget;return q6.addEventListener("message",DE(t,"requestReadLock",j6,W6,G6)),q6.addEventListener("message",DE(t,"requestWriteLock",z6,X6,Y6)),t}return{isWorker:!0,readLock:t=>OE(t,j6,G6,W6),writeLock:t=>OE(t,z6,Y6,X6)}};var qa={},Cs;async function Q6(r,e){let t,n=new Promise(o=>{t=o});return r.add(async()=>Ao((async()=>{await new Promise(o=>{t(()=>{o()})})})(),{milliseconds:e.timeout})),n}var QB=(r,e)=>{if(Cs.isWorker===!0)return{readLock:Cs.readLock(r,e),writeLock:Cs.writeLock(r,e)};let t=new ti({concurrency:1}),n;return{async readLock(){if(n!=null)return Q6(n,e);n=new ti({concurrency:e.concurrency,autoStart:!1});let o=n,i=Q6(n,e);return t.add(async()=>{o.start(),await o.onIdle().then(()=>{n===o&&(n=null)})}),i},async writeLock(){return n=null,Q6(t,e)}}},ZB={name:"lock",concurrency:1/0,timeout:846e5,singleProcess:!1};function ja(r){let e=Object.assign({},ZB,r);return Cs==null&&(Cs=LE(e),Cs.isWorker!==!0&&(Cs.addEventListener("requestReadLock",t=>{qa[t.data.name]!=null&&qa[t.data.name].readLock().then(async n=>t.data.handler().finally(()=>{n()}))}),Cs.addEventListener("requestWriteLock",async t=>{qa[t.data.name]!=null&&qa[t.data.name].writeLock().then(async n=>t.data.handler().finally(()=>{n()}))}))),qa[e.name]==null&&(qa[e.name]=QB(e.name,e)),qa[e.name]}var Q1=class{lock;child;pins;started;constructor(e,t,n={}){this.child=e,this.pins=t,this.lock=ja({singleProcess:n.holdGcLock}),this.started=!1}isStarted(){return this.started}async start(){await lr(this.child),this.started=!0}async stop(){await Cr(this.child),this.started=!1}unwrap(){return this.child}async put(e,t,n={}){n?.signal?.throwIfAborted();let o=await this.lock.readLock();try{return await this.child.put(e,t,n)}finally{o()}}async*putMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{yield*this.child.putMany(e,t)}finally{n()}}async get(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{return await this.child.get(e,t)}finally{n()}}async*getMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{yield*this.child.getMany(e,t)}finally{n()}}async delete(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.writeLock();try{if(await this.pins.isPinned(e))throw new Error("CID was pinned");await this.child.delete(e,t)}finally{n()}}async*deleteMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.writeLock();try{let o=this;yield*this.child.deleteMany(async function*(){for await(let i of e){if(await o.pins.isPinned(i))throw new Error("CID was pinned");yield i}}(),t)}finally{n()}}async has(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{return await this.child.has(e,t)}finally{n()}}async*getAll(e={}){e?.signal?.throwIfAborted();let t=await this.lock.readLock();try{yield*this.child.getAll(e)}finally{t()}}createSession(e,t){return t?.signal?.throwIfAborted(),this.child.createSession(e,t)}};var Z6=new ct("/version"),BE=1;async function ME(r){if(!await r.has(Z6)){await r.put(Z6,V(`${BE}`));return}let e=await r.get(Z6),t=M(e);if(parseInt(t,10)!==BE)throw new Error("Unknown datastore version, a datastore migration may be required")}var t5={};Pt(t5,{code:()=>e5,decode:()=>aM,decodeOptions:()=>oM,encode:()=>sM,encodeOptions:()=>rM,name:()=>iM,toByteView:()=>FE});var UE=42;function FE(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function JB(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=le.asCID(r);if(!e)return null;let t=new Uint8Array(e.bytes.byteLength+1);return t.set(e.bytes,1),[new G(E.tag,UE),new G(E.bytes,t)]}function eM(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function tM(r){if(Number.isNaN(r))throw new Error("`NaN` is not supported by the IPLD Data Model and cannot be encoded");if(r===1/0||r===-1/0)throw new Error("`Infinity` and `-Infinity` is not supported by the IPLD Data Model and cannot be encoded");return null}var J6={float64:!0,typeEncoders:{Object:JB,undefined:eM,number:tM}},rM={...J6,typeEncoders:{...J6.typeEncoders}};function nM(r){if(r[0]!==0)throw new Error("Invalid CID for CBOR tag 42; expected leading 0x00");return le.decode(r.subarray(1))}var Z1={allowIndefinite:!1,coerceUndefinedToNull:!0,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};Z1.tags[UE]=nM;var oM={...Z1,tags:Z1.tags.slice()},iM="dag-cbor",e5=113,sM=r=>_s(r,J6),aM=r=>Nn(FE(r),Z1);var c5={};Pt(c5,{code:()=>a5,decode:()=>KE,encode:()=>$E,format:()=>wM,name:()=>yM,parse:()=>xM,stringify:()=>wM});var r5=class extends Array{constructor(){super(),this.inRecursive=[]}prefix(e){let t=this.inRecursive[this.inRecursive.length-1];t&&(t.type===E.array&&(t.elements++,t.elements!==1&&e.push([44])),t.type===E.map&&(t.elements++,t.elements!==1&&(t.elements%2===1?e.push([44]):e.push([58]))))}[E.uint.major](e,t){this.prefix(e);let n=String(t.value),o=[];for(let i=0;i<n.length;i++)o[i]=n.charCodeAt(i);e.push(o)}[E.negint.major](e,t){this[E.uint.major](e,t)}[E.bytes.major](e,t){throw new Error(`${ki} unsupported type: Uint8Array`)}[E.string.major](e,t){this.prefix(e);let n=O1(JSON.stringify(t.value));e.push(n.length>32?af(n):n)}[E.array.major](e,t){this.prefix(e),this.inRecursive.push({type:E.array,elements:0}),e.push([91])}[E.map.major](e,t){this.prefix(e),this.inRecursive.push({type:E.map,elements:0}),e.push([123])}[E.tag.major](e,t){}[E.float.major](e,t){if(t.type.name==="break"){let s=this.inRecursive.pop();if(s){if(s.type===E.array)e.push([93]);else if(s.type===E.map)e.push([125]);else throw new Error("Unexpected recursive type; this should not happen!");return}throw new Error("Unexpected break; this should not happen!")}if(t.value===void 0)throw new Error(`${ki} unsupported type: undefined`);if(this.prefix(e),t.type.name==="true"){e.push([116,114,117,101]);return}else if(t.type.name==="false"){e.push([102,97,108,115,101]);return}else if(t.type.name==="null"){e.push([110,117,108,108]);return}let n=String(t.value),o=[],i=!1;for(let s=0;s<n.length;s++)o[s]=n.charCodeAt(s),!i&&(o[s]===46||o[s]===101||o[s]===69)&&(i=!0);i||(o.push(46),o.push(48)),e.push(o)}};function cM(r,e){if(Array.isArray(r[0])||Array.isArray(e[0]))throw new Error(`${ki} complex map keys are not supported`);let t=r[0],n=e[0];if(t.type!==E.string||n.type!==E.string)throw new Error(`${ki} non-string map keys are not supported`);if(t<n)return-1;if(t>n)return 1;throw new Error(`${ki} unexpected duplicate map keys, this is not supported`)}var lM={addBreakTokens:!0,mapSorter:cM};function n5(r,e){return e=Object.assign({},lM,e),L6(r,new r5,e)}var zl=class{constructor(e,t={}){this._pos=0,this.data=e,this.options=t,this.modeStack=["value"],this.lastToken=""}pos(){return this._pos}done(){return this._pos>=this.data.length}ch(){return this.data[this._pos]}currentMode(){return this.modeStack[this.modeStack.length-1]}skipWhitespace(){let e=this.ch();for(;e===32||e===9||e===13||e===10;)e=this.data[++this._pos]}expect(e){if(this.data.length-this._pos<e.length)throw new Error(`${me} unexpected end of input at position ${this._pos}`);for(let t=0;t<e.length;t++)if(this.data[this._pos++]!==e[t])throw new Error(`${me} unexpected token at position ${this._pos}, expected to find '${String.fromCharCode(...e)}'`)}parseNumber(){let e=this._pos,t=!1,n=!1,o=a=>{for(;!this.done();){let c=this.ch();if(a.includes(c))this._pos++;else break}};if(this.ch()===45&&(t=!0,this._pos++),this.ch()===48)if(this._pos++,this.ch()===46)this._pos++,n=!0;else return new G(E.uint,0,this._pos-e);if(o([48,49,50,51,52,53,54,55,56,57]),t&&this._pos===e+1)throw new Error(`${me} unexpected token at position ${this._pos}`);if(!this.done()&&this.ch()===46){if(n)throw new Error(`${me} unexpected token at position ${this._pos}`);n=!0,this._pos++,o([48,49,50,51,52,53,54,55,56,57])}!this.done()&&(this.ch()===101||this.ch()===69)&&(n=!0,this._pos++,!this.done()&&(this.ch()===43||this.ch()===45)&&this._pos++,o([48,49,50,51,52,53,54,55,56,57]));let i=String.fromCharCode.apply(null,this.data.subarray(e,this._pos)),s=parseFloat(i);return n?new G(E.float,s,this._pos-e):this.options.allowBigInt!==!0||Number.isSafeInteger(s)?new G(s>=0?E.uint:E.negint,s,this._pos-e):new G(s>=0?E.uint:E.negint,BigInt(i),this._pos-e)}parseString(){if(this.ch()!==34)throw new Error(`${me} unexpected character at position ${this._pos}; this shouldn't happen`);this._pos++;for(let i=this._pos,s=0;i<this.data.length&&s<65536;i++,s++){let a=this.data[i];if(a===92||a<32||a>=128)break;if(a===34){let c=String.fromCharCode.apply(null,this.data.subarray(this._pos,i));return this._pos=i+1,new G(E.string,c,s)}}let e=this._pos,t=[],n=()=>{if(this._pos+4>=this.data.length)throw new Error(`${me} unexpected end of unicode escape sequence at position ${this._pos}`);let i=0;for(let s=0;s<4;s++){let a=this.ch();if(a>=48&&a<=57)a-=48;else if(a>=97&&a<=102)a=a-97+10;else if(a>=65&&a<=70)a=a-65+10;else throw new Error(`${me} unexpected unicode escape character at position ${this._pos}`);i=i*16+a,this._pos++}return i},o=()=>{let i=this.ch(),s=null,a=i>239?4:i>223?3:i>191?2:1;if(this._pos+a>this.data.length)throw new Error(`${me} unexpected unicode sequence at position ${this._pos}`);let c,l,u,d;switch(a){case 1:i<128&&(s=i);break;case 2:c=this.data[this._pos+1],(c&192)===128&&(d=(i&31)<<6|c&63,d>127&&(s=d));break;case 3:c=this.data[this._pos+1],l=this.data[this._pos+2],(c&192)===128&&(l&192)===128&&(d=(i&15)<<12|(c&63)<<6|l&63,d>2047&&(d<55296||d>57343)&&(s=d));break;case 4:c=this.data[this._pos+1],l=this.data[this._pos+2],u=this.data[this._pos+3],(c&192)===128&&(l&192)===128&&(u&192)===128&&(d=(i&15)<<18|(c&63)<<12|(l&63)<<6|u&63,d>65535&&d<1114112&&(s=d))}s===null?(s=65533,a=1):s>65535&&(s-=65536,t.push(s>>>10&1023|55296),s=56320|s&1023),t.push(s),this._pos+=a};for(;!this.done();){let i=this.ch(),s;switch(i){case 92:if(this._pos++,this.done())throw new Error(`${me} unexpected string termination at position ${this._pos}`);switch(s=this.ch(),this._pos++,s){case 34:case 39:case 92:case 47:t.push(s);break;case 98:t.push(8);break;case 116:t.push(9);break;case 110:t.push(10);break;case 102:t.push(12);break;case 114:t.push(13);break;case 117:t.push(n());break;default:throw new Error(`${me} unexpected string escape character at position ${this._pos}`)}break;case 34:return this._pos++,new G(E.string,k6(t),this._pos-e);default:if(i<32)throw new Error(`${me} invalid control character at position ${this._pos}`);i<128?(t.push(i),this._pos++):o()}}throw new Error(`${me} unexpected end of string at position ${this._pos}`)}parseValue(){switch(this.ch()){case 123:return this.modeStack.push("obj-start"),this._pos++,new G(E.map,1/0,1);case 91:return this.modeStack.push("array-start"),this._pos++,new G(E.array,1/0,1);case 34:return this.parseString();case 110:return this.expect([110,117,108,108]),new G(E.null,null,4);case 102:return this.expect([102,97,108,115,101]),new G(E.false,!1,5);case 116:return this.expect([116,114,117,101]),new G(E.true,!0,4);case 45:case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return this.parseNumber();default:throw new Error(`${me} unexpected character at position ${this._pos}`)}}next(){switch(this.skipWhitespace(),this.currentMode()){case"value":return this.modeStack.pop(),this.parseValue();case"array-value":{if(this.modeStack.pop(),this.ch()===93)return this._pos++,this.skipWhitespace(),new G(E.break,void 0,1);if(this.ch()!==44)throw new Error(`${me} unexpected character at position ${this._pos}, was expecting array delimiter but found '${String.fromCharCode(this.ch())}'`);return this._pos++,this.modeStack.push("array-value"),this.skipWhitespace(),this.parseValue()}case"array-start":return this.modeStack.pop(),this.ch()===93?(this._pos++,this.skipWhitespace(),new G(E.break,void 0,1)):(this.modeStack.push("array-value"),this.skipWhitespace(),this.parseValue());case"obj-key":if(this.ch()===125)return this.modeStack.pop(),this._pos++,this.skipWhitespace(),new G(E.break,void 0,1);if(this.ch()!==44)throw new Error(`${me} unexpected character at position ${this._pos}, was expecting object delimiter but found '${String.fromCharCode(this.ch())}'`);this._pos++,this.skipWhitespace();case"obj-start":{if(this.modeStack.pop(),this.ch()===125)return this._pos++,this.skipWhitespace(),new G(E.break,void 0,1);let e=this.parseString();if(this.skipWhitespace(),this.ch()!==58)throw new Error(`${me} unexpected character at position ${this._pos}, was expecting key/value delimiter ':' but found '${String.fromCharCode(this.ch())}'`);return this._pos++,this.modeStack.push("obj-value"),e}case"obj-value":return this.modeStack.pop(),this.modeStack.push("obj-key"),this.skipWhitespace(),this.parseValue();default:throw new Error(`${me} unexpected parse state at position ${this._pos}; this shouldn't happen`)}}};function o5(r,e){return e=Object.assign({tokenizer:new zl(r,e)},e),Nn(r,e)}function dM(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function fM(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=le.asCID(r);if(!e)return null;let t=e.toString();return[new G(E.map,1/0,1),new G(E.string,"/",1),new G(E.string,t,t.length),new G(E.break,void 0,1)]}function J1(r){let e=Ht.encode(r).slice(1);return[new G(E.map,1/0,1),new G(E.string,"/",1),new G(E.map,1/0,1),new G(E.string,"bytes",5),new G(E.string,e,e.length),new G(E.break,void 0,1),new G(E.break,void 0,1)]}function To(r){return J1(new Uint8Array(r.buffer,r.byteOffset,r.byteLength))}function hM(r){return J1(new Uint8Array(r))}function pM(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function mM(r){if(Number.isNaN(r))throw new Error("`NaN` is not supported by the IPLD Data Model and cannot be encoded");if(r===1/0||r===-1/0)throw new Error("`Infinity` and `-Infinity` is not supported by the IPLD Data Model and cannot be encoded");return null}var gM={typeEncoders:{Object:fM,Buffer:J1,Uint8Array:J1,Int8Array:To,Uint16Array:To,Int16Array:To,Uint32Array:To,Int32Array:To,Float32Array:To,Float64Array:To,Uint8ClampedArray:To,BigInt64Array:To,BigUint64Array:To,DataView:To,ArrayBuffer:hM,undefined:pM,number:mM}},i5=class extends zl{constructor(e,t){super(e,t),this.tokenBuffer=[]}done(){return this.tokenBuffer.length===0&&super.done()}_next(){return this.tokenBuffer.length>0?this.tokenBuffer.pop():super.next()}next(){let e=this._next();if(e.type===E.map){let t=this._next();if(t.type===E.string&&t.value==="/"){let n=this._next();if(n.type===E.string){if(this._next().type!==E.break)throw new Error("Invalid encoded CID form");return this.tokenBuffer.push(n),new G(E.tag,42,0)}if(n.type===E.map){let o=this._next();if(o.type===E.string&&o.value==="bytes"){let i=this._next();if(i.type===E.string){for(let a=0;a<2;a++)if(this._next().type!==E.break)throw new Error("Invalid encoded Bytes form");let s=Ht.decode(`m${i.value}`);return new G(E.bytes,s,i.value.length)}this.tokenBuffer.push(i)}this.tokenBuffer.push(o)}this.tokenBuffer.push(n)}this.tokenBuffer.push(t)}return e}},s5={allowIndefinite:!1,allowUndefined:!1,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};s5.tags[42]=le.parse;var yM="dag-json",a5=297,$E=r=>n5(r,gM),KE=r=>{let e=dM(r),t=Object.assign(s5,{tokenizer:new i5(e,s5)});return o5(e,t)},wM=r=>bM.decode($E(r));var bM=new TextDecoder,xM=r=>KE(vM.encode(r)),vM=new TextEncoder;var p5={};Pt(p5,{code:()=>h5,createLink:()=>QE,createNode:()=>YE,decode:()=>OM,encode:()=>DM,name:()=>NM,prepare:()=>d5,validate:()=>f5});var EM=new TextDecoder;function l5(r,e){let t=0;for(let n=0;;n+=7){if(n>=64)throw new Error("protobuf: varint overflow");if(e>=r.length)throw new Error("protobuf: unexpected end of data");let o=r[e++];if(t+=n<28?(o&127)<<n:(o&127)*2**n,o<128)break}return[t,e]}function em(r,e){let t;[t,e]=l5(r,e);let n=e+t;if(t<0||n<0)throw new Error("protobuf: invalid length");if(n>r.length)throw new Error("protobuf: unexpected end of data");return[r.subarray(e,n),n]}function VE(r,e){let t;return[t,e]=l5(r,e),[t&7,t>>3,e]}function SM(r){let e={},t=r.length,n=0;for(;n<t;){let o,i;if([o,i,n]=VE(r,n),i===1){if(e.Hash)throw new Error("protobuf: (PBLink) duplicate Hash section");if(o!==2)throw new Error(`protobuf: (PBLink) wrong wireType (${o}) for Hash`);if(e.Name!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Name before Hash");if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Tsize before Hash");[e.Hash,n]=em(r,n)}else if(i===2){if(e.Name!==void 0)throw new Error("protobuf: (PBLink) duplicate Name section");if(o!==2)throw new Error(`protobuf: (PBLink) wrong wireType (${o}) for Name`);if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Tsize before Name");let s;[s,n]=em(r,n),e.Name=EM.decode(s)}else if(i===3){if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) duplicate Tsize section");if(o!==0)throw new Error(`protobuf: (PBLink) wrong wireType (${o}) for Tsize`);[e.Tsize,n]=l5(r,n)}else throw new Error(`protobuf: (PBLink) invalid fieldNumber, expected 1, 2 or 3, got ${i}`)}if(n>t)throw new Error("protobuf: (PBLink) unexpected end of data");return e}function HE(r){let e=r.length,t=0,n,o=!1,i;for(;t<e;){let a,c;if([a,c,t]=VE(r,t),a!==2)throw new Error(`protobuf: (PBNode) invalid wireType, expected 2, got ${a}`);if(c===1){if(i)throw new Error("protobuf: (PBNode) duplicate Data section");[i,t]=em(r,t),n&&(o=!0)}else if(c===2){if(o)throw new Error("protobuf: (PBNode) duplicate Links section");n||(n=[]);let l;[l,t]=em(r,t),n.push(SM(l))}else throw new Error(`protobuf: (PBNode) invalid fieldNumber, expected 1 or 2, got ${c}`)}if(t>e)throw new Error("protobuf: (PBNode) unexpected end of data");let s={};return i&&(s.Data=i),s.Links=n||[],s}var jE=new TextEncoder,qE=2**32,AM=2**31;function _M(r,e){let t=e.length;if(typeof r.Tsize=="number"){if(r.Tsize<0)throw new Error("Tsize cannot be negative");if(!Number.isSafeInteger(r.Tsize))throw new Error("Tsize too large for encoding");t=gf(e,t,r.Tsize)-1,e[t]=24}if(typeof r.Name=="string"){let n=jE.encode(r.Name);t-=n.length,e.set(n,t),t=gf(e,t,n.length)-1,e[t]=18}return r.Hash&&(t-=r.Hash.length,e.set(r.Hash,t),t=gf(e,t,r.Hash.length)-1,e[t]=10),e.length-t}function WE(r){let e=TM(r),t=new Uint8Array(e),n=e;if(r.Data&&(n-=r.Data.length,t.set(r.Data,n),n=gf(t,n,r.Data.length)-1,t[n]=10),r.Links)for(let o=r.Links.length-1;o>=0;o--){let i=_M(r.Links[o],t.subarray(0,n));n-=i,n=gf(t,n,i)-1,t[n]=18}return t}function IM(r){let e=0;if(r.Hash){let t=r.Hash.length;e+=1+t+Xl(t)}if(typeof r.Name=="string"){let t=jE.encode(r.Name).length;e+=1+t+Xl(t)}return typeof r.Tsize=="number"&&(e+=1+Xl(r.Tsize)),e}function TM(r){let e=0;if(r.Data){let t=r.Data.length;e+=1+t+Xl(t)}if(r.Links)for(let t of r.Links){let n=IM(t);e+=1+n+Xl(n)}return e}function gf(r,e,t){e-=Xl(t);let n=e;for(;t>=AM;)r[e++]=t&127|128,t/=128;for(;t>=128;)r[e++]=t&127|128,t>>>=7;return r[e]=t,n}function Xl(r){return r%2===0&&r++,Math.floor((CM(r)+6)/7)}function CM(r){let e=0;return r>=qE&&(r=Math.floor(r/qE),e=32),r>=65536&&(r>>>=16,e+=16),r>=256&&(r>>>=8,e+=8),e+kM[r]}var kM=[0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8];var PM=["Data","Links"],RM=["Hash","Name","Tsize"],u5=new TextEncoder;function zE(r,e){if(r===e)return 0;let t=r.Name?u5.encode(r.Name):[],n=e.Name?u5.encode(e.Name):[],o=t.length,i=n.length;for(let s=0,a=Math.min(o,i);s<a;++s)if(t[s]!==n[s]){o=t[s],i=n[s];break}return o<i?-1:i<o?1:0}function GE(r,e){return!Object.keys(r).some(t=>!e.includes(t))}function XE(r){if(typeof r.asCID=="object"){let t=le.asCID(r);if(!t)throw new TypeError("Invalid DAG-PB form");return{Hash:t}}if(typeof r!="object"||Array.isArray(r))throw new TypeError("Invalid DAG-PB form");let e={};if(r.Hash){let t=le.asCID(r.Hash);try{t||(typeof r.Hash=="string"?t=le.parse(r.Hash):r.Hash instanceof Uint8Array&&(t=le.decode(r.Hash)))}catch(n){throw new TypeError(`Invalid DAG-PB form: ${n.message}`)}t&&(e.Hash=t)}if(!e.Hash)throw new TypeError("Invalid DAG-PB form");return typeof r.Name=="string"&&(e.Name=r.Name),typeof r.Tsize=="number"&&(e.Tsize=r.Tsize),e}function d5(r){if((r instanceof Uint8Array||typeof r=="string")&&(r={Data:r}),typeof r!="object"||Array.isArray(r))throw new TypeError("Invalid DAG-PB form");let e={};if(r.Data!==void 0)if(typeof r.Data=="string")e.Data=u5.encode(r.Data);else if(r.Data instanceof Uint8Array)e.Data=r.Data;else throw new TypeError("Invalid DAG-PB form");if(r.Links!==void 0)if(Array.isArray(r.Links))e.Links=r.Links.map(XE),e.Links.sort(zE);else throw new TypeError("Invalid DAG-PB form");else e.Links=[];return e}function f5(r){if(!r||typeof r!="object"||Array.isArray(r)||r instanceof Uint8Array||r["/"]&&r["/"]===r.bytes)throw new TypeError("Invalid DAG-PB form");if(!GE(r,PM))throw new TypeError("Invalid DAG-PB form (extraneous properties)");if(r.Data!==void 0&&!(r.Data instanceof Uint8Array))throw new TypeError("Invalid DAG-PB form (Data must be bytes)");if(!Array.isArray(r.Links))throw new TypeError("Invalid DAG-PB form (Links must be a list)");for(let e=0;e<r.Links.length;e++){let t=r.Links[e];if(!t||typeof t!="object"||Array.isArray(t)||t instanceof Uint8Array||t["/"]&&t["/"]===t.bytes)throw new TypeError("Invalid DAG-PB form (bad link)");if(!GE(t,RM))throw new TypeError("Invalid DAG-PB form (extraneous properties on link)");if(t.Hash===void 0)throw new TypeError("Invalid DAG-PB form (link must have a Hash)");if(t.Hash==null||!t.Hash["/"]||t.Hash["/"]!==t.Hash.bytes)throw new TypeError("Invalid DAG-PB form (link Hash must be a CID)");if(t.Name!==void 0&&typeof t.Name!="string")throw new TypeError("Invalid DAG-PB form (link Name must be a string)");if(t.Tsize!==void 0){if(typeof t.Tsize!="number"||t.Tsize%1!==0)throw new TypeError("Invalid DAG-PB form (link Tsize must be an integer)");if(t.Tsize<0)throw new TypeError("Invalid DAG-PB form (link Tsize cannot be negative)")}if(e>0&&zE(t,r.Links[e-1])===-1)throw new TypeError("Invalid DAG-PB form (links must be sorted by Name bytes)")}}function YE(r,e=[]){return d5({Data:r,Links:e})}function QE(r,e,t){return XE({Hash:t,Name:r,Tsize:e})}function ZE(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}var NM="dag-pb",h5=112;function DM(r){f5(r);let e={};return r.Links&&(e.Links=r.Links.map(t=>{let n={};return t.Hash&&(n.Hash=t.Hash.bytes),t.Name!==void 0&&(n.Name=t.Name),t.Tsize!==void 0&&(n.Tsize=t.Tsize),n})),r.Data&&(e.Data=r.Data),WE(e)}function OM(r){let e=ZE(r),t=HE(e),n={};return t.Data&&(n.Data=t.Data),t.Links&&(n.Links=t.Links.map(o=>{let i={};try{i.Hash=le.decode(o.Hash)}catch{}if(!i.Hash)throw new Error("Invalid Hash field found in link, expected CID");return o.Name!==void 0&&(i.Name=o.Name),o.Tsize!==void 0&&(i.Tsize=o.Tsize),i})),n}function Yl(r){return r?.then!=null}function JE(r=[],e){let t={[h5]:p5,[Ea]:vl,[e5]:t5,[a5]:c5,[s4]:zp};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let i=e(n);Yl(i)?o=await i:o=i,t[o.code]=o}if(o!=null)return o;throw new mf(`Could not load codec for ${n}`)}}function eS(r=[],e){let t={[yt.code]:yt,[Yp.code]:Yp,[Dr.code]:Dr};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let i=e(n);Yl(i)?o=await i:o=i,t[o.code]=o}if(o!=null)return o;throw new pf(`No hasher configured for multihash code 0x${n.toString(16)}, please configure one. You can look up which hash this is at https://github.com/multiformats/multicodec/blob/master/table.csv`)}}var Gn=class r extends Error{static name="NotFoundError";static code="ERR_NOT_FOUND";name=r.name;code=r.code;constructor(e="Not Found"){super(e)}};var Ni=class{has(e,t){return Promise.reject(new Error(".has is not implemented"))}put(e,t,n){return Promise.reject(new Error(".put is not implemented"))}async*putMany(e,t){for await(let{cid:n,block:o}of e)await this.put(n,o,t),yield n}get(e,t){return Promise.reject(new Error(".get is not implemented"))}async*getMany(e,t){for await(let n of e)yield{cid:n,block:await this.get(n,t)}}delete(e,t){return Promise.reject(new Error(".delete is not implemented"))}async*deleteMany(e,t){for await(let n of e)await this.delete(n,t),yield n}async*getAll(e){throw new Error(".getAll is not implemented")}};var tm=0,rm=class extends Ni{child;constructor(e){super(),this.child=e}put(e,t){return e.multihash.code===tm||this.child==null?e:this.child.put(e,t)}get(e){if(e.multihash.code===tm)return e.multihash.digest;if(this.child==null)throw new Gn;return this.child.get(e)}has(e){return e.multihash.code===tm?!0:this.child==null?!1:this.child.has(e)}delete(e){if(e.code!==tm&&this.child!=null)return this.child.delete(e)}getAll(e){return this.child!=null?this.child.getAll(e):[]}};function LM(r){return r[Symbol.asyncIterator]!=null}function BM(r,e){let t=0;if(LM(r))return async function*(){for await(let c of r)await e(c,t++)&&(yield c)}();let n=bl(r),{value:o,done:i}=n.next();if(i===!0)return function*(){}();let s=e(o,t++);if(typeof s.then=="function")return async function*(){await s&&(yield o);for await(let c of n)await e(c,t++)&&(yield c)}();let a=e;return function*(){s===!0&&(yield o);for(let c of n)a(c,t++)&&(yield c)}()}var Co=BM;function MM(r){return r[Symbol.asyncIterator]!=null}function tS(r){return r?.then!=null}function UM(r,e){let t=0;if(MM(r))return async function*(){for await(let c of r){let l=e(c,t++);tS(l)&&await l,yield c}}();let n=bl(r),{value:o,done:i}=n.next();if(i===!0)return function*(){}();if(typeof e(o,t++)?.then=="function")return async function*(){yield o;for await(let c of n){let l=e(c,t++);tS(l)&&await l,yield c}}();let a=e;return function*(){yield o;for(let c of n)a(c,t++),yield c}()}var Wa=UM;var nm=class{child;getHasher;log;logger;components;constructor(e){this.log=e.logger.forComponent("helia:networked-storage"),this.logger=e.logger,this.components=e,this.child=new rm(e.blockstore),this.getHasher=e.getHasher}async put(e,t,n={}){return await this.child.has(e,n)?(n.onProgress?.(new ae("blocks:put:duplicate",e)),e):(n.onProgress?.(new ae("blocks:put:providers:notify",e)),await Promise.all(this.components.blockBrokers.map(async o=>o.announce?.(e,t,n))),n.onProgress?.(new ae("blocks:put:blockstore:put",e)),this.child.put(e,t,n))}async*putMany(e,t={}){let n=Co(e,async({cid:i})=>{let s=await this.child.has(i,t);return s&&t.onProgress?.(new ae("blocks:put-many:duplicate",i)),!s}),o=Wa(n,async({cid:i,block:s})=>{t.onProgress?.(new ae("blocks:put-many:providers:notify",i)),await Promise.all(this.components.blockBrokers.map(async a=>a.announce?.(i,s,t)))});t.onProgress?.(new ae("blocks:put-many:blockstore:put-many")),yield*this.child.putMany(o,t)}async get(e,t={}){if(t.offline!==!0&&!await this.child.has(e,t)){let n=await this.getHasher(e.multihash.code);t.onProgress?.(new ae("blocks:get:providers:get",e));let o=await rS(e,this.components.blockBrokers,n,{...t,log:this.log});return t.onProgress?.(new ae("blocks:get:blockstore:put",e)),await this.child.put(e,o,t),t.onProgress?.(new ae("blocks:get:providers:notify",e)),await Promise.all(this.components.blockBrokers.map(async i=>i.announce?.(e,o,t))),o}return t.onProgress?.(new ae("blocks:get:blockstore:get",e)),this.child.get(e,t)}async*getMany(e,t={}){t.onProgress?.(new ae("blocks:get-many:blockstore:get-many")),yield*this.child.getMany(Wa(e,async n=>{if(t.offline!==!0&&!await this.child.has(n,t)){let o=await this.getHasher(n.multihash.code);t.onProgress?.(new ae("blocks:get-many:providers:get",n));let i=await rS(n,this.components.blockBrokers,o,{...t,log:this.log});t.onProgress?.(new ae("blocks:get-many:blockstore:put",n)),await this.child.put(n,i,t),t.onProgress?.(new ae("blocks:get-many:providers:notify",n)),await Promise.all(this.components.blockBrokers.map(async s=>s.announce?.(n,i,t)))}}))}async delete(e,t={}){t.onProgress?.(new ae("blocks:delete:blockstore:delete",e)),await this.child.delete(e,t)}async*deleteMany(e,t={}){t.onProgress?.(new ae("blocks:delete-many:blockstore:delete-many")),yield*this.child.deleteMany(async function*(){for await(let n of e)yield n}(),t)}async has(e,t={}){return this.child.has(e,t)}async*getAll(e={}){e.onProgress?.(new ae("blocks:get-all:blockstore:get-many")),yield*this.child.getAll(e)}},om=class extends nm{started;constructor(e){super(e),this.started=!1}isStarted(){return this.started}async start(){await lr(this.child,...this.components.blockBrokers),this.started=!0}async stop(){await Cr(this.child,...this.components.blockBrokers),this.started=!1}unwrap(){return this.child}createSession(e,t){let n=this.components.blockBrokers.map(o=>o.createSession==null?o:o.createSession(t));return new m5({blockstore:this.child,blockBrokers:n,getHasher:this.getHasher,logger:this.logger},{root:e})}},m5=class extends nm{closeController;constructor(e,t){super(e),this.closeController=new AbortController,this.closeController.signal,this.log=e.logger.forComponent(`helia:session-storage:${t.root}`)}close(){this.closeController.abort()}async put(e,t,n={}){let o=Ne([this.closeController.signal,n.signal]);try{return await super.put(e,t,{...n,signal:o})}finally{o.clear()}}async*putMany(e,t={}){let n=Ne([this.closeController.signal,t.signal]);try{yield*super.putMany(e,{...t,signal:n})}finally{n.clear()}}async get(e,t={}){let n=Ne([this.closeController.signal,t.signal]);try{return await super.get(e,{...t,signal:n})}finally{n.clear()}}async*getMany(e,t={}){let n=Ne([this.closeController.signal,t.signal]);try{yield*super.getMany(e,{...t,signal:n})}finally{n.clear()}}async delete(e,t={}){let n=Ne([this.closeController.signal,t.signal]);try{await super.delete(e,{...t,signal:n})}finally{n.clear()}}async*deleteMany(e,t={}){let n=Ne([this.closeController.signal,t.signal]);try{yield*super.deleteMany(e,{...t,signal:n})}finally{n.clear()}}async has(e,t={}){let n=Ne([this.closeController.signal,t.signal]);try{return await super.has(e,{...t,signal:n})}finally{n.clear()}}async*getAll(e={}){let t=Ne([this.closeController.signal,e.signal]);try{yield*super.getAll({...e,signal:t})}finally{t.clear()}}};function FM(r){return typeof r.retrieve=="function"}var $M=(r,e)=>{if(e==null)throw new D(`No hasher configured for multihash code 0x${r.multihash.code.toString(16)}, please configure one. You can look up which hash this is at https://github.com/multiformats/multicodec/blob/master/table.csv`);return async t=>{let n,o=e.digest(t);if(Yl(o)?n=await o:n=o,!ge(n.digest,r.multihash.digest))throw new is("Hash of downloaded block did not match multihash from passed CID")}};async function rS(r,e,t,n){let o=$M(r,t),i=new AbortController,s=Ne([i.signal,n.signal]);i.signal;let a=[];for(let c of e)FM(c)&&a.push(c);try{return await Promise.any(a.map(async c=>{try{let l=!1,u=await c.retrieve(r,{...n,signal:s,validateFn:async d=>{await o(d),l=!0}});return l||await o(u),u}catch(l){throw n.log.error("could not retrieve verified block for %c",r,l),l}}))}finally{i.abort(),s.clear()}}var Ga=class extends Le{initialPeerSearchComplete;requests;name;log;logger;minProviders;maxProviders;providers;evictionFilter;constructor(e,t){super(),this.name=t.name,this.logger=e.logger,this.log=e.logger.forComponent(this.name),this.requests=new Map,this.minProviders=t.minProviders??1,this.maxProviders=t.maxProviders??5,this.providers=[],this.evictionFilter=tn(this.maxProviders)}async retrieve(e,t={}){let n=Ht.encode(e.multihash.bytes),o=this.requests.get(n);if(o!=null)return this.log("join existing request for %c",e),o;let i=de();if(this.requests.set(n,i.promise),this.providers.length===0){let u=!1;this.initialPeerSearchComplete==null&&(u=!0,this.log=this.logger.forComponent(`${this.name}:${e}`),this.initialPeerSearchComplete=this.findProviders(e,this.minProviders,t)),await this.initialPeerSearchComplete,u&&this.log("found initial session peers for %c",e)}let s=!1,a=new $r({concurrency:this.maxProviders});a.addEventListener("error",()=>{}),a.addEventListener("failure",u=>{this.log.error("error querying provider %o, evicting from session",u.detail.job.options.provider,u.detail.error),this.evict(u.detail.job.options.provider)}),a.addEventListener("success",u=>{s=!0,i.resolve(u.detail.result)}),a.addEventListener("idle",()=>{if(s||t.signal?.aborted===!0){this.log.trace("session idle, found block");return}Promise.resolve().then(async()=>{this.log("no session peers had block for for %c, finding new providers",e);for(let u=0;u<this.minProviders&&this.providers.length!==0;u++){let d=this.providers[Math.floor(Math.random()*this.providers.length)];this.evict(d)}await this.findProviders(e,this.minProviders,t),this.log("found new providers re-retrieving %c",e),this.requests.delete(n),i.resolve(await this.retrieve(e,t))}).catch(u=>{this.log.error("could not find new providers for %c",e,u),i.reject(u)})});let c=u=>{a.add(async()=>this.queryProvider(e,u.detail,t),{provider:u.detail}).catch(d=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c",e,d)})};this.addEventListener("provider",c),Promise.all([...this.providers].map(async u=>a.add(async()=>this.queryProvider(e,u,t),{provider:u}))).catch(u=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c",e,u)});let l=()=>{i.reject(new cr(t.signal?.reason??"Session aborted")),a.abort()};t.signal?.addEventListener("abort",l);try{return await i.promise}finally{this.removeEventListener("provider",c),t.signal?.removeEventListener("abort",l),a.clear(),this.requests.delete(n)}}evict(e){this.evictionFilter.add(this.toEvictionKey(e));let t=this.providers.findIndex(n=>this.equals(n,e));t!==-1&&this.providers.splice(t,1)}isEvicted(e){return this.evictionFilter.has(this.toEvictionKey(e))}hasProvider(e){return!!(this.providers.find(t=>this.equals(t,e))!=null||this.isEvicted(e))}async findProviders(e,t,n){let o=de(),i=0;return Promise.resolve().then(async()=>{this.log("finding %d-%d new provider(s) for %c",t,this.maxProviders,e);for await(let s of this.findNewProviders(e,n)){if(i===this.maxProviders||n.signal?.aborted===!0)break;if(!this.hasProvider(s)&&(this.log("found %d/%d new providers",i,this.maxProviders),this.providers.push(s),this.safeDispatchEvent("provider",{detail:s}),i++,i===t&&(this.log("session is ready"),o.resolve()),this.providers.length===this.maxProviders)){this.log("found max session peers",i);break}}if(this.log("found %d/%d new session peers",i,this.maxProviders),i<t)throw new hf(`Found ${i} of ${t} ${this.name} providers for ${e}`)}).catch(s=>{this.log.error("error searching routing for potential session peers for %c",e,s.errors??s),o.reject(s)}),o.promise}};var im=class{blockstore;datastore;pins;logger;routing;getCodec;getHasher;dns;metrics;log;constructor(e){this.logger=e.logger??Es(),this.log=this.logger.forComponent("helia"),this.getHasher=eS(e.hashers,e.loadHasher),this.getCodec=JE(e.codecs,e.loadCodec),this.dns=e.dns??N1(),this.metrics=e.metrics;let t={blockstore:e.blockstore,datastore:e.datastore,logger:this.logger,blockBrokers:[],getHasher:this.getHasher,getCodec:this.getCodec,dns:this.dns,metrics:this.metrics,...e.components??{}};this.routing=t.routing=new Y1(t,{routers:(e.routers??[]).flatMap(o=>{let i=[o];return o[jo]!=null&&i.push(o[jo]),o[Wo]!=null&&i.push(o[Wo]),i}),providerLookupConcurrency:e.providerLookupConcurrency});let n=new om(t);this.pins=new X1(e.datastore,n,this.getCodec),this.blockstore=new Q1(n,this.pins,{holdGcLock:e.holdGcLock??!0}),this.datastore=e.datastore,t.blockBrokers=e.blockBrokers.map(o=>o(t))}async start(){await ME(this.datastore),await lr(this.blockstore,this.datastore,this.routing)}async stop(){await Cr(this.blockstore,this.datastore,this.routing)}async gc(e={}){let t=await this.blockstore.lock.writeLock();try{let n=this,o=this.blockstore.unwrap();this.log("gc start"),await kr(o.deleteMany(async function*(){for await(let{cid:i}of o.getAll())try{if(await n.pins.isPinned(i,e))continue;yield i,e.onProgress?.(new ae("helia:gc:deleted",i))}catch(s){n.log.error("Error during gc",s),e.onProgress?.(new ae("helia:gc:error",s))}}()))}finally{t()}this.log("gc finished")}};var g5=class extends Ga{wantList;network;constructor(e,t){super(e,{...t,name:"helia:bitswap:session"}),this.wantList=e.wantList,this.network=e.network}async queryProvider(e,t,n){this.log("sending WANT-BLOCK for %c to %p",e,t);let o=await this.wantList.wantSessionBlock(e,t,n);if(this.log("%p %s %c",t,o.has?"has":"does not have",e),o.has&&o.block!=null)return o.block;throw new Error("Provider did not have block")}async*findNewProviders(e,t={}){for await(let n of this.network.findProviders(e,t))yield n.id}toEvictionKey(e){return e.toMultihash().bytes}equals(e,t){return e.equals(t)}};function nS(r,e){return new g5(r,e)}var sm=class{blocksReceived;duplicateBlocksReceived;dataReceived;duplicateDataReceived;constructor(e){this.blocksReceived=e.metrics?.registerMetricGroup("helia_bitswap_received_blocks"),this.duplicateBlocksReceived=e.metrics?.registerMetricGroup("helia_bitswap_duplicate_received_blocks"),this.dataReceived=e.metrics?.registerMetricGroup("helia_bitswap_data_received_bytes"),this.duplicateDataReceived=e.metrics?.registerMetricGroup("helia_bitswap_duplicate_data_received_bytes")}updateBlocksReceived(e=1,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.blocksReceived?.increment(n)}updateDuplicateBlocksReceived(e=1,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.duplicateBlocksReceived?.increment(n)}updateDataReceived(e,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.dataReceived?.increment(n)}updateDuplicateDataReceived(e,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.duplicateDataReceived?.increment(n)}};var y5=class extends Map{metric;constructor(e){super();let{name:t,metrics:n}=e;this.metric=n.registerMetric(t),this.updateComponentMetric()}set(e,t){return super.set(e,t),this.updateComponentMetric(),this}delete(e){let t=super.delete(e);return this.updateComponentMetric(),t}clear(){super.clear(),this.updateComponentMetric()}updateComponentMetric(){this.metric.update(this.size)}};function am(r){let{name:e,metrics:t}=r,n;return t!=null?n=new y5({name:e,metrics:t}):n=new Map,n}function KM(r){if(!(r instanceof Uint8Array))throw new Error("arg needs to be a Uint8Array");let e=[];for(;r.length>0;){let t=nt(r);e.push(t),r=r.slice(Ce(t))}return e}var oS=KM;var cm=class extends Le{peers;wants;network;log;sendMessagesDelay;sendMessagesTimeout;hashLoader;sendingMessages;constructor(e,t={}){super(),this.peers=rf({name:"helia_bitswap_peers",metrics:e.metrics}),this.wants=am({name:"helia_bitswap_wantlist",metrics:e.metrics}),this.network=e.network,this.sendMessagesDelay=t.sendMessagesDelay??10,this.log=e.logger.forComponent("helia:bitswap:wantlist"),this.hashLoader=t.hashLoader,this.network.addEventListener("bitswap:message",n=>{this.receiveMessage(n.detail.peer,n.detail.message).catch(o=>{this.log.error("error receiving bitswap message from %p",n.detail.peer,o)})}),this.network.addEventListener("peer:connected",n=>{this.peerConnected(n.detail).catch(o=>{this.log.error("error processing newly connected bitswap peer %p",n.detail,o)})}),this.network.addEventListener("peer:disconnected",n=>{this.peerDisconnected(n.detail)})}async addEntry(e,t){let n=M(e.multihash.bytes,"base64"),o=this.wants.get(n);o==null&&(o={cid:e,priority:t.priority??1,wantType:t.wantType??Ft.WantBlock,cancel:!1,sendDontHave:!0},this.wants.set(n,o)),o.wantType===Ft.WantHave&&t.wantType===Ft.WantBlock&&(o.wantType=Ft.WantBlock),await this.sendMessagesDebounced();try{return t.wantType===Ft.WantBlock?(await tr(this,"block",t?.signal,{filter:a=>ge(e.multihash.digest,a.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail:(await tr(this,"presence",t?.signal,{filter:s=>ge(e.multihash.digest,s.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail}finally{t.signal?.aborted===!0&&(this.log("want for %c was aborted, cancelling want",e),o.cancel=!0,await this.sendMessagesDebounced())}}async sendMessagesDebounced(){await this.sendingMessages?.promise,clearTimeout(this.sendMessagesTimeout),this.sendMessagesTimeout=setTimeout(()=>{this.sendMessages().catch(e=>{this.log("error sending messages to peers",e)})},this.sendMessagesDelay)}async sendMessages(){this.sendingMessages=de(),await Promise.all([...this.peers.entries()].map(async([e,t])=>{let n=new Set,o=new Ci;for(let[i,s]of this.wants.entries())t.has(i)||s.cancel||(n.add(i),o.addWantlistEntry(s.cid,{cid:s.cid.bytes,priority:s.priority,wantType:s.wantType,cancel:s.cancel,sendDontHave:s.sendDontHave}));if(o.wantlist.size!==0)try{await this.network.sendMessage(e,o);for(let i of n)t.add(i)}catch(i){this.log.error("error sending full wantlist to new peer",i)}})).catch(e=>{this.log.error("error sending messages",e)});for(let[e,t]of this.wants)if(t.cancel){this.wants.delete(e);for(let n of this.peers.values())n.delete(e)}this.sendingMessages.resolve()}has(e){let t=M(e.multihash.bytes,"base64");return this.wants.has(t)}async wantSessionPresence(e,t,n={}){let o=new Ci;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:Ft.WantHave,priority:1}),await this.network.sendMessage(t,o),(await tr(this,"presence",n.signal,{filter:s=>t.equals(s.detail.sender)&&ge(e.multihash.digest,s.detail.cid.multihash.digest)})).detail}async wantBlock(e,t={}){return this.addEntry(e,{...t,wantType:Ft.WantBlock})}async wantSessionBlock(e,t,n={}){let o=new Ci;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:Ft.WantBlock,priority:1}),await this.network.sendMessage(t,o),(await tr(this,"presence",n.signal,{filter:s=>t.equals(s.detail.sender)&&ge(e.multihash.digest,s.detail.cid.multihash.digest)})).detail}async receivedBlock(e,t){let n=M(e.multihash.bytes,"base64"),o=this.wants.get(n);o!=null&&(o.cancel=!0,await this.sendMessagesDebounced())}async receiveMessage(e,t){this.log("received message from %p with %d blocks",e,t.blocks.length);let n=!1;for(let o of t.blocks){if(o.prefix==null||o.data==null)continue;let i=oS(o.prefix),s=i[0],a=i[1],c=i[2],l=c===yt.code?yt:await this.hashLoader?.getHasher(c);if(l==null){this.log.error("unknown hash algorithm",c);continue}let u=l.digest(o.data);u.then!=null&&(u=await u);let d=le.create(s===0?0:1,a,u);this.log("received block from %p for %c",e,d),this.safeDispatchEvent("block",{detail:{sender:e,cid:d,block:o.data}}),this.safeDispatchEvent("presence",{detail:{sender:e,cid:d,has:!0,block:o.data}});let h=M(d.multihash.bytes,"base64"),m=this.wants.get(h);m!=null&&(m.cancel=!0,n=!0)}for(let{cid:o,type:i}of t.blockPresences){let s=le.decode(o);this.log("received %s from %p for %c",i,e,s),this.safeDispatchEvent("presence",{detail:{sender:e,cid:s,has:i===Kn.HaveBlock}})}n&&await this.sendMessagesDebounced()}async peerConnected(e){let t=new Set,n=new Ci(!0);for(let[o,i]of this.wants.entries())i.cancel||(t.add(o),n.addWantlistEntry(i.cid,{cid:i.cid.bytes,priority:1,wantType:Ft.WantBlock,cancel:!1,sendDontHave:!1}));if(n.wantlist.size===0){this.peers.set(e,t);return}try{await this.network.sendMessage(e,n),this.peers.set(e,t)}catch(o){this.log.error("error sending full wantlist to new peer %p",e,o)}}peerDisconnected(e){this.peers.delete(e)}start(){}stop(){this.peers.clear(),clearTimeout(this.sendMessagesTimeout)}};var lm=class{log;logger;stats;network;blockstore;peerWantLists;wantList;constructor(e,t={}){this.logger=e.logger,this.log=e.logger.forComponent("helia:bitswap"),this.blockstore=e.blockstore,this.stats=new sm(e),this.network=new n1(e,t),this.peerWantLists=new A1({...e,network:this.network},t),this.wantList=new cm({...e,network:this.network},t)}createSession(e={}){return nS({wantList:this.wantList,network:this.network,logger:this.logger},e)}async want(e,t={}){let n=new AbortController,o=Ne([n.signal,t.signal]);n.signal,this.network.findAndConnect(e,{...t,signal:o}).catch(i=>{n.signal.aborted||this.log.error("error during finding and connect for cid %c",e,i)});try{return(await this.wantList.wantBlock(e,{...t,signal:o})).block}finally{n.abort(),o.clear()}}async notify(e,t,n={}){await Promise.all([this.peerWantLists.receivedBlock(e,n),this.wantList.receivedBlock(e,n)])}getWantlist(){return[...this.wantList.wants.values()].filter(e=>!e.cancel).map(e=>({cid:e.cid,priority:e.priority,wantType:e.wantType}))}getPeerWantlist(e){return this.peerWantLists.wantListForPeer(e)}async start(){this.wantList.start(),await this.network.start()}async stop(){this.wantList.stop(),await this.network.stop()}};var iS=(r,e={})=>new lm(r,e);var w5=class{bitswap;started;constructor(e,t={}){let{getHasher:n}=e;this.bitswap=iS(e,{hashLoader:{getHasher:async o=>n(o)},...t}),this.started=!1}isStarted(){return this.started}async start(){await this.bitswap.start(),this.started=!0}async stop(){await this.bitswap.stop(),this.started=!1}async announce(e,t,n){await this.bitswap.notify(e,t,n)}async retrieve(e,t={}){return this.bitswap.want(e,t)}createSession(e){let t=this.bitswap.createSession(e);return{announce:async(n,o,i)=>{await this.bitswap.notify(n,o,i)},retrieve:async(n,o)=>t.retrieve(n,o)}}};function b5(r={}){return e=>new w5(e,r)}var um=class{index=0;input="";new(e){return this.index=0,this.input=e,this}readAtomically(e){let t=this.index,n=e();return n===void 0&&(this.index=t),n}parseWith(e){let t=e();if(this.index===this.input.length)return t}peekChar(){if(!(this.index>=this.input.length))return this.input[this.index]}readChar(){if(!(this.index>=this.input.length))return this.input[this.index++]}readGivenChar(e){return this.readAtomically(()=>{let t=this.readChar();if(t===e)return t})}readSeparator(e,t,n){return this.readAtomically(()=>{if(!(t>0&&this.readGivenChar(e)===void 0))return n()})}readNumber(e,t,n,o){return this.readAtomically(()=>{let i=0,s=0,a=this.peekChar();if(a===void 0)return;let c=a==="0",l=2**(8*o)-1;for(;;){let u=this.readAtomically(()=>{let d=this.readChar();if(d===void 0)return;let h=Number.parseInt(d,e);if(!Number.isNaN(h))return h});if(u===void 0)break;if(i*=e,i+=u,i>l||(s+=1,t!==void 0&&s>t))return}if(s!==0)return!n&&c&&s>1?void 0:i})}readIPv4Addr(){return this.readAtomically(()=>{let e=new Uint8Array(4);for(let t=0;t<e.length;t++){let n=this.readSeparator(".",t,()=>this.readNumber(10,3,!1,1));if(n===void 0)return;e[t]=n}return e})}readIPv6Addr(){let e=t=>{for(let n=0;n<t.length/2;n++){let o=n*2;if(n<t.length-3){let s=this.readSeparator(":",n,()=>this.readIPv4Addr());if(s!==void 0)return t[o]=s[0],t[o+1]=s[1],t[o+2]=s[2],t[o+3]=s[3],[o+4,!0]}let i=this.readSeparator(":",n,()=>this.readNumber(16,4,!0,2));if(i===void 0)return[o,!1];t[o]=i>>8,t[o+1]=i&255}return[t.length,!1]};return this.readAtomically(()=>{let t=new Uint8Array(16),[n,o]=e(t);if(n===16)return t;if(o||this.readGivenChar(":")===void 0||this.readGivenChar(":")===void 0)return;let i=new Uint8Array(14),s=16-(n+2),[a]=e(i.subarray(0,s));return t.set(i.subarray(0,a),16-a),t})}readIPAddr(){return this.readIPv4Addr()??this.readIPv6Addr()}};var sS=45,VM=15,Ql=new um;function dm(r){if(!(r.length>VM))return Ql.new(r).parseWith(()=>Ql.readIPv4Addr())}function fm(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>sS))return Ql.new(r).parseWith(()=>Ql.readIPv6Addr())}function za(r,e=!1){if(r.includes("%")&&(r=r.split("%")[0]),r.length>sS)return;let t=Ql.new(r).parseWith(()=>Ql.readIPAddr());if(t)return e&&t.length===4?Uint8Array.from([0,0,0,0,0,0,0,0,0,0,255,255,t[0],t[1],t[2],t[3]]):t}function ko(r){return!!dm(r)}function Zl(r){return!!fm(r)}function hm(r){return!!za(r)}var cS=Vt(aS(),1),HM=["0.0.0.0/8","10.0.0.0/8","100.64.0.0/10","127.0.0.0/8","169.254.0.0/16","172.16.0.0/12","192.0.0.0/24","192.0.0.0/29","192.0.0.8/32","192.0.0.9/32","192.0.0.10/32","192.0.0.170/32","192.0.0.171/32","192.0.2.0/24","192.31.196.0/24","192.52.193.0/24","192.88.99.0/24","192.168.0.0/16","192.175.48.0/24","198.18.0.0/15","198.51.100.0/24","203.0.113.0/24","240.0.0.0/4","255.255.255.255/32"],qM=HM.map(r=>new cS.Netmask(r));function x5(r){for(let e of qM)if(e.contains(r))return!0;return!1}function jM(r){return/^::ffff:([0-9a-fA-F]{1,4}):([0-9a-fA-F]{1,4})$/.test(r)}function WM(r){let e=r.split(":");if(e.length<2)return!1;let t=e[e.length-1].padStart(4,"0"),n=e[e.length-2].padStart(4,"0"),o=`${parseInt(n.substring(0,2),16)}.${parseInt(n.substring(2),16)}.${parseInt(t.substring(0,2),16)}.${parseInt(t.substring(2),16)}`;return x5(o)}function GM(r){return/^::ffff:([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)}function zM(r){let e=r.split(":"),t=e[e.length-1];return x5(t)}function XM(r){return/^::$/.test(r)||/^::1$/.test(r)||/^64:ff9b::([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)||/^100::([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2001::([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2001:2[0-9a-fA-F]:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2001:db8:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2002:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^f[c-d]([0-9a-fA-F]{2,2}):/i.test(r)||/^fe[8-9a-bA-B][0-9a-fA-F]:/i.test(r)||/^ff([0-9a-fA-F]{2,2}):/i.test(r)}function Gr(r){return ko(r)?x5(r):jM(r)?WM(r):GM(r)?zM(r):Zl(r)?XM(r):void 0}var YM=r=>r.toString().split("/").slice(1),Jl=r=>({match:e=>e.length<1?!1:r(e[0])?e.slice(1):!1,pattern:"fn"}),Be=r=>({match:e=>Jl(t=>t===r).match(e),pattern:r}),Xa=()=>({match:r=>Jl(e=>typeof e=="string").match(r),pattern:"{string}"}),wf=()=>({match:r=>Jl(e=>!isNaN(parseInt(e))).match(r),pattern:"{number}"}),ot=()=>({match:r=>{if(r.length<2||r[0]!=="p2p"&&r[0]!=="ipfs")return!1;if(r[1].startsWith("Q")||r[1].startsWith("1"))try{He.decode(`z${r[1]}`)}catch{return!1}else return!1;return r.slice(2)},pattern:"/p2p/{peerid}"}),bf=()=>({match:r=>{if(r.length<2||r[0]!=="certhash")return!1;try{va.decode(r[1])}catch{return!1}return r.slice(2)},pattern:"/certhash/{certhash}"}),et=r=>({match:e=>{let t=r.match(e);return t===!1?e:t},pattern:`optional(${r.pattern})`}),Br=(...r)=>({match:e=>{let t;for(let n of r){let o=n.match(e);o!==!1&&(t==null||o.length<t.length)&&(t=o)}return t??!1},pattern:`or(${r.map(e=>e.pattern).join(", ")})`}),qe=(...r)=>({match:e=>{for(let t of r){let n=t.match(e);if(n===!1)return!1;e=n}return e},pattern:`and(${r.map(e=>e.pattern).join(", ")})`});function it(...r){function e(o){let i=YM(o);for(let s of r){let a=s.match(i);if(a===!1)return!1;i=a}return i}function t(o){return e(o)!==!1}function n(o){let i=e(o);return i===!1?!1:i.length===0}return{matchers:r,matches:t,exactMatch:n}}var QM=ot(),lS=it(QM),mm=qe(Be("dns4"),Xa()),gm=qe(Be("dns6"),Xa()),ym=qe(Be("dnsaddr"),Xa()),E5=qe(Be("dns"),Xa()),vne=it(mm,et(ot())),Ene=it(gm,et(ot())),Sne=it(ym,et(ot())),xf=it(Br(E5,ym,mm,gm),et(ot())),uS=qe(Be("ip4"),Jl(ko)),dS=qe(Be("ip6"),Jl(Zl)),S5=Br(uS,dS),Di=Br(S5,E5,mm,gm,ym),fS=it(Br(S5,qe(Br(E5,ym,mm,gm),et(ot())))),A5=it(uS),_5=it(dS),hS=it(S5),I5=qe(Di,Be("tcp"),wf()),vf=qe(Di,Be("udp"),wf()),Ya=it(qe(I5,et(ot()))),Ane=it(vf),T5=qe(vf,Be("quic"),et(ot())),wm=qe(vf,Be("quic-v1"),et(ot())),ZM=Br(T5,wm),_ne=it(T5),pS=it(wm),v5=Br(Di,I5,vf,T5,wm),mS=Br(qe(v5,Be("ws"),et(ot()))),Oi=it(mS),gS=Br(qe(v5,Be("wss"),et(ot())),qe(v5,Be("tls"),et(qe(Be("sni"),Xa())),Be("ws"),et(ot()))),Qa=it(gS),yS=qe(vf,Be("webrtc-direct"),et(bf()),et(bf()),et(ot())),Ef=it(yS),wS=qe(wm,Be("webtransport"),et(bf()),et(bf()),et(ot())),C5=it(wS),pm=Br(mS,gS,qe(I5,et(ot())),qe(ZM,et(ot())),qe(Di,et(ot())),yS,wS,ot()),bm=it(pm),JM=qe(pm,Be("p2p-circuit"),ot()),nn=it(JM),eU=Br(qe(pm,Be("p2p-circuit"),Be("webrtc"),et(ot())),qe(pm,Be("webrtc"),et(ot())),qe(Be("webrtc"),et(ot()))),Sf=it(eU),tU=Br(qe(Di,Be("tcp"),wf(),Be("http"),et(ot())),qe(Di,Be("http"),et(ot()))),bS=it(tU),rU=Br(qe(Di,Be("tcp"),Br(qe(Be("443"),Be("http")),qe(wf(),Be("https"))),et(ot())),qe(Di,Be("tls"),Be("http"),et(ot())),qe(Di,Be("https"),et(ot()))),xS=it(rU),nU=Br(qe(Be("memory"),Xa(),et(ot()))),Ine=it(nU);function vS(r,e,t){let n=0;for(let o of r)if(!(n<e)){if(n>t)break;if(o!==255)return!1;n++}return!0}function ES(r,e,t,n){let o=0;for(let i of r)if(!(o<t)){if(o>n)break;if(i!==e[o])return!1;o++}return!0}function k5(r){switch(r.length){case Za:return r.join(".");case Ja:{let e=[];for(let t=0;t<r.length;t++)t%2===0&&e.push(r[t].toString(16).padStart(2,"0")+r[t+1].toString(16).padStart(2,"0"));return e.join(":")}default:throw new Error("Invalid ip length")}}function SS(r){let e=0;for(let[t,n]of r.entries()){if(n===255){e+=8;continue}for(;(n&128)!=0;)e++,n=n<<1;if((n&128)!=0)return-1;for(let o=t+1;o<r.length;o++)if(r[o]!=0)return-1;break}return e}function AS(r){let e="0x";for(let t of r)e+=(t>>4).toString(16)+(t&15).toString(16);return e}var Za=4,Ja=16,Nne=parseInt("0xFFFF",16),oU=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);function Af(r,e){e.length===Ja&&r.length===Za&&vS(e,0,11)&&(e=e.slice(12)),e.length===Za&&r.length===Ja&&ES(r,oU,0,11)&&(r=r.slice(12));let t=r.length;if(t!=e.length)throw new Error("Failed to mask ip");let n=new Uint8Array(t);for(let o=0;o<t;o++)n[o]=r[o]&e[o];return n}function _S(r,e){if(typeof e=="string"&&(e=za(e)),e==null)throw new Error("Invalid ip");if(e.length!==r.network.length)return!1;for(let t=0;t<e.length;t++)if((r.network[t]&r.mask[t])!==(e[t]&r.mask[t]))return!1;return!0}function P5(r){let[e,t]=r.split("/");if(!e||!t)throw new Error("Failed to parse given CIDR: "+r);let n=Za,o=dm(e);if(o==null&&(n=Ja,o=fm(e),o==null))throw new Error("Failed to parse given CIDR: "+r);let i=parseInt(t,10);if(Number.isNaN(i)||String(i).length!==t.length||i<0||i>n*8)throw new Error("Failed to parse given CIDR: "+r);let s=R5(i,8*n);return{network:Af(o,s),mask:s}}function R5(r,e){if(e!==8*Za&&e!==8*Ja)throw new Error("Invalid CIDR mask");if(r<0||r>e)throw new Error("Invalid CIDR mask");let t=e/8,n=new Uint8Array(t);for(let o=0;o<t;o++){if(r>=8){n[o]=255,r-=8;continue}n[o]=255-(255>>r),r=0}return n}var ec=class{constructor(e,t){if(t==null)({network:this.network,mask:this.mask}=P5(e));else{let n=za(e);if(n==null)throw new Error("Failed to parse network");t=String(t);let o=parseInt(t,10);if(Number.isNaN(o)||String(o).length!==t.length||o<0||o>n.length*8){let i=za(t);if(i==null)throw new Error("Failed to parse mask");this.mask=i}else this.mask=R5(o,8*n.length);this.network=Af(n,this.mask)}}contains(e){return _S({network:this.network,mask:this.mask},e)}toString(){let e=SS(this.mask),t=e!==-1?String(e):AS(this.mask);return k5(this.network)+"/"+t}};function IS(r,e){return new ec(r).contains(e)}var TS=ko,iU=Zl,N5=function(r){let e=0;if(r=r.toString().trim(),TS(r)){let t=new Uint8Array(e+4);return r.split(/\./g).forEach(n=>{t[e++]=parseInt(n,10)&255}),t}if(iU(r)){let t=r.split(":",8),n;for(n=0;n<t.length;n++){let i=TS(t[n]),s;i&&(s=N5(t[n]),t[n]=M(s.slice(0,2),"base16")),s!=null&&++n<8&&t.splice(n,0,M(s.slice(2,4),"base16"))}if(t[0]==="")for(;t.length<8;)t.unshift("0");else if(t[t.length-1]==="")for(;t.length<8;)t.push("0");else if(t.length<8){for(n=0;n<t.length&&t[n]!=="";n++);let i=[n,1];for(n=9-t.length;n>0;n--)i.push("0");t.splice.apply(t,i)}let o=new Uint8Array(e+16);for(n=0;n<t.length;n++){let i=parseInt(t[n],16);o[e++]=i>>8&255,o[e++]=i&255}return o}throw new Error("invalid ip address")},CS=function(r,e=0,t){e=~~e,t=t??r.length-e;let n=new DataView(r.buffer);if(t===4){let o=[];for(let i=0;i<t;i++)o.push(r[e+i]);return o.join(".")}if(t===16){let o=[];for(let i=0;i<t;i+=2)o.push(n.getUint16(e+i).toString(16));return o.join(":").replace(/(^|:)0(:0)*:0(:|$)/,"$1::$3").replace(/:{3,4}/,"::")}return""};var eu={},D5={},aU=[[4,32,"ip4"],[6,16,"tcp"],[33,16,"dccp"],[41,128,"ip6"],[42,-1,"ip6zone"],[43,8,"ipcidr"],[53,-1,"dns",!0],[54,-1,"dns4",!0],[55,-1,"dns6",!0],[56,-1,"dnsaddr",!0],[132,16,"sctp"],[273,16,"udp"],[275,0,"p2p-webrtc-star"],[276,0,"p2p-webrtc-direct"],[277,0,"p2p-stardust"],[280,0,"webrtc-direct"],[281,0,"webrtc"],[290,0,"p2p-circuit"],[301,0,"udt"],[302,0,"utp"],[400,-1,"unix",!1,!0],[421,-1,"ipfs"],[421,-1,"p2p"],[443,0,"https"],[444,96,"onion"],[445,296,"onion3"],[446,-1,"garlic64"],[448,0,"tls"],[449,-1,"sni"],[460,0,"quic"],[461,0,"quic-v1"],[465,0,"webtransport"],[466,-1,"certhash"],[477,0,"ws"],[478,0,"wss"],[479,0,"p2p-websocket-star"],[480,0,"http"],[481,-1,"http-path"],[777,-1,"memory"]];aU.forEach(r=>{let e=cU(...r);D5[e.code]=e,eu[e.name]=e});function cU(r,e,t,n,o){return{code:r,size:e,name:t,resolvable:!!n,path:!!o}}function Ie(r){if(typeof r=="number"){if(D5[r]!=null)return D5[r];throw new Error(`no protocol with code: ${r}`)}else if(typeof r=="string"){if(eu[r]!=null)return eu[r];throw new Error(`no protocol with name: ${r}`)}throw new Error(`invalid protocol id type: ${typeof r}`)}var lU=Ie("ip4"),uU=Ie("ip6"),dU=Ie("ipcidr");function M5(r,e){switch(Ie(r).code){case 4:case 41:return hU(e);case 42:return B5(e);case 43:return M(e,"base10");case 6:case 273:case 33:case 132:return RS(e).toString();case 53:case 54:case 55:case 56:case 400:case 449:case 777:return B5(e);case 421:return yU(e);case 444:return PS(e);case 445:return PS(e);case 466:return gU(e);case 481:return globalThis.encodeURIComponent(B5(e));default:return M(e,"base16")}}function U5(r,e){switch(Ie(r).code){case 4:return kS(e);case 41:return kS(e);case 42:return L5(e);case 43:return V(e,"base10");case 6:case 273:case 33:case 132:return $5(parseInt(e,10));case 53:case 54:case 55:case 56:case 400:case 449:case 777:return L5(e);case 421:return pU(e);case 444:return wU(e);case 445:return bU(e);case 466:return mU(e);case 481:return L5(globalThis.decodeURIComponent(e));default:return V(e,"base16")}}function F5(r){let e,t;if(r.stringTuples().forEach(([n,o])=>{(n===lU.code||n===uU.code)&&(t=o),n===dU.code&&(e=o)}),e==null||t==null)throw new Error("Invalid multiaddr");return new ec(t,e)}var O5=Object.values(Aa).map(r=>r.decoder),fU=function(){let r=O5[0].or(O5[1]);return O5.slice(2).forEach(e=>r=r.or(e)),r}();function kS(r){if(!hm(r))throw new Error("invalid ip address");return N5(r)}function hU(r){let e=CS(r,0,r.length);if(e==null)throw new Error("ipBuff is required");if(!hm(e))throw new Error("invalid ip address");return e}function $5(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r),new Uint8Array(e)}function RS(r){return new DataView(r.buffer).getUint16(r.byteOffset)}function L5(r){let e=V(r),t=Uint8Array.from(Fe(e.length));return st([t,e],t.length+e.length)}function B5(r){let e=nt(r);if(r=r.slice(Ce(e)),r.length!==e)throw new Error("inconsistent lengths");return M(r)}function pU(r){let e;r[0]==="Q"||r[0]==="1"?e=Ye(He.decode(`z${r}`)).bytes:e=le.parse(r).multihash.bytes;let t=Uint8Array.from(Fe(e.length));return st([t,e],t.length+e.length)}function mU(r){let e=fU.decode(r),t=Uint8Array.from(Fe(e.length));return st([t,e],t.length+e.length)}function gU(r){let e=nt(r),t=r.slice(Ce(e));if(t.length!==e)throw new Error("inconsistent lengths");return"u"+M(t,"base64url")}function yU(r){let e=nt(r),t=r.slice(Ce(e));if(t.length!==e)throw new Error("inconsistent lengths");return M(t,"base58btc")}function wU(r){let e=r.split(":");if(e.length!==2)throw new Error(`failed to parse onion addr: ["'${e.join('", "')}'"]' does not contain a port number`);if(e[0].length!==16)throw new Error(`failed to parse onion addr: ${e[0]} not a Tor onion address.`);let t=Xt.decode("b"+e[0]),n=parseInt(e[1],10);if(n<1||n>65536)throw new Error("Port number is not in range(1, 65536)");let o=$5(n);return st([t,o],t.length+o.length)}function bU(r){let e=r.split(":");if(e.length!==2)throw new Error(`failed to parse onion addr: ["'${e.join('", "')}'"]' does not contain a port number`);if(e[0].length!==56)throw new Error(`failed to parse onion addr: ${e[0]} not a Tor onion3 address.`);let t=Xt.decode(`b${e[0]}`),n=parseInt(e[1],10);if(n<1||n>65536)throw new Error("Port number is not in range(1, 65536)");let o=$5(n);return st([t,o],t.length+o.length)}function PS(r){let e=r.slice(0,r.length-2),t=r.slice(r.length-2),n=M(e,"base32"),o=RS(t);return`${n}:${o}`}function NS(r){r=K5(r);let e=[],t=[],n=null,o=r.split("/").slice(1);if(o.length===1&&o[0]==="")return{bytes:new Uint8Array,string:"/",tuples:[],stringTuples:[],path:null};for(let i=0;i<o.length;i++){let s=o[i],a=Ie(s);if(a.size===0){e.push([a.code]),t.push([a.code]);continue}if(i++,i>=o.length)throw new xm("invalid address: "+r);if(a.path===!0){n=K5(o.slice(i).join("/")),e.push([a.code,U5(a.code,n)]),t.push([a.code,n]);break}let c=U5(a.code,o[i]);e.push([a.code,c]),t.push([a.code,M5(a.code,c)])}return{string:DS(t),bytes:vm(e),tuples:e,stringTuples:t,path:n}}function V5(r){let e=[],t=[],n=null,o=0;for(;o<r.length;){let i=nt(r,o),s=Ce(i),a=Ie(i),c=xU(a,r.slice(o+s));if(c===0){e.push([i]),t.push([i]),o+=s;continue}let l=r.slice(o+s,o+s+c);if(o+=c+s,o>r.length)throw new xm("Invalid address Uint8Array: "+M(r,"base16"));e.push([i,l]);let u=M5(i,l);if(t.push([i,u]),a.path===!0){n=u;break}}return{bytes:Uint8Array.from(r),string:DS(t),tuples:e,stringTuples:t,path:n}}function DS(r){let e=[];return r.map(t=>{let n=Ie(t[0]);return e.push(n.name),t.length>1&&t[1]!=null&&e.push(t[1]),null}),K5(e.join("/"))}function vm(r){return st(r.map(e=>{let t=Ie(e[0]),n=Uint8Array.from(Fe(t.code));return e.length>1&&e[1]!=null&&(n=st([n,e[1]])),n}))}function xU(r,e){if(r.size>0)return r.size/8;if(r.size===0)return 0;{let t=nt(e instanceof Uint8Array?e:Uint8Array.from(e));return t+Ce(t)}}function K5(r){return"/"+r.trim().split("/").filter(e=>e).join("/")}var xm=class extends Error{static name="ParseError";name="ParseError";constructor(e){super(`Error parsing address: ${e}`)}};var vU=Symbol.for("nodejs.util.inspect.custom"),q5=Symbol.for("@multiformats/js-multiaddr/multiaddr"),EU=[Ie("dns").code,Ie("dns4").code,Ie("dns6").code,Ie("dnsaddr").code],H5=class extends Error{constructor(e="No available resolver"){super(e),this.name="NoAvailableResolverError"}},Em=class r{bytes;#e;#t;#r;#o;[q5]=!0;constructor(e){e==null&&(e="");let t;if(e instanceof Uint8Array)t=V5(e);else if(typeof e=="string"){if(e.length>0&&e.charAt(0)!=="/")throw new Error(`multiaddr "${e}" must start with a "/"`);t=NS(e)}else if(ks(e))t=V5(e.bytes);else throw new Error("addr must be a string, Buffer, or another Multiaddr");this.bytes=t.bytes,this.#e=t.string,this.#t=t.tuples,this.#r=t.stringTuples,this.#o=t.path}toString(){return this.#e}toJSON(){return this.toString()}toOptions(){let e,t,n,o,i="",s=Ie("tcp"),a=Ie("udp"),c=Ie("ip4"),l=Ie("ip6"),u=Ie("dns6"),d=Ie("ip6zone");for(let[m,g]of this.stringTuples())m===d.code&&(i=`%${g??""}`),EU.includes(m)&&(t=s.name==="tcp"?"tcp":"udp",o=443,n=`${g??""}${i}`,e=m===u.code?6:4),(m===s.code||m===a.code)&&(t=Ie(m).name==="tcp"?"tcp":"udp",o=parseInt(g??"")),(m===c.code||m===l.code)&&(t=Ie(m).name==="tcp"?"tcp":"udp",n=`${g??""}${i}`,e=m===l.code?6:4);if(e==null||t==null||n==null||o==null)throw new Error('multiaddr must have a valid format: "/{ip4, ip6, dns4, dns6, dnsaddr}/{address}/{tcp, udp}/{port}".');return{family:e,host:n,transport:t,port:o}}protos(){return this.#t.map(([e])=>Object.assign({},Ie(e)))}protoCodes(){return this.#t.map(([e])=>e)}protoNames(){return this.#t.map(([e])=>Ie(e).name)}tuples(){return this.#t.map(([e,t])=>t==null?[e]:[e,t])}stringTuples(){return this.#r.map(([e,t])=>t==null?[e]:[e,t])}encapsulate(e){return e=new r(e),new r(this.toString()+e.toString())}decapsulate(e){let t=e.toString(),n=this.toString(),o=n.lastIndexOf(t);if(o<0)throw new Error(`Address ${this.toString()} does not contain subaddress: ${e.toString()}`);return new r(n.slice(0,o))}decapsulateCode(e){let t=this.tuples();for(let n=t.length-1;n>=0;n--)if(t[n][0]===e)return new r(vm(t.slice(0,n)));return this}getPeerId(){try{let e=[];this.stringTuples().forEach(([n,o])=>{n===eu.p2p.code&&e.push([n,o]),n===eu["p2p-circuit"].code&&(e=[])});let t=e.pop();if(t?.[1]!=null){let n=t[1];return n[0]==="Q"||n[0]==="1"?M(He.decode(`z${n}`),"base58btc"):M(le.parse(n).multihash.bytes,"base58btc")}return null}catch{return null}}getPath(){return this.#o}equals(e){return ge(this.bytes,e.bytes)}async resolve(e){let t=this.protos().find(i=>i.resolvable);if(t==null)return[this];let n=tu.get(t.name);if(n==null)throw new H5(`no available resolver for ${t.name}`);return(await n(this,e)).map(i=>oe(i))}nodeAddress(){let e=this.toOptions();if(e.transport!=="tcp"&&e.transport!=="udp")throw new Error(`multiaddr must have a valid format - no protocol with name: "${e.transport}". Must have a valid transport protocol: "{tcp, udp}"`);return{family:e.family,address:e.host,port:e.port}}isThinWaistAddress(e){let t=(e??this).protos();return!(t.length!==2||t[0].code!==4&&t[0].code!==41||t[1].code!==6&&t[1].code!==273)}[vU](){return`Multiaddr(${this.#e})`}};var tu=new Map;function ks(r){return!!r?.[q5]}function oe(r){return new Em(r)}var SU=[Ie("tcp").code,Ie("dns").code,Ie("dnsaddr").code,Ie("dns4").code,Ie("dns6").code];function OS(r){return MS("sni",r)?.[1]}function LS(r){let e=MS("tcp",r)?.[1];return e==null?"":`:${e}`}function MS(r,e){let t;try{t=Ie(r).code}catch{return}for(let[n,o]of e)if(n===t&&o!=null)return[n,o]}function BS(r){return r.some(([e,t])=>e===Ie("tls").code)}function Po(r,e,t){let n=US[Ie(r).name];if(n==null)throw new Error(`Can't interpret protocol ${Ie(r).name}`);let o=n(e,t);return r===Ie("ip6").code?`[${o}]`:o}var US={ip4:(r,e)=>r,ip6:(r,e)=>e.length===0?r:`[${r}]`,tcp:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`tcp://${Po(t[0],t[1]??"",e)}:${r}`},udp:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`udp://${Po(t[0],t[1]??"",e)}:${r}`},dnsaddr:(r,e)=>r,dns4:(r,e)=>r,dns6:(r,e)=>r,dns:(r,e)=>r,ipfs:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${Po(t[0],t[1]??"",e)}`},p2p:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${Po(t[0],t[1]??"",e)}`},http:(r,e)=>{let t=BS(e),n=OS(e),o=LS(e);if(t&&n!=null)return`https://${n}${o}`;let i=t?"https://":"http://",s=e.pop();if(s==null)throw new Error("Unexpected end of multiaddr");let a=Po(s[0],s[1]??"",e);return a=a.replace("tcp://",""),`${i}${a}`},"http-path":(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=Po(t[0],t[1]??"",e),o=decodeURIComponent(r);return`${n}/${o}`},tls:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return Po(t[0],t[1]??"",e)},sni:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return Po(t[0],t[1]??"",e)},https:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=Po(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`https://${n}`},ws:(r,e)=>{let t=BS(e),n=OS(e),o=LS(e);if(t&&n!=null)return`wss://${n}${o}`;let i=t?"wss://":"ws://",s=e.pop();if(s==null)throw new Error("Unexpected end of multiaddr");let a=Po(s[0],s[1]??"",e);return a=a.replace("tcp://",""),`${i}${a}`},wss:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=Po(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`wss://${n}`}};function Sm(r,e){let n=oe(r).stringTuples(),o=n.pop();if(o==null)throw new Error("Unexpected end of multiaddr");let i=Ie(o[0]),s=US[i.name];if(s==null)throw new Error(`No interpreter found for ${i.name}`);let a=s(o[1]??"",n);return e?.assumeHttp!==!1&&SU.includes(o[0])&&(a=a.replace(/^.*:\/\//,""),o[1]==="443"?a=`https://${a}`:a=`http://${a}`),(a.startsWith("http://")||a.startsWith("https://")||a.startsWith("ws://")||a.startsWith("wss://"))&&(a=new URL(a).toString(),a.endsWith("/")&&(a=a.substring(0,a.length-1))),a}var Am=class{url;#e=0;#t=0;#r=0;#o=0;#a=new Map;log;transformRequestInit;constructor(e,{logger:t,transformRequestInit:n}){this.url=e instanceof URL?e:new URL(e),this.transformRequestInit=n,this.log=t.forComponent(`helia:trustless-gateway-block-broker:${this.url.hostname}`)}#l(e){let t=e.multihash.bytes;return Ht.encode(t)}async getRawBlock(e,t){let n=new URL(this.url.toString());if(n.pathname=`/ipfs/${e.toString()}`,n.search="?format=raw",t?.aborted===!0)throw new Error(`Signal to fetch raw block for CID ${e} from gateway ${this.url} was aborted prior to fetch`);let o=this.#l(e),i=new AbortController,s=()=>{i.abort()};t?.addEventListener("abort",s);try{let a=this.#a.get(o);if(a==null){this.#e++;let c={signal:i.signal,headers:{Accept:"application/vnd.ipld.raw"},cache:"force-cache"},l=this.transformRequestInit!=null?await this.transformRequestInit(c):c;a=fetch(n.toString(),l).then(async u=>{if(this.log("GET %s %d",n,u.status),!u.ok)throw this.#t++,new Error(`unable to fetch raw block for CID ${e} from gateway ${this.url}`);return this.#o++,new Uint8Array(await u.arrayBuffer())}),this.#a.set(o,a)}return await a}catch{throw t?.aborted===!0?new Error(`fetching raw block for CID ${e} from gateway ${this.url} was aborted`):(this.#t++,new Error(`unable to fetch raw block for CID ${e}`))}finally{t?.removeEventListener("abort",s),this.#a.delete(o)}}reliability(){return this.#e===0?1:this.#r>0?-1/0:this.#o/(this.#e+this.#t*3)}incrementInvalidBlocks(){this.#r++}getStats(){return{attempts:this.#e,errors:this.#t,invalidBlocks:this.#r,successes:this.#o,pendingResponses:this.#a.size}}};function AU(r,e,t){return r.filter(n=>{if(xS.matches(n)||e&&bS.matches(n))return t||xf.matches(n)?!0:Gr(n.toOptions().host)===!1;if(!e&&t){let{host:o}=n.toOptions();if(o==="127.0.0.1"||o==="localhost"||o.endsWith(".localhost"))return!0}return!1})}async function*_m(r,e,t,n,o,i={}){for await(let s of e.findProviders(r,i)){let a=AU(s.multiaddrs,n,o);if(a.length===0)continue;let c=Sm(a[0]);yield new Am(c,{logger:t,transformRequestInit:i.transformRequestInit})}}var j5=class extends Ga{routing;allowInsecure;allowLocal;transformRequestInit;constructor(e,t){super(e,{...t,name:"helia:trustless-gateway:session"}),this.routing=e.routing,this.allowInsecure=t.allowInsecure??Im,this.allowLocal=t.allowLocal??Tm,this.transformRequestInit=t.transformRequestInit}async queryProvider(e,t,n){this.log("fetching BLOCK for %c from %s",e,t.url);let o=await t.getRawBlock(e,n.signal);return this.log.trace("got block for %c from %s",e,t.url),await n.validateFn?.(o),o}async*findNewProviders(e,t={}){yield*_m(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,{...t,transformRequestInit:this.transformRequestInit})}toEvictionKey(e){return e.url.toString()}equals(e,t){return e.url.toString()===t.url.toString()}};function FS(r,e){return new j5(r,e)}var Cm=class{allowInsecure;allowLocal;transformRequestInit;routing;log;logger;constructor(e,t={}){this.log=e.logger.forComponent("helia:trustless-gateway-block-broker"),this.logger=e.logger,this.routing=e.routing,this.allowInsecure=t.allowInsecure??Im,this.allowLocal=t.allowLocal??Tm,this.transformRequestInit=t.transformRequestInit}async retrieve(e,t={}){let n=[];for await(let o of _m(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,{...t,transformRequestInit:this.transformRequestInit})){this.log("getting block for %c from %s",e,o.url);try{let i=await o.getRawBlock(e,t.signal);this.log.trace("got block for %c from %s",e,o.url);try{await t.validateFn?.(i)}catch(s){this.log.error("failed to validate block for %c from %s",e,o.url,s);continue}return i}catch(i){if(this.log.error("failed to get block for %c from %s",e,o.url,i),i instanceof Error?n.push(i):n.push(new Error(`Unable to fetch raw block for CID ${e} from gateway ${o.url}`)),t.signal?.aborted===!0){this.log.trace("request aborted while fetching raw block for CID %c from gateway %s",e,o.url);break}}}throw n.length>0?new AggregateError(n,`Unable to fetch raw block for CID ${e} from any gateway`):new Error(`Unable to fetch raw block for CID ${e} from any gateway`)}createSession(e={}){return FS({logger:this.logger,routing:this.routing},{...e,allowLocal:this.allowLocal,allowInsecure:this.allowInsecure,transformRequestInit:this.transformRequestInit})}};var Im=!1,Tm=!1;function W5(r={}){return e=>new Cm(e,r)}async function*km(r,e={}){let t=r.getReader();try{for(;;){let n=await t.read();if(n.done)return;yield n.value}}finally{e.preventCancel!==!0&&await t.cancel(),t.releaseLock()}}var PU=Vt(Pm(),1);var Ro=class extends Error{static name="SignatureVerificationError";constructor(e="Record signature verification failed"){super(e),this.name="SignatureVerificationError"}},Rm=class extends Error{static name="RecordExpiredError";constructor(e="Record has expired"){super(e),this.name="RecordExpiredError"}},ru=class extends Error{static name="UnsupportedValidityError";constructor(e="The validity type is unsupported"){super(e),this.name="UnsupportedValidityError"}},Nm=class extends Error{static name="RecordTooLargeError";constructor(e="The record is too large"){super(e),this.name="RecordTooLargeError"}},Dm=class extends Error{static name="InvalidValueError";constructor(e="Value must be a valid content path starting with /"){super(e),this.name="InvalidValueError"}},Om=class extends Error{static name="InvalidRecordDataError";constructor(e="Invalid record data"){super(e),this.name="InvalidRecordDataError"}},_f=class extends Error{static name="InvalidEmbeddedPublicKeyError";constructor(e="Invalid embedded public key"){super(e),this.name="InvalidEmbeddedPublicKeyError"}};var on;(function(r){let e;(function(o){o.EOL="EOL"})(e=r.ValidityType||(r.ValidityType={}));let t;(function(o){o[o.EOL=0]="EOL"})(t||(t={})),function(o){o.codec=()=>Et(t)}(e=r.ValidityType||(r.ValidityType={}));let n;r.codec=()=>(n==null&&(n=_e((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.value!=null&&(i.uint32(10),i.bytes(o.value)),o.signatureV1!=null&&(i.uint32(18),i.bytes(o.signatureV1)),o.validityType!=null&&(i.uint32(24),r.ValidityType.codec().encode(o.validityType,i)),o.validity!=null&&(i.uint32(34),i.bytes(o.validity)),o.sequence!=null&&(i.uint32(40),i.uint64(o.sequence)),o.ttl!=null&&(i.uint32(48),i.uint64(o.ttl)),o.pubKey!=null&&(i.uint32(58),i.bytes(o.pubKey)),o.signatureV2!=null&&(i.uint32(66),i.bytes(o.signatureV2)),o.data!=null&&(i.uint32(74),i.bytes(o.data)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.value=o.bytes();break}case 2:{a.signatureV1=o.bytes();break}case 3:{a.validityType=r.ValidityType.codec().decode(o);break}case 4:{a.validity=o.bytes();break}case 5:{a.sequence=o.uint64();break}case 6:{a.ttl=o.uint64();break}case 7:{a.pubKey=o.bytes();break}case 8:{a.signatureV2=o.bytes();break}case 9:{a.data=o.bytes();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>Ae(o,r.codec()),r.decode=(o,i)=>Se(o,r.codec(),i)})(on||(on={}));var _U=In("ipns:utils"),$S=V("/ipns/");var IU=0,TU=18;function KS(r){let e;if(r.pubKey!=null)try{e=$t(r.pubKey)}catch(t){throw _U.error(t),t}if(e!=null)return e}function VS(r){let e=V("ipns-signature:");return st([e,r])}function If(r){return"signatureV1"in r?on.encode({value:V(r.value),signatureV1:r.signatureV1,validityType:r.validityType,validity:V(r.validity),sequence:r.sequence,ttl:r.ttl,pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data}):on.encode({pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data})}function ni(r){let e=on.decode(r);if(e.sequence!=null&&(e.sequence=BigInt(e.sequence)),e.ttl!=null&&(e.ttl=BigInt(e.ttl)),e.signatureV2==null||e.data==null)throw new Ro("Missing data or signatureV2");let t=HS(e.data),n=CU(t.Value),o=M(t.Validity);if(e.value!=null&&e.signatureV1!=null)return kU(e),{value:n,validityType:on.ValidityType.EOL,validity:o,sequence:t.Sequence,ttl:t.TTL,pubKey:e.pubKey,signatureV1:e.signatureV1,signatureV2:e.signatureV2,data:e.data};if(e.signatureV2!=null)return{value:n,validityType:on.ValidityType.EOL,validity:o,sequence:t.Sequence,ttl:t.TTL,pubKey:e.pubKey,signatureV2:e.signatureV2,data:e.data};throw new Error("invalid record: does not include signatureV1 or signatureV2")}function Tf(r){return st([$S,r.bytes])}function nu(r){let e=Ye(r.slice($S.length));if(!Lm(e,IU)&&!Lm(e,TU))throw new is("Multihash in IPNS key was not identity or sha2-256");return e}function HS(r){let e=Nn(r);if(e.ValidityType===0)e.ValidityType=on.ValidityType.EOL;else throw new ru("The validity type is unsupported");return Number.isInteger(e.Sequence)&&(e.Sequence=BigInt(e.Sequence)),Number.isInteger(e.TTL)&&(e.TTL=BigInt(e.TTL)),e}function CU(r){let e=M(r).trim();if(e.startsWith("/"))return e;try{return`/ipfs/${le.decode(r).toV1().toString()}`}catch{}try{return`/ipfs/${le.parse(e).toV1().toString()}`}catch{}throw new Dm("Value must be a valid content path starting with /")}function kU(r){if(r.data==null)throw new Om("Record data is missing");let e=HS(r.data);if(!ge(e.Value,r.value??new Uint8Array(0)))throw new Ro('Field "value" did not match between protobuf and CBOR');if(!ge(e.Validity,r.validity??new Uint8Array(0)))throw new Ro('Field "validity" did not match between protobuf and CBOR');if(e.ValidityType!==r.validityType)throw new Ro('Field "validityType" did not match between protobuf and CBOR');if(e.Sequence!==r.sequence)throw new Ro('Field "sequence" did not match between protobuf and CBOR');if(e.TTL!==r.ttl)throw new Ro('Field "ttl" did not match between protobuf and CBOR')}function Lm(r,e){return r.code===e}var Eie=In("ipns"),Sie=5*60*1e9,RU="/ipns/",Aie=RU.length;var qS=Vt(Pm(),1);var Bm=In("ipns:validator"),NU=1024*10,DU=async(r,e)=>{let t=ni(e),n;try{let o=VS(t.data);n=await r.verify(o,t.signatureV2)}catch{n=!1}if(!n)throw Bm.error("record signature verification failed"),new Ro("Record signature verification failed");if(t.validityType===on.ValidityType.EOL){if(qS.default.fromString(t.validity).toDate().getTime()<Date.now())throw Bm.error("record has expired"),new Rm("record has expired")}else if(t.validityType!=null)throw Bm.error("the validity type is unsupported"),new ru("The validity type is unsupported");Bm("ipns record for %s is valid",t.value)};async function Mm(r,e){if(e.byteLength>NU)throw new Nm("The record is too large");let t=nu(r),n;Lm(t,0)&&(n=g1(t));let o=ni(e),i=KS(o)??n;if(i==null)throw new _f("Could not extract public key from IPNS record or routing key");let s=Tf(i.toMultihash());if(!ge(s,r))throw new _f("Embedded public key did not match routing key");await DU(i,e)}var Um=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MESSAGE_LENGTH"};async function*Cf(r,e={}){let t=/\r?\n/,n=new TextDecoder("utf8"),o="";for await(let i of r){if(typeof i=="string"&&(i=new TextEncoder().encode(i)),yl(i)&&(i=i.subarray()),o+=n.decode(i,{stream:!0}),o.length>(e?.maxMessageLength??o.length))throw new Um("Incoming message too long");let s=o.split(t);o=s.pop()??"";for(let a=0;a<s.length;a++)yield JSON.parse(s[a])}o+=n.decode(),o!==""&&(yield JSON.parse(o))}var ou=class extends Error{static name="InvalidRequestError";constructor(e="Invalid request"){super(e),this.name="InvalidRequestError"}},No=class extends Error{static name="BadResponseError";constructor(e="Bad response"){super(e),this.name="BadResponseError"}};function OU(r){return r[Symbol.asyncIterator]!=null}function LU(r){if(OU(r))return(async()=>{for await(let e of r)return e})();for(let e of r)return e}var jS=LU;var WS=V("/ipns/");function GS(r){return ge(r.subarray(0,WS.byteLength),WS)}var Fm=class{client;constructor(e){this.client=e}async*findProviders(e,t={}){yield*Jr(this.client.getProviders(e,t),n=>({id:n.ID,multiaddrs:n.Addrs??[]}))}async provide(){}async cancelReprovide(){}async put(e,t,n){if(!GS(e))return;let o=nu(e),i=le.createV1(114,o),s=ni(t);await this.client.putIPNS(i,s,n)}async get(e,t){if(!GS(e))throw new ze("Not found");let n=nu(e),o=le.createV1(114,n);try{let i=await this.client.getIPNS(o,t);return If(i)}catch(i){throw i.name==="BadResponseError"?new ze("Not found"):i}}},$m=class{client;constructor(e){this.client=e}async findPeer(e,t={}){let n=await jS(this.client.getPeers(e,t));if(n!=null)return{id:n.ID,multiaddrs:n.Addrs??[]};throw new ze("Not found")}async*getClosestPeers(e,t={}){}};var ar=In("delegated-routing-v1-http-api-client"),Km={concurrentRequests:4,timeout:3e4,cacheTTL:5*60*1e3,cacheName:"delegated-routing-v1-cache"},Vm=class{started;httpQueue;shutDownController;clientUrl;timeout;contentRouting;peerRouting;filterAddrs;filterProtocols;inFlightRequests;cacheName;cache;cacheTTL;constructor(e,t={}){this.started=!1,this.shutDownController=new AbortController,this.shutDownController.signal,this.httpQueue=new ti({concurrency:t.concurrentRequests??Km.concurrentRequests}),this.inFlightRequests=new Map,this.clientUrl=e instanceof URL?e:new URL(e),this.timeout=t.timeout??Km.timeout,this.filterAddrs=t.filterAddrs,this.filterProtocols=t.filterProtocols,this.contentRouting=new Fm(this),this.peerRouting=new $m(this),this.cacheName=t.cacheName??Km.cacheName,this.cacheTTL=t.cacheTTL??Km.cacheTTL}get[jo](){return this.contentRouting}get[Wo](){return this.peerRouting}isStarted(){return this.started}async start(){this.started||(this.started=!0,this.cacheTTL>0&&(this.cache=await globalThis.caches?.open(this.cacheName),this.cache!=null&&ar("cache enabled with ttl %d",this.cacheTTL)))}async stop(){this.httpQueue.clear(),this.shutDownController.abort(),await globalThis.caches?.delete(this.cacheName),this.started=!1}async*getProviders(e,t={}){ar("getProviders starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=Ne([this.shutDownController.signal,n,t.signal]);let i=de(),s=de();this.httpQueue.add(async()=>(i.resolve(),s.promise));try{await i.promise;let a=new URL(`${this.clientUrl}routing/v1/providers/${e.toString()}`);this.#t(a,t.filterAddrs,t.filterProtocols);let c={headers:{Accept:"application/x-ndjson"},signal:o},l=await this.#r(a.toString(),c);if(l==null)throw new No("No response received");if(!l.ok)throw l.status===404?new ze("No matching records found"):l.status===422?new ou("Request does not conform to schema or semantic constraints"):new No(`Unexpected status code: ${l.status}`);if(l.body==null)throw new No("Routing response had no body");let u=l.headers.get("Content-Type");if(u==null)throw new No("No Content-Type header received");if(u?.startsWith("application/json")){let d=await l.json();for(let h of d.Providers){let m=this.#e(h);m!=null&&(yield m)}}else if(u.includes("application/x-ndjson"))for await(let d of Cf(km(l.body))){let h=this.#e(d);h!=null&&(yield h)}else throw new No(`Unsupported Content-Type: ${u}`)}catch(a){ar.error("getProviders errored:",a)}finally{o.clear(),s.resolve(),ar("getProviders finished: %c",e)}}async*getPeers(e,t={}){ar("getPeers starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=Ne([this.shutDownController.signal,n,t.signal]);let i=de(),s=de();this.httpQueue.add(async()=>(i.resolve(),s.promise));try{await i.promise;let a=new URL(`${this.clientUrl}routing/v1/peers/${e.toCID().toString()}`);this.#t(a,t.filterAddrs,t.filterProtocols);let c={headers:{Accept:"application/x-ndjson"},signal:o},l=await this.#r(a.toString(),c);if(l.status===404)throw new ze("No matching records found");if(l.status===422)throw new ou("Request does not conform to schema or semantic constraints");if(l.body==null)throw new No("Routing response had no body");if(l.headers.get("Content-Type")==="application/json"){let d=await l.json();for(let h of d.Peers){let m=this.#e(h);m!=null&&(yield m)}}else for await(let d of Cf(km(l.body))){let h=this.#e(d);h!=null&&(yield h)}}catch(a){ar.error("getPeers errored:",a)}finally{o.clear(),s.resolve(),ar("getPeers finished: %c",e)}}async getIPNS(e,t={}){ar("getIPNS starts: %s",e);let n=AbortSignal.timeout(this.timeout),o=Ne([this.shutDownController.signal,n,t.signal]);let i=de(),s=de();this.httpQueue.add(async()=>(i.resolve(),s.promise));let a=`${this.clientUrl}routing/v1/ipns/${e}`;try{await i.promise;let c={headers:{Accept:"application/vnd.ipfs.ipns-record"},signal:o},l=await this.#r(a,c);if(ar("getIPNS GET %s %d",a,l.status),l.status===404)throw new ze("No matching records found");if(l.status===422)throw new ou("Request does not conform to schema or semantic constraints");if(l.body==null)throw new No("GET ipns response had no body");let u=await l.arrayBuffer(),d=new Uint8Array(u,0,u.byteLength);return t.validate!==!1&&await Mm(Tf(e.multihash),d),ni(d)}catch(c){throw ar.error("getIPNS GET %s error:",a,c),c}finally{o.clear(),s.resolve(),ar("getIPNS finished: %s",e)}}async putIPNS(e,t,n={}){ar("putIPNS starts: %c",e);let o=AbortSignal.timeout(this.timeout),i=Ne([this.shutDownController.signal,o,n.signal]);let s=de(),a=de();this.httpQueue.add(async()=>(s.resolve(),a.promise));let c=`${this.clientUrl}routing/v1/ipns/${e}`;try{await s.promise;let l=If(t),u={method:"PUT",headers:{"Content-Type":"application/vnd.ipfs.ipns-record"},body:l,signal:i},d=await this.#r(c,u);if(ar("putIPNS PUT %s %d",c,d.status),d.status!==200)throw new No("PUT ipns response had status other than 200")}catch(l){throw ar.error("putIPNS PUT %s error:",c,l.stack),l}finally{i.clear(),a.resolve(),ar("putIPNS finished: %c",e)}}#e(e){try{let t=[],n=e.Addrs?.map(oe)??[];return e.Protocols!=null&&t.push(...e.Protocols),e.Protocol!=null&&(t.push(e.Protocol),delete e.Protocol),{...e,Schema:"peer",ID:bt(e.ID),Addrs:n,Protocols:t}}catch(t){ar.error("could not conform record to peer schema",t)}}#t(e,t,n){if(t!=null||this.filterAddrs!=null){let o=t?.join(",")??this.filterAddrs?.join(",")??"";o!==""&&e.searchParams.set("filter-addrs",o)}if(n!=null||this.filterProtocols!=null){let o=n?.join(",")??this.filterProtocols?.join(",")??"";o!==""&&e.searchParams.set("filter-protocols",o)}}async#r(e,t){let n=t.method??"GET",o=`${n}-${e}`;if(n==="GET"){let c=await this.cache?.match(e);if(c!=null){if(parseInt(c.headers.get("x-cache-expires")??"0",10)>Date.now())return ar("returning cached response for %s",o),c;await this.cache?.delete(e)}}let i=this.inFlightRequests.get(o);if(i!=null){let c=await i;return ar("deduplicating outgoing request for %s",o),c.clone()}let s=fetch(e,t).then(async c=>{if(this.cache!=null&&c.ok&&n==="GET"){let l=Date.now()+this.cacheTTL,u=new Headers(c.headers);u.set("x-cache-expires",l.toString());let d=new Response(c.clone().body,{status:c.status,statusText:c.statusText,headers:u});await this.cache.put(e,d)}return c}).finally(()=>{this.inFlightRequests.delete(o)});return this.inFlightRequests.set(o,s),await s}};function zS(r,e={}){return new Vm(new URL(r),e)}function z5(){return{filterProtocols:["unknown","transport-bitswap","transport-ipfs-gateway-http"],filterAddrs:["https","webtransport","webrtc","webrtc-direct","wss","tls"]}}var XS="[a-fA-F\\d:]",Ps=r=>r&&r.includeBoundaries?`(?:(?<=\\s|^)(?=${XS})|(?<=${XS})(?=\\s|$))`:"",Do="(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}",jt="[a-fA-F\\d]{1,4}",Hm=`
4
+ (?:
5
+ (?:${jt}:){7}(?:${jt}|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8
6
+ (?:${jt}:){6}(?:${Do}|:${jt}|:)| // 1:2:3:4:5:6:: 1:2:3:4:5:6::8 1:2:3:4:5:6::8 1:2:3:4:5:6::1.2.3.4
7
+ (?:${jt}:){5}(?::${Do}|(?::${jt}){1,2}|:)| // 1:2:3:4:5:: 1:2:3:4:5::7:8 1:2:3:4:5::8 1:2:3:4:5::7:1.2.3.4
8
+ (?:${jt}:){4}(?:(?::${jt}){0,1}:${Do}|(?::${jt}){1,3}|:)| // 1:2:3:4:: 1:2:3:4::6:7:8 1:2:3:4::8 1:2:3:4::6:7:1.2.3.4
9
+ (?:${jt}:){3}(?:(?::${jt}){0,2}:${Do}|(?::${jt}){1,4}|:)| // 1:2:3:: 1:2:3::5:6:7:8 1:2:3::8 1:2:3::5:6:7:1.2.3.4
10
+ (?:${jt}:){2}(?:(?::${jt}){0,3}:${Do}|(?::${jt}){1,5}|:)| // 1:2:: 1:2::4:5:6:7:8 1:2::8 1:2::4:5:6:7:1.2.3.4
11
+ (?:${jt}:){1}(?:(?::${jt}){0,4}:${Do}|(?::${jt}){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4
12
+ (?::(?:(?::${jt}){0,5}:${Do}|(?::${jt}){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4
13
+ )(?:%[0-9a-zA-Z]{1,})? // %eth0 %1
14
+ `.replace(/\s*\/\/.*$/gm,"").replace(/\n/g,"").trim(),BU=new RegExp(`(?:^${Do}$)|(?:^${Hm}$)`),MU=new RegExp(`^${Do}$`),UU=new RegExp(`^${Hm}$`),X5=r=>r&&r.exact?BU:new RegExp(`(?:${Ps(r)}${Do}${Ps(r)})|(?:${Ps(r)}${Hm}${Ps(r)})`,"g");X5.v4=r=>r&&r.exact?MU:new RegExp(`${Ps(r)}${Do}${Ps(r)}`,"g");X5.v6=r=>r&&r.exact?UU:new RegExp(`${Ps(r)}${Hm}${Ps(r)}`,"g");var Y5=X5;function Q5(r){let e=(...t)=>r(...t);return Object.defineProperty(e,"name",{value:`functionTimeout(${r.name||"<anonymous>"})`,configurable:!0}),e}function YS(){return!1}var{toString:FU}=Object.prototype;function Z5(r){return FU.call(r)==="[object RegExp]"}var QS={global:"g",ignoreCase:"i",multiline:"m",dotAll:"s",sticky:"y",unicode:"u"};function J5(r,e={}){if(!Z5(r))throw new TypeError("Expected a RegExp instance");let t=Object.keys(QS).map(o=>(typeof e[o]=="boolean"?e[o]:r[o])?QS[o]:"").join(""),n=new RegExp(e.source||r.source,t);return n.lastIndex=typeof e.lastIndex=="number"?e.lastIndex:r.lastIndex,n}function e8(r,e,{timeout:t}={}){try{return Q5(()=>J5(r).test(e),{timeout:t})()}catch(n){if(YS(n))return!1;throw n}}var $U=15,KU=45,ZS={timeout:400};function t8(r){return r.length>KU?!1:e8(Y5.v6({exact:!0}),r,ZS)}function JS(r){return r.length>$U?!1:e8(Y5.v4({exact:!0}),r,ZS)}var eA={http:"80",https:"443",ws:"80",wss:"443"},VU=["http","https","ws","wss"];function tA(r,e){e=e??{};let t=e.defaultDnsType??"dns4",{scheme:n,hostname:o,port:i,path:s}=HU(r),a=[qU(o,t),jU(i,n),WU(n)];s!=null&&a.push(GU(s));let c="/"+a.filter(l=>!!l).reduce((l,u)=>l.concat(u),[]).join("/");return oe(c)}function HU(r){let[e]=r.split(":");VU.includes(e)||(r="http"+r.substring(e.length));let{protocol:t,hostname:n,port:o,pathname:i,search:s}=new URL(r);if(o==null||o===""){let c=zU(e);c!=null&&(o=c),c==null&&t==="http:"&&(o="80")}let a;return i!=null&&i!==""&&i!=="/"&&(i.startsWith("/")&&(i=i.substring(1)),a=i),s!=null&&s!==""&&(a=a??"",a+=s),{scheme:e,hostname:n,port:o,path:a}}function qU(r,e){if(!(r==null||r==="")){if(JS(r))return["ip4",r];if(t8(r))return["ip6",r];if(r[0]==="["){let t=r.substring(1,r.length-1);if(t8(t))return["ip6",t]}return[e,r]}}function jU(r,e){if(!(r==null||r===""))return e==="udp"?["udp",r]:["tcp",r]}function WU(r){if(r.match(/^tcp$|^udp$/)==null)return[r]}function GU(r){if(!(r==null||r===""))return["http-path",encodeURIComponent(r)]}function zU(r){if(!(r==null||r===""||eA[r]==null))return eA[r]}var XU=["https://trustless-gateway.link","https://4everland.io"],YU=2336;function QU(r){return r=r.toString(),{id:Eo(le.createV1(YU,Dr.digest(V(r)))),multiaddrs:[tA(r)]}}var r8=class{gateways;shuffle;constructor(e={}){this.gateways=(e.gateways??XU).map(t=>QU(t)),this.shuffle=e.shuffle??!0}async*findProviders(e,t){yield*(this.shuffle?this.gateways.toSorted(()=>Math.random()>.5?1:-1):this.gateways).map(n=>({...n,protocols:["transport-ipfs-gateway-http"]}))}};function n8(r={}){return new r8(r)}var o8=class{libp2p;constructor(e){this.libp2p=e}async provide(e,t){await this.libp2p.contentRouting.provide(e,t)}async cancelReprovide(e,t){await this.libp2p.contentRouting.cancelReprovide(e,t)}async*findProviders(e,t){yield*this.libp2p.contentRouting.findProviders(e,t)}async put(e,t,n){await this.libp2p.contentRouting.put(e,t,n)}async get(e,t){return this.libp2p.contentRouting.get(e,t)}async findPeer(e,t){return this.libp2p.peerRouting.findPeer(e,t)}async*getClosestPeers(e,t){yield*this.libp2p.peerRouting.getClosestPeers(e,t)}};function i8(r){return new o8(r)}var kf=class extends Ni{data;constructor(){super(),this.data=new Map}put(e,t){return this.data.set(Xt.encode(e.multihash.bytes),t),e}get(e){let t=this.data.get(Xt.encode(e.multihash.bytes));if(t==null)throw new Gn;return t}has(e){return this.data.has(Xt.encode(e.multihash.bytes))}async delete(e){this.data.delete(Xt.encode(e.multihash.bytes))}async*getAll(){for(let[e,t]of this.data.entries())yield{cid:le.createV1(Ea,Ye(Xt.decode(e))),block:t}}};var cae=In("blockstore:core:tiered");var oA="SHARDING";function JU(r){return r[Symbol.asyncIterator]!=null}function eF(r){if(JU(r))return(async()=>{let t=[];for await(let n of r)t.push(n);return t})();let e=[];for(let t of r)e.push(t);return e}var tc=eF;function tF(r){return r[Symbol.asyncIterator]!=null}function rF(r,e){return tF(r)?async function*(){yield*(await tc(r)).sort(e)}():function*(){yield*tc(r).sort(e)}()}var qm=rF;var Li=class{put(e,t,n){return Promise.reject(new Error(".put is not implemented"))}get(e,t){return Promise.reject(new Error(".get is not implemented"))}has(e,t){return Promise.reject(new Error(".has is not implemented"))}delete(e,t){return Promise.reject(new Error(".delete is not implemented"))}async*putMany(e,t={}){for await(let{key:n,value:o}of e)await this.put(n,o,t),yield n}async*getMany(e,t={}){for await(let n of e)yield{key:n,value:await this.get(n,t)}}async*deleteMany(e,t={}){for await(let n of e)await this.delete(n,t),yield n}batch(){let e=[],t=[];return{put(n,o){e.push({key:n,value:o})},delete(n){t.push(n)},commit:async n=>{await kr(this.putMany(e,n)),e=[],await kr(this.deleteMany(t,n)),t=[]}}}async*_all(e,t){throw new Error("._all is not implemented")}async*_allKeys(e,t){throw new Error("._allKeys is not implemented")}query(e,t){let n=this._all(e,t);if(e.prefix!=null){let o=e.prefix;n=Co(n,i=>i.key.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,i)=>Co(o,i),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,i)=>qm(o,i),n)),e.offset!=null){let o=0,i=e.offset;n=Co(n,()=>o++>=i)}return e.limit!=null&&(n=as(n,e.limit)),n}queryKeys(e,t){let n=this._allKeys(e,t);if(e.prefix!=null){let o=e.prefix;n=Co(n,i=>i.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,i)=>Co(o,i),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,i)=>qm(o,i),n)),e.offset!=null){let o=e.offset,i=0;n=Co(n,()=>i++>=o)}return e.limit!=null&&(n=as(n,e.limit)),n}};var rc=class extends Li{data;constructor(){super(),this.data=new Map}put(e,t){return this.data.set(e.toString(),t),e}get(e){let t=this.data.get(e.toString());if(t==null)throw new Gn;return t}has(e){return this.data.has(e.toString())}delete(e){this.data.delete(e.toString())}*_all(){for(let[e,t]of this.data.entries())yield{key:new ct(e),value:t}}*_allKeys(){for(let e of this.data.keys())yield new ct(e)}};var Kae=new ct(oA);var tce=In("datastore:core:tiered");var jm=class extends im{libp2p;constructor(e){super({...e,components:{libp2p:e.libp2p}}),this.libp2p=e.libp2p}async start(){await super.start(),await this.libp2p.start()}async stop(){await super.stop(),await this.libp2p.stop()}};var s8=class{readNext;haveNext;ended;nextResult;error;constructor(){this.ended=!1,this.readNext=de(),this.haveNext=de()}[Symbol.asyncIterator](){return this}async next(){if(this.nextResult==null&&await this.haveNext.promise,this.nextResult==null)throw new Error("HaveNext promise resolved but nextResult was undefined");let e=this.nextResult;return this.nextResult=void 0,this.readNext.resolve(),this.readNext=de(),e}async throw(e){return this.ended=!0,this.error=e,e!=null&&(this.haveNext.promise.catch(()=>{}),this.haveNext.reject(e)),{done:!0,value:void 0}}async return(){let e={done:!0,value:void 0};return this.ended=!0,this.nextResult=e,this.haveNext.resolve(),e}async push(e,t){await this._push(e,t)}async end(e,t){e!=null?await this.throw(e):await this._push(void 0,t)}async _push(e,t){if(e!=null&&this.ended)throw this.error??new Error("Cannot push value onto an ended pushable");for(;this.nextResult!=null;)await this.readNext.promise;e!=null?this.nextResult={done:!1,value:e}:(this.ended=!0,this.nextResult={done:!0,value:void 0}),this.haveNext.resolve(),this.haveNext=de(),await dt(this.readNext.promise,t?.signal,t)}};function sA(){return new s8}var Wm=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};function Qt(r,e){let t=sA();r.sink(t).catch(async s=>{await t.end(s)}),r.sink=async s=>{for await(let a of s)await t.push(a);await t.end()};let n=r.source;r.source[Symbol.iterator]!=null?n=r.source[Symbol.iterator]():r.source[Symbol.asyncIterator]!=null&&(n=r.source[Symbol.asyncIterator]());let o=new J;return{read:async s=>{if(s?.signal?.throwIfAborted(),s?.bytes==null){let{done:c,value:l}=await dt(n.next(),s?.signal);return c===!0?null:l}for(;o.byteLength<s.bytes;){let{value:c,done:l}=await dt(n.next(),s?.signal);if(l===!0)throw new Wm("unexpected end of input");o.append(c)}let a=o.sublist(0,s.bytes);return o.consume(s.bytes),a},write:async(s,a)=>{a?.signal?.throwIfAborted(),s instanceof Uint8Array?await t.push(s,a):await t.push(s.subarray(),a)},unwrap:()=>{if(o.byteLength>0){let s=r.source;r.source=async function*(){e?.yieldBytes===!1?yield o:yield*o,yield*s}()}return r}}}var Gm=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},zm=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},Xm=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function a8(r,e={}){let t=Qt(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=Ce(e.maxDataLength));let n=e?.lengthDecoder??nt,o=e?.lengthEncoder??Fe;return{read:async s=>{let a=-1,c=new J;for(;;){c.append(await t.read({...s,bytes:1}));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(a<0)throw new Gm("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new Xm("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new zm("message length too long");return t.read({...s,bytes:a})},write:async(s,a)=>{await t.write(new J(o(s.byteLength),s),a)},writeV:async(s,a)=>{let c=new J(...s.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function c8(){let r=de(),e=!1;return{sink:async t=>{if(e)throw new Error("already piped");e=!0,r.resolve(t)},source:async function*(){yield*await r.promise}()}}function aA(){let r=c8(),e=c8();return[{source:r.source,sink:e.sink},{source:e.source,sink:r.sink}]}var iu=!!globalThis.process?.env?.DUMP_SESSION_KEYS;function Ym(r){if(!Number.isSafeInteger(r)||r<0)throw new Error("positive integer expected, got "+r)}function l8(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function Mr(r,...e){if(!l8(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error("Uint8Array expected of length "+e+", got length="+r.length)}function u8(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function cA(r,e){Mr(r);let t=e.outputLen;if(r.length<t)throw new Error("digestInto() expects output buffer of length at least "+t)}function d8(r){if(typeof r!="boolean")throw new Error(`boolean expected, not ${r}`)}var Bi=r=>new Uint32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4)),lA=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),nF=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;if(!nF)throw new Error("Non little-endian hardware is not supported");function oF(r){if(typeof r!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(r))}function Qm(r){if(typeof r=="string")r=oF(r);else if(l8(r))r=Zm(r);else throw new Error("Uint8Array expected, got "+typeof r);return r}function uA(r,e){if(e==null||typeof e!="object")throw new Error("options must be defined");return Object.assign(r,e)}function dA(r,e){if(r.length!==e.length)return!1;let t=0;for(let n=0;n<r.length;n++)t|=r[n]^e[n];return t===0}var f8=(r,e)=>{function t(n,...o){if(Mr(n),r.nonceLength!==void 0){let u=o[0];if(!u)throw new Error("nonce / iv required");r.varSizeNonce?Mr(u):Mr(u,r.nonceLength)}let i=r.tagLength;i&&o[1]!==void 0&&Mr(o[1]);let s=e(n,...o),a=(u,d)=>{if(d!==void 0){if(u!==2)throw new Error("cipher output not supported");Mr(d)}},c=!1;return{encrypt(u,d){if(c)throw new Error("cannot encrypt() twice with same key + nonce");return c=!0,Mr(u),a(s.encrypt.length,d),s.encrypt(u,d)},decrypt(u,d){if(Mr(u),i&&u.length<i)throw new Error("invalid ciphertext length: smaller than tagLength="+i);return a(s.decrypt.length,d),s.decrypt(u,d)}}}return Object.assign(t,r),t};function h8(r,e,t=!0){if(e===void 0)return new Uint8Array(r);if(e.length!==r)throw new Error("invalid output length, expected "+r+", got: "+e.length);if(t&&!iF(e))throw new Error("invalid output, must be aligned");return e}function p8(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),i=BigInt(4294967295),s=Number(t>>o&i),a=Number(t&i),c=n?4:0,l=n?0:4;r.setUint32(e+c,s,n),r.setUint32(e+l,a,n)}function iF(r){return r.byteOffset%4===0}function Zm(r){return Uint8Array.from(r)}function Mi(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}var hA=r=>Uint8Array.from(r.split("").map(e=>e.charCodeAt(0))),sF=hA("expand 16-byte k"),aF=hA("expand 32-byte k"),cF=Bi(sF),lF=Bi(aF);function fe(r,e){return r<<e|r>>>32-e}function m8(r){return r.byteOffset%4===0}var Jm=64,uF=16,pA=2**32-1,fA=new Uint32Array;function dF(r,e,t,n,o,i,s,a){let c=o.length,l=new Uint8Array(Jm),u=Bi(l),d=m8(o)&&m8(i),h=d?Bi(o):fA,m=d?Bi(i):fA;for(let g=0;g<c;s++){if(r(e,t,n,u,s,a),s>=pA)throw new Error("arx: counter overflow");let w=Math.min(Jm,c-g);if(d&&w===Jm){let y=g/4;if(g%4!==0)throw new Error("arx: invalid block position");for(let x=0,S;x<uF;x++)S=y+x,m[S]=h[S]^u[x];g+=Jm;continue}for(let y=0,x;y<w;y++)x=g+y,i[x]=o[x]^l[y];g+=w}}function g8(r,e){let{allowShortKeys:t,extendNonceFn:n,counterLength:o,counterRight:i,rounds:s}=uA({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},e);if(typeof r!="function")throw new Error("core must be a function");return Ym(o),Ym(s),d8(i),d8(t),(a,c,l,u,d=0)=>{Mr(a),Mr(c),Mr(l);let h=l.length;if(u===void 0&&(u=new Uint8Array(h)),Mr(u),Ym(d),d<0||d>=pA)throw new Error("arx: counter overflow");if(u.length<h)throw new Error(`arx: output (${u.length}) is shorter than data (${h})`);let m=[],g=a.length,w,y;if(g===32)m.push(w=Zm(a)),y=lF;else if(g===16&&t)w=new Uint8Array(32),w.set(a),w.set(a,16),y=cF,m.push(w);else throw new Error(`arx: invalid 32-byte key, got length=${g}`);m8(c)||m.push(c=Zm(c));let x=Bi(w);if(n){if(c.length!==24)throw new Error("arx: extended nonce must be 24 bytes");n(y,x,Bi(c.subarray(0,16)),x),c=c.subarray(16)}let S=16-o;if(S!==c.length)throw new Error(`arx: nonce must be ${S} or 16 bytes`);if(S!==12){let N=new Uint8Array(12);N.set(c,i?0:12-c.length),c=N,m.push(c)}let v=Bi(c);return dF(r,y,x,v,l,u,d,s),Mi(...m),u}}var hr=(r,e)=>r[e++]&255|(r[e++]&255)<<8,y8=class{constructor(e){this.blockLen=16,this.outputLen=16,this.buffer=new Uint8Array(16),this.r=new Uint16Array(10),this.h=new Uint16Array(10),this.pad=new Uint16Array(8),this.pos=0,this.finished=!1,e=Qm(e),Mr(e,32);let t=hr(e,0),n=hr(e,2),o=hr(e,4),i=hr(e,6),s=hr(e,8),a=hr(e,10),c=hr(e,12),l=hr(e,14);this.r[0]=t&8191,this.r[1]=(t>>>13|n<<3)&8191,this.r[2]=(n>>>10|o<<6)&7939,this.r[3]=(o>>>7|i<<9)&8191,this.r[4]=(i>>>4|s<<12)&255,this.r[5]=s>>>1&8190,this.r[6]=(s>>>14|a<<2)&8191,this.r[7]=(a>>>11|c<<5)&8065,this.r[8]=(c>>>8|l<<8)&8191,this.r[9]=l>>>5&127;for(let u=0;u<8;u++)this.pad[u]=hr(e,16+2*u)}process(e,t,n=!1){let o=n?0:2048,{h:i,r:s}=this,a=s[0],c=s[1],l=s[2],u=s[3],d=s[4],h=s[5],m=s[6],g=s[7],w=s[8],y=s[9],x=hr(e,t+0),S=hr(e,t+2),v=hr(e,t+4),N=hr(e,t+6),W=hr(e,t+8),H=hr(e,t+10),$=hr(e,t+12),P=hr(e,t+14),R=i[0]+(x&8191),X=i[1]+((x>>>13|S<<3)&8191),q=i[2]+((S>>>10|v<<6)&8191),j=i[3]+((v>>>7|N<<9)&8191),ne=i[4]+((N>>>4|W<<12)&8191),B=i[5]+(W>>>1&8191),L=i[6]+((W>>>14|H<<2)&8191),K=i[7]+((H>>>11|$<<5)&8191),O=i[8]+(($>>>8|P<<8)&8191),I=i[9]+(P>>>5|o),k=0,z=k+R*a+X*(5*y)+q*(5*w)+j*(5*g)+ne*(5*m);k=z>>>13,z&=8191,z+=B*(5*h)+L*(5*d)+K*(5*u)+O*(5*l)+I*(5*c),k+=z>>>13,z&=8191;let re=k+R*c+X*a+q*(5*y)+j*(5*w)+ne*(5*g);k=re>>>13,re&=8191,re+=B*(5*m)+L*(5*h)+K*(5*d)+O*(5*u)+I*(5*l),k+=re>>>13,re&=8191;let F=k+R*l+X*c+q*a+j*(5*y)+ne*(5*w);k=F>>>13,F&=8191,F+=B*(5*g)+L*(5*m)+K*(5*h)+O*(5*d)+I*(5*u),k+=F>>>13,F&=8191;let xe=k+R*u+X*l+q*c+j*a+ne*(5*y);k=xe>>>13,xe&=8191,xe+=B*(5*w)+L*(5*g)+K*(5*m)+O*(5*h)+I*(5*d),k+=xe>>>13,xe&=8191;let Pe=k+R*d+X*u+q*l+j*c+ne*a;k=Pe>>>13,Pe&=8191,Pe+=B*(5*y)+L*(5*w)+K*(5*g)+O*(5*m)+I*(5*h),k+=Pe>>>13,Pe&=8191;let he=k+R*h+X*d+q*u+j*l+ne*c;k=he>>>13,he&=8191,he+=B*a+L*(5*y)+K*(5*w)+O*(5*g)+I*(5*m),k+=he>>>13,he&=8191;let Ue=k+R*m+X*h+q*d+j*u+ne*l;k=Ue>>>13,Ue&=8191,Ue+=B*c+L*a+K*(5*y)+O*(5*w)+I*(5*g),k+=Ue>>>13,Ue&=8191;let rt=k+R*g+X*m+q*h+j*d+ne*u;k=rt>>>13,rt&=8191,rt+=B*l+L*c+K*a+O*(5*y)+I*(5*w),k+=rt>>>13,rt&=8191;let Ze=k+R*w+X*g+q*m+j*h+ne*d;k=Ze>>>13,Ze&=8191,Ze+=B*u+L*l+K*c+O*a+I*(5*y),k+=Ze>>>13,Ze&=8191;let ut=k+R*y+X*w+q*g+j*m+ne*h;k=ut>>>13,ut&=8191,ut+=B*d+L*u+K*l+O*c+I*a,k+=ut>>>13,ut&=8191,k=(k<<2)+k|0,k=k+z|0,z=k&8191,k=k>>>13,re+=k,i[0]=z,i[1]=re,i[2]=F,i[3]=xe,i[4]=Pe,i[5]=he,i[6]=Ue,i[7]=rt,i[8]=Ze,i[9]=ut}finalize(){let{h:e,pad:t}=this,n=new Uint16Array(10),o=e[1]>>>13;e[1]&=8191;for(let a=2;a<10;a++)e[a]+=o,o=e[a]>>>13,e[a]&=8191;e[0]+=o*5,o=e[0]>>>13,e[0]&=8191,e[1]+=o,o=e[1]>>>13,e[1]&=8191,e[2]+=o,n[0]=e[0]+5,o=n[0]>>>13,n[0]&=8191;for(let a=1;a<10;a++)n[a]=e[a]+o,o=n[a]>>>13,n[a]&=8191;n[9]-=8192;let i=(o^1)-1;for(let a=0;a<10;a++)n[a]&=i;i=~i;for(let a=0;a<10;a++)e[a]=e[a]&i|n[a];e[0]=(e[0]|e[1]<<13)&65535,e[1]=(e[1]>>>3|e[2]<<10)&65535,e[2]=(e[2]>>>6|e[3]<<7)&65535,e[3]=(e[3]>>>9|e[4]<<4)&65535,e[4]=(e[4]>>>12|e[5]<<1|e[6]<<14)&65535,e[5]=(e[6]>>>2|e[7]<<11)&65535,e[6]=(e[7]>>>5|e[8]<<8)&65535,e[7]=(e[8]>>>8|e[9]<<5)&65535;let s=e[0]+t[0];e[0]=s&65535;for(let a=1;a<8;a++)s=(e[a]+t[a]|0)+(s>>>16)|0,e[a]=s&65535;Mi(n)}update(e){u8(this);let{buffer:t,blockLen:n}=this;e=Qm(e);let o=e.length;for(let i=0;i<o;){let s=Math.min(n-this.pos,o-i);if(s===n){for(;n<=o-i;i+=n)this.process(e,i);continue}t.set(e.subarray(i,i+s),this.pos),this.pos+=s,i+=s,this.pos===n&&(this.process(t,0,!1),this.pos=0)}return this}destroy(){Mi(this.h,this.r,this.buffer,this.pad)}digestInto(e){u8(this),cA(e,this),this.finished=!0;let{buffer:t,h:n}=this,{pos:o}=this;if(o){for(t[o++]=1;o<16;o++)t[o]=0;this.process(t,0,!0)}this.finalize();let i=0;for(let s=0;s<8;s++)e[i++]=n[s]>>>0,e[i++]=n[s]>>>8;return e}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}};function fF(r){let e=(n,o)=>r(o).update(Qm(n)).digest(),t=r(new Uint8Array(32));return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=n=>r(n),e}var mA=fF(r=>new y8(r));function wA(r,e,t,n,o,i=20){let s=r[0],a=r[1],c=r[2],l=r[3],u=e[0],d=e[1],h=e[2],m=e[3],g=e[4],w=e[5],y=e[6],x=e[7],S=o,v=t[0],N=t[1],W=t[2],H=s,$=a,P=c,R=l,X=u,q=d,j=h,ne=m,B=g,L=w,K=y,O=x,I=S,k=v,z=N,re=W;for(let xe=0;xe<i;xe+=2)H=H+X|0,I=fe(I^H,16),B=B+I|0,X=fe(X^B,12),H=H+X|0,I=fe(I^H,8),B=B+I|0,X=fe(X^B,7),$=$+q|0,k=fe(k^$,16),L=L+k|0,q=fe(q^L,12),$=$+q|0,k=fe(k^$,8),L=L+k|0,q=fe(q^L,7),P=P+j|0,z=fe(z^P,16),K=K+z|0,j=fe(j^K,12),P=P+j|0,z=fe(z^P,8),K=K+z|0,j=fe(j^K,7),R=R+ne|0,re=fe(re^R,16),O=O+re|0,ne=fe(ne^O,12),R=R+ne|0,re=fe(re^R,8),O=O+re|0,ne=fe(ne^O,7),H=H+q|0,re=fe(re^H,16),K=K+re|0,q=fe(q^K,12),H=H+q|0,re=fe(re^H,8),K=K+re|0,q=fe(q^K,7),$=$+j|0,I=fe(I^$,16),O=O+I|0,j=fe(j^O,12),$=$+j|0,I=fe(I^$,8),O=O+I|0,j=fe(j^O,7),P=P+ne|0,k=fe(k^P,16),B=B+k|0,ne=fe(ne^B,12),P=P+ne|0,k=fe(k^P,8),B=B+k|0,ne=fe(ne^B,7),R=R+X|0,z=fe(z^R,16),L=L+z|0,X=fe(X^L,12),R=R+X|0,z=fe(z^R,8),L=L+z|0,X=fe(X^L,7);let F=0;n[F++]=s+H|0,n[F++]=a+$|0,n[F++]=c+P|0,n[F++]=l+R|0,n[F++]=u+X|0,n[F++]=d+q|0,n[F++]=h+j|0,n[F++]=m+ne|0,n[F++]=g+B|0,n[F++]=w+L|0,n[F++]=y+K|0,n[F++]=x+O|0,n[F++]=S+I|0,n[F++]=v+k|0,n[F++]=N+z|0,n[F++]=W+re|0}function hF(r,e,t,n){let o=r[0],i=r[1],s=r[2],a=r[3],c=e[0],l=e[1],u=e[2],d=e[3],h=e[4],m=e[5],g=e[6],w=e[7],y=t[0],x=t[1],S=t[2],v=t[3];for(let W=0;W<20;W+=2)o=o+c|0,y=fe(y^o,16),h=h+y|0,c=fe(c^h,12),o=o+c|0,y=fe(y^o,8),h=h+y|0,c=fe(c^h,7),i=i+l|0,x=fe(x^i,16),m=m+x|0,l=fe(l^m,12),i=i+l|0,x=fe(x^i,8),m=m+x|0,l=fe(l^m,7),s=s+u|0,S=fe(S^s,16),g=g+S|0,u=fe(u^g,12),s=s+u|0,S=fe(S^s,8),g=g+S|0,u=fe(u^g,7),a=a+d|0,v=fe(v^a,16),w=w+v|0,d=fe(d^w,12),a=a+d|0,v=fe(v^a,8),w=w+v|0,d=fe(d^w,7),o=o+l|0,v=fe(v^o,16),g=g+v|0,l=fe(l^g,12),o=o+l|0,v=fe(v^o,8),g=g+v|0,l=fe(l^g,7),i=i+u|0,y=fe(y^i,16),w=w+y|0,u=fe(u^w,12),i=i+u|0,y=fe(y^i,8),w=w+y|0,u=fe(u^w,7),s=s+d|0,x=fe(x^s,16),h=h+x|0,d=fe(d^h,12),s=s+d|0,x=fe(x^s,8),h=h+x|0,d=fe(d^h,7),a=a+c|0,S=fe(S^a,16),m=m+S|0,c=fe(c^m,12),a=a+c|0,S=fe(S^a,8),m=m+S|0,c=fe(c^m,7);let N=0;n[N++]=o,n[N++]=i,n[N++]=s,n[N++]=a,n[N++]=y,n[N++]=x,n[N++]=S,n[N++]=v}var pF=g8(wA,{counterRight:!1,counterLength:4,allowShortKeys:!1}),mF=g8(wA,{counterRight:!1,counterLength:8,extendNonceFn:hF,allowShortKeys:!1});var gF=new Uint8Array(16),gA=(r,e)=>{r.update(e);let t=e.length%16;t&&r.update(gF.subarray(t))},yF=new Uint8Array(32);function yA(r,e,t,n,o){let i=r(e,t,yF),s=mA.create(i);o&&gA(s,o),gA(s,n);let a=new Uint8Array(16),c=lA(a);p8(c,0,BigInt(o?o.length:0),!0),p8(c,8,BigInt(n.length),!0),s.update(a);let l=s.digest();return Mi(i,a),l}var bA=r=>(e,t,n)=>({encrypt(i,s){let a=i.length;s=h8(a+16,s,!1),s.set(i);let c=s.subarray(0,-16);r(e,t,c,c,1);let l=yA(r,e,t,c,n);return s.set(l,a),Mi(l),s},decrypt(i,s){s=h8(i.length-16,s,!1);let a=i.subarray(0,-16),c=i.subarray(-16),l=yA(r,e,t,a,n);if(!dA(c,l))throw new Error("invalid tag");return s.set(i.subarray(0,-16)),r(e,t,s,s,1),Mi(l),s}}),w8=f8({blockSize:64,nonceLength:12,tagLength:16},bA(pF)),Jce=f8({blockSize:64,nonceLength:24,tagLength:16},bA(mF));function vA(r,e,t){return ka(r),t===void 0&&(t=new Uint8Array(r.outputLen)),xs(r,xo(t),xo(e))}var b8=new Uint8Array([0]),xA=new Uint8Array;function EA(r,e,t,n=32){if(ka(r),us(n),n>255*r.outputLen)throw new Error("Length should be <= 255*HashLen");let o=Math.ceil(n/r.outputLen);t===void 0&&(t=xA);let i=new Uint8Array(o*r.outputLen),s=xs.create(r,e),a=s._cloneInto(),c=new Uint8Array(s.outputLen);for(let l=0;l<o;l++)b8[0]=l+1,a.update(l===0?xA:c).update(t).update(b8).digestInto(c),i.set(c,r.outputLen*l),s._cloneInto(a);return s.destroy(),a.destroy(),c.fill(0),b8.fill(0),i.slice(0,n)}var x8={hashSHA256(r){return _n(r.subarray())},getHKDF(r,e){let t=vA(_n,e,r),o=EA(_n,t,void 0,96),i=o.subarray(0,32),s=o.subarray(32,64),a=o.subarray(64,96);return[i,s,a]},generateX25519KeyPair(){let r=Ud.utils.randomPrivateKey();return{publicKey:Ud.getPublicKey(r),privateKey:r}},generateX25519KeyPairFromSeed(r){return{publicKey:Ud.getPublicKey(r),privateKey:r}},generateX25519SharedKey(r,e){return Ud.getSharedSecret(r.subarray(),e.subarray())},chaCha20Poly1305Encrypt(r,e,t,n){return w8(n,e,t).encrypt(r.subarray())},chaCha20Poly1305Decrypt(r,e,t,n,o){return w8(n,e,t).decrypt(r.subarray(),o)}};var SA=x8;function AA(r){return{generateKeypair:r.generateX25519KeyPair,dh:(e,t)=>r.generateX25519SharedKey(e.privateKey,t).subarray(0,32),encrypt:r.chaCha20Poly1305Encrypt,decrypt:r.chaCha20Poly1305Decrypt,hash:r.hashSHA256,hkdf:r.getHKDF}}var su=r=>{let e=Ct(2);return e[0]=r>>8,e[1]=r,e};su.bytes=2;var Pf=r=>{if(r.length<2)throw RangeError("Could not decode int16BE");if(r instanceof Uint8Array){let e=0;return e+=r[0]<<8,e+=r[1],e}return r.getUint16(0)};Pf.bytes=2;function _A(r){return{xxHandshakeSuccesses:r.registerCounter("libp2p_noise_xxhandshake_successes_total",{help:"Total count of noise xxHandshakes successes_"}),xxHandshakeErrors:r.registerCounter("libp2p_noise_xxhandshake_error_total",{help:"Total count of noise xxHandshakes errors"}),encryptedPackets:r.registerCounter("libp2p_noise_encrypted_packets_total",{help:"Total count of noise encrypted packets successfully"}),decryptedPackets:r.registerCounter("libp2p_noise_decrypted_packets_total",{help:"Total count of noise decrypted packets"}),decryptErrors:r.registerCounter("libp2p_noise_decrypt_errors_total",{help:"Total count of noise decrypt errors"})}}function v8(r,e){!e.enabled||!iu||(r?(e(`LOCAL_STATIC_PUBLIC_KEY ${M(r.publicKey,"hex")}`),e(`LOCAL_STATIC_PRIVATE_KEY ${M(r.privateKey,"hex")}`)):e("Missing local static keys."))}function E8(r,e){!e.enabled||!iu||(r?(e(`LOCAL_PUBLIC_EPHEMERAL_KEY ${M(r.publicKey,"hex")}`),e(`LOCAL_PRIVATE_EPHEMERAL_KEY ${M(r.privateKey,"hex")}`)):e("Missing local ephemeral keys."))}function IA(r,e){!e.enabled||!iu||e(r?`REMOTE_STATIC_PUBLIC_KEY ${M(r.subarray(),"hex")}`:"Missing remote static public key.")}function S8(r,e){!e.enabled||!iu||e(r?`REMOTE_EPHEMERAL_PUBLIC_KEY ${M(r.subarray(),"hex")}`:"Missing remote ephemeral keys.")}function A8(r,e,t){!t.enabled||!iu||(t(`CIPHER_STATE_1 ${r.n.getUint64()} ${r.k&&M(r.k,"hex")}`),t(`CIPHER_STATE_2 ${e.n.getUint64()} ${e.k&&M(e.k,"hex")}`))}function sn(r,e){if(r.length!==e.length)throw new Error("Inputs should have the same length");let t=Ct(r.length);for(let n=0;n<r.length;n++)t[n]=r[n]^e[n];return t}var au=class r extends Error{code;constructor(e="Invalid crypto exchange"){super(e),this.code=r.code}static code="ERR_INVALID_CRYPTO_EXCHANGE"};var wF=0,bF=4294967295,xF="Cipherstate has reached maximum n, a new handshake must be performed",e0=class{n;bytes;view;constructor(e=wF){this.n=e,this.bytes=ke(12),this.view=new DataView(this.bytes.buffer,this.bytes.byteOffset,this.bytes.byteLength),this.view.setUint32(4,e,!0)}increment(){this.n++,this.view.setUint32(4,this.n,!0)}getBytes(){return this.bytes}getUint64(){return this.n}assertValue(){if(this.n>bF)throw new Error(xF)}};var nc=ke(0),cu=class{k;n;crypto;constructor(e,t=void 0,n=0){this.crypto=e,this.k=t,this.n=new e0(n)}hasKey(){return!!this.k}encryptWithAd(e,t){if(!this.hasKey())return t;this.n.assertValue();let n=this.crypto.encrypt(t,this.n.getBytes(),e,this.k);return this.n.increment(),n}decryptWithAd(e,t,n){if(!this.hasKey())return t;this.n.assertValue();let o=this.crypto.decrypt(t,this.n.getBytes(),e,this.k,n);return this.n.increment(),o}},_8=class{cs;ck;h;crypto;constructor(e,t){this.crypto=e;let n=V(t,"utf-8");this.h=vF(e,n),this.ck=this.h,this.cs=new cu(e)}mixKey(e){let[t,n]=this.crypto.hkdf(this.ck,e);this.ck=t,this.cs=new cu(this.crypto,n)}mixHash(e){this.h=this.crypto.hash(new J(this.h,e))}encryptAndHash(e){let t=this.cs.encryptWithAd(this.h,e);return this.mixHash(t),t}decryptAndHash(e){let t=this.cs.decryptWithAd(this.h,e);return this.mixHash(e),t}split(){let[e,t]=this.crypto.hkdf(this.ck,nc);return[new cu(this.crypto,e),new cu(this.crypto,t)]}},I8=class{ss;s;e;rs;re;initiator;crypto;constructor(e){let{crypto:t,protocolName:n,prologue:o,initiator:i,s,e:a,rs:c,re:l}=e;this.crypto=t,this.ss=new _8(t,n),this.ss.mixHash(o),this.initiator=i,this.s=s,this.e=a,this.rs=c,this.re=l}writeE(){if(this.e)throw new Error("ephemeral keypair is already set");let e=this.crypto.generateKeypair();return this.ss.mixHash(e.publicKey),this.e=e,e.publicKey}writeS(){if(!this.s)throw new Error("static keypair is not set");return this.ss.encryptAndHash(this.s.publicKey)}writeEE(){if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.re))}writeES(){if(this.initiator){if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.rs)throw new Error("remote static public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.rs))}else{if(!this.s)throw new Error("static keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.s,this.re))}}writeSE(){if(this.initiator){if(!this.s)throw new Error("static keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.s,this.re))}else{if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.rs)throw new Error("remote static public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.rs))}}readE(e,t=0){if(this.re)throw new Error("remote ephemeral public key is already set");if(e.byteLength<t+32)throw new Error("message is not long enough");this.re=e.sublist(t,t+32),this.ss.mixHash(this.re)}readS(e,t=0){if(this.rs)throw new Error("remote static public key is already set");let n=32+(this.ss.cs.hasKey()?16:0);if(e.byteLength<t+n)throw new Error("message is not long enough");let o=e.sublist(t,t+n);return this.rs=this.ss.decryptAndHash(o),n}readEE(){this.writeEE()}readES(){this.writeES()}readSE(){this.writeSE()}},Rf=class extends I8{writeMessageA(e){return new J(this.writeE(),this.ss.encryptAndHash(e))}writeMessageB(e){let t=this.writeE();this.writeEE();let n=this.writeS();return this.writeES(),new J(t,n,this.ss.encryptAndHash(e))}writeMessageC(e){let t=this.writeS();return this.writeSE(),new J(t,this.ss.encryptAndHash(e))}readMessageA(e){try{return this.readE(e),this.ss.decryptAndHash(e.sublist(32))}catch(t){throw new au(`handshake stage 0 validation fail: ${t.message}`)}}readMessageB(e){try{this.readE(e),this.readEE();let t=this.readS(e,32);return this.readES(),this.ss.decryptAndHash(e.sublist(32+t))}catch(t){throw new au(`handshake stage 1 validation fail: ${t.message}`)}}readMessageC(e){try{let t=this.readS(e);return this.readSE(),this.ss.decryptAndHash(e.sublist(t))}catch(t){throw new au(`handshake stage 2 validation fail: ${t.message}`)}}};function vF(r,e){if(e.length<=32){let t=ke(32);return t.set(e),t}else return r.hash(e)}var t0;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.webtransportCerthashes!=null)for(let i of t.webtransportCerthashes)n.uint32(10),n.bytes(i);if(t.streamMuxers!=null)for(let i of t.streamMuxers)n.uint32(18),n.string(i);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={webtransportCerthashes:[],streamMuxers:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{if(o.limits?.webtransportCerthashes!=null&&i.webtransportCerthashes.length===o.limits.webtransportCerthashes)throw new at('Decode error - map field "webtransportCerthashes" had too many elements');i.webtransportCerthashes.push(t.bytes());break}case 2:{if(o.limits?.streamMuxers!=null&&i.streamMuxers.length===o.limits.streamMuxers)throw new at('Decode error - map field "streamMuxers" had too many elements');i.streamMuxers.push(t.string());break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(t0||(t0={}));var Nf;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.identityKey!=null&&t.identityKey.byteLength>0&&(n.uint32(10),n.bytes(t.identityKey)),t.identitySig!=null&&t.identitySig.byteLength>0&&(n.uint32(18),n.bytes(t.identitySig)),t.extensions!=null&&(n.uint32(34),t0.codec().encode(t.extensions,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={identityKey:ke(0),identitySig:ke(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.identityKey=t.bytes();break}case 2:{i.identitySig=t.bytes();break}case 4:{i.extensions=t0.codec().decode(t,t.uint32(),{limits:o.limits?.extensions});break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(Nf||(Nf={}));async function T8(r,e,t){let n=await r.sign(TA(e));return Nf.encode({identityKey:nr(r.publicKey),identitySig:n,extensions:t})}async function C8(r,e,t){try{let n=Nf.decode(r),o=$t(n.identityKey);if(t?.equals(o)===!1)throw new Error(`Payload identity key ${o} does not match expected remote identity key ${t}`);if(!e)throw new Error("Remote static does not exist");let i=TA(e);if(!await o.verify(i,n.identitySig))throw new Error("Invalid payload signature");return n}catch(n){throw new Cp(n.message)}}function TA(r){let e=V("noise-libp2p-static-key:");return r instanceof Uint8Array?st([e,r],e.length+r.length):(r.prepend(e),r)}async function CA(r,e){let{log:t,connection:n,crypto:o,privateKey:i,prologue:s,s:a,remoteIdentityKey:c,extensions:l}=r,u=await T8(i,a.publicKey,l),d=new Rf({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!0,prologue:s,s:a});v8(d.s,t),t.trace("Stage 0 - Initiator starting to send first message."),await n.write(d.writeMessageA(nc),e),t.trace("Stage 0 - Initiator finished sending first message."),E8(d.e,t),t.trace("Stage 1 - Initiator waiting to receive first message from responder...");let h=d.readMessageB(await n.read(e));t.trace("Stage 1 - Initiator received the message."),S8(d.re,t),IA(d.rs,t),t.trace("Initiator going to check remote's signature...");let m=await C8(h,d.rs,c);t.trace("All good with the signature!"),t.trace("Stage 2 - Initiator sending third handshake message."),await n.write(d.writeMessageC(u),e),t.trace("Stage 2 - Initiator sent message with signed payload.");let[g,w]=d.ss.split();return A8(g,w,t),{payload:m,encrypt:y=>g.encryptWithAd(nc,y),decrypt:(y,x)=>w.decryptWithAd(nc,y,x)}}async function kA(r,e){let{log:t,connection:n,crypto:o,privateKey:i,prologue:s,s:a,remoteIdentityKey:c,extensions:l}=r,u=await T8(i,a.publicKey,l),d=new Rf({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!1,prologue:s,s:a});v8(d.s,t),t.trace("Stage 0 - Responder waiting to receive first message."),d.readMessageA(await n.read(e)),t.trace("Stage 0 - Responder received first message."),S8(d.re,t),t.trace("Stage 1 - Responder sending out first message with signed payload and static key."),await n.write(d.writeMessageB(u),e),t.trace("Stage 1 - Responder sent the second handshake message with signed payload."),E8(d.e,t),t.trace("Stage 2 - Responder waiting for third handshake message...");let h=d.readMessageC(await n.read(e));t.trace("Stage 2 - Responder received the message, finished handshake.");let m=await C8(h,d.rs,c),[g,w]=d.ss.split();return A8(g,w,t),{payload:m,encrypt:y=>w.encryptWithAd(nc,y),decrypt:(y,x)=>g.decryptWithAd(nc,y,x)}}var RA=16;function NA(r,e){return async function*(t){for await(let n of t)for(let o=0;o<n.length;o+=65519){let i=o+65519;i>n.length&&(i=n.length);let s;n instanceof Uint8Array?s=r.encrypt(n.subarray(o,i)):s=r.encrypt(n.sublist(o,i)),e?.encryptedPackets.increment(),yield new J(su(s.byteLength),s)}}}function DA(r,e){return async function*(t){for await(let n of t)for(let o=0;o<n.length;o+=65535){let i=o+65535;if(i>n.length&&(i=n.length),i-RA<o)throw new Error("Invalid chunk");let s=n.sublist(o,i),a=n.subarray(o,i-RA);try{let c=r.decrypt(s,a);e?.decryptedPackets.increment(),yield c}catch(c){throw e?.decryptErrors.increment(),c}}}}var r0=class{protocol="/noise";crypto;prologue;staticKey;extensions;metrics;components;constructor(e,t={}){let{staticNoiseKey:n,extensions:o,crypto:i,prologueBytes:s}=t,{metrics:a}=e;this.components=e;let c=i??SA;this.crypto=AA(c),this.extensions={webtransportCerthashes:[],...o},this.metrics=a?_A(a):void 0,n?this.staticKey=c.generateX25519KeyPairFromSeed(n):this.staticKey=c.generateX25519KeyPair(),this.prologue=s??ke(0)}[Symbol.toStringTag]="@chainsafe/libp2p-noise";[Xe]=["@libp2p/connection-encryption","@chainsafe/libp2p-noise"];async secureOutbound(e,t){let n=a8(e,{lengthEncoder:su,lengthDecoder:Pf,maxDataLength:65535}),o=await this.performHandshakeInitiator(n,this.components.privateKey,t?.remotePeer?.publicKey,t),i=await this.createSecureConnection(n,o);e.source=i.source,e.sink=i.sink;let s=$t(o.payload.identityKey);return{conn:e,remoteExtensions:o.payload.extensions,remotePeer:ei(s),streamMuxer:this.getStreamMuxer(o.payload.extensions?.streamMuxers)}}getStreamMuxer(e){if(e==null)return;let t=this.components.upgrader.getStreamMuxers();if(t!=null)for(let n of e){let o=t.get(n);if(o!=null)return o}if(e.length)throw new kp("Early muxer negotiation was requested but the initiator and responder had no common muxers")}async secureInbound(e,t){let n=a8(e,{lengthEncoder:su,lengthDecoder:Pf,maxDataLength:65535}),o=await this.performHandshakeResponder(n,this.components.privateKey,t?.remotePeer?.publicKey,t),i=await this.createSecureConnection(n,o);e.source=i.source,e.sink=i.sink;let s=$t(o.payload.identityKey);return{conn:e,remoteExtensions:o.payload.extensions,remotePeer:ei(s),streamMuxer:this.getStreamMuxer(o.payload.extensions?.streamMuxers)}}async performHandshakeInitiator(e,t,n,o){let i;try{i=await CA({connection:e,privateKey:t,remoteIdentityKey:n,log:this.components.logger.forComponent("libp2p:noise:xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:{streamMuxers:[...this.components.upgrader.getStreamMuxers().keys()],webtransportCerthashes:[],...this.extensions}},o),this.metrics?.xxHandshakeSuccesses.increment()}catch(s){throw this.metrics?.xxHandshakeErrors.increment(),s}return i}async performHandshakeResponder(e,t,n,o){let i;try{i=await kA({connection:e,privateKey:t,remoteIdentityKey:n,log:this.components.logger.forComponent("libp2p:noise:xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:{streamMuxers:[...this.components.upgrader.getStreamMuxers().keys()],webtransportCerthashes:[],...this.extensions}},o),this.metrics?.xxHandshakeSuccesses.increment()}catch(s){throw this.metrics?.xxHandshakeErrors.increment(),s}return i}async createSecureConnection(e,t){let[n,o]=aA(),i=e.unwrap();return await rr(n,NA(t,this.metrics),i,s=>mo(s,{lengthDecoder:Pf}),DA(t,this.metrics),n),o}};function n0(r={}){return e=>new r0(e,r)}function o0(r){if(r!=null){if(typeof r[Symbol.iterator]=="function")return r[Symbol.iterator]();if(typeof r[Symbol.asyncIterator]=="function")return r[Symbol.asyncIterator]();if(typeof r.next=="function")return r}throw new Error("argument is not an iterator or iterable")}var Oo=class extends Error{static name="InvalidFrameError";constructor(e="The frame was invalid"){super(e),this.name="InvalidFrameError"}},lu=class extends Error{static name="UnrequestedPingError";constructor(e="Unrequested ping error"){super(e),this.name="UnrequestedPingError"}},uu=class extends Error{static name="NotMatchingPingError";constructor(e="Unrequested ping error"){super(e),this.name="NotMatchingPingError"}},i0=class extends Error{static name="InvalidStateError";constructor(e="Invalid state"){super(e),this.name="InvalidStateError"}},s0=class extends Error{static name="StreamAlreadyExistsError";constructor(e="Strean already exists"){super(e),this.name="StreamAlreadyExistsError"}},a0=class extends Error{static name="DecodeInvalidVersionError";constructor(e="Decode invalid version"){super(e),this.name="DecodeInvalidVersionError"}},c0=class extends Error{static name="BothClientsError";constructor(e="Both clients"){super(e),this.name="BothClientsError"}},du=class extends Error{static name="ReceiveWindowExceededError";constructor(e="Receive window exceeded"){super(e),this.name="ReceiveWindowExceededError"}};var OA=new Set([Oo.name,lu.name,uu.name,s0.name,a0.name,c0.name,du.name]),Of=256*1024,LA=16*1024*1024;var BA={enableKeepAlive:!0,keepAliveInterval:3e4,maxInboundStreams:1e3,maxOutboundStreams:1e3,initialStreamWindowSize:Of,maxStreamWindowSize:LA,maxMessageSize:64*1024};function MA(r){if(r.keepAliveInterval<=0)throw new D("keep-alive interval must be positive");if(r.maxInboundStreams<0)throw new D("max inbound streams must be larger or equal 0");if(r.maxOutboundStreams<0)throw new D("max outbound streams must be larger or equal 0");if(r.initialStreamWindowSize<Of)throw new D("InitialStreamWindowSize must be larger or equal 256 kB");if(r.maxStreamWindowSize<r.initialStreamWindowSize)throw new D("MaxStreamWindowSize must be larger than the InitialStreamWindowSize");if(r.maxStreamWindowSize>2**32-1)throw new D("MaxStreamWindowSize must be less than equal MAX_UINT32");if(r.maxMessageSize<1024)throw new D("MaxMessageSize must be greater than a kilobyte")}var Dt;(function(r){r[r.Data=0]="Data",r[r.WindowUpdate=1]="WindowUpdate",r[r.Ping=2]="Ping",r[r.GoAway=3]="GoAway"})(Dt||(Dt={}));var At;(function(r){r[r.SYN=1]="SYN",r[r.ACK=2]="ACK",r[r.FIN=4]="FIN",r[r.RST=8]="RST"})(At||(At={}));var Rue=Object.values(At).filter(r=>typeof r!="string"),UA=0,zn;(function(r){r[r.NormalTermination=0]="NormalTermination",r[r.ProtocolError=1]="ProtocolError",r[r.InternalError=2]="InternalError"})(zn||(zn={}));var Rs=12;var FA=2**24;function EF(r){if(r[0]!==UA)throw new Oo("Invalid frame version");return{type:r[1],flag:(r[2]<<8)+r[3],streamID:r[4]*FA+(r[5]<<16)+(r[6]<<8)+r[7],length:r[8]*FA+(r[9]<<16)+(r[10]<<8)+r[11]}}var l0=class{source;buffer;frameInProgress;constructor(e){this.source=SF(e),this.buffer=new J,this.frameInProgress=!1}async*emitFrames(){for await(let e of this.source)for(this.buffer.append(e);;){let t=this.readHeader();if(t===void 0)break;let{type:n,length:o}=t;n===Dt.Data?(this.frameInProgress=!0,yield{header:t,readData:this.readBytes.bind(this,o)}):yield{header:t}}}readHeader(){if(this.frameInProgress)throw new i0("decoding frame already in progress");if(this.buffer.length<Rs)return;let e=EF(this.buffer.subarray(0,Rs));return this.buffer.consume(Rs),e}async readBytes(e){if(this.buffer.length<e){for await(let n of this.source)if(this.buffer.append(n),this.buffer.length>=e)break}let t=this.buffer.sublist(0,e);return this.buffer.consume(e),this.frameInProgress=!1,t}};function SF(r){if(r[Symbol.iterator]!==void 0){let e=r[Symbol.iterator]();return e.return=void 0,{[Symbol.iterator](){return e}}}else if(r[Symbol.asyncIterator]!==void 0){let e=r[Symbol.asyncIterator]();return e.return=void 0,{[Symbol.asyncIterator](){return e}}}else throw new Error("a source must be either an iterable or an async iterable")}function k8(r){let e=new Uint8Array(Rs);return e[1]=r.type,e[2]=r.flag>>>8,e[3]=r.flag,e[4]=r.streamID>>>24,e[5]=r.streamID>>>16,e[6]=r.streamID>>>8,e[7]=r.streamID,e[8]=r.length>>>24,e[9]=r.length>>>16,e[10]=r.length>>>8,e[11]=r.length,e}function $A(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function u0(r,e){let t=o0(r).return?.();$A(t)&&t.catch(n=>{e.error("could not cause iterator to return",n)})}var AF=5e3;function P8(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var Ns=class{id;direction;timeline;protocol;metadata;source;status;readStatus;writeStatus;log;sinkController;sinkEnd;closed;endErr;streamSource;onEnd;onCloseRead;onCloseWrite;onReset;onAbort;sendCloseWriteTimeout;sendingData;constructor(e){this.sinkController=new AbortController,this.sinkEnd=de(),this.closed=de(),this.log=e.log,this.status="open",this.readStatus="ready",this.writeStatus="ready",this.id=e.id,this.metadata=e.metadata??{},this.direction=e.direction,this.timeline={open:Date.now()},this.sendCloseWriteTimeout=e.sendCloseWriteTimeout??AF,this.onEnd=e.onEnd,this.onCloseRead=e?.onCloseRead,this.onCloseWrite=e?.onCloseWrite,this.onReset=e?.onReset,this.onAbort=e?.onAbort,this.source=this.streamSource=Zr({onEnd:t=>{t!=null?this.log.trace("source ended with error",t):this.log.trace("source ended"),this.onSourceEnd(t)}}),this.sink=this.sink.bind(this)}async sink(e){if(this.writeStatus!=="ready")throw new ya(`writable end state is "${this.writeStatus}" not "ready"`);try{this.writeStatus="writing";let t={signal:this.sinkController.signal};if(this.direction==="outbound"){let o=this.sendNewStream(t);P8(o)&&await o}let n=()=>{u0(e,this.log)};try{this.sinkController.signal.addEventListener("abort",n),this.log.trace("sink reading from source");for await(let o of e){o=o instanceof Uint8Array?new J(o):o;let i=this.sendData(o,t);P8(i)&&(this.sendingData=de(),await i,this.sendingData.resolve(),this.sendingData=void 0)}}finally{this.sinkController.signal.removeEventListener("abort",n)}this.log.trace('sink finished reading from source, write status is "%s"',this.writeStatus),this.writeStatus==="writing"&&(this.writeStatus="closing",this.log.trace("send close write to remote"),await this.sendCloseWrite({signal:AbortSignal.timeout(this.sendCloseWriteTimeout)}),this.writeStatus="closed"),this.onSinkEnd()}catch(t){throw this.log.trace("sink ended with error, calling abort with error",t),this.abort(t),t}finally{this.log.trace("resolve sink end"),this.sinkEnd.resolve()}}onSourceEnd(e){this.timeline.closeRead==null&&(this.timeline.closeRead=Date.now(),this.readStatus="closed",e!=null&&this.endErr==null&&(this.endErr=e),this.onCloseRead?.(),this.timeline.closeWrite!=null?(this.log.trace("source and sink ended"),this.timeline.close=Date.now(),this.status!=="aborted"&&this.status!=="reset"&&(this.status="closed"),this.onEnd!=null&&this.onEnd(this.endErr),this.closed.resolve()):this.log.trace("source ended, waiting for sink to end"))}onSinkEnd(e){this.timeline.closeWrite==null&&(this.timeline.closeWrite=Date.now(),this.writeStatus="closed",e!=null&&this.endErr==null&&(this.endErr=e),this.onCloseWrite?.(),this.timeline.closeRead!=null?(this.log.trace("sink and source ended"),this.timeline.close=Date.now(),this.status!=="aborted"&&this.status!=="reset"&&(this.status="closed"),this.onEnd!=null&&this.onEnd(this.endErr),this.closed.resolve()):this.log.trace("sink ended, waiting for source to end"))}async close(e){this.status==="open"&&(this.log.trace("closing gracefully"),this.status="closing",await dt(Promise.all([this.closeWrite(e),this.closeRead(e),this.closed.promise]),e?.signal),this.status="closed",this.log.trace("closed gracefully"))}async closeRead(e={}){if(this.readStatus==="closing"||this.readStatus==="closed")return;this.log.trace('closing readable end of stream with starting read status "%s"',this.readStatus);let t=this.readStatus;this.readStatus="closing",this.status!=="reset"&&this.status!=="aborted"&&this.timeline.closeRead==null&&(this.log.trace("send close read to remote"),await this.sendCloseRead(e)),t==="ready"&&(this.log.trace("ending internal source queue with %d queued bytes",this.streamSource.readableLength),this.streamSource.end()),this.log.trace("closed readable end of stream")}async closeWrite(e={}){this.writeStatus==="closing"||this.writeStatus==="closed"||(this.log.trace('closing writable end of stream with starting write status "%s"',this.writeStatus),this.writeStatus==="ready"&&(this.log.trace("sink was never sunk, sink an empty array"),await dt(this.sink([]),e.signal)),this.writeStatus==="writing"&&(this.sendingData!=null&&await dt(this.sendingData.promise,e.signal),this.log.trace("aborting source passed to .sink"),this.sinkController.abort(),await dt(this.sinkEnd.promise,e.signal)),this.writeStatus="closed",this.log.trace("closed writable end of stream"))}abort(e){if(this.status==="closed"||this.status==="aborted"||this.status==="reset")return;this.log("abort with error",e),this.log("try to send reset to remote");let t=this.sendReset();P8(t)&&t.catch(n=>{this.log.error("error sending reset message",n)}),this.status="aborted",this.timeline.abort=Date.now(),this._closeSinkAndSource(e),this.onAbort?.(e)}reset(){if(this.status==="closed"||this.status==="aborted"||this.status==="reset")return;let e=new Rp("stream reset");this.status="reset",this.timeline.reset=Date.now(),this._closeSinkAndSource(e),this.onReset?.()}_closeSinkAndSource(e){this._closeSink(e),this._closeSource(e)}_closeSink(e){this.writeStatus==="writing"&&(this.log.trace("end sink source"),this.sinkController.abort()),this.onSinkEnd(e)}_closeSource(e){this.readStatus!=="closing"&&this.readStatus!=="closed"&&(this.log.trace("ending source with %d bytes to be read by consumer",this.streamSource.readableLength),this.readStatus="closing",this.streamSource.end(e))}remoteCloseWrite(){if(this.readStatus==="closing"||this.readStatus==="closed"){this.log("received remote close write but local source is already closed");return}this.log.trace("remote close write"),this._closeSource()}remoteCloseRead(){if(this.writeStatus==="closing"||this.writeStatus==="closed"){this.log("received remote close read but local sink is already closed");return}this.log.trace("remote close read"),this._closeSink()}destroy(){if(this.status==="closed"||this.status==="aborted"||this.status==="reset"){this.log("received destroy but we are already closed");return}this.log.trace("stream destroyed"),this._closeSinkAndSource()}sourcePush(e){this.streamSource.push(e)}sourceReadableLength(){return this.streamSource.readableLength}};var Xn;(function(r){r[r.Init=0]="Init",r[r.SYNSent=1]="SYNSent",r[r.SYNReceived=2]="SYNReceived",r[r.Established=3]="Established",r[r.Finished=4]="Finished"})(Xn||(Xn={}));var d0=class extends Ns{name;state;config;_id;sendWindowCapacity;sendWindowCapacityUpdate;recvWindow;recvWindowCapacity;epochStart;getRTT;sendFrame;constructor(e){super({...e,onEnd:t=>{this.state=Xn.Finished,e.onEnd?.(t)}}),this.config=e.config,this._id=parseInt(e.id,10),this.name=e.name,this.state=e.state,this.sendWindowCapacity=Of,this.recvWindow=this.config.initialStreamWindowSize,this.recvWindowCapacity=this.recvWindow,this.epochStart=Date.now(),this.getRTT=e.getRTT,this.sendFrame=e.sendFrame,this.source=Wa(this.source,()=>{this.sendWindowUpdate()})}async sendNewStream(){}async sendData(e,t={}){for(e=e.sublist();e.byteLength!==0;){if(this.sendWindowCapacity===0&&(this.log?.trace("wait for send window capacity, status %s",this.status),await this.waitForSendWindowCapacity(t),this.status==="closed"||this.status==="aborted"||this.status==="reset")){this.log?.trace("%s while waiting for send window capacity",this.status);return}let n=Math.min(this.sendWindowCapacity,this.config.maxMessageSize-Rs,e.length),o=this.getSendFlags();this.sendFrame({type:Dt.Data,flag:o,streamID:this._id,length:n},e.sublist(0,n)),this.sendWindowCapacity-=n,e.consume(n)}}async sendReset(){this.sendFrame({type:Dt.WindowUpdate,flag:At.RST,streamID:this._id,length:0})}async sendCloseWrite(){let e=this.getSendFlags()|At.FIN;this.sendFrame({type:Dt.WindowUpdate,flag:e,streamID:this._id,length:0})}async sendCloseRead(){}async waitForSendWindowCapacity(e={}){if(this.sendWindowCapacity>0)return;let t,n,o=()=>{this.status==="open"||this.status==="closing"?n(new cr("Stream aborted")):t()};e.signal?.addEventListener("abort",o);try{await new Promise((i,s)=>{this.sendWindowCapacityUpdate=()=>{i()},n=s,t=i})}finally{e.signal?.removeEventListener("abort",o)}}handleWindowUpdate(e){this.log?.trace("stream received window update id=%s",this._id),this.processFlags(e.flag);let t=this.sendWindowCapacity;this.sendWindowCapacity+=e.length,t===0&&e.length>0&&this.sendWindowCapacityUpdate?.()}async handleData(e,t){if(this.log?.trace("stream received data id=%s",this._id),this.processFlags(e.flag),this.recvWindowCapacity<e.length)throw new du("Receive window exceeded");let n=await t();this.recvWindowCapacity-=e.length,this.sourcePush(n)}processFlags(e){(e&At.ACK)===At.ACK&&this.state===Xn.SYNSent&&(this.state=Xn.Established),(e&At.FIN)===At.FIN&&this.remoteCloseWrite(),(e&At.RST)===At.RST&&this.reset()}getSendFlags(){switch(this.state){case Xn.Init:return this.state=Xn.SYNSent,At.SYN;case Xn.SYNReceived:return this.state=Xn.Established,At.ACK;default:return 0}}sendWindowUpdate(){let e=this.getSendFlags(),t=Date.now(),n=this.getRTT();if(e===0&&n>-1&&t-this.epochStart<n*4&&(this.recvWindow=Math.min(this.recvWindow*2,this.config.maxStreamWindowSize)),this.recvWindowCapacity>=this.recvWindow&&e===0)return;let o=this.recvWindow-this.recvWindowCapacity;this.recvWindowCapacity=this.recvWindow,this.epochStart=t,this.sendFrame({type:Dt.WindowUpdate,flag:e,streamID:this._id,length:o})}};var KA="/yamux/1.0.0",_F=500,f0=class{protocol=KA;_components;_init;constructor(e,t={}){this._components=e,this._init=t}[Symbol.toStringTag]="@chainsafe/libp2p-yamux";[Xe]=["@libp2p/stream-multiplexing"];createStreamMuxer(e){return new R8(this._components,{...this._init,...e})}},R8=class{protocol=KA;source;sink;config;log;logger;closeController;nextStreamID;_streams;nextPingID;activePing;rtt;client;localGoAway;remoteGoAway;numInboundStreams;numOutboundStreams;onIncomingStream;onStreamEnd;constructor(e,t){this.client=t.direction==="outbound",this.config={...BA,...t},this.logger=e.logger,this.log=this.logger.forComponent("libp2p:yamux"),MA(this.config),this.closeController=new AbortController,this.closeController.signal,this.onIncomingStream=t.onIncomingStream,this.onStreamEnd=t.onStreamEnd,this._streams=new Map,this.source=Zr({onEnd:()=>{this.log?.trace("muxer source ended"),this._streams.forEach(n=>{n.destroy()})}}),this.sink=async n=>{let o=()=>{let a=o0(n);if(a.return!=null){let c=a.return();IF(c)&&c.catch(l=>{this.log?.("could not cause sink source to return",l)})}},i,s;try{let a=new l0(n);try{this.closeController.signal.addEventListener("abort",o);for await(let c of a.emitFrames())await this.handleFrame(c.header,c.readData)}finally{this.closeController.signal.removeEventListener("abort",o)}i=zn.NormalTermination}catch(a){OA.has(a.name)?(this.log?.error("protocol error in sink",a),i=zn.ProtocolError):(this.log?.error("internal error in sink",a),i=zn.InternalError),s=a}this.log?.trace("muxer sink ended"),s!=null?this.abort(s,i):await this.close({reason:i})},this.numInboundStreams=0,this.numOutboundStreams=0,this.nextStreamID=this.client?1:2,this.nextPingID=0,this.rtt=-1,this.log?.trace("muxer created"),this.config.enableKeepAlive&&this.keepAliveLoop().catch(n=>this.log?.error("keepalive error: %s",n)),this.ping().catch(n=>this.log?.error("ping error: %s",n))}get streams(){return Array.from(this._streams.values())}newStream(e){if(this.remoteGoAway!==void 0)throw new Go("Muxer closed remotely");if(this.localGoAway!==void 0)throw new Go("Muxer closed locally");let t=this.nextStreamID;if(this.nextStreamID+=2,this.numOutboundStreams>=this.config.maxOutboundStreams)throw new ss("max outbound streams exceeded");this.log?.trace("new outgoing stream id=%s",t);let n=this._newStream(t,e,Xn.Init,"outbound");return this._streams.set(t,n),this.numOutboundStreams++,n.sendWindowUpdate(),n}async ping(){if(this.remoteGoAway!==void 0)throw new Go("Muxer closed remotely");if(this.localGoAway!==void 0)throw new Go("Muxer closed locally");if(this.activePing===void 0){let e=()=>{};this.activePing={id:this.nextPingID++,promise:new Promise((o,i)=>{let s=()=>{i(new Go("Muxer closed locally"))};this.closeController.signal.addEventListener("abort",s,{once:!0}),e=()=>{this.closeController.signal.removeEventListener("abort",s),o()}}),resolve:e};let t=Date.now();this.sendPing(this.activePing.id);try{await this.activePing.promise}finally{delete this.activePing}let n=Date.now();this.rtt=n-t}else await this.activePing.promise;return this.rtt}getRTT(){return this.rtt}async close(e={}){if(this.closeController.signal.aborted)return;let t=e?.reason??zn.NormalTermination;if(this.log?.trace("muxer close reason=%s",t),e.signal==null){let n=AbortSignal.timeout(_F);e={...e,signal:n}}try{await Promise.all([...this._streams.values()].map(async n=>n.close(e))),this.sendGoAway(t),this._closeMuxer()}catch(n){this.abort(n)}}abort(e,t){if(!this.closeController.signal.aborted){t=t??zn.InternalError,this.log?.error("muxer abort reason=%s error=%s",t,e);for(let n of this._streams.values())n.abort(e);this.sendGoAway(t),this._closeMuxer()}}isClosed(){return this.closeController.signal.aborted}_closeMuxer(){this.closeController.abort(),this.source.end()}_newStream(e,t,n,o){if(this._streams.get(e)!=null)throw new D("Stream already exists with that id");let i=new d0({id:e.toString(),name:t,state:n,direction:o,sendFrame:this.sendFrame.bind(this),onEnd:()=>{this.closeStream(e),this.onStreamEnd?.(i)},log:this.logger.forComponent(`libp2p:yamux:${o}:${e}`),config:this.config,getRTT:this.getRTT.bind(this)});return i}closeStream(e){this.client===(e%2===0)?this.numInboundStreams--:this.numOutboundStreams--,this._streams.delete(e)}async keepAliveLoop(){let e=new Promise((t,n)=>{this.closeController.signal.addEventListener("abort",n,{once:!0})});for(this.log?.trace("muxer keepalive enabled interval=%s",this.config.keepAliveInterval);;){let t;try{await Promise.race([e,new Promise(n=>{t=setTimeout(n,this.config.keepAliveInterval)})]),this.ping().catch(n=>this.log?.error("ping error: %s",n))}catch{clearInterval(t);return}}}async handleFrame(e,t){let{streamID:n,type:o,length:i}=e;if(this.log?.trace("received frame %o",e),n===0)switch(o){case Dt.Ping:{this.handlePing(e);return}case Dt.GoAway:{this.handleGoAway(i);return}default:throw new Oo("Invalid frame type")}else switch(e.type){case Dt.Data:case Dt.WindowUpdate:{await this.handleStreamMessage(e,t);return}default:throw new Oo("Invalid frame type")}}handlePing(e){if(e.flag===At.SYN)this.log?.trace("received ping request pingId=%s",e.length),this.sendPing(e.length,At.ACK);else if(e.flag===At.ACK)this.log?.trace("received ping response pingId=%s",e.length),this.handlePingResponse(e.length);else throw new Oo("Invalid frame flag")}handlePingResponse(e){if(this.activePing===void 0)throw new lu("ping not requested");if(this.activePing.id!==e)throw new uu("ping doesn't match our id");this.activePing.resolve()}handleGoAway(e){this.log?.trace("received GoAway reason=%s",zn[e]??"unknown"),this.remoteGoAway=e;for(let t of this._streams.values())t.reset();this._closeMuxer()}async handleStreamMessage(e,t){let{streamID:n,flag:o,type:i}=e;(o&At.SYN)===At.SYN&&this.incomingStream(n);let s=this._streams.get(n);if(s===void 0){if(i===Dt.Data){if(this.log?.("discarding data for stream id=%s",n),t===void 0)throw new Error("unreachable");await t()}else this.log?.trace("frame for missing stream id=%s",n);return}switch(i){case Dt.WindowUpdate:{s.handleWindowUpdate(e);return}case Dt.Data:{if(t===void 0)throw new Error("unreachable");await s.handleData(e,t);return}default:throw new Error("unreachable")}}incomingStream(e){if(this.client!==(e%2===0))throw new D("Both endpoints are clients");if(this._streams.has(e))return;if(this.log?.trace("new incoming stream id=%s",e),this.localGoAway!==void 0){this.sendFrame({type:Dt.WindowUpdate,flag:At.RST,streamID:e,length:0});return}if(this.numInboundStreams>=this.config.maxInboundStreams){this.log?.("maxIncomingStreams exceeded, forcing stream reset"),this.sendFrame({type:Dt.WindowUpdate,flag:At.RST,streamID:e,length:0});return}let t=this._newStream(e,void 0,Xn.SYNReceived,"inbound");this.numInboundStreams++,this._streams.set(e,t),this.onIncomingStream?.(t)}sendFrame(e,t){if(this.log?.trace("sending frame %o",e),e.type===Dt.Data){if(t===void 0)throw new Oo("Invalid frame");this.source.push(new J(k8(e),t))}else this.source.push(k8(e))}sendPing(e,t=At.SYN){t===At.SYN?this.log?.trace("sending ping request pingId=%s",e):this.log?.trace("sending ping response pingId=%s",e),this.sendFrame({type:Dt.Ping,flag:t,streamID:0,length:e})}sendGoAway(e=zn.NormalTermination){this.log?.("sending GoAway reason=%s",zn[e]),this.localGoAway=e,this.sendFrame({type:Dt.GoAway,flag:0,streamID:0,length:e})}};function IF(r){return r!=null&&typeof r.then=="function"}function VA(r={}){return e=>new f0(e,r)}var TF=41;function h0(r){try{let[[e,t]]=r.stringTuples();if(t==null)return!1;if(e===TF)return IS("2000::/3",t)}catch{}return!1}function p0(r){try{let[[e]]=r.stringTuples();return e===4||e===41}catch{}return!1}function Yn(r){try{if(!p0(r))return!1;let[[,e]]=r.stringTuples();return e==null?!1:Gr(e)??!1}catch{}return!0}function HA(r,e,t){let n,o;function i(){let a={signal:o.signal};if(t?.timeout!=null){let c=Ne([o.signal,AbortSignal.timeout(t.timeout)]);a.signal=c}Promise.resolve().then(async()=>{await r(a)}).catch(()=>{}).finally(()=>{o.signal.aborted||(n=setTimeout(i,e))})}let s=!1;return{setInterval:a=>{e=a,n!=null&&(clearTimeout(n),n=setTimeout(i,e))},setTimeout:a=>{t==null&&(t={}),t.timeout=a},start:()=>{s||(s=!0,o=new AbortController,o.signal,t?.runImmediately===!0?queueMicrotask(()=>{i()}):n=setTimeout(i,e))},stop:()=>{clearTimeout(n),o?.abort(),s=!1}}}var m0=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},g0=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},y0=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function qA(r,e={}){let t=Qt(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=Ce(e.maxDataLength));let n=e?.lengthDecoder??nt,o=e?.lengthEncoder??Fe;return{read:async s=>{let a=-1,c=new J;for(;;){c.append(await t.read({...s,bytes:1}));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(a<0)throw new m0("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new y0("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new g0("message length too long");return t.read({...s,bytes:a})},write:async(s,a)=>{await t.write(new J(o(s.byteLength),s),a)},writeV:async(s,a)=>{let c=new J(...s.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function N8(r,e){let t=qA(r,e),n={read:async(o,i)=>{let s=await t.read(i);return o.decode(s)},write:async(o,i,s)=>{await t.write(i.encode(o),s)},writeV:async(o,i,s)=>{await t.writeV(o.map(a=>i.encode(a)),s)},pb:o=>({read:async i=>n.read(o,i),write:async(i,s)=>n.write(i,o,s),writeV:async(i,s)=>n.writeV(i,o,s),unwrap:()=>n}),unwrap:()=>t.unwrap()};return n}var jA="libp2p",WA="autonat",GA="1.0.0";var xt;(function(r){let e;(function(l){l.DIAL="DIAL",l.DIAL_RESPONSE="DIAL_RESPONSE"})(e=r.MessageType||(r.MessageType={}));let t;(function(l){l[l.DIAL=0]="DIAL",l[l.DIAL_RESPONSE=1]="DIAL_RESPONSE"})(t||(t={})),function(l){l.codec=()=>Et(t)}(e=r.MessageType||(r.MessageType={}));let n;(function(l){l.OK="OK",l.E_DIAL_ERROR="E_DIAL_ERROR",l.E_DIAL_REFUSED="E_DIAL_REFUSED",l.E_BAD_REQUEST="E_BAD_REQUEST",l.E_INTERNAL_ERROR="E_INTERNAL_ERROR"})(n=r.ResponseStatus||(r.ResponseStatus={}));let o;(function(l){l[l.OK=0]="OK",l[l.E_DIAL_ERROR=100]="E_DIAL_ERROR",l[l.E_DIAL_REFUSED=101]="E_DIAL_REFUSED",l[l.E_BAD_REQUEST=200]="E_BAD_REQUEST",l[l.E_INTERNAL_ERROR=300]="E_INTERNAL_ERROR"})(o||(o={})),function(l){l.codec=()=>Et(o)}(n=r.ResponseStatus||(r.ResponseStatus={}));let i;(function(l){let u;l.codec=()=>(u==null&&(u=_e((d,h,m={})=>{if(m.lengthDelimited!==!1&&h.fork(),d.id!=null&&(h.uint32(10),h.bytes(d.id)),d.addrs!=null)for(let g of d.addrs)h.uint32(18),h.bytes(g);m.lengthDelimited!==!1&&h.ldelim()},(d,h,m={})=>{let g={addrs:[]},w=h==null?d.len:d.pos+h;for(;d.pos<w;){let y=d.uint32();switch(y>>>3){case 1:{g.id=d.bytes();break}case 2:{if(m.limits?.addrs!=null&&g.addrs.length===m.limits.addrs)throw new at('Decode error - map field "addrs" had too many elements');g.addrs.push(d.bytes());break}default:{d.skipType(y&7);break}}}return g})),u),l.encode=d=>Ae(d,l.codec()),l.decode=(d,h)=>Se(d,l.codec(),h)})(i=r.PeerInfo||(r.PeerInfo={}));let s;(function(l){let u;l.codec=()=>(u==null&&(u=_e((d,h,m={})=>{m.lengthDelimited!==!1&&h.fork(),d.peer!=null&&(h.uint32(10),r.PeerInfo.codec().encode(d.peer,h)),m.lengthDelimited!==!1&&h.ldelim()},(d,h,m={})=>{let g={},w=h==null?d.len:d.pos+h;for(;d.pos<w;){let y=d.uint32();switch(y>>>3){case 1:{g.peer=r.PeerInfo.codec().decode(d,d.uint32(),{limits:m.limits?.peer});break}default:{d.skipType(y&7);break}}}return g})),u),l.encode=d=>Ae(d,l.codec()),l.decode=(d,h)=>Se(d,l.codec(),h)})(s=r.Dial||(r.Dial={}));let a;(function(l){let u;l.codec=()=>(u==null&&(u=_e((d,h,m={})=>{m.lengthDelimited!==!1&&h.fork(),d.status!=null&&(h.uint32(8),r.ResponseStatus.codec().encode(d.status,h)),d.statusText!=null&&(h.uint32(18),h.string(d.statusText)),d.addr!=null&&(h.uint32(26),h.bytes(d.addr)),m.lengthDelimited!==!1&&h.ldelim()},(d,h,m={})=>{let g={},w=h==null?d.len:d.pos+h;for(;d.pos<w;){let y=d.uint32();switch(y>>>3){case 1:{g.status=r.ResponseStatus.codec().decode(d);break}case 2:{g.statusText=d.string();break}case 3:{g.addr=d.bytes();break}default:{d.skipType(y&7);break}}}return g})),u),l.encode=d=>Ae(d,l.codec()),l.decode=(d,h)=>Se(d,l.codec(),h)})(a=r.DialResponse||(r.DialResponse={}));let c;r.codec=()=>(c==null&&(c=_e((l,u,d={})=>{d.lengthDelimited!==!1&&u.fork(),l.type!=null&&(u.uint32(8),r.MessageType.codec().encode(l.type,u)),l.dial!=null&&(u.uint32(18),r.Dial.codec().encode(l.dial,u)),l.dialResponse!=null&&(u.uint32(26),r.DialResponse.codec().encode(l.dialResponse,u)),d.lengthDelimited!==!1&&u.ldelim()},(l,u,d={})=>{let h={},m=u==null?l.len:l.pos+u;for(;l.pos<m;){let g=l.uint32();switch(g>>>3){case 1:{h.type=r.MessageType.codec().decode(l);break}case 2:{h.dial=r.Dial.codec().decode(l,l.uint32(),{limits:d.limits?.dial});break}case 3:{h.dialResponse=r.DialResponse.codec().decode(l,l.uint32(),{limits:d.limits?.dialResponse});break}default:{l.skipType(g&7);break}}}return h})),c),r.encode=l=>Ae(l,r.codec()),r.decode=(l,u)=>Se(l,r.codec(),u)})(xt||(xt={}));var DF=4,OF=8,w0=class{components;protocol;timeout;maxInboundStreams;maxOutboundStreams;maxMessageSize;started;log;topologyId;dialResults;findPeers;addressFilter;connectionThreshold;constructor(e,t){this.components=e,this.log=e.logger.forComponent("libp2p:auto-nat"),this.started=!1,this.protocol=`/${t.protocolPrefix??jA}/${WA}/${GA}`,this.timeout=t.timeout??3e4,this.maxInboundStreams=t.maxInboundStreams??2,this.maxOutboundStreams=t.maxOutboundStreams??20,this.connectionThreshold=t.connectionThreshold??80,this.maxMessageSize=t.maxMessageSize??8192,this.dialResults=new Map,this.findPeers=HA(this.findRandomPeers.bind(this),6e4),this.addressFilter=tn(1024)}[Symbol.toStringTag]="@libp2p/autonat";[Xe]=["@libp2p/autonat"];get[Sn](){return["@libp2p/identify"]}isStarted(){return this.started}async start(){this.started||(await this.components.registrar.handle(this.protocol,e=>{this.handleIncomingAutonatStream(e).catch(t=>{this.log.error("error handling incoming autonat stream - %e",t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}),this.topologyId=await this.components.registrar.register(this.protocol,{onConnect:(e,t)=>{this.verifyExternalAddresses(t).catch(n=>{this.log.error("could not verify addresses - %e",n)})}}),this.findPeers.start(),this.started=!0)}async stop(){await this.components.registrar.unhandle(this.protocol),this.topologyId!=null&&await this.components.registrar.unhandle(this.topologyId),this.dialResults.clear(),this.findPeers.stop(),this.started=!1}allAddressesAreVerified(){return this.components.addressManager.getAddressesWithMetadata().every(e=>e.expires>Date.now()?!0:e.verified)}async findRandomPeers(e){if(this.allAddressesAreVerified())return;let t=Ne([AbortSignal.timeout(1e4),e?.signal]);try{this.log("starting random walk to find peers to run AutoNAT");for await(let n of this.components.randomWalk.walk({signal:t})){if(!await this.components.connectionManager.isDialable(n.multiaddrs)){this.log.trace("random peer %p was not dialable %s",n.id,n.multiaddrs.map(o=>o.toString()).join(", "));continue}try{this.log.trace("dial random peer %p",n.id),await this.components.connectionManager.openConnection(n.multiaddrs,{signal:t})}catch{}if(this.allAddressesAreVerified()){this.log("stopping random walk, all addresses are verified");return}if(!this.hasConnectionCapacity()){this.log("stopping random walk, too close to max connections");return}}}catch{}}async handleIncomingAutonatStream(e){let t=AbortSignal.timeout(this.timeout);let n=N8(e.stream,{maxDataLength:this.maxMessageSize}).pb(xt);try{let o=await n.read({signal:t}),i=await this.handleAutonatMessage(o,e.connection,{signal:t});await n.write(i,{signal:t}),await n.unwrap().unwrap().close({signal:t})}catch(o){this.log.error("error handling incoming autonat stream - %e",o),e.stream.abort(o)}}async handleAutonatMessage(e,t,n){let o=this.components.addressManager.getAddresses().map(d=>d.toOptions().host),i=e.dial;if(i==null)return this.log.error("dial was missing from message"),{type:xt.MessageType.DIAL_RESPONSE,dialResponse:{status:xt.ResponseStatus.E_BAD_REQUEST,statusText:"No Dial message found in message"}};let s,a=i.peer;if(a?.id==null)return this.log.error("PeerId missing from message"),{type:xt.MessageType.DIAL_RESPONSE,dialResponse:{status:xt.ResponseStatus.E_BAD_REQUEST,statusText:"missing peer info"}};try{let d=Ye(a.id);s=qt(d)}catch(d){return this.log.error("invalid PeerId - %e",d),{type:xt.MessageType.DIAL_RESPONSE,dialResponse:{status:xt.ResponseStatus.E_BAD_REQUEST,statusText:"bad peer id"}}}if(this.log("incoming request from %p",s),!t.remotePeer.equals(s))return this.log("target peer %p did not equal sending peer %p",s,t.remotePeer),{type:xt.MessageType.DIAL_RESPONSE,dialResponse:{status:xt.ResponseStatus.E_BAD_REQUEST,statusText:"peer id mismatch"}};let c=a.addrs.map(d=>oe(d)).filter(d=>{let h=d.toOptions();return Yn(d)?!1:h.host!==t.remoteAddr.toOptions().host?(this.log.trace("not dialing %a - target host did not match remote host %a",d,t.remoteAddr),!1):o.includes(h.host)?!1:this.components.transportManager.dialTransportForMultiaddr(d)==null?(this.log.trace("not dialing %a - transport unsupported",d),!1):!0}).map(d=>(d.getPeerId()==null&&(d=d.encapsulate(`/p2p/${s.toString()}`)),d));if(c.length===0)return this.log("refused to dial all multiaddrs for %p from message",s),{type:xt.MessageType.DIAL_RESPONSE,dialResponse:{status:xt.ResponseStatus.E_DIAL_REFUSED,statusText:"no dialable addresses"}};this.log("dial multiaddrs %s for peer %p",c.map(d=>d.toString()).join(", "),s);let l="",u=c[0];for await(let d of c){let h;u=d;try{if(h=await this.components.connectionManager.openConnection(d,n),!h.remoteAddr.equals(d))throw this.log.error("tried to dial %a but dialed %a",d,h.remoteAddr),new Error("Unexpected remote address");return this.log("successfully dialed %p via %a",s,d),{type:xt.MessageType.DIAL_RESPONSE,dialResponse:{status:xt.ResponseStatus.OK,addr:h.remoteAddr.decapsulateCode(Ie("p2p").code).bytes}}}catch(m){this.log.error("could not dial %p - %e",s,m),l=m.message}finally{h!=null&&await h.close()}}return{type:xt.MessageType.DIAL_RESPONSE,dialResponse:{status:xt.ResponseStatus.E_DIAL_ERROR,statusText:l,addr:u.bytes}}}getFirstUnverifiedMultiaddr(e,t){let n=this.components.addressManager.getAddressesWithMetadata().sort((o,i)=>o.type==="observed"&&i.type!=="observed"?1:i.type==="observed"&&o.type!=="observed"?-1:0).filter(o=>!(!(o.expires<Date.now())||o.multiaddr.toOptions().family===6&&(!t||!h0(o.multiaddr))||Yn(o.multiaddr)));for(let o of n){let i=o.multiaddr.toString(),s=this.dialResults.get(i);if(s!=null){if(s.networkSegments.includes(e)){this.log.trace("%a already has a network segment result from %s",s.multiaddr,e);continue}if(s.queue.size>10){this.log.trace("%a already has enough peers queued",s.multiaddr);continue}}if(s==null){let a=o.expires<Date.now();if(a&&this.addressFilter.remove?.(i),this.addressFilter.has(i))continue;this.addressFilter.add(i),this.log.trace("creating dial result %s %s",a?"to revalidate":"for",i),s={multiaddr:o.multiaddr,success:0,failure:0,networkSegments:[],verifyingPeers:h6(),queue:new ur({concurrency:3,maxSize:50}),type:o.type,lastVerified:o.lastVerified},this.dialResults.set(i,s)}return s}}removeOutdatedMultiaddrResults(){let e=new Set(this.components.addressManager.getAddressesWithMetadata().filter(({expires:t})=>t<Date.now()).map(({multiaddr:t})=>t.toString()));for(let t of this.dialResults.keys())e.has(t)||(this.log.trace("remove results for %a",t),this.dialResults.delete(t))}async verifyExternalAddresses(e){if(!this.isStarted())return;this.removeOutdatedMultiaddrResults();let n=(await this.components.peerStore.get(e.remotePeer)).addresses.some(({multiaddr:s})=>s.toOptions().family===6),o=this.getNetworkSegment(e.remoteAddr),i=this.getFirstUnverifiedMultiaddr(o,n);if(i==null){this.log.trace("no unverified public addresses found for peer %p to verify, not requesting verification",e.remotePeer);return}if(!this.hasConnectionCapacity()){i.lastVerified!=null?(this.log("automatically re-verifying %a because we are too close to the connection limit",i.multiaddr),this.confirmAddress(i)):this.log("skipping verifying %a because we are too close to the connection limit",i.multiaddr);return}i.queue.add(async s=>{await this.askPeerToVerify(e,o,s)},{peerId:e.remotePeer,multiaddr:i.multiaddr}).catch(s=>{i?.result==null&&this.log.error("error from %p verifying address %a - %e",e.remotePeer,i?.multiaddr,s)})}async askPeerToVerify(e,t,n){let o=this.dialResults.get(n.multiaddr.toString());if(o==null){this.log("%a was verified while %p was queued",n.multiaddr,e.remotePeer);return}let i=AbortSignal.timeout(this.timeout);this.log.trace("asking %p to verify multiaddr %s",e.remotePeer,n.multiaddr);let s=await e.newStream(this.protocol,{signal:i});try{let a=N8(s).pb(xt),[,c]=await Promise.all([a.write({type:xt.MessageType.DIAL,dial:{peer:{id:this.components.peerId.toMultihash().bytes,addrs:[n.multiaddr.bytes]}}},{signal:i}),a.read({signal:i})]);if(c.type!==xt.MessageType.DIAL_RESPONSE||c.dialResponse==null){this.log("invalid autonat response from %p - %j",e.remotePeer,c);return}let l=c.dialResponse.status;if(this.log.trace("autonat response from %p for %a is %s",e.remotePeer,n.multiaddr,l),l!==xt.ResponseStatus.OK&&l!==xt.ResponseStatus.E_DIAL_ERROR)return;if(o=this.dialResults.get(n.multiaddr.toString()),o==null){this.log.trace("peer reported %a as %s but there is no result object",n.multiaddr,c.dialResponse.status);return}if(o.networkSegments.includes(t)){this.log.trace("%a results included network segment %s",n.multiaddr,t);return}if(o.result!=null){this.log.trace("already resolved result for %a, ignoring response from",n.multiaddr,e.remotePeer);return}if(o.verifyingPeers.has(e.remotePeer)){this.log.trace("peer %p has already verified %a, ignoring response",e.remotePeer,n.multiaddr);return}if(o.verifyingPeers.add(e.remotePeer),o.networkSegments.push(t),l===xt.ResponseStatus.OK){if(o.success++,o.type!=="observed"){this.confirmAddress(o);return}}else l===xt.ResponseStatus.E_DIAL_ERROR&&o.failure++;this.log("%a success %d failure %d",o.multiaddr,o.success,o.failure),o.success===DF&&this.confirmAddress(o),o.failure===OF&&this.unconfirmAddress(o)}finally{try{await s.close({signal:i})}catch(a){s.abort(a)}}}hasConnectionCapacity(){let t=this.components.connectionManager.getConnections().length,n=this.components.connectionManager.getMaxConnections();return t/n*100<this.connectionThreshold}confirmAddress(e){this.log("%s address %a is externally dialable",e.type,e.multiaddr),this.components.addressManager.confirmObservedAddr(e.multiaddr),this.dialResults.delete(e.multiaddr.toString()),e.result=!0,e.queue.abort()}unconfirmAddress(e){this.log("%s address %a is not externally dialable",e.type,e.multiaddr),this.components.addressManager.removeObservedAddr(e.multiaddr),this.dialResults.delete(e.multiaddr.toString()),e.result=!1,e.queue.abort()}getNetworkSegment(e){let t=e.toOptions();return t.family===4?t.host.split(".")[0].padStart(3,"0"):t.host.split(":")[0].padStart(4,"0")}};function zA(r={}){return e=>new w0(e,r)}var LF=se("dns4"),BF=se("dns6"),MF=se("dnsaddr"),ic=Kt(se("dns"),MF,LF,BF),v0=Kt(se("ip4"),se("ip6")),fu=Kt(Te(v0,se("tcp")),Te(ic,se("tcp"))),E0=Te(v0,se("udp")),UF=Te(E0,se("utp")),FF=Te(E0,se("quic")),$F=Te(E0,se("quic-v1")),D8=Kt(Te(fu,se("ws")),Te(ic,se("ws"))),b0=Kt(Te(D8,se("p2p")),D8),O8=Kt(Te(fu,se("wss")),Te(ic,se("wss")),Te(fu,se("tls"),se("ws")),Te(ic,se("tls"),se("ws"))),x0=Kt(Te(O8,se("p2p")),O8),L8=Kt(Te(fu,se("http")),Te(v0,se("http")),Te(ic,se("http"))),B8=Kt(Te(fu,se("https")),Te(v0,se("https")),Te(ic,se("https"))),XA=Te(E0,se("webrtc-direct"),se("certhash")),ZA=Kt(Te(XA,se("p2p")),XA),YA=Te($F,se("webtransport"),se("certhash"),se("certhash")),JA=Kt(Te(YA,se("p2p")),YA),e_=Kt(Te(b0,se("p2p-webrtc-star"),se("p2p")),Te(x0,se("p2p-webrtc-star"),se("p2p")),Te(b0,se("p2p-webrtc-star")),Te(x0,se("p2p-webrtc-star"))),efe=Kt(Te(b0,se("p2p-websocket-star"),se("p2p")),Te(x0,se("p2p-websocket-star"),se("p2p")),Te(b0,se("p2p-websocket-star")),Te(x0,se("p2p-websocket-star"))),t_=Kt(Te(L8,se("p2p-webrtc-direct"),se("p2p")),Te(B8,se("p2p-webrtc-direct"),se("p2p")),Te(L8,se("p2p-webrtc-direct")),Te(B8,se("p2p-webrtc-direct"))),sc=Kt(D8,O8,L8,B8,e_,t_,fu,UF,FF,ic,ZA,JA),tfe=Kt(Te(sc,se("p2p-stardust"),se("p2p")),Te(sc,se("p2p-stardust"))),Ds=Kt(Te(sc,se("p2p")),e_,t_,ZA,JA,se("p2p")),QA=Kt(Te(Ds,se("p2p-circuit"),Ds),Te(Ds,se("p2p-circuit")),Te(se("p2p-circuit"),Ds),Te(sc,se("p2p-circuit")),Te(se("p2p-circuit"),sc),se("p2p-circuit")),r_=()=>Kt(Te(QA,r_),QA),oc=r_(),n_=Kt(Te(oc,Ds,oc),Te(Ds,oc),Te(oc,Ds),oc,Ds);var rfe=Kt(Te(oc,se("webrtc"),se("p2p")),Te(oc,se("webrtc")),Te(sc,se("webrtc"),se("p2p")),Te(sc,se("webrtc")),se("webrtc"));function o_(r){function e(t){let n;try{n=oe(t)}catch{return!1}let o=r(n.protoNames());return o===null?!1:o===!0||o===!1?o:o.length===0}return e}function Te(...r){function e(t){if(t.length<r.length)return null;let n=t;return r.some(o=>(n=typeof o=="function"?o().partialMatch(t):o.partialMatch(t),Array.isArray(n)&&(t=n),n===null)),n}return{toString:function(){return"{ "+r.join(" ")+" }"},input:r,matches:o_(e),partialMatch:e}}function Kt(...r){function e(n){let o=null;return r.some(i=>{let s=typeof i=="function"?i().partialMatch(n):i.partialMatch(n);return s!=null?(o=s,!0):!1}),o}return{toString:function(){return"{ "+r.join(" ")+" }"},input:r,matches:o_(e),partialMatch:e}}function se(r){let e=r;function t(o){let i;try{i=oe(o)}catch{return!1}let s=i.protoNames();return s.length===1&&s[0]===e}function n(o){return o.length===0?null:o[0]===e?o.slice(1):null}return{toString:function(){return e},matches:t,partialMatch:n}}var KF="bootstrap",VF=50,HF=1e3,M8=class extends Le{static tag="bootstrap";log;timer;list;timeout;components;_init;constructor(e,t={list:[]}){if(t.list==null||t.list.length===0)throw new Error("Bootstrap requires a list of peer addresses");super(),this.components=e,this.log=e.logger.forComponent("libp2p:bootstrap"),this.timeout=t.timeout??HF,this.list=[];for(let n of t.list){if(!n_.matches(n)){this.log.error("Invalid multiaddr");continue}let o=oe(n),i=o.getPeerId();if(i==null){this.log.error("Invalid bootstrap multiaddr without peer id");continue}let s={id:bt(i),multiaddrs:[o]};this.list.push(s)}this._init=t}[ma]=this;[Symbol.toStringTag]="@libp2p/bootstrap";[Xe]=["@libp2p/peer-discovery"];isStarted(){return!!this.timer}start(){this.isStarted()||(this.log("Starting bootstrap node discovery, discovering peers after %s ms",this.timeout),this.timer=setTimeout(()=>{this._discoverBootstrapPeers().catch(e=>{this.log.error(e)})},this.timeout))}async _discoverBootstrapPeers(){if(this.timer!=null)for(let e of this.list){if(await this.components.peerStore.merge(e.id,{tags:{[this._init.tagName??KF]:{value:this._init.tagValue??VF,ttl:this._init.tagTTL}},multiaddrs:e.multiaddrs}),this.timer==null)return;this.safeDispatchEvent("peer",{detail:e}),this.components.connectionManager.openConnection(e.id).catch(t=>{this.log.error("could not dial bootstrap peer %p",e.id,t)})}}stop(){this.timer!=null&&clearTimeout(this.timer),this.timer=void 0}};function i_(r){return e=>new M8(e,r)}var Lf;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.publicKey!=null&&t.publicKey.byteLength>0&&(n.uint32(10),n.bytes(t.publicKey)),t.payloadType!=null&&t.payloadType.byteLength>0&&(n.uint32(18),n.bytes(t.payloadType)),t.payload!=null&&t.payload.byteLength>0&&(n.uint32(26),n.bytes(t.payload)),t.signature!=null&&t.signature.byteLength>0&&(n.uint32(42),n.bytes(t.signature)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={publicKey:ke(0),payloadType:ke(0),payload:ke(0),signature:ke(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.publicKey=t.bytes();break}case 2:{i.payloadType=t.bytes();break}case 3:{i.payload=t.bytes();break}case 5:{i.signature=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(Lf||(Lf={}));var S0=class extends Error{constructor(e="Invalid signature"){super(e),this.name="InvalidSignatureError"}};var Dn=class r{static createFromProtobuf=async e=>{let t=Lf.decode(e),n=$t(t.publicKey);return new r({publicKey:n,payloadType:t.payloadType,payload:t.payload,signature:t.signature})};static seal=async(e,t)=>{if(t==null)throw new Error("Missing private key");let n=e.domain,o=e.codec,i=e.marshal(),s=s_(n,o,i),a=await t.sign(s.subarray());return new r({publicKey:t.publicKey,payloadType:o,payload:i,signature:a})};static openAndCertify=async(e,t)=>{let n=await r.createFromProtobuf(e);if(!await n.validate(t))throw new S0("Envelope signature is not valid for the given domain");return n};publicKey;payloadType;payload;signature;marshaled;constructor(e){let{publicKey:t,payloadType:n,payload:o,signature:i}=e;this.publicKey=t,this.payloadType=n,this.payload=o,this.signature=i}marshal(){return this.marshaled==null&&(this.marshaled=Lf.encode({publicKey:nr(this.publicKey),payloadType:this.payloadType,payload:this.payload.subarray(),signature:this.signature})),this.marshaled}equals(e){return ge(this.marshal(),e.marshal())}async validate(e){let t=s_(e,this.payloadType,this.payload);return this.publicKey.verify(t.subarray(),this.signature)}},s_=(r,e,t)=>{let n=V(r),o=Fe(n.byteLength),i=Fe(e.length),s=Fe(t.length);return new J(o,n,i,e,s,t)};function a_(r,e){let t=(n,o)=>n.toString().localeCompare(o.toString());return r.length!==e.length?!1:(e.sort(t),r.sort(t).every((n,o)=>e[o].equals(n)))}var c_="libp2p-peer-record",l_=Uint8Array.from([3,1]);var Bf;(function(r){let e;(function(n){let o;n.codec=()=>(o==null&&(o=_e((i,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),i.multiaddr!=null&&i.multiaddr.byteLength>0&&(s.uint32(10),s.bytes(i.multiaddr)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={multiaddr:ke(0)},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.multiaddr=i.bytes();break}default:{i.skipType(u&7);break}}}return c})),o),n.encode=i=>Ae(i,n.codec()),n.decode=(i,s)=>Se(i,n.codec(),s)})(e=r.AddressInfo||(r.AddressInfo={}));let t;r.codec=()=>(t==null&&(t=_e((n,o,i={})=>{if(i.lengthDelimited!==!1&&o.fork(),n.peerId!=null&&n.peerId.byteLength>0&&(o.uint32(10),o.bytes(n.peerId)),n.seq!=null&&n.seq!==0n&&(o.uint32(16),o.uint64(n.seq)),n.addresses!=null)for(let s of n.addresses)o.uint32(26),r.AddressInfo.codec().encode(s,o);i.lengthDelimited!==!1&&o.ldelim()},(n,o,i={})=>{let s={peerId:ke(0),seq:0n,addresses:[]},a=o==null?n.len:n.pos+o;for(;n.pos<a;){let c=n.uint32();switch(c>>>3){case 1:{s.peerId=n.bytes();break}case 2:{s.seq=n.uint64();break}case 3:{if(i.limits?.addresses!=null&&s.addresses.length===i.limits.addresses)throw new at('Decode error - map field "addresses" had too many elements');s.addresses.push(r.AddressInfo.codec().decode(n,n.uint32(),{limits:i.limits?.addresses$}));break}default:{n.skipType(c&7);break}}}return s})),t),r.encode=n=>Ae(n,r.codec()),r.decode=(n,o)=>Se(n,r.codec(),o)})(Bf||(Bf={}));var zr=class r{static createFromProtobuf=e=>{let t=Bf.decode(e),n=qt(Ye(t.peerId)),o=(t.addresses??[]).map(s=>oe(s.multiaddr)),i=t.seq;return new r({peerId:n,multiaddrs:o,seqNumber:i})};static DOMAIN=c_;static CODEC=l_;peerId;multiaddrs;seqNumber;domain=r.DOMAIN;codec=r.CODEC;marshaled;constructor(e){let{peerId:t,multiaddrs:n,seqNumber:o}=e;this.peerId=t,this.multiaddrs=n??[],this.seqNumber=o??BigInt(Date.now())}marshal(){return this.marshaled==null&&(this.marshaled=Bf.encode({peerId:this.peerId.toMultihash().bytes,seq:BigInt(this.seqNumber),addresses:this.multiaddrs.map(e=>({multiaddr:e.bytes}))})),this.marshaled}equals(e){return!(!(e instanceof r)||!this.peerId.equals(e.peerId)||this.seqNumber!==e.seqNumber||!a_(this.multiaddrs,e.multiaddrs))}};var A0=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},_0=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},I0=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function u_(r,e={}){let t=Qt(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=Ce(e.maxDataLength));let n=e?.lengthDecoder??nt,o=e?.lengthEncoder??Fe;return{read:async s=>{let a=-1,c=new J;for(;;){c.append(await t.read({...s,bytes:1}));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(a<0)throw new A0("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new I0("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new _0("message length too long");return t.read({...s,bytes:a})},write:async(s,a)=>{await t.write(new J(o(s.byteLength),s),a)},writeV:async(s,a)=>{let c=new J(...s.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function Mf(r,e){let t=u_(r,e),n={read:async(o,i)=>{let s=await t.read(i);return o.decode(s)},write:async(o,i,s)=>{await t.write(i.encode(o),s)},writeV:async(o,i,s)=>{await t.writeV(o.map(a=>i.encode(a)),s)},pb:o=>({read:async i=>n.read(o,i),write:async(i,s)=>n.write(i,o,s),writeV:async(i,s)=>n.writeV(i,o,s),unwrap:()=>n}),unwrap:()=>t.unwrap()};return n}var U8=1e3,d_=60*U8,f_=290;var Vfe=2*60*d_,h_=1,T0=2e3,p_=100;var Uf=`${rs}-circuit-relay`,Hfe=`${rs}-circuit-relay-source`,qfe=2*d_,jfe=BigInt(1<<17),ac="/libp2p/circuit/relay/0.2.0/hop",F8="/libp2p/circuit/relay/0.2.0/stop",Wfe=30*U8,Gfe=30*U8,$8=300,m_=4096,g_=.001;var Os;(function(r){let e;(function(o){o.RESERVE="RESERVE",o.CONNECT="CONNECT",o.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.RESERVE=0]="RESERVE",o[o.CONNECT=1]="CONNECT",o[o.STATUS=2]="STATUS"})(t||(t={})),function(o){o.codec=()=>Et(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=_e((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.type!=null&&(i.uint32(8),r.Type.codec().encode(o.type,i)),o.peer!=null&&(i.uint32(18),hu.codec().encode(o.peer,i)),o.reservation!=null&&(i.uint32(26),C0.codec().encode(o.reservation,i)),o.limit!=null&&(i.uint32(34),pu.codec().encode(o.limit,i)),o.status!=null&&(i.uint32(40),pr.codec().encode(o.status,i)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{a.peer=hu.codec().decode(o,o.uint32(),{limits:s.limits?.peer});break}case 3:{a.reservation=C0.codec().decode(o,o.uint32(),{limits:s.limits?.reservation});break}case 4:{a.limit=pu.codec().decode(o,o.uint32(),{limits:s.limits?.limit});break}case 5:{a.status=pr.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>Ae(o,r.codec()),r.decode=(o,i)=>Se(o,r.codec(),i)})(Os||(Os={}));var oi;(function(r){let e;(function(o){o.CONNECT="CONNECT",o.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.CONNECT=0]="CONNECT",o[o.STATUS=1]="STATUS"})(t||(t={})),function(o){o.codec=()=>Et(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=_e((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.type!=null&&(i.uint32(8),r.Type.codec().encode(o.type,i)),o.peer!=null&&(i.uint32(18),hu.codec().encode(o.peer,i)),o.limit!=null&&(i.uint32(26),pu.codec().encode(o.limit,i)),o.status!=null&&(i.uint32(32),pr.codec().encode(o.status,i)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{a.peer=hu.codec().decode(o,o.uint32(),{limits:s.limits?.peer});break}case 3:{a.limit=pu.codec().decode(o,o.uint32(),{limits:s.limits?.limit});break}case 4:{a.status=pr.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>Ae(o,r.codec()),r.decode=(o,i)=>Se(o,r.codec(),i)})(oi||(oi={}));var hu;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.id!=null&&t.id.byteLength>0&&(n.uint32(10),n.bytes(t.id)),t.addrs!=null)for(let i of t.addrs)n.uint32(18),n.bytes(i);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={id:ke(0),addrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.id=t.bytes();break}case 2:{if(o.limits?.addrs!=null&&i.addrs.length===o.limits.addrs)throw new at('Decode error - map field "addrs" had too many elements');i.addrs.push(t.bytes());break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(hu||(hu={}));var C0;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.expire!=null&&t.expire!==0n&&(n.uint32(8),n.uint64(t.expire)),t.addrs!=null)for(let i of t.addrs)n.uint32(18),n.bytes(i);t.voucher!=null&&(n.uint32(26),P0.codec().encode(t.voucher,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={expire:0n,addrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.expire=t.uint64();break}case 2:{if(o.limits?.addrs!=null&&i.addrs.length===o.limits.addrs)throw new at('Decode error - map field "addrs" had too many elements');i.addrs.push(t.bytes());break}case 3:{i.voucher=P0.codec().decode(t,t.uint32(),{limits:o.limits?.voucher});break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(C0||(C0={}));var pu;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.duration!=null&&(n.uint32(8),n.uint32(t.duration)),t.data!=null&&(n.uint32(16),n.uint64(t.data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.duration=t.uint32();break}case 2:{i.data=t.uint64();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(pu||(pu={}));var pr;(function(r){r.UNUSED="UNUSED",r.OK="OK",r.RESERVATION_REFUSED="RESERVATION_REFUSED",r.RESOURCE_LIMIT_EXCEEDED="RESOURCE_LIMIT_EXCEEDED",r.PERMISSION_DENIED="PERMISSION_DENIED",r.CONNECTION_FAILED="CONNECTION_FAILED",r.NO_RESERVATION="NO_RESERVATION",r.MALFORMED_MESSAGE="MALFORMED_MESSAGE",r.UNEXPECTED_MESSAGE="UNEXPECTED_MESSAGE"})(pr||(pr={}));var K8;(function(r){r[r.UNUSED=0]="UNUSED",r[r.OK=100]="OK",r[r.RESERVATION_REFUSED=200]="RESERVATION_REFUSED",r[r.RESOURCE_LIMIT_EXCEEDED=201]="RESOURCE_LIMIT_EXCEEDED",r[r.PERMISSION_DENIED=202]="PERMISSION_DENIED",r[r.CONNECTION_FAILED=203]="CONNECTION_FAILED",r[r.NO_RESERVATION=204]="NO_RESERVATION",r[r.MALFORMED_MESSAGE=400]="MALFORMED_MESSAGE",r[r.UNEXPECTED_MESSAGE=401]="UNEXPECTED_MESSAGE"})(K8||(K8={}));(function(r){r.codec=()=>Et(K8)})(pr||(pr={}));var k0;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.relay!=null&&t.relay.byteLength>0&&(n.uint32(10),n.bytes(t.relay)),t.peer!=null&&t.peer.byteLength>0&&(n.uint32(18),n.bytes(t.peer)),t.expiration!=null&&t.expiration!==0n&&(n.uint32(24),n.uint64(t.expiration)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={relay:ke(0),peer:ke(0),expiration:0n},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.relay=t.bytes();break}case 2:{i.peer=t.bytes();break}case 3:{i.expiration=t.uint64();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(k0||(k0={}));var P0;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.publicKey!=null&&t.publicKey.byteLength>0&&(n.uint32(10),n.bytes(t.publicKey)),t.payloadType!=null&&t.payloadType.byteLength>0&&(n.uint32(18),n.bytes(t.payloadType)),t.payload!=null&&(n.uint32(26),k0.codec().encode(t.payload,n)),t.signature!=null&&t.signature.byteLength>0&&(n.uint32(42),n.bytes(t.signature)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={publicKey:ke(0),payloadType:ke(0),signature:ke(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.publicKey=t.bytes();break}case 2:{i.payloadType=t.bytes();break}case 3:{i.payload=k0.codec().decode(t,t.uint32(),{limits:o.limits?.payload});break}case 5:{i.signature=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(P0||(P0={}));var Ff=class extends Error{static name="HadEnoughRelaysError";name="HadEnoughRelaysError"},R0=class extends Error{static name="DoubleRelayError";name="DoubleRelayError"},N0=class extends Error{static name="RelayQueueFullError";name="RelayQueueFullError"};function V8(r){let e=r*BigInt(1e3),t=new Date().getTime();return Number(e-BigInt(t))}var $f=class{expires;bytes;constructor(e){e?.duration!=null&&e?.duration!==0&&(this.expires=Date.now()+e.duration*1e3),this.bytes=e?.data,this.bytes===0n&&(this.bytes=void 0),this.onData=this.onData.bind(this)}onData(e){this.bytes!=null&&(this.bytes-=BigInt(e.byteLength),this.bytes<0n&&(this.bytes=0n))}getLimits(){if(this.expires==null&&this.bytes==null)return;let e={};if(this.bytes!=null){let t=this;Object.defineProperty(e,"bytes",{get(){return t.bytes}})}if(this.expires!=null){let t=this;Object.defineProperty(e,"seconds",{get(){return Math.round(((t.expires??0)-Date.now())/1e3)}})}return e}},D0=it(qe(bm.matchers[0],Be("p2p-circuit"))),O0=it(Be("p2p-circuit"));function H8(r){let{stream:e,remoteAddr:t,logger:n,onDataRead:o,onDataWrite:i}=r,s=n.forComponent("libp2p:stream:converter"),a=!1,c=!1,l=e.close.bind(e);e.close=async g=>{await l(g),m(!0)};let u=e.abort.bind(e);e.abort=g=>{u(g),m(!0)};let d=e.sink.bind(e);e.sink=async g=>{try{await d(rr(g,w=>Wa(w,y=>i?.(y))))}catch(w){w.type!=="aborted"&&s.error("%s error in sink",t,w)}finally{c=!0,m()}};let h={log:s,sink:e.sink,source:async function*(){try{for await(let g of e.source)o?.(g),yield g}finally{a=!0,m()}}(),remoteAddr:t,timeline:{open:Date.now(),close:void 0},close:e.close,abort:e.abort};function m(g){g===!0&&(a=!0,c=!0),a&&c&&h.timeline.close==null&&(h.timeline.close=Date.now())}return h}var L0=class extends Le{peerStore;registrar;connectionManager;randomWalk;started;running;topologyId;log;discoveryController;filter;queue;constructor(e,t={}){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:discover-relays"),this.started=!1,this.running=!1,this.peerStore=e.peerStore,this.registrar=e.registrar,this.connectionManager=e.connectionManager,this.randomWalk=e.randomWalk,this.filter=t.filter,this.discoveryController=new AbortController,this.discoveryController.signal}isStarted(){return this.started}async start(){this.topologyId=await this.registrar.register(ac,{filter:this.filter,onConnect:e=>{this.log.trace("discovered relay %p queue (length: %d, active %d)",e,this.queue?.size,this.queue?.running),this.safeDispatchEvent("relay:discover",{detail:e})}}),this.started=!0}stop(){this.topologyId!=null&&this.registrar.unregister(this.topologyId),this.discoveryController?.abort(),this.started=!1}startDiscovery(){this.running||(this.log("start discovery"),this.running=!0,this.discoveryController=new AbortController,this.discoveryController.signal,Promise.resolve().then(async()=>{this.log("searching peer store for relays");let e=await this.peerStore.all({filters:[n=>n.protocols.includes(ac)],orders:[()=>Math.random()<.5?1:-1,(n,o)=>{let i=y_(n),s=y_(o);return i>s?-1:s>i?1:0}]});for(let n of e)this.log.trace("found relay peer %p in peer store",n.id),this.safeDispatchEvent("relay:discover",{detail:n.id});this.log("found %d relay peers in peer store",e.length);let t=this.queue=new ur({concurrency:5});this.log("start random walk");for await(let n of this.randomWalk.walk({signal:this.discoveryController.signal})){if(this.log.trace("found random peer %p",n.id),t.has(n.id)){this.log.trace("random peer %p was already in queue",n.id);continue}if(this.connectionManager.getConnections(n.id)?.length>0){this.log.trace("random peer %p was already connected",n.id);continue}if(!await this.connectionManager.isDialable(n.multiaddrs)){this.log.trace("random peer %p was not dialable",n.id,n.multiaddrs.map(o=>o.toString()));continue}t.queued>10&&(this.log.trace("wait for space in queue for %p",n.id),await t.onSizeLessThan(10,{signal:this.discoveryController.signal})),this.log("adding random peer %p to dial queue (length: %d, active %d)",n.id,t.size,t.running),t.add(async()=>{let o=Ne([this.discoveryController.signal,AbortSignal.timeout(5e3)]);try{await this.connectionManager.openConnection(n.id,{signal:o})}finally{o.clear()}},{peerId:n.id,signal:this.discoveryController.signal}).catch(o=>{this.log.error("error opening connection to random peer %p",n.id,o)})}this.log("stop random walk"),await t.onIdle()}).catch(e=>{this.discoveryController.signal.aborted||this.log.error("failed when finding relays on the network",e)}))}stopDiscovery(){this.log("stop discovery"),this.running=!1,this.discoveryController?.abort()}};function y_(r){let e=r.metadata.get("last-dial-success");return e==null?0:new Date(M(e)).getTime()}var q8=class extends Le{connectionManager;addressManager;reservationStore;listeningAddrs;log;listenTimeout;reservationId;relay;constructor(e,t={}){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:transport:listener"),this.connectionManager=e.connectionManager,this.addressManager=e.addressManager,this.reservationStore=e.reservationStore,this.listeningAddrs=[],this.listenTimeout=t.listenTimeout??T0,this.reservationStore.addEventListener("relay:removed",this._onRemoveRelayPeer),this.reservationStore.addEventListener("relay:created-reservation",this._onAddRelayPeer)}_onRemoveRelayPeer=e=>{this.log("relay removed %p our relay %p",e.detail.relay,this.relay,this.relay?.equals(e.detail.relay)),this.relay?.equals(e.detail.relay)===!0&&(this.log("relay peer removed %p",e.detail.relay),this.listeningAddrs.forEach(t=>{this.addressManager.removeObservedAddr(t)}),this.listeningAddrs=[],this.safeDispatchEvent("listening"))};_onAddRelayPeer=e=>{let{details:t}=e.detail;t.type!=="configured"&&t.id===this.reservationId&&this.addedRelay(e.detail)};async listen(e){if(O0.exactMatch(e))this.log("searching for circuit relay servers"),this.reservationId=this.reservationStore.reserveRelay();else if(D0.exactMatch(e)){this.log("listen on specific relay server %a",e);let t=AbortSignal.timeout(this.listenTimeout);let n=e.decapsulate("/p2p-circuit"),o=await this.connectionManager.openConnection(n,{signal:t});if(!this.reservationStore.hasReservation(o.remotePeer)){this.log("making reservation on peer %p",o.remotePeer);let i=await this.reservationStore.addRelay(o.remotePeer,"configured");this.addedRelay(i)}}else throw new wa(`Could not listen on p2p-circuit address "${e}"`)}getAddrs(){return[...this.listeningAddrs.values()].flat()}updateAnnounceAddrs(){}async close(){this.reservationStore.cancelReservations(),this.listeningAddrs=[],this.reservationStore.removeEventListener("relay:removed",this._onRemoveRelayPeer),queueMicrotask(()=>{this.safeDispatchEvent("close")})}addedRelay(e){this.log("relay peer added %p",e.relay),this.relay=e.relay,this.listeningAddrs=e.details.reservation.addrs.map(t=>oe(t).encapsulate("/p2p-circuit")),this.listeningAddrs.forEach(t=>{this.addressManager.confirmObservedAddr(t,{type:"transport"})}),queueMicrotask(()=>{this.safeDispatchEvent("listening")})}};function w_(r){return new q8(r)}var b_="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var x_=(r=21)=>{let e="",t=crypto.getRandomValues(new Uint8Array(r|=0));for(;r--;)e+=b_[t[r]&63];return e};var qF=60*1e3*10,jF=60*1e3*5,WF=30*1e3,B0=class extends Le{peerId;connectionManager;peerStore;events;reserveQueue;reservations;pendingReservations;maxReservationQueueLength;reservationCompletionTimeout;started;log;relayFilter;constructor(e,t){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:transport:reservation-store"),this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.peerStore=e.peerStore,this.events=e.events,this.reservations=new ir,this.pendingReservations=[],this.maxReservationQueueLength=t?.maxReservationQueueLength??p_,this.reservationCompletionTimeout=t?.reservationCompletionTimeout??T0,this.started=!1,this.relayFilter=tn(100),this.reserveQueue=new ur({concurrency:t?.reservationConcurrency??h_,metricName:"libp2p_relay_reservation_queue",metrics:e.metrics}),this.events.addEventListener("connection:close",n=>{[...this.reservations.values()].find(i=>i.connection===n.detail.id)!=null&&this.#t(n.detail.remotePeer).catch(i=>{this.log("could not remove relay %p - %e",n.detail,i)})})}isStarted(){return this.started}start(){this.started=!0}afterStart(){Promise.resolve().then(async()=>{let e=await this.peerStore.all({filters:[t=>t.tags.has(Uf)]});this.log("removing tag from %d old relays",e.length),await Promise.all(e.map(async t=>{await this.peerStore.merge(t.id,{tags:{[Uf]:void 0}})})),this.log("redialing %d old relays",e.length),await Promise.all(e.map(async t=>this.addRelay(t.id,"discovered"))),this.#r()}).catch(e=>{this.log.error(e)})}stop(){this.reserveQueue.clear(),this.reservations.forEach(({timeout:e})=>{clearTimeout(e)}),this.reservations.clear(),this.started=!1}reserveRelay(){let e=x_();return this.pendingReservations.push(e),this.#r(),e}async addRelay(e,t){if(this.peerId.equals(e))throw this.log.trace("not trying to use self as relay"),new wa("Cannot use self as relay");if(this.reserveQueue.size>this.maxReservationQueueLength)throw new N0("The reservation queue is full");let n=this.reserveQueue.find(e);if(n!=null)return this.log.trace("potential relay peer %p is already in the reservation queue",e),n.join();if(this.relayFilter.has(e.toMultihash().bytes))throw new wa("The relay was previously invalid");return this.log.trace("try to reserve relay slot with %p",e),this.reserveQueue.add(async()=>{let o=Date.now();try{let i=this.reservations.get(e);if(i!=null){let g=this.connectionManager.getConnections(e),w=!1;if(g.length===0&&this.log("already have relay reservation with %p but we are no longer connected",e),g.map(y=>y.id).includes(i.connection)&&(this.log("already have relay reservation with %p and the original connection is still open",e),w=!0),w&&V8(i.reservation.expire)>qF)return this.log("already have relay reservation with %p but we are still connected and it does not expire soon",e),{relay:e,details:i};await this.#t(e)}if(t==="discovered"&&this.pendingReservations.length===0)throw new Ff("Not making reservation on discovered relay because we do not need any more relays");let s=AbortSignal.timeout(this.reservationCompletionTimeout);let a=await this.connectionManager.openConnection(e,{signal:s});if(nn.matches(a.remoteAddr))throw new R0("not creating reservation over relayed connection");let c=await this.#e(a,{signal:s}),l=V8(c.expire);this.log("created reservation on relay peer %p, expiry date is %s",e,new Date(Date.now()+l).toString());let u=Math.min(Math.max(l-jF,WF),Math.pow(2,31)-1),d=setTimeout(()=>{this.log("refresh reservation to relay %p",e),this.addRelay(e,t).catch(async g=>{this.log.error("could not refresh reservation to relay %p - %e",e,g),await this.#t(e)}).catch(g=>{this.log.error("could not remove expired reservation to relay %p - %e",e,g)})},u),h;if(t==="discovered"){let g=this.pendingReservations.pop();if(g==null)throw new Ff("Made reservation on relay but did not need any more discovered relays");h={timeout:d,reservation:c,type:t,connection:a.id,id:g}}else h={timeout:d,reservation:c,type:t,connection:a.id};this.reservations.set(e,h),await this.peerStore.merge(e,{tags:{[Uf]:{value:1,ttl:l}}}),this.#r();let m={relay:e,details:h};return this.safeDispatchEvent("relay:created-reservation",{detail:m}),m}catch(i){throw t==="discovered"&&i.name==="HadEnoughRelaysError"||this.log.error("could not reserve slot on %p after %dms - %e",e,Date.now()-o,i),(i.name==="DialError"||i.name==="UnsupportedProtocolError")&&this.relayFilter.add(e.toMultihash().bytes),this.#t(e).catch(s=>{this.log.error("could not remove reservation on %p after reserving slot failed - %e",e,s)}),i}},{peerId:e})}hasReservation(e){return this.reservations.has(e)}getReservation(e){return this.reservations.get(e)?.reservation}reservationCount(e){return e==null?this.reservations.size:[...this.reservations.values()].reduce((t,n)=>(n.type===e&&t++,t),0)}cancelReservations(){[...this.reservations.values()].forEach(e=>{clearTimeout(e.timeout)}),this.reservations.clear()}async#e(e,t){t.signal?.throwIfAborted(),this.log("requesting reservation from %p",e.remotePeer);let n=await e.newStream(ac,t),i=Mf(n).pb(Os);this.log.trace("send RESERVE to %p",e.remotePeer),await i.write({type:Os.Type.RESERVE},t);let s;try{this.log.trace("reading response from %p",e.remotePeer),s=await i.read(t)}catch(c){throw n.abort(c),c}finally{n.status!=="closed"&&await n.close(t)}if(this.log.trace("read response %o",s),s.status===pr.OK&&s.reservation!=null){let c=new Set;c.add(e.remoteAddr.toString());for(let l of s.reservation.addrs){let u=oe(l);u.getPeerId()==null&&(u=u.encapsulate(`/p2p/${e.remotePeer}`)),u=oe(u.toString().replace(`/p2p/${e.remotePeer}/p2p/${e.remotePeer}`,`/p2p/${e.remotePeer}`)),c.add(u.toString())}return s.reservation.addrs=[...c].map(l=>oe(l).bytes),s.reservation}let a=`reservation failed with status ${s.status??"undefined"}`;throw this.log.error(a),new Error(a)}async#t(e){let t=this.reservations.get(e);t!=null&&(this.log("removing relay reservation with %p from local store",e),clearTimeout(t.timeout),this.reservations.delete(e),t.type==="discovered"&&this.pendingReservations.push(t.id),await this.peerStore.merge(e,{tags:{[Uf]:void 0}}),this.safeDispatchEvent("relay:removed",{detail:{relay:e,details:t}}),this.#r())}#r(){if(this.pendingReservations.length===0){this.log.trace("have discovered enough relays"),this.reserveQueue.clear(),this.safeDispatchEvent("relay:found-enough-relays");return}this.relayFilter=tn(100),this.log("not discovered enough relays %d/%d",this.reservations.size,this.pendingReservations.length),this.safeDispatchEvent("relay:not-enough-relays")}};var GF=r=>{if(r.peer==null)return!1;try{r.peer.addrs.forEach(oe)}catch{return!1}return!0},v_={maxInboundStopStreams:$8,maxOutboundStopStreams:$8,stopTimeout:3e4},M0=class{discovery;registrar;peerStore;connectionManager;transportManager;peerId;upgrader;addressManager;connectionGater;reservationStore;logger;maxInboundStopStreams;maxOutboundStopStreams;started;log;shutdownController;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:circuit-relay:transport"),this.registrar=e.registrar,this.peerStore=e.peerStore,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.logger=e.logger,this.peerId=e.peerId,this.upgrader=e.upgrader,this.addressManager=e.addressManager,this.connectionGater=e.connectionGater,this.maxInboundStopStreams=t.maxInboundStopStreams??v_.maxInboundStopStreams,this.maxOutboundStopStreams=t.maxOutboundStopStreams??v_.maxOutboundStopStreams,this.shutdownController=new AbortController,this.discovery=new L0(e,{filter:t.discoveryFilter??w6(m_,g_)}),this.discovery.addEventListener("relay:discover",n=>{this.reservationStore.addRelay(n.detail,"discovered").catch(o=>{o.name!=="HadEnoughRelaysError"&&o.name!=="RelayQueueFullError"&&this.log.error("could not add discovered relay %p",n.detail,o)})}),this.reservationStore=new B0(e,t),this.reservationStore.addEventListener("relay:not-enough-relays",()=>{this.discovery?.startDiscovery()}),this.reservationStore.addEventListener("relay:found-enough-relays",()=>{this.discovery?.stopDiscovery()}),this.started=!1}[Symbol.toStringTag]="@libp2p/circuit-relay-v2-transport";[Xe]=["@libp2p/transport","@libp2p/circuit-relay-v2-transport"];get[Sn](){return this.discovery!=null?["@libp2p/identify"]:[]}[ns]=!0;isStarted(){return this.started}async start(){this.shutdownController=new AbortController,await this.registrar.handle(F8,e=>{let t=this.upgrader.createInboundAbortSignal(this.shutdownController.signal);this.onStop(e,t).catch(n=>{this.log.error("error while handling STOP protocol",n),e.stream.abort(n)}).finally(()=>{t.clear()})},{maxInboundStreams:this.maxInboundStopStreams,maxOutboundStreams:this.maxOutboundStopStreams,runOnLimitedConnection:!0}),await lr(this.discovery,this.reservationStore),this.started=!0}async stop(){this.shutdownController.abort(),await Cr(this.discovery,this.reservationStore),await this.registrar.unhandle(F8),this.started=!1}async dial(e,t){if(e.protoCodes().filter(m=>m===f_).length!==1){let m="Invalid circuit relay address";throw this.log.error(m,e),new Ei(m)}let n=e.toString().split("/p2p-circuit"),o=oe(n[0]),i=oe(n[n.length-1]),s=o.getPeerId(),a=i.getPeerId();if(s==null||a==null){let m=`ircuit relay dial to ${e.toString()} failed as address did not have both relay and destination PeerIDs`;throw this.log.error(`c${m}`),new Ei(`C${m}`)}let c=bt(s),l=bt(a),d=this.connectionManager.getConnections(c)[0];d==null?(await this.peerStore.merge(c,{multiaddrs:[o]}),t.onProgress?.(new ae("circuit-relay:open-connection")),d=await this.connectionManager.openConnection(c,t)):t.onProgress?.(new ae("circuit-relay:reuse-connection"));let h;try{t.onProgress?.(new ae("circuit-relay:open-hop-stream")),h=await d.newStream(ac,t);let m=Mf(h),g=m.pb(Os);t.onProgress?.(new ae("circuit-relay:write-connect-message")),await g.write({type:Os.Type.CONNECT,peer:{id:l.toMultihash().bytes,addrs:[oe(i).bytes]}},t),t.onProgress?.(new ae("circuit-relay:read-connect-response"));let w=await g.read(t);if(w.status!==pr.OK)throw new Oe(`failed to connect via relay with status ${w?.status?.toString()??"undefined"}`);let y=new $f(w.limit),x=H8({stream:m.unwrap(),remoteAddr:e,localAddr:o.encapsulate(`/p2p-circuit/p2p/${this.peerId.toString()}`),logger:this.logger,onDataRead:y.onData,onDataWrite:y.onData});return this.log("new outbound relayed connection %a",x.remoteAddr),await this.upgrader.upgradeOutbound(x,{...t,limits:y.getLimits()})}catch(m){throw this.log.error("circuit relay dial to destination %p via relay %p failed",l,c,m),h?.abort(m),m}}createListener(e){return w_({peerId:this.peerId,connectionManager:this.connectionManager,addressManager:this.addressManager,reservationStore:this.reservationStore,logger:this.logger})}listenFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>D0.exactMatch(t)||O0.exactMatch(t))}dialFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>nn.exactMatch(t))}async onStop({connection:e,stream:t},n){if(!this.reservationStore.hasReservation(e.remotePeer))try{this.log("dialed via relay we did not have a reservation on, start listening on that relay address"),await this.transportManager.listen([e.remoteAddr.encapsulate("/p2p-circuit")])}catch(d){this.log.error("failed to listen on a relay peer we were dialed via but did not have a reservation on",d)}let o=Mf(t).pb(oi),i=await o.read({signal:n});if(this.log("new circuit relay v2 stop stream from %p with type %s",e.remotePeer,i.type),i?.type===void 0){this.log.error("type was missing from circuit v2 stop protocol request from %s",e.remotePeer),await o.write({type:oi.Type.STATUS,status:pr.MALFORMED_MESSAGE},{signal:n}),await t.close();return}if(i.type!==oi.Type.CONNECT){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:oi.Type.STATUS,status:pr.UNEXPECTED_MESSAGE},{signal:n}),await t.close();return}if(!GF(i)){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:oi.Type.STATUS,status:pr.MALFORMED_MESSAGE},{signal:n}),await t.close({signal:n});return}let s=qt(Ye(i.peer.id));if(await this.connectionGater.denyInboundRelayedConnection?.(e.remotePeer,s)===!0){this.log.error("connection gater denied inbound relayed connection from %p",e.remotePeer),await o.write({type:oi.Type.STATUS,status:pr.PERMISSION_DENIED},{signal:n}),await t.close({signal:n});return}this.log.trace("sending success response to %p",e.remotePeer),await o.write({type:oi.Type.STATUS,status:pr.OK},{signal:n});let a=new $f(i.limit),c=e.remoteAddr.encapsulate(`/p2p-circuit/p2p/${s.toString()}`),l=this.addressManager.getAddresses()[0],u=H8({stream:o.unwrap().unwrap(),remoteAddr:c,localAddr:l,logger:this.logger,onDataRead:a.onData,onDataWrite:a.onData});this.log("new inbound relayed connection %a",u.remoteAddr),await this.upgrader.upgradeInbound(u,{limits:a.getLimits(),signal:n}),this.log("%s connection %a upgraded","inbound",u.remoteAddr)}};function j8(r={}){return e=>new M0(e,r)}var E_=()=>{let r=new Error("Delay aborted");return r.name="AbortError",r},zF=new WeakMap;function XF({clearTimeout:r,setTimeout:e}={}){return(t,{value:n,signal:o}={})=>{if(o?.aborted)return Promise.reject(E_());let i,s,a,c=r??clearTimeout,l=()=>{c(i),a(E_())},u=()=>{o&&o.removeEventListener("abort",l)},d=new Promise((h,m)=>{s=()=>{u(),h(n)},a=m,i=(e??setTimeout)(s,t)});return o&&o.addEventListener("abort",l,{once:!0}),zF.set(d,()=>{c(i),i=null,s()}),d}}var YF=XF(),U0=YF;var F0=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},$0=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},K0=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function S_(r,e={}){let t=Qt(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=Ce(e.maxDataLength));let n=e?.lengthDecoder??nt,o=e?.lengthEncoder??Fe;return{read:async s=>{let a=-1,c=new J;for(;;){c.append(await t.read({...s,bytes:1}));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(a<0)throw new F0("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new K0("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new $0("message length too long");return t.read({...s,bytes:a})},write:async(s,a)=>{await t.write(new J(o(s.byteLength),s),a)},writeV:async(s,a)=>{let c=new J(...s.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function W8(r,e){let t=S_(r,e),n={read:async(o,i)=>{let s=await t.read(i);return o.decode(s)},write:async(o,i,s)=>{await t.write(i.encode(o),s)},writeV:async(o,i,s)=>{await t.writeV(o.map(a=>i.encode(a)),s)},pb:o=>({read:async i=>n.read(o,i),write:async(i,s)=>n.write(i,o,s),writeV:async(i,s)=>n.writeV(i,o,s),unwrap:()=>n}),unwrap:()=>t.unwrap()};return n}var Lo;(function(r){let e;(function(o){o.UNUSED="UNUSED",o.CONNECT="CONNECT",o.SYNC="SYNC"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.UNUSED=0]="UNUSED",o[o.CONNECT=100]="CONNECT",o[o.SYNC=300]="SYNC"})(t||(t={})),function(o){o.codec=()=>Et(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=_e((o,i,s={})=>{if(s.lengthDelimited!==!1&&i.fork(),o.type!=null&&(i.uint32(8),r.Type.codec().encode(o.type,i)),o.observedAddresses!=null)for(let a of o.observedAddresses)i.uint32(18),i.bytes(a);s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={observedAddresses:[]},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{if(s.limits?.observedAddresses!=null&&a.observedAddresses.length===s.limits.observedAddresses)throw new at('Decode error - map field "observedAddresses" had too many elements');a.observedAddresses.push(o.bytes());break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>Ae(o,r.codec()),r.decode=(o,i)=>Se(o,r.codec(),i)})(Lo||(Lo={}));function G8(r,e){return nn.matches(r)||e.dialTransportForMultiaddr(r)==null?!1:xf.matches(r)?!0:hS.matches(r)?Gr(r.toOptions().host)===!1:!1}var A_=1024*4,__=100,V0={timeout:5e3,retries:3,maxInboundStreams:1,maxOutboundStreams:1},H0=class{started;timeout;retries;maxInboundStreams;maxOutboundStreams;peerStore;registrar;connectionManager;addressManager;transportManager;topologyId;log;constructor(e,t){this.log=e.logger.forComponent("libp2p:dcutr"),this.started=!1,this.peerStore=e.peerStore,this.registrar=e.registrar,this.addressManager=e.addressManager,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.timeout=t.timeout??V0.timeout,this.retries=t.retries??V0.retries,this.maxInboundStreams=t.maxInboundStreams??V0.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??V0.maxOutboundStreams}[Symbol.toStringTag]="@libp2p/dcutr";[Sn]=["@libp2p/identify"];isStarted(){return this.started}async start(){this.started||(this.topologyId=await this.registrar.register(Kf,{notifyOnLimitedConnection:!0,onConnect:(e,t)=>{nn.exactMatch(t.remoteAddr)&&t.direction==="inbound"&&this.upgradeInbound(t).catch(n=>{this.log.error("error during outgoing DCUtR attempt",n)})}}),await this.registrar.handle(Kf,e=>{this.handleIncomingUpgrade(e.stream,e.connection).catch(t=>{this.log.error("error during incoming DCUtR attempt",t),e.stream.abort(t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:!0}),this.started=!0)}async stop(){await this.registrar.unhandle(Kf),this.topologyId!=null&&this.registrar.unregister(this.topologyId),this.started=!1}async upgradeInbound(e){if(await this.attemptUnilateralConnectionUpgrade(e))return;let t;for(let n=0;n<this.retries;n++){let o={signal:AbortSignal.timeout(this.timeout)};try{t=await e.newStream([Kf],{signal:o.signal,runOnLimitedConnection:!0});let i=W8(t,{maxDataLength:A_}).pb(Lo);this.log("B sending connect to %p",e.remotePeer);let s=Date.now();await i.write({type:Lo.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(d=>d.bytes)},o),this.log("B receiving connect from %p",e.remotePeer);let a=await i.read(o);if(a.type!==Lo.Type.CONNECT)throw this.log("A sent wrong message type"),new Oe("DCUtR message type was incorrect");let c=this.getDialableMultiaddrs(a.observedAddresses);if(c.length===0)throw this.log("A did not have any dialable multiaddrs"),new Oe("DCUtR connect message had no multiaddrs");let l=Date.now()-s;this.log("A sending sync, rtt %dms",l),await i.write({type:Lo.Type.SYNC,observedAddresses:[]},o),this.log("A waiting for half RTT"),await U0(l/2),this.log("B dialing",c);let u=await this.connectionManager.openConnection(c,{signal:o.signal,priority:__,force:!0,initiator:!1});this.log("DCUtR to %p succeeded to address %a, closing relayed connection",e.remotePeer,u.remoteAddr),await e.close(o);break}catch(i){if(this.log.error("error while attempting DCUtR on attempt %d of %d",n+1,this.retries,i),t?.abort(i),n===this.retries)throw i}finally{t!=null&&await t.close(o)}}}async attemptUnilateralConnectionUpgrade(e){let n=(await this.peerStore.get(e.remotePeer)).addresses.map(o=>{let i=o.multiaddr;return i.getPeerId()==null?i.encapsulate(`/p2p/${e.remotePeer}`):i}).filter(o=>G8(o,this.transportManager));if(n.length>0){let o=AbortSignal.timeout(this.timeout);try{this.log("attempting unilateral connection upgrade to %a",n);let i=await this.connectionManager.openConnection(n,{signal:o,force:!0});if(nn.exactMatch(i.remoteAddr))throw new Error("Could not open a new, non-limited, connection");return this.log("unilateral connection upgrade to %p succeeded via %a, closing relayed connection",e.remotePeer,i.remoteAddr),await e.close({signal:o}),!0}catch(i){this.log.error("unilateral connection upgrade to %p on addresses %a failed",e.remotePeer,n,i)}}else this.log("peer %p has no public addresses, not attempting unilateral connection upgrade",e.remotePeer);return!1}async handleIncomingUpgrade(e,t){let n={signal:AbortSignal.timeout(this.timeout)};try{let o=W8(e,{maxDataLength:A_}).pb(Lo);this.log("A receiving connect");let i=await o.read(n);if(i.type!==Lo.Type.CONNECT)throw this.log("B sent wrong message type"),new Oe("DCUtR message type was incorrect");if(i.observedAddresses.length===0)throw this.log("B sent no multiaddrs"),new Oe("DCUtR connect message had no multiaddrs");let s=this.getDialableMultiaddrs(i.observedAddresses);if(s.length===0)throw this.log("B had no dialable multiaddrs"),new Oe("DCUtR connect message had no dialable multiaddrs");if(this.log("A sending connect"),await o.write({type:Lo.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(l=>l.bytes)}),this.log("A receiving sync"),(await o.read(n)).type!==Lo.Type.SYNC)throw new Oe("DCUtR message type was incorrect");this.log("A dialing",s);let c=await this.connectionManager.openConnection(s,{signal:n.signal,priority:__,force:!0});this.log("DCUtR to %p succeeded via %a, closing relayed connection",t.remotePeer,c.remoteAddr),await t.close(n)}catch(o){this.log.error("incoming DCUtR from %p failed",t.remotePeer,o),e.abort(o)}finally{await e.close(n)}}getDialableMultiaddrs(e){let t=[];for(let n of e)if(!(n==null||n.length===0))try{let o=oe(n);if(!G8(o,this.transportManager))continue;t.push(o)}catch{}return t}};var Kf="/libp2p/dcutr";function I_(r={}){return e=>new H0(e,r)}var q0=globalThis.CustomEvent??Event;async function*Bo(r,e={}){let t=e.concurrency??1/0;t<1&&(t=1/0);let n=e.ordered??!1,o=new EventTarget,i=[],s=de(),a=de(),c=!1,l,u=!1;o.addEventListener("task-complete",()=>{a.resolve()}),Promise.resolve().then(async()=>{try{for await(let g of r){if(i.length===t&&(s=de(),await s.promise),u)break;let w={done:!1};i.push(w),g().then(y=>{w.done=!0,w.ok=!0,w.value=y,o.dispatchEvent(new q0("task-complete"))},y=>{w.done=!0,w.err=y,o.dispatchEvent(new q0("task-complete"))})}c=!0,o.dispatchEvent(new q0("task-complete"))}catch(g){l=g,o.dispatchEvent(new q0("task-complete"))}});function d(){return n?i[0]?.done:!!i.find(g=>g.done)}function*h(){for(;i.length>0&&i[0].done;){let g=i[0];if(i.shift(),g.ok)yield g.value;else throw u=!0,s.resolve(),g.err;s.resolve()}}function*m(){for(;d();)for(let g=0;g<i.length;g++)if(i[g].done){let w=i[g];if(i.splice(g,1),g--,w.ok)yield w.value;else throw u=!0,s.resolve(),w.err;s.resolve()}}for(;;){if(d()||(a=de(),await a.promise),l!=null)throw l;if(n?yield*h():yield*m(),c&&i.length===0)break}}var j0=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},W0=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},G0=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function T_(r,e={}){let t=Qt(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=Ce(e.maxDataLength));let n=e?.lengthDecoder??nt,o=e?.lengthEncoder??Fe;return{read:async s=>{let a=-1,c=new J;for(;;){c.append(await t.read({...s,bytes:1}));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(a<0)throw new j0("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new G0("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new W0("message length too long");return t.read({...s,bytes:a})},write:async(s,a)=>{await t.write(new J(o(s.byteLength),s),a)},writeV:async(s,a)=>{let c=new J(...s.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function mu(r,e){let t=T_(r,e),n={read:async(o,i)=>{let s=await t.read(i);return o.decode(s)},write:async(o,i,s)=>{await t.write(i.encode(o),s)},writeV:async(o,i,s)=>{await t.writeV(o.map(a=>i.encode(a)),s)},pb:o=>({read:async i=>n.read(o,i),write:async(i,s)=>n.write(i,o,s),writeV:async(i,s)=>n.writeV(i,o,s),unwrap:()=>n}),unwrap:()=>t.unwrap()};return n}var C_="0.1.0",k_="id",P_="id/push",R_="1.0.0",N_="1.0.0";var Ls;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.protocolVersion!=null&&(n.uint32(42),n.string(t.protocolVersion)),t.agentVersion!=null&&(n.uint32(50),n.string(t.agentVersion)),t.publicKey!=null&&(n.uint32(10),n.bytes(t.publicKey)),t.listenAddrs!=null)for(let i of t.listenAddrs)n.uint32(18),n.bytes(i);if(t.observedAddr!=null&&(n.uint32(34),n.bytes(t.observedAddr)),t.protocols!=null)for(let i of t.protocols)n.uint32(26),n.string(i);t.signedPeerRecord!=null&&(n.uint32(66),n.bytes(t.signedPeerRecord)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={listenAddrs:[],protocols:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 5:{i.protocolVersion=t.string();break}case 6:{i.agentVersion=t.string();break}case 1:{i.publicKey=t.bytes();break}case 2:{if(o.limits?.listenAddrs!=null&&i.listenAddrs.length===o.limits.listenAddrs)throw new at('Decode error - map field "listenAddrs" had too many elements');i.listenAddrs.push(t.bytes());break}case 4:{i.observedAddr=t.bytes();break}case 3:{if(o.limits?.protocols!=null&&i.protocols.length===o.limits.protocols)throw new at('Decode error - map field "protocols" had too many elements');i.protocols.push(t.string());break}case 8:{i.signedPeerRecord=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(Ls||(Ls={}));var an={protocolPrefix:"ipfs",timeout:5e3,maxInboundStreams:1,maxOutboundStreams:1,maxObservedAddresses:10,maxMessageSize:8192,runOnConnectionOpen:!0,runOnSelfUpdate:!0,runOnLimitedConnection:!0,concurrency:32};function D_(r){if(r!=null&&r.length>0)try{return oe(r)}catch{}}function JF(r,e){return e??r.userAgent}async function z0(r,e,t,n,o){if(t("received identify from %p",n.remotePeer),o==null)throw new Oe("message was null or undefined");let i={};if(o.listenAddrs.length>0&&(i.addresses=o.listenAddrs.map(c=>({isCertified:!1,multiaddr:oe(c)}))),o.protocols.length>0&&(i.protocols=o.protocols),o.publicKey!=null){let c=$t(o.publicKey);if(!ei(c).equals(n.remotePeer))throw new Oe("public key did not match remote PeerId");i.publicKey=c}let s;if(o.signedPeerRecord!=null){t.trace("received signedPeerRecord from %p",n.remotePeer);let c=o.signedPeerRecord,l=await Dn.openAndCertify(c,zr.DOMAIN),u=zr.createFromProtobuf(l.payload),d=Eo(l.publicKey.toCID());if(!u.peerId.equals(d))throw new Oe("signing key does not match PeerId in the PeerRecord");if(!n.remotePeer.equals(u.peerId))throw new Oe("signing key does not match remote PeerId");let h;try{h=await r.get(u.peerId)}catch(m){if(m.name!=="NotFoundError")throw m}if(h!=null&&(i.metadata=h.metadata,h.peerRecordEnvelope!=null)){let m=await Dn.createFromProtobuf(h.peerRecordEnvelope),g=zr.createFromProtobuf(m.payload);g.seqNumber>=u.seqNumber&&(t("sequence number was lower or equal to existing sequence number - stored: %d received: %d",g.seqNumber,u.seqNumber),u=g,c=h.peerRecordEnvelope)}i.peerRecordEnvelope=c,i.addresses=u.multiaddrs.map(m=>({isCertified:!0,multiaddr:m})),s={seq:u.seqNumber,addresses:u.multiaddrs}}else t("%p did not send a signed peer record",n.remotePeer);if(t.trace("patching %p with",n.remotePeer,i),await r.patch(n.remotePeer,i),o.agentVersion!=null||o.protocolVersion!=null){let c={};o.agentVersion!=null&&(c.AgentVersion=V(o.agentVersion)),o.protocolVersion!=null&&(c.ProtocolVersion=V(o.protocolVersion)),t.trace("merging %p metadata",n.remotePeer,c),await r.merge(n.remotePeer,{metadata:c})}let a={peerId:n.remotePeer,protocolVersion:o.protocolVersion,agentVersion:o.agentVersion,publicKey:o.publicKey,listenAddrs:o.listenAddrs.map(c=>oe(c)),observedAddr:o.observedAddr==null?void 0:oe(o.observedAddr),protocols:o.protocols,signedPeerRecord:s,connection:n};return e.safeDispatchEvent("peer:identify",{detail:a}),a}var gu=class{host;protocol;started;timeout;peerId;privateKey;peerStore;registrar;addressManager;maxInboundStreams;maxOutboundStreams;maxMessageSize;maxObservedAddresses;events;runOnLimitedConnection;log;constructor(e,t){this.protocol=t.protocol,this.started=!1,this.peerId=e.peerId,this.privateKey=e.privateKey,this.peerStore=e.peerStore,this.registrar=e.registrar,this.addressManager=e.addressManager,this.events=e.events,this.log=t.log,this.timeout=t.timeout??an.timeout,this.maxInboundStreams=t.maxInboundStreams??an.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??an.maxOutboundStreams,this.maxMessageSize=t.maxMessageSize??an.maxMessageSize,this.maxObservedAddresses=t.maxObservedAddresses??an.maxObservedAddresses,this.runOnLimitedConnection=t.runOnLimitedConnection??an.runOnLimitedConnection,this.host={protocolVersion:`${t.protocolPrefix??an.protocolPrefix}/${C_}`,agentVersion:JF(e.nodeInfo,t.agentVersion)}}isStarted(){return this.started}async start(){this.started||(await this.peerStore.merge(this.peerId,{metadata:{AgentVersion:V(this.host.agentVersion),ProtocolVersion:V(this.host.protocolVersion)}}),await this.registrar.handle(this.protocol,e=>{this.handleProtocol(e).catch(t=>{this.log.error(t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnection}),this.started=!0)}async stop(){await this.registrar.unhandle(this.protocol),this.started=!1}};var X0=class extends gu{connectionManager;concurrency;constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??an.protocolPrefix}/${P_}/${N_}`,log:e.logger.forComponent("libp2p:identify-push")}),this.connectionManager=e.connectionManager,this.concurrency=t.concurrency??an.concurrency,(t.runOnSelfUpdate??an.runOnSelfUpdate)&&e.events.addEventListener("self:peer:update",n=>{this.push().catch(o=>{this.log.error(o)})})}[Xe]=["@libp2p/identify-push"];async push(){if(!this.isStarted())return;let e=this.addressManager.getAddresses().map(u=>u.decapsulateCode(Ie("p2p").code)),t=new zr({peerId:this.peerId,multiaddrs:e}),n=await Dn.seal(t,this.privateKey),o=this.registrar.getProtocols(),i=await this.peerStore.get(this.peerId),s=M(i.metadata.get("AgentVersion")??V(this.host.agentVersion)),a=M(i.metadata.get("ProtocolVersion")??V(this.host.protocolVersion)),c=this;async function*l(){for(let u of c.connectionManager.getConnections())(await c.peerStore.get(u.remotePeer)).protocols.includes(c.protocol)&&(yield async()=>{let h,m=AbortSignal.timeout(c.timeout);try{h=await u.newStream(c.protocol,{signal:m,runOnLimitedConnection:c.runOnLimitedConnection}),await mu(h,{maxDataLength:c.maxMessageSize}).pb(Ls).write({listenAddrs:e.map(w=>w.bytes),signedPeerRecord:n.marshal(),protocols:o,agentVersion:s,protocolVersion:a},{signal:m}),await h.close({signal:m})}catch(g){c.log.error("could not push identify update to peer",g),h?.abort(g)}})}await kr(Bo(l(),{concurrency:this.concurrency}))}async handleProtocol(e){let{connection:t,stream:n}=e;try{if(this.peerId.equals(t.remotePeer))throw new Error("received push from ourselves?");let o={signal:AbortSignal.timeout(this.timeout)},s=await mu(n,{maxDataLength:this.maxMessageSize}).pb(Ls).read(o);await n.close(o),await z0(this.peerStore,this.events,this.log,t,s)}catch(o){this.log.error("received invalid message",o),n.abort(o);return}this.log.trace("handled push from %p",t.remotePeer)}};var e$=41,Y0=class extends gu{constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??an.protocolPrefix}/${k_}/${R_}`,log:e.logger.forComponent("libp2p:identify")}),(t.runOnConnectionOpen??an.runOnConnectionOpen)&&e.events.addEventListener("connection:open",n=>{let o=n.detail;this.identify(o).catch(i=>{i.name!==vi.name&&this.log.error("error during identify trigged by connection:open",i)})})}[Xe]=["@libp2p/identify"];async _identify(e,t={}){let n;if(t.signal==null){let o=AbortSignal.timeout(this.timeout);t={...t,signal:o}}try{n=await e.newStream(this.protocol,{...t,runOnLimitedConnection:this.runOnLimitedConnection});let i=await mu(n,{maxDataLength:this.maxMessageSize}).pb(Ls).read(t);return await n.close(t),i}catch(o){throw n?.abort(o),o}}async identify(e,t={}){let n=await this._identify(e,t),{publicKey:o,protocols:i,observedAddr:s}=n;if(o==null)throw new Oe("public key was missing from identify message");let a=$t(o),c=Eo(a.toCID());if(!e.remotePeer.equals(c))throw new Oe("identified peer does not match the expected peer");if(this.peerId.equals(c))throw new Oe("identified peer is our own peer id?");return this.maybeAddObservedAddress(s),this.log("identify completed for peer %p and protocols %o",c,i),z0(this.peerStore,this.events,this.log,e,n)}maybeAddObservedAddress(e){let t=D_(e);if(t==null)return;if(this.log.trace("our observed address was %a",t),Yn(t)){this.log.trace("our observed address was private");return}if(t.stringTuples()[0][0]===e$&&!h0(t)){this.log.trace("our observed address was IPv6 but not a global unicast address");return}Ya.exactMatch(t)||(this.log.trace("storing the observed address"),this.addressManager.addObservedAddr(t))}async handleProtocol(e){let{connection:t,stream:n}=e,o=AbortSignal.timeout(this.timeout);try{let i=await this.peerStore.get(this.peerId),s=this.addressManager.getAddresses().map(u=>u.decapsulateCode(Ie("p2p").code)),a=i.peerRecordEnvelope;if(s.length>0&&a==null){let u=new zr({peerId:this.peerId,multiaddrs:s});a=(await Dn.seal(u,this.privateKey)).marshal().subarray()}let c=t.remoteAddr.bytes;fS.matches(t.remoteAddr)||(c=void 0),await mu(n).pb(Ls).write({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:nr(this.privateKey.publicKey),listenAddrs:s.map(u=>u.bytes),signedPeerRecord:a,observedAddr:c,protocols:i.protocols},{signal:o}),await n.close({signal:o})}catch(i){this.log.error("could not respond to identify request",i),n.abort(i)}}};function O_(r={}){return e=>new Y0(e,r)}function L_(r={}){return e=>new X0(e,r)}var yu=1e3,z8=60*yu,Q0=60*z8,B_=36*Q0,M_="/ipfs/kad/1.0.0",U_=48*Q0;var F_=24*Q0,$_=10,K_=16384,V_=Q0,x1e=10*yu;var Z0=20,wu=3,H_=5*z8,q_=yu,j_=5*yu,W_=5*z8,G_=30*yu,z_=180*yu,X8=`${rs}-kad-dht`;var Vf;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.key!=null&&t.key.byteLength>0&&(n.uint32(10),n.bytes(t.key)),t.value!=null&&t.value.byteLength>0&&(n.uint32(18),n.bytes(t.value)),t.timeReceived!=null&&t.timeReceived!==""&&(n.uint32(42),n.string(t.timeReceived)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={key:ke(0),value:ke(0),timeReceived:""},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.key=t.bytes();break}case 2:{i.value=t.bytes();break}case 5:{i.timeReceived=t.string();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(Vf||(Vf={}));function X_(r){let e=r.getUTCFullYear(),t=String(r.getUTCMonth()+1).padStart(2,"0"),n=String(r.getUTCDate()).padStart(2,"0"),o=String(r.getUTCHours()).padStart(2,"0"),i=String(r.getUTCMinutes()).padStart(2,"0"),s=String(r.getUTCSeconds()).padStart(2,"0"),a=r.getUTCMilliseconds(),c=String(a*1e3*1e3).padStart(9,"0");return`${e}-${t}-${n}T${o}:${i}:${s}.${c}Z`}function Y_(r){let e=new RegExp("(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})\\.(\\d+)Z"),t=String(r).trim().match(e);if(t==null)throw new Error("Invalid format");let n=parseInt(t[1],10),o=parseInt(t[2],10)-1,i=parseInt(t[3],10),s=parseInt(t[4],10),a=parseInt(t[5],10),c=parseInt(t[6],10),l=parseInt(t[7].slice(0,-6),10);return new Date(Date.UTC(n,o,i,s,a,c,l))}var mr=class r{key;value;timeReceived;constructor(e,t,n){if(!(e instanceof Uint8Array))throw new Error("key must be a Uint8Array");if(!(t instanceof Uint8Array))throw new Error("value must be a Uint8Array");this.key=e,this.value=t,this.timeReceived=n}serialize(){return Vf.encode(this.prepareSerialize())}prepareSerialize(){return{key:this.key,value:this.value,timeReceived:X_(this.timeReceived)}}static deserialize(e){let t=Vf.decode(e);return new r(t.key,t.value,new Date(t.timeReceived))}static fromDeserialized(e){let t=Y_(e.timeReceived);if(e.key==null)throw new Error("key missing from deserialized object");if(e.value==null)throw new Error("value missing from deserialized object");return new r(e.key,e.value,t)}};var Bs=class extends Error{constructor(e="Query error"){super(e),this.name="QueryError"}},J0=class extends Error{constructor(e="Query aborted"){super(e),this.name="QueryAbortedError"}},e2=class extends Error{constructor(e="Invalid record"){super(e),this.name="InvalidRecordError"}},t2=class extends Error{constructor(e="No selector function configured for prefix"){super(e),this.name="MissingSelectorError"}};var Q_;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.key!=null&&(n.uint32(10),n.bytes(t.key)),t.value!=null&&(n.uint32(18),n.bytes(t.value)),t.author!=null&&(n.uint32(26),n.bytes(t.author)),t.signature!=null&&(n.uint32(34),n.bytes(t.signature)),t.timeReceived!=null&&(n.uint32(42),n.string(t.timeReceived)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.key=t.bytes();break}case 2:{i.value=t.bytes();break}case 3:{i.author=t.bytes();break}case 4:{i.signature=t.bytes();break}case 5:{i.timeReceived=t.string();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(Q_||(Q_={}));var We;(function(r){r.PUT_VALUE="PUT_VALUE",r.GET_VALUE="GET_VALUE",r.ADD_PROVIDER="ADD_PROVIDER",r.GET_PROVIDERS="GET_PROVIDERS",r.FIND_NODE="FIND_NODE",r.PING="PING"})(We||(We={}));var r2;(function(r){r[r.PUT_VALUE=0]="PUT_VALUE",r[r.GET_VALUE=1]="GET_VALUE",r[r.ADD_PROVIDER=2]="ADD_PROVIDER",r[r.GET_PROVIDERS=3]="GET_PROVIDERS",r[r.FIND_NODE=4]="FIND_NODE",r[r.PING=5]="PING"})(r2||(r2={}));(function(r){r.codec=()=>Et(r2)})(We||(We={}));var xu;(function(r){r.NOT_CONNECTED="NOT_CONNECTED",r.CONNECTED="CONNECTED",r.CAN_CONNECT="CAN_CONNECT",r.CANNOT_CONNECT="CANNOT_CONNECT"})(xu||(xu={}));var Y8;(function(r){r[r.NOT_CONNECTED=0]="NOT_CONNECTED",r[r.CONNECTED=1]="CONNECTED",r[r.CAN_CONNECT=2]="CAN_CONNECT",r[r.CANNOT_CONNECT=3]="CANNOT_CONNECT"})(Y8||(Y8={}));(function(r){r.codec=()=>Et(Y8)})(xu||(xu={}));var bu;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.id!=null&&t.id.byteLength>0&&(n.uint32(10),n.bytes(t.id)),t.multiaddrs!=null)for(let i of t.multiaddrs)n.uint32(18),n.bytes(i);t.connection!=null&&(n.uint32(24),xu.codec().encode(t.connection,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={id:ke(0),multiaddrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.id=t.bytes();break}case 2:{if(o.limits?.multiaddrs!=null&&i.multiaddrs.length===o.limits.multiaddrs)throw new at('Decode error - map field "multiaddrs" had too many elements');i.multiaddrs.push(t.bytes());break}case 3:{i.connection=xu.codec().decode(t);break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(bu||(bu={}));var Ui;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.type!=null&&r2[t.type]!==0&&(n.uint32(8),We.codec().encode(t.type,n)),t.clusterLevel!=null&&(n.uint32(80),n.int32(t.clusterLevel)),t.key!=null&&(n.uint32(18),n.bytes(t.key)),t.record!=null&&(n.uint32(26),n.bytes(t.record)),t.closer!=null)for(let i of t.closer)n.uint32(66),bu.codec().encode(i,n);if(t.providers!=null)for(let i of t.providers)n.uint32(74),bu.codec().encode(i,n);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={type:We.PUT_VALUE,closer:[],providers:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.type=We.codec().decode(t);break}case 10:{i.clusterLevel=t.int32();break}case 2:{i.key=t.bytes();break}case 3:{i.record=t.bytes();break}case 8:{if(o.limits?.closer!=null&&i.closer.length===o.limits.closer)throw new at('Decode error - map field "closer" had too many elements');i.closer.push(bu.codec().decode(t,t.uint32(),{limits:o.limits?.closer$}));break}case 9:{if(o.limits?.providers!=null&&i.providers.length===o.limits.providers)throw new at('Decode error - map field "providers" had too many elements');i.providers.push(bu.codec().decode(t,t.uint32(),{limits:o.limits?.providers$}));break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(Ui||(Ui={}));function Q8(r,e={}){let t={...r,name:"SEND_QUERY",type:0,messageName:r.type,messageType:r.type};return e.onProgress?.(new CustomEvent("kad-dht:query:send-query",{detail:t})),t}function Hf(r,e={}){let t={...r,name:"PEER_RESPONSE",type:1,messageName:r.messageType,closer:r.closer??[],providers:r.providers??[]};return e.onProgress?.(new CustomEvent("kad-dht:query:peer-response",{detail:t})),t}function n2(r,e={}){let t={...r,name:"FINAL_PEER",type:2};return e.onProgress?.(new CustomEvent("kad-dht:query:final-peer",{detail:t})),t}function On(r,e={}){let t={...r,name:"QUERY_ERROR",type:3};return e.onProgress?.(new CustomEvent("kad-dht:query:query-error",{detail:t})),t}function Z8(r,e={}){let t={...r,name:"PROVIDER",type:4};return e.onProgress?.(new CustomEvent("kad-dht:query:provider",{detail:t})),t}function qf(r,e={}){let t={...r,name:"VALUE",type:5};return e.onProgress?.(new CustomEvent("kad-dht:query:value",{detail:t})),t}function J8(r,e={}){let t={...r,name:"DIAL_PEER",type:7};return e.onProgress?.(new CustomEvent("kad-dht:query:dial-peer",{detail:t})),t}function Z_(r,e,t){if(t.length===0)throw new D("No records given");let o=M(e).split("/");if(o.length<3)throw new D("Record key does not have a selector function");let i=r[o[1].toString()];if(i==null)throw new t2(`No selector function configured for key type "${o[1]}"`);return t.length===1?0:i(e,t)}function r$(r,e){return 0}var J_={pk:r$};async function vu(r,e){let t=e.key,o=M(t).split("/");if(o.length<3)return;let i=r[o[1].toString()];if(i==null)throw new D(`No validator available for key type "${o[1]}"`);await i(t,e.value)}var n$=async(r,e)=>{if(!(r instanceof Uint8Array))throw new D('"key" must be a Uint8Array');if(r.byteLength<5)throw new D("Invalid public key record");if(M(r.subarray(0,4))!=="/pk/")throw new D("key was not prefixed with /pk/");let n=$t(e),o=r.slice(4);if(!ge(o,n.toMultihash().bytes))throw new D("public key does not match passed in key")},eI={pk:n$};var o$=V("/pk/");function tI(r){return{...r,multiaddrs:r.multiaddrs.filter(e=>{let[[t,n]]=e.stringTuples();if(t===53||t===54||t===55)return n!=="localhost";if(t!==4&&t!==6||n==null)return!1;let o=Gr(n);return o==null?!0:!o})}}async function Ms(r){return(await yt.digest(r)).digest}async function gr(r){return Ms(r.toMultihash().bytes)}function Us(r,e){return new ct(`${r}/${M(e,"base32")}`,!1)}function rI(r){return st([o$,r.toMultihash().bytes])}function nI(r){return M(r.subarray(0,4))==="/pk/"}function oI(r){let e=Ye(r.subarray(4));return qt(e)}function e7(r,e){let t=new Date;return new mr(r,e,t).serialize()}var i$=290,s$=54,a$=55,c$=56,l$=4,u$=41;function iI(r){let e=r.stringTuples();for(let t of e)if(t[0]===i$)return!1;if(e[0][0]===s$||e[0][0]===a$||e[0][0]===c$)return!0;if(e[0][0]===l$||e[0][0]===u$){let t=Gr(`${e[0][1]}`);return t==null||!t}return!1}function o2(r){let e=r.toString().split("/"),t=e.pop(),n=e.pop();if(t==null||n==null)throw new Error(`incorrectly formatted provider entry key in datastore: ${r.toString()}`);return{cid:le.createV1(Ea,Ye(V(n,"base32"))),peerId:bt(t)}}function i2(r,e,t){let n=typeof e=="string"?e:M(e.multihash.bytes,"base32"),o=[r,n];return t!=null&&o.push(t.toString()),new ct(o.join("/"))}function s2(r){return new Date(nt(r))}function cc(r,e,t){return async function*(...n){let o=e.queryTime?.timer(t),i=e.errorTime?.timer(t),s=!1;try{e.queries?.increment({[t]:!0}),yield*r(...n)}catch(a){throw s=!0,i?.(),e.errors?.increment({[t]:!0}),a}finally{e.queries?.decrement({[t]:!0}),s||o?.()}}}function a2(r,e,t){return async function(...n){let o=e?.queryTime?.timer(t),i=e?.errorTime?.timer(t),s=!1;try{return e.queries?.increment({[t]:!0}),await r(...n)}catch(a){throw s=!0,i?.(),e.errors?.increment({[t]:!0}),a}finally{e.queries?.decrement({[t]:!0}),s||o?.()}}}var c2=class{log;components;validators;selectors;peerRouting;queryManager;network;datastorePrefix;constructor(e,t){let{validators:n,selectors:o,peerRouting:i,queryManager:s,network:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-fetching`),this.datastorePrefix=`${t.datastorePrefix}/record`,this.validators=n,this.selectors=o,this.peerRouting=i,this.queryManager=s,this.network=a,this.get=e.metrics?.traceFunction("libp2p.kadDHT.get",this.get.bind(this),{optionsIndex:1})??this.get,this.put=e.metrics?.traceFunction("libp2p.kadDHT.put",this.put.bind(this),{optionsIndex:2})??this.put}async getLocal(e){this.log("getLocal %b",e);let t=Us(this.datastorePrefix,e);this.log("fetching record for key %k",t);let n=await this.components.datastore.get(t);this.log("found %k in local datastore",t);let o=mr.deserialize(n);return await vu(this.validators,o),o}async*sendCorrectionRecord(e,t,n,o={}){this.log("sendCorrection for %b",e);let i=e7(e,n);for(let{value:s,from:a}of t){if(ge(s,n)){this.log("record was ok");continue}if(this.components.peerId.equals(a)){try{let u=Us(this.datastorePrefix,e);this.log(`Storing corrected record for key ${u.toString()}`),await this.components.datastore.put(u,i.subarray())}catch(u){this.log.error("Failed error correcting self",u)}continue}let c=!1,l={type:We.PUT_VALUE,key:e,record:i};for await(let u of this.network.sendRequest(a,l,o))u.name==="PEER_RESPONSE"&&u.record!=null&&ge(u.record.value,mr.deserialize(i).value)&&(c=!0),yield u;c||(yield On({from:a,error:new Bs("Value not put correctly")},o)),this.log.error("Failed error correcting entry")}}async*put(e,t,n={}){this.log("put key %b value %b",e,t);let o=e7(e,t),i=Us(this.datastorePrefix,e);this.log(`storing record for key ${i.toString()}`),await this.components.datastore.put(i,o.subarray()),yield*rr(this.peerRouting.getClosestPeers(e,{...n,signal:n.signal}),s=>Jr(s,a=>async()=>{if(a.name!=="FINAL_PEER")return[a];let c=[],l={type:We.PUT_VALUE,key:e,record:o};this.log("send put to %p",a.peer.id);for await(let u of this.network.sendRequest(a.peer.id,l,n))c.push(u),u.name==="PEER_RESPONSE"&&(u.record!=null&&ge(u.record.value,mr.deserialize(o).value)||c.push(On({from:a.peer.id,error:new Bs("Value not put correctly")},n)));return c}),s=>Bo(s,{ordered:!1,concurrency:wu}),async function*(s){for await(let a of s)yield*a})}async*get(e,t={}){this.log("get %b",e);let n=[];for await(let a of this.getMany(e,t))a.name==="VALUE"&&n.push(a),yield a;if(n.length===0)return;let o=n.map(a=>a.value),i=0;try{i=Z_(this.selectors,e,o)}catch(a){if(a.name!=="InvalidParametersError")throw a}let s=o[i];if(this.log("GetValue %b %b",e,s),s==null)throw new ze("Best value was not found");yield*this.sendCorrectionRecord(e,n,s,t),yield n[i]}async*getMany(e,t={}){this.log("getMany values for %b",e);try{let i=await this.getLocal(e);yield qf({value:i.value,from:this.components.peerId},t)}catch(i){this.log("error getting local value for %b",e,i)}let n=this,o=async function*({peer:i,signal:s}){for await(let a of n.peerRouting.getValueOrPeers(i,e,{...t,signal:s}))yield a,a.name==="PEER_RESPONSE"&&a.record!=null&&(yield qf({from:i,value:a.record.value},t))};yield*this.queryManager.run(e,o,t)}};function sI(r,e){return{id:r.id.toMultihash().bytes,multiaddrs:(r.multiaddrs??[]).map(n=>n.bytes),connection:e}}function jf(r){if(r.id==null)throw new Error("Invalid peer in message");let e=Ye(r.id);return{id:qt(e),multiaddrs:(r.multiaddrs??[]).map(t=>oe(t))}}var l2=class{log;components;network;peerRouting;queryManager;routingTable;providers;constructor(e,t){let{network:n,peerRouting:o,queryManager:i,routingTable:s,providers:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-routing`),this.network=n,this.peerRouting=o,this.queryManager=i,this.routingTable=s,this.providers=a,this.findProviders=e.metrics?.traceFunction("libp2p.kadDHT.findProviders",this.findProviders.bind(this),{optionsIndex:1,getAttributesFromYieldedValue:(l,u)=>(l.name==="PROVIDER"&&(u.providers??=[],u.providers.push(...l.providers.map(d=>d.id.toString()))),u)})??this.findProviders,this.provide=e.metrics?.traceFunction("libp2p.kadDHT.provide",this.provide.bind(this),{optionsIndex:1,getAttributesFromYieldedValue:(l,u)=>(l.name==="PEER_RESPONSE"&&l.messageName==="ADD_PROVIDER"&&(u.providers??=[],u.providers.push(l.from.toString())),u)})??this.provide}async*provide(e,t,n={}){this.log("provide %s",e);let o=e.multihash.bytes;await this.providers.addProvider(e,this.components.peerId);let i={type:We.ADD_PROVIDER,key:o,providers:[sI({id:this.components.peerId,multiaddrs:t})]},s=0,a=c=>async()=>{if(c.name!=="FINAL_PEER")return[c];let l=[];this.log("putProvider %s to %p",e,c.peer.id);try{this.log("sending provider record for %s to %p",e,c.peer.id);for await(let u of this.network.sendMessage(c.peer.id,i,n))u.name==="PEER_RESPONSE"&&(this.log("sent provider record for %s to %p",e,c.peer.id),s++),l.push(u)}catch(u){this.log.error("error sending provide record to peer %p",c.peer.id,u),l.push(On({from:c.peer.id,error:u},n))}return l};yield*rr(this.peerRouting.getClosestPeers(o,n),c=>Jr(c,l=>a(l)),c=>Bo(c,{ordered:!1,concurrency:wu}),async function*(c){for await(let l of c)yield*l}),this.log("sent provider records to %d peers",s)}async*findProviders(e,t){let n=this.routingTable.kBucketSize,o=0,i=e.multihash.bytes,s=this;this.log("findProviders %c",e);let a=await this.providers.getProviders(e);if(a.length>0){let u=[];for(let d of a.slice(0,n))try{let h=await this.components.peerStore.get(d);u.push({id:d,multiaddrs:h.addresses.map(({multiaddr:m})=>m)})}catch(h){if(h.name!=="NotFoundError")throw h;this.log("no peer store entry for %p",d)}if(yield Hf({from:this.components.peerId,messageType:We.GET_PROVIDERS,providers:u},t),yield Z8({from:this.components.peerId,providers:u},t),o+=u.length,o>=n)return}let c=async function*({peer:u,signal:d}){let h={type:We.GET_PROVIDERS,key:i};yield*s.network.sendRequest(u,h,{...t,signal:d})},l=new jr(a);for await(let u of this.queryManager.run(i,c,t))if(yield u,u.name==="PEER_RESPONSE"){this.log("Found %d provider entries for %c and %d closer peers",u.providers.length,e,u.closer.length);let d=[];for(let h of u.providers)l.has(h.id)||(l.add(h.id),d.push(h));if(d.length>0&&(yield Z8({from:u.from,providers:d},t),o+=d.length,o>=n))return}}};var Eu=class{movingAverage;variance;deviation;forecast;timeSpan;previousTime;constructor(e){this.timeSpan=e,this.movingAverage=0,this.variance=0,this.deviation=0,this.forecast=0}alpha(e,t){return 1-Math.exp(-(e-t)/this.timeSpan)}push(e,t=Date.now()){if(this.previousTime!=null){let n=this.alpha(t,this.previousTime),o=e-this.movingAverage,i=n*o;this.movingAverage=n*e+(1-n)*this.movingAverage,this.variance=(1-n)*(this.variance+o*i),this.deviation=Math.sqrt(this.variance),this.forecast=this.movingAverage+n*o}else this.movingAverage=e;this.previousTime=t}};var f$=1.2,h$=2,p$=2e3,Mo=class{success;failure;next;metric;timeoutMultiplier;failureMultiplier;minTimeout;constructor(e={}){this.success=new Eu(e.interval??5e3),this.failure=new Eu(e.interval??5e3),this.next=new Eu(e.interval??5e3),this.failureMultiplier=e.failureMultiplier??h$,this.timeoutMultiplier=e.timeoutMultiplier??f$,this.minTimeout=e.minTimeout??p$,e.metricName!=null&&(this.metric=e.metrics?.registerMetricGroup(e.metricName))}getTimeoutSignal(e={}){let t=Math.max(Math.round(this.next.movingAverage*(e.timeoutFactor??this.timeoutMultiplier)),this.minTimeout),n=AbortSignal.timeout(t),o=Ne([e.signal,n]);return o.start=Date.now(),o.timeout=t,o}cleanUp(e){let t=Date.now()-e.start;e.aborted?(this.failure.push(t),this.next.push(t*this.failureMultiplier),this.metric?.update({failureMovingAverage:this.failure.movingAverage,failureDeviation:this.failure.deviation,failureForecast:this.failure.forecast,failureVariance:this.failure.variance,failure:t})):(this.success.push(t),this.next.push(t),this.metric?.update({successMovingAverage:this.success.movingAverage,successDeviation:this.success.deviation,successForecast:this.success.forecast,successVariance:this.success.variance,success:t}))}};var t7=class{readNext;haveNext;ended;nextResult;constructor(){this.ended=!1,this.readNext=de(),this.haveNext=de()}[Symbol.asyncIterator](){return this}async next(){if(this.nextResult==null&&await this.haveNext.promise,this.nextResult==null)throw new Error("HaveNext promise resolved but nextResult was undefined");let e=this.nextResult;return this.nextResult=void 0,this.readNext.resolve(),this.readNext=de(),e}async throw(e){return this.ended=!0,e!=null&&(this.haveNext.promise.catch(()=>{}),this.haveNext.reject(e)),{done:!0,value:void 0}}async return(){let e={done:!0,value:void 0};return this.ended=!0,this.nextResult=e,this.haveNext.resolve(),e}async push(e,t){await this._push(e,t)}async end(e,t){e!=null?await this.throw(e):await this._push(void 0,t)}async _push(e,t){if(e!=null&&this.ended)throw new Error("Cannot push value onto an ended pushable");for(;this.nextResult!=null;)await this.readNext.promise;e!=null?this.nextResult={done:!1,value:e}:(this.ended=!0,this.nextResult={done:!0,value:void 0}),this.haveNext.resolve(),this.haveNext=de(),await dt(this.readNext.promise,t?.signal,t)}};function aI(){return new t7}var u2=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};var r7=class extends Error{code;constructor(e,t){super(e),this.code=t}},n7=class extends r7{type;constructor(e){super(e,"ABORT_ERR"),this.type="aborted",this.name="AbortError"}};function cI(r,e){let t=aI();r.sink(t).catch(async s=>{await t.end(s)}),r.sink=async s=>{for await(let a of s)await t.push(a);await t.end()};let n=r.source;r.source[Symbol.iterator]!=null?n=r.source[Symbol.iterator]():r.source[Symbol.asyncIterator]!=null&&(n=r.source[Symbol.asyncIterator]());let o=new J;return{read:async(s,a)=>{a?.signal?.throwIfAborted();let c,l=new Promise((u,d)=>{c=()=>{d(new n7("Read aborted"))},a?.signal?.addEventListener("abort",c)});try{if(s==null){let{done:d,value:h}=await Promise.race([n.next(),l]);return d===!0?new J:h}for(;o.byteLength<s;){let{value:d,done:h}=await Promise.race([n.next(),l]);if(h===!0)throw new u2("unexpected end of input");o.append(d)}let u=o.sublist(0,s);return o.consume(s),u}finally{c!=null&&a?.signal?.removeEventListener("abort",c)}},write:async(s,a)=>{a?.signal?.throwIfAborted(),s instanceof Uint8Array?await t.push(s,a):await t.push(s.subarray(),a)},unwrap:()=>{if(o.byteLength>0){let s=r.source;r.source=async function*(){e?.yieldBytes===!1?yield o:yield*o,yield*s}()}return r}}}var d2=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},f2=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},h2=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function lI(r,e={}){let t=cI(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=Ce(e.maxDataLength));let n=e?.lengthDecoder??nt,o=e?.lengthEncoder??Fe;return{read:async s=>{let a=-1,c=new J;for(;;){c.append(await t.read(1,s));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(a<0)throw new d2("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new h2("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new f2("message length too long");return t.read(a,s)},write:async(s,a)=>{await t.write(new J(o(s.byteLength),s),a)},writeV:async(s,a)=>{let c=new J(...s.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function o7(r,e){let t=lI(r,e),n={read:async(o,i)=>{let s=await t.read(i);return o.decode(s)},write:async(o,i,s)=>{await t.write(i.encode(o),s)},writeV:async(o,i,s)=>{await t.writeV(o.map(a=>i.encode(a)),s)},pb:o=>({read:async i=>n.read(o,i),write:async(i,s)=>n.write(i,o,s),writeV:async(i,s)=>n.writeV(i,o,s),unwrap:()=>n}),unwrap:()=>t.unwrap()};return n}var p2=class extends Le{log;protocol;running;components;timeout;metrics;constructor(e,t){super(),this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:network`),this.running=!1,this.protocol=t.protocol,this.timeout=new Mo({...t.timeout??{},metrics:e.metrics,metricName:`${t.metricsPrefix}_network_message_send_times_milliseconds`}),this.metrics={operations:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_outbound_rpc_requests_total`),errors:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_outbound_rpc_errors_total`)},this.sendRequest=e.metrics?.traceFunction("libp2p.kadDHT.sendRequest",this.sendRequest.bind(this),{optionsIndex:2,getAttributesFromArgs([n,o],i){return{...i,to:n.toString(),"message type":`${o.type}`}},getAttributesFromYieldedValue:(n,o)=>(n.name==="PEER_RESPONSE"&&(n.providers.length>0&&n.providers.forEach((i,s)=>{o[`providers-${s}`]=i.id.toString()}),n.closer.length>0&&n.closer.forEach((i,s)=>{o[`closer-${s}`]=i.id.toString()})),o)})??this.sendRequest,this.sendMessage=e.metrics?.traceFunction("libp2p.kadDHT.sendMessage",this.sendMessage.bind(this),{optionsIndex:2,getAttributesFromArgs([n,o],i){return{...i,to:n.toString(),"message type":`${o.type}`}},getAttributesFromYieldedValue:(n,o)=>(n.name==="PEER_RESPONSE"&&(n.providers.length>0&&n.providers.forEach((i,s)=>{o[`providers-${s}`]=i.id.toString()}),n.closer.length>0&&n.closer.forEach((i,s)=>{o[`closer-${s}`]=i.id.toString()})),o)})??this.sendMessage}async start(){this.running||(this.running=!0)}async stop(){this.running=!1}isStarted(){return this.running}async*sendRequest(e,t,n={}){if(!this.running)return;let o=t.type;if(o==null)throw new D("Message type was missing");this.log("sending %s to %p",t.type,e),yield J8({peer:e},n),yield Q8({to:e,type:o},n);let i,s=this.timeout.getTimeoutSignal(n);n={...n,signal:s};try{this.metrics.operations?.increment({[o]:!0}),i=await(await this.components.connectionManager.openConnection(e,n)).newStream(this.protocol,n);let c=await this._writeReadMessage(i,t,n);i.close(n).catch(l=>{this.log.error("error closing stream to %p",e,l),i?.abort(l)}),yield Hf({from:e,messageType:c.type,closer:c.closer.map(jf),providers:c.providers.map(jf),record:c.record==null?void 0:mr.deserialize(c.record)},n)}catch(a){this.metrics.errors?.increment({[o]:!0}),i?.abort(a),n.signal?.aborted!==!0&&this.log.error("could not send %s to %p - %e",t.type,e,a),yield On({from:e,error:a},n)}finally{this.timeout.cleanUp(s)}}async*sendMessage(e,t,n={}){if(!this.running)return;let o=t.type;if(o==null)throw new D("Message type was missing");this.log("sending %s to %p",t.type,e),yield J8({peer:e},n),yield Q8({to:e,type:o},n);let i,s=this.timeout.getTimeoutSignal(n);n={...n,signal:s};try{this.metrics.operations?.increment({[o]:!0}),i=await(await this.components.connectionManager.openConnection(e,n)).newStream(this.protocol,n),await this._writeMessage(i,t,n),i.close(n).catch(c=>{this.log.error("error closing stream to %p",e,c),i?.abort(c)}),yield Hf({from:e,messageType:o},n)}catch(a){this.metrics.errors?.increment({[o]:!0}),i?.abort(a),yield On({from:e,error:a},n)}finally{this.timeout.cleanUp(s)}}async _writeMessage(e,t,n){await o7(e).write(t,Ui,n)}async _writeReadMessage(e,t,n){let o=o7(e);await o.write(t,Ui,n);let i=await o.read(Ui,n);return i.closer.forEach(s=>{this.safeDispatchEvent("peer",{detail:jf(s)})}),i.providers.forEach(s=>{this.safeDispatchEvent("peer",{detail:jf(s)})}),i}};function Fs(r,e){if(r.byteLength!==e.byteLength)throw new Error("Inputs should have the same length");for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return r[t]<e[t]?-1:1;return 0}var $s=class{originDhtKey;capacity;peerDistances;constructor(e,t){this.originDhtKey=e,this.capacity=t,this.peerDistances=[]}get length(){return this.peerDistances.length}get peers(){return this.peerDistances.map(e=>e.peer)}async add(e){let t=await gr(e.id);this.addWithKadId(e,t)}addWithKadId(e,t){if(this.peerDistances.find(i=>i.peer.id.equals(e.id))!=null)return;let n={peer:e,distance:sn(this.originDhtKey,t)},o=!1;for(let i=0;i<this.peerDistances.length;i++){let s=Fs(this.peerDistances[i].distance,n.distance);if(s===0||s===1){o=!0,this.peerDistances.splice(i,0,n);break}}o||this.peerDistances.push(n),this.peerDistances=this.peerDistances.slice(0,this.capacity)}async isCloser(e){if(this.length===0)return!0;let t=await gr(e),n=sn(t,this.originDhtKey),o=this.peerDistances[this.peerDistances.length-1].distance;return Fs(n,o)===-1}async anyCloser(e){return e.length===0?!1:Promise.any(e.map(async t=>this.isCloser(t)))}};var m2=class{log;routingTable;network;validators;queryManager;peerStore;peerId;constructor(e,t){this.routingTable=t.routingTable,this.network=t.network,this.validators=t.validators,this.queryManager=t.queryManager,this.peerStore=e.peerStore,this.peerId=e.peerId,this.log=e.logger.forComponent(`${t.logPrefix}:peer-routing`),this.findPeer=e.metrics?.traceFunction("libp2p.kadDHT.findPeer",this.findPeer.bind(this),{optionsIndex:1})??this.findPeer,this.getClosestPeers=e.metrics?.traceFunction("libp2p.kadDHT.getClosestPeers",this.getClosestPeers.bind(this),{optionsIndex:1})??this.getClosestPeers}async findPeerLocal(e){let t,n=await this.routingTable.find(e);if(n!=null){this.log("findPeerLocal found %p in routing table",e);try{t=await this.peerStore.get(n)}catch(o){if(o.name!=="NotFoundError")throw o}}if(t==null)try{t=await this.peerStore.get(e)}catch(o){if(o.name!=="NotFoundError")throw o}if(t!=null)return this.log("findPeerLocal found %p in peer store",e),{id:t.id,multiaddrs:t.addresses.map(o=>o.multiaddr)}}async*_getValueSingle(e,t,n={}){let o={type:We.GET_VALUE,key:t};yield*this.network.sendRequest(e,o,n)}async*getPublicKeyFromNode(e,t={}){let n=rI(e);for await(let o of this._getValueSingle(e,n,t))if(yield o,o.name==="PEER_RESPONSE"&&o.record!=null){let i=$t(o.record.value),s=ei(i);if(!s.equals(e))throw new xi("public key does not match id");if(s.publicKey==null)throw new xi("public key missing");yield qf({from:e,value:o.record.value},t)}throw new Bs(`Node not responding with its public key: ${e.toString()}`)}async*findPeer(e,t={}){if(this.log("findPeer %p",e),t.useCache!==!1){let o=await this.findPeerLocal(e);if(o!=null){this.log("found local"),yield n2({from:this.peerId,peer:o},t);return}}let n=!1;if(t.useNetwork!==!1){let o=this,i=async function*({peer:s,signal:a}){let c={type:We.FIND_NODE,key:e.toMultihash().bytes};for await(let l of o.network.sendRequest(s,c,{...t,signal:a}))if(yield l,l.name==="PEER_RESPONSE"){let u=l.closer.find(d=>d.id.equals(e));u!=null&&(yield n2({from:l.from,peer:u},t))}};for await(let s of this.queryManager.run(e.toMultihash().bytes,i,t))s.name==="FINAL_PEER"&&(n=!0),yield s}n||(yield On({from:this.peerId,error:new ze("Not found")},t))}async*getClosestPeers(e,t={}){this.log("getClosestPeers to %b",e);let n=await Ms(e),o=this.routingTable.closestPeers(n),i=this,s=new $s(n,this.routingTable.kBucketSize);await Promise.all(o.map(async c=>{await s.add({id:c,multiaddrs:[]})}));let a=async function*({peer:c,signal:l}){i.log("closerPeersSingle %s from %p",M(e,"base32"),c);let u={type:We.FIND_NODE,key:e};yield*i.network.sendRequest(c,u,{...t,signal:l})};for await(let c of this.queryManager.run(e,a,t))c.name==="PEER_RESPONSE"&&await Promise.all(c.closer.map(async l=>{await s.add(l)})),yield c;this.log("found %d peers close to %b",s.length,e);for(let c of s.peers)yield n2({from:this.peerId,peer:c},t)}async*getValueOrPeers(e,t,n={}){for await(let o of this._getValueSingle(e,t,n)){if(o.name==="PEER_RESPONSE"&&o.record!=null)try{await this._verifyRecordOnline(o.record)}catch{let s="invalid record received, discarded";this.log(s),yield On({from:o.from,error:new Bs(s)},n);continue}yield o}}async _verifyRecordOnline(e){if(e.timeReceived==null)throw new e2("invalid record received");await vu(this.validators,new mr(e.key,e.value,e.timeReceived))}async getCloserPeersOffline(e,t){let n=[];try{let c=Ye(e),l=qt(c),u=await this.peerStore.get(l);n.push({id:u.id,multiaddrs:u.addresses.map(({multiaddr:d})=>d)})}catch{}let o=await Ms(e),i=this.routingTable.closestPeers(o),s=await gr(t),a=sn(s,o);for(let c of i){let l=await gr(c),u=sn(l,o);if(Fs(u,a)===-1)try{let d=await this.peerStore.get(c);n.push({id:c,multiaddrs:d.addresses.map(({multiaddr:h})=>h)})}catch(d){if(d.name!=="NotFoundError")throw d}}return n.length>0?this.log("getCloserPeersOffline found %d peer(s) closer to %b than %p",n.length,e,t):this.log("getCloserPeersOffline could not find peer closer to %b than %p with %d peers in the routing table",e,t,this.routingTable.size),n}};var g2=class{log;datastore;datastorePrefix;lock;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:providers`),this.datastorePrefix=`${t.datastorePrefix}/provider`,this.datastore=e.datastore,this.lock=t.lock}async addProvider(e,t){let n=await this.lock.readLock();try{this.log("%p provides %s",t,e),await this.writeProviderEntry(e,t)}finally{n()}}async removeProvider(e,t){let n=await this.lock.writeLock();try{let o=i2(this.datastorePrefix,e,t);this.log("%p no longer provides %s",t,e),await this.datastore.delete(o)}finally{n()}}async getProviders(e){let t=await this.lock.readLock();try{this.log("get providers for %c",e);let n=await this.loadProviders(e);return this.log("got %d providers for %c",n.size,e),[...n.keys()]}finally{t()}}async writeProviderEntry(e,t,n=new Date){let o=i2(this.datastorePrefix,e,t),i=Fe(n.getTime());await this.datastore.put(o,i)}async loadProviders(e){let t=new ir,n=i2(this.datastorePrefix,e);for await(let o of this.datastore.query({prefix:n.toString()})){let{peerId:i}=o2(o.key);t.set(i,s2(o.value))}return t}};async function*uI(r){let{key:e,startingPeer:t,ourPeerId:n,signal:o,query:i,alpha:s,pathIndex:a,numPaths:c,queryFuncTimeout:l,log:u,peersSeen:d,connectionManager:h}=r,m=new $r({concurrency:s,sort:(y,x)=>Fs(y.options.distance,x.options.distance)}),g=await Ms(e);function w(y,x){if(y==null)return;d.add(y);let S=sn(x,g);m.add(async()=>{let v=[o];l!=null&&v.push(AbortSignal.timeout(l));let N=Ne(v);try{for await(let W of i({...r,key:e,peer:y,signal:N,pathIndex:a,numPaths:c})){if(N.aborted)return;if(W.name==="PEER_RESPONSE")for(let H of W.closer){if(d.has(H.id)){u.trace("already seen %p in query",H.id);continue}if(n.equals(H.id)){u("not querying ourselves");continue}if(!await h.isDialable(H.multiaddrs)){u("not querying undialable peer");continue}let $=await gr(H.id),P=sn($,g);if(Fs(P,S)!==-1){u.trace("skipping %p as they are not closer to %b than %p",H.id,e,y);continue}u.trace("querying closer peer %p",H.id),w(H.id,$)}m.safeDispatchEvent("completed",{detail:W})}}catch(W){if(!o.aborted)return On({from:y,error:W},r)}finally{N.clear()}},{distance:S}).catch(v=>{u.error(v)})}w(t,await gr(t));try{for await(let y of m.toGenerator({signal:o}))y!=null&&(yield y)}catch(y){throw o.aborted?new J0("Query aborted"):y}}var y2=class{disjointPaths;alpha;shutDownController;running;logger;peerId;connectionManager;routingTable;initialQuerySelfHasRun;logPrefix;constructor(e,t){this.logPrefix=t.logPrefix,this.disjointPaths=t.disjointPaths??Z0,this.alpha=t.alpha??wu,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.routingTable=t.routingTable,this.logger=e.logger,this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.shutDownController=new AbortController,this.shutDownController.signal,this.running=!1}isStarted(){return this.running}async start(){this.running||(this.running=!0,this.shutDownController=new AbortController,this.shutDownController.signal,void 0)}async stop(){this.running=!1,this.shutDownController.abort()}async*run(e,t,n={}){if(!this.running)throw new Error("QueryManager not started");if(n.signal==null){let c=AbortSignal.timeout(z_);n={...n,signal:c}}let o=new AbortController,i=Ne([this.shutDownController.signal,o.signal,n.signal]);o.signal;let s=this.logger.forComponent(`${this.logPrefix}:query:`+M(e,"base58btc")),a=!1;try{n.isSelfQuery!==!0&&this.initialQuerySelfHasRun!=null&&(s("waiting for initial query-self query before continuing"),await dt(this.initialQuerySelfHasRun.promise,i),this.initialQuerySelfHasRun=void 0),s("query:start");let c=await Ms(e),l=this.routingTable.closestPeers(c),u=l.slice(0,Math.min(this.disjointPaths,l.length));if(l.length===0){s.error("Running query with no peers");return}let d=new jr,h=u.map((m,g)=>uI({...n,key:e,startingPeer:m,ourPeerId:this.peerId,signal:i,query:t,pathIndex:g,numPaths:u.length,alpha:this.alpha,queryFuncTimeout:n.queryFuncTimeout,log:s,peersSeen:d,onProgress:n.onProgress,connectionManager:this.connectionManager}));for await(let m of Kr(...h)){if(m.name==="QUERY_ERROR"&&s.error("query error",m.error),m.name==="PEER_RESPONSE")for(let g of[...m.closer,...m.providers])await this.connectionManager.isDialable(g.multiaddrs)&&await this.routingTable.add(g.id);yield m}a=!0}catch(c){if(!(!this.running&&c.name==="QueryAbortedError"))throw c}finally{a||(s("query exited early"),o.abort()),i.clear(),s("query:done")}}};function m$(r){return r[Symbol.asyncIterator]!=null}function g$(r){if(m$(r))return(async()=>{let e=0;for await(let t of r)e++;return e})();{let e=0;for(let t of r)e++;return e}}var w2=g$;var y$=r=>{let e=r.addEventListener||r.on||r.addListener,t=r.removeEventListener||r.off||r.removeListener;if(!e||!t)throw new TypeError("Emitter is not compatible");return{addListener:e.bind(r),removeListener:t.bind(r)}};function w$(r,e,t){let n,o=new Promise((i,s)=>{if(t={rejectionEvents:["error"],multiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:u}=y$(r),d=(...m)=>{let g=t.multiArgs?m:m[0];t.filter&&!t.filter(g)||(c.push(g),t.count===c.length&&(n(),i(c)))},h=m=>{n(),s(m)};n=()=>{for(let m of a)u(m,d);for(let m of t.rejectionEvents)u(m,h)};for(let m of a)l(m,d);for(let m of t.rejectionEvents)l(m,h);t.signal&&t.signal.addEventListener("abort",()=>{h(t.signal.reason)},{once:!0}),t.resolveImmediately&&i(c)});if(o.cancel=n,typeof t.timeout=="number"){let i=Ao(o,{milliseconds:t.timeout});return i.cancel=n,i}return o}function dI(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=w$(r,e,t),o=n.then(i=>i[0]);return o.cancel=n.cancel,o}var b2=class{log;peerId;peerRouting;routingTable;count;interval;initialInterval;queryTimeout;running;timeoutId;controller;initialQuerySelfHasRun;querySelfPromise;constructor(e,t){this.peerId=e.peerId,this.log=e.logger.forComponent(`${t.logPrefix}:query-self`),this.running=!1,this.peerRouting=t.peerRouting,this.routingTable=t.routingTable,this.count=t.count??Z0,this.interval=t.interval??H_,this.initialInterval=t.initialInterval??q_,this.queryTimeout=t.queryTimeout??j_,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.querySelf=a2(this.querySelf.bind(this),t.operationMetrics,"SELF_QUERY")}isStarted(){return this.running}start(){this.running||(this.running=!0,clearTimeout(this.timeoutId),this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query",e)})},this.initialInterval))}stop(){this.running=!1,this.timeoutId!=null&&clearTimeout(this.timeoutId),this.controller!=null&&this.controller.abort()}async querySelf(){if(!this.running){this.log("skip self-query because we are not started");return}if(this.querySelfPromise!=null)return this.log("joining existing self query"),this.querySelfPromise.promise;if(this.querySelfPromise=de(),this.running){this.controller=new AbortController;let e=[this.controller.signal];if(this.initialQuerySelfHasRun==null){let n=AbortSignal.timeout(this.queryTimeout);e.push(n)}let t=Ne(e);this.controller.signal;try{this.routingTable.size===0&&(this.log("routing table was empty, waiting for some peers before running query"),await dI(this.routingTable,"peer:add",{signal:t,filter:i=>!this.peerId.equals(i.detail)}),this.log("routing table has peers, continuing with query")),this.log("run self-query, look for %d peers timing out after %dms",this.count,this.queryTimeout);let n=Date.now(),o=await rr(this.peerRouting.getClosestPeers(this.peerId.toMultihash().bytes,{signal:t,isSelfQuery:!0}),i=>as(i,this.count),async i=>w2(i));this.log("self-query found %d peers in %dms",o,Date.now()-n)}catch(n){this.log.error("self-query error",n)}finally{t.clear(),this.initialQuerySelfHasRun!=null&&(this.initialQuerySelfHasRun.resolve(),this.initialQuerySelfHasRun=void 0)}}this.querySelfPromise.resolve(),this.querySelfPromise=void 0,this.running&&(this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query",e)})},this.interval))}};var x2=class extends Le{log;reprovideQueue;maxQueueSize;datastore;timeout;reprovideTimeout;running;shutdownController;reprovideThreshold;contentRouting;datastorePrefix;addressManager;validity;interval;lock;peerId;constructor(e,t){super(),this.log=e.logger.forComponent(`${t.logPrefix}:reprovider`),this.peerId=e.peerId,this.reprovideQueue=new $r({concurrency:t.concurrency??$_,metrics:e.metrics,metricName:`${t.metricsPrefix}_reprovide_queue`}),this.reprovideTimeout=new Mo({...t.timeout??{},metrics:e.metrics,metricName:`${t.metricsPrefix}_reprovide_timeout_milliseconds`}),this.datastore=e.datastore,this.addressManager=e.addressManager,this.datastorePrefix=`${t.datastorePrefix}/provider`,this.reprovideThreshold=t.threshold??F_,this.maxQueueSize=t.maxQueueSize??K_,this.validity=t.validity??U_,this.interval=t.interval??V_,this.contentRouting=t.contentRouting,this.lock=t.lock,this.running=!1,this.reprovide=a2(this.reprovide.bind(this),t.operationMetrics,"PROVIDE")}start(){this.running||(this.running=!0,this.shutdownController=new AbortController,this.shutdownController.signal,this.timeout=setTimeout(()=>{this.cleanUp().catch(e=>{this.log.error("error running reprovide/cleanup - %e",e)})},this.interval))}stop(){this.running=!1,this.reprovideQueue.clear(),clearTimeout(this.timeout),this.shutdownController?.abort()}async cleanUp(){let e=await this.lock.writeLock();try{this.safeDispatchEvent("reprovide:start");for await(let t of this.datastore.query({prefix:this.datastorePrefix}))try{let{cid:n,peerId:o}=o2(t.key),i=s2(t.value).getTime(),s=i+this.validity,a=Date.now(),c=a>s;this.log.trace("comparing: %d < %d = %s %s",i,a-this.validity,c,c?"(expired)":""),c&&await this.datastore.delete(t.key),this.peerId.equals(o)&&a-s<this.reprovideThreshold&&this.queueReprovide(n).catch(l=>{this.log.error("could not reprovide %c - %e",n,l)})}catch(n){this.log.error("error processing datastore key %s - %e",t.key,n.message)}this.log("reprovide/cleanup successful")}finally{e(),this.safeDispatchEvent("reprovide:end"),this.running&&(this.timeout=setTimeout(()=>{this.cleanUp().catch(t=>{this.log.error("error running re-provide - %e",t)})},this.interval))}}async queueReprovide(e){if(!this.running)return;this.log.trace("waiting for queue capacity before adding %c to re-provide queue",e),await this.reprovideQueue.onSizeLessThan(this.maxQueueSize);let t=this.reprovideQueue.queue.find(n=>n.options.cid.equals(e));if(t!=null)return this.log.trace("not adding %c to re-provide queue - already in queue",e),t.join();this.log.trace("adding %c to re-provide queue",e),this.reprovideQueue.add(async n=>{if(n.signal?.throwIfAborted(),!this.running)return;this.log.trace("re-providing %c",e);let o=this.reprovideTimeout.getTimeoutSignal(n);try{await this.reprovide(n.cid,n)}finally{this.reprovideTimeout.cleanUp(o)}this.log.trace("re-provided %c",e)},{signal:this.shutdownController?.signal,cid:e}).catch(n=>{this.log.error("could not re-provide key %c - %e",e,n)})}async reprovide(e,t){await kr(this.contentRouting.provide(e,this.addressManager.getAddresses(),t))}};var b$=20,x$=5e3,v$="kad-close",E$=50,v2=class{routingTable;components;closestPeers;newPeers;refreshInterval;peerSetSize;timeout;closeTagName;closeTagValue;log;running;constructor(e,t){this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:routing-table`),this.routingTable=t.routingTable,this.refreshInterval=t.refreshInterval??x$,this.peerSetSize=t.peerSetSize??b$,this.closeTagName=t.closeTagName??v$,this.closeTagValue=t.closeTagValue??E$,this.closestPeers=new jr,this.onPeerPing=this.onPeerPing.bind(this),this.running=!1}async start(){if(this.running)return;this.running=!0;let e=await gr(this.components.peerId);this.newPeers=new $s(e,this.peerSetSize),this.routingTable.addEventListener("peer:ping",this.onPeerPing),this.timeout=setInterval(()=>{this.updatePeerTags().catch(t=>{this.log.error("error updating peer tags - %e",t)})},this.refreshInterval)}stop(){this.running=!1,this.routingTable.removeEventListener("peer:ping",this.onPeerPing),clearTimeout(this.timeout)}onPeerPing(e){this.newPeers?.add({id:e.detail,multiaddrs:[]}).catch(t=>{this.log.error("error adding peer to distance list - %e",t)})}async updatePeerTags(){let e=new jr(this.newPeers?.peers.map(o=>o.id)),t=e.difference(this.closestPeers),n=this.closestPeers.difference(e);this.closestPeers=e,await Promise.all([...[...t].map(async o=>{await this.components.peerStore.merge(o,{tags:{[this.closeTagName]:{value:this.closeTagValue},[X8]:{value:1}}})}),...[...n].map(async o=>{await this.components.peerStore.merge(o,{tags:{[this.closeTagName]:void 0,[X8]:void 0}})})])}};function Wf(r){return Array.isArray(r?.peers)}var E2=class{root;localPeer;prefixLength;splitThreshold;kBucketSize;numberOfNodesToPing;lastPingThreshold;ping;verify;onAdd;onRemove;onMove;addingPeerMap;constructor(e){this.prefixLength=e.prefixLength??fI,this.kBucketSize=e.kBucketSize??i7,this.splitThreshold=e.splitThreshold??this.kBucketSize,this.numberOfNodesToPing=e.numberOfOldContactsToPing??hI,this.lastPingThreshold=e.lastPingThreshold??pI,this.ping=e.ping,this.verify=e.verify,this.onAdd=e.onAdd,this.onRemove=e.onRemove,this.addingPeerMap=new ir,this.root={prefix:"",depth:0,peers:[]}}async addSelfPeer(e){this.localPeer={peerId:e,kadId:await gr(e),lastPing:Date.now()}}async add(e,t){let n={peerId:e,kadId:await gr(e),lastPing:0},o=this.addingPeerMap.get(e);if(o!=null)return o;try{let i=this._add(n,t);this.addingPeerMap.set(e,i),await i}finally{this.addingPeerMap.delete(e)}}async _add(e,t){let n=this._determineBucket(e.kadId);if(this._indexOf(n,e.kadId)>-1)return;if(n.peers.length===this.splitThreshold&&n.depth<this.prefixLength){await this._split(n),await this._add(e,t);return}if(n.peers.length<this.kBucketSize){if(!A$(e,this.lastPingThreshold)){n.peers.push(e),await this.onAdd?.(e,n);return}await this.verify(e,t)&&(e.lastPing=Date.now(),await this._add(e,t));return}let o=n.peers.filter(s=>!(s.peerId.equals(this.localPeer?.peerId)||s.lastPing>Date.now()-this.lastPingThreshold)).sort((s,a)=>s.lastPing<a.lastPing?-1:s.lastPing>a.lastPing?1:0).slice(0,this.numberOfNodesToPing),i=!1;for await(let s of this.ping(o,t))i=!0,await this.remove(s.kadId);i&&await this._add(e,t)}*closest(e,t=this.kBucketSize){let n=new $s(e,t);for(let o of this.toIterable())n.addWithKadId({id:o.peerId,multiaddrs:[]},o.kadId);yield*Jr(n.peers,o=>o.id)}count(){function e(t){if(Wf(t))return t.peers.length;let n=0;return t.left!=null&&(n+=e(t.left)),t.right!=null&&(n+=e(t.right)),n}return e(this.root)}get(e){let t=this._determineBucket(e),n=this._indexOf(t,e);return t.peers[n]}async remove(e){let t=this._determineBucket(e),n=this._indexOf(t,e);if(n>-1){let o=t.peers.splice(n,1)[0];await this.onRemove?.(o,t)}}*toIterable(){function*e(t){if(Wf(t)){yield*t.peers;return}yield*e(t.left),yield*e(t.right)}yield*e(this.root)}distance(e,t){return BigInt("0x"+M(sn(e,t),"base16"))}_determineBucket(e){let t=M(e,"base2");function n(o,i=0){return Wf(o)?o:t[i]==="0"?n(o.left,i+1):n(o.right,i+1)}return n(this.root)}_indexOf(e,t){return e.peers.findIndex(n=>ge(n.kadId,t))}async _split(e){let t={prefix:"0",depth:e.depth+1,peers:[]},n={prefix:"1",depth:e.depth+1,peers:[]};for(let o of e.peers)M(o.kadId,"base2")[e.depth]==="0"?(t.peers.push(o),await this.onMove?.(o,e,t)):(n.peers.push(o),await this.onMove?.(o,e,n));S$(e,t,n)}};function S$(r,e,t){return delete r.peers,r.left=e,r.right=t,r.prefix===""&&(delete r.depth,delete r.prefix),!0}function A$(r,e){return r.lastPing<Date.now()-e}var i7=20,fI=6;var _$=20,I$=100,hI=3;var T$=20,C$=100,mI="kad-peer",k$=1,pI=6e5,P$=!0,R$=1e3,S2=class extends Le{kBucketSize;kb;network;closestPeerTagger;log;components;running;pingNewContactTimeout;pingNewContactQueue;pingOldContactTimeout;pingOldContactQueue;populateFromDatastoreOnStart;populateFromDatastoreLimit;protocol;peerTagName;peerTagValue;metrics;constructor(e,t){super(),this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:routing-table`),this.kBucketSize=t.kBucketSize??i7,this.running=!1,this.protocol=t.protocol,this.network=t.network,this.peerTagName=t.peerTagName??mI,this.peerTagValue=t.peerTagValue??k$,this.pingOldContacts=this.pingOldContacts.bind(this),this.verifyNewContact=this.verifyNewContact.bind(this),this.peerAdded=this.peerAdded.bind(this),this.peerRemoved=this.peerRemoved.bind(this),this.populateFromDatastoreOnStart=t.populateFromDatastoreOnStart??P$,this.populateFromDatastoreLimit=t.populateFromDatastoreLimit??R$,this.pingOldContactQueue=new ur({concurrency:t.pingOldContactConcurrency??T$,metricName:`${t.metricsPrefix}_ping_old_contact_queue`,metrics:this.components.metrics,maxSize:t.pingOldContactMaxQueueSize??C$}),this.pingOldContactTimeout=new Mo({...t.pingOldContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_old_contact_time_milliseconds`}),this.pingNewContactQueue=new ur({concurrency:t.pingNewContactConcurrency??_$,metricName:`${t.metricsPrefix}_ping_new_contact_queue`,metrics:this.components.metrics,maxSize:t.pingNewContactMaxQueueSize??I$}),this.pingNewContactTimeout=new Mo({...t.pingNewContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_new_contact_time_milliseconds`}),this.kb=new E2({kBucketSize:t.kBucketSize,prefixLength:t.prefixLength,splitThreshold:t.splitThreshold,numberOfOldContactsToPing:t.numberOfOldContactsToPing,lastPingThreshold:t.lastPingThreshold,ping:this.pingOldContacts,verify:this.verifyNewContact,onAdd:this.peerAdded,onRemove:this.peerRemoved}),this.closestPeerTagger=new v2(this.components,{logPrefix:t.logPrefix,routingTable:this,peerSetSize:t.closestPeerSetSize,refreshInterval:t.closestPeerSetRefreshInterval,closeTagName:t.closeTagName,closeTagValue:t.closeTagValue}),this.components.metrics!=null&&(this.metrics={routingTableSize:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_size`),routingTableKadBucketTotal:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_total`),routingTableKadBucketAverageOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_average_occupancy`),routingTableKadBucketMinOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_min_occupancy`),routingTableKadBucketMaxOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_max_occupancy`),routingTableKadBucketMaxDepth:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_max_depth`),kadBucketEvents:this.components.metrics.registerCounterGroup(`${t.metricsPrefix}_kad_bucket_events_total`)})}isStarted(){return this.running}async start(){this.running||(this.running=!0,await lr(this.closestPeerTagger),await this.kb.addSelfPeer(this.components.peerId))}async afterStart(){Promise.resolve().then(async()=>{if(!this.populateFromDatastoreOnStart)return;let e=0;for(let t of await this.components.peerStore.all({filters:[n=>n.protocols.includes(this.protocol)&&n.tags.has(mI)],limit:this.populateFromDatastoreLimit})){if(!this.running)return;try{await this.add(t.id),e++}catch{this.log("failed to add peer %p to routing table, removing kad-dht peer tags - %e"),await this.components.peerStore.merge(t.id,{tags:{[this.peerTagName]:void 0}})}}this.log("added %d peer store peers to the routing table",e)}).catch(e=>{this.log.error("error adding peer store peers to the routing table %e",e)})}async stop(){this.running=!1,await Cr(this.closestPeerTagger),this.pingOldContactQueue.abort(),this.pingNewContactQueue.abort()}async peerAdded(e,t){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:{value:this.peerTagValue}}}),this.updateMetrics(),this.metrics?.kadBucketEvents.increment({peer_added:!0}),this.safeDispatchEvent("peer:add",{detail:e.peerId})}async peerRemoved(e,t){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:void 0}}),this.updateMetrics(),this.metrics?.kadBucketEvents.increment({peer_removed:!0}),this.safeDispatchEvent("peer:remove",{detail:e.peerId})}async*pingOldContacts(e,t){if(!this.running)return;let n=[];for(let o of e){if(this.kb.get(o.kadId)==null){this.log("asked to ping contact %p that was not in routing table",o.peerId);continue}this.metrics?.kadBucketEvents.increment({ping_old_contact:!0}),n.push(async()=>{let i=this.pingOldContactQueue.find(o.peerId);if(i!=null)return this.log("asked to ping contact %p was already being pinged",o.peerId),await i.join(t)?void 0:o;if(!await this.pingOldContactQueue.add(async a=>{let c=this.pingOldContactTimeout.getTimeoutSignal(),l=Ne([c,a?.signal]);try{return await this.pingContact(o,a)}catch{return this.metrics?.kadBucketEvents.increment({ping_old_contact_error:!0}),!0}finally{this.pingOldContactTimeout.cleanUp(c),l.clear()}},{peerId:o.peerId,signal:t?.signal}))return o})}for await(let o of Bo(n))o!=null&&(yield o)}async verifyNewContact(e,t){let n=this.pingNewContactTimeout.getTimeoutSignal(),o=Ne([n,t?.signal]);try{let i=this.pingNewContactQueue.find(e.peerId);return i!=null?(this.log("joining existing ping to add new peer %p to routing table",e.peerId),await i.join({signal:o})):await this.pingNewContactQueue.add(async s=>(this.metrics?.kadBucketEvents.increment({ping_new_contact:!0}),this.log("pinging new peer %p before adding to routing table",e.peerId),this.pingContact(e,s)),{peerId:e.peerId,signal:o})}catch{return this.log.trace("tried to add peer %p but they were not online",e.peerId),this.metrics?.kadBucketEvents.increment({ping_new_contact_error:!0}),!1}finally{this.pingNewContactTimeout.cleanUp(n),o.clear()}}async pingContact(e,t){let n;try{this.log("pinging contact %p",e.peerId);for await(let o of this.network.sendRequest(e.peerId,{type:We.PING},t))if(o.type===A2.PEER_RESPONSE)return o.messageType===We.PING?(this.log("contact %p ping ok",e.peerId),this.safeDispatchEvent("peer:ping",{detail:e.peerId}),!0):!1;return!1}catch(o){return this.log("error pinging old contact %p - %e",e.peerId,o),n?.abort(o),!1}}get size(){return this.kb==null?0:this.kb.count()}async find(e){let t=await gr(e);return this.kb.get(t)?.peerId}closestPeer(e){let t=this.closestPeers(e,1);if(t.length>0)return t[0]}closestPeers(e,t=this.kBucketSize){return this.kb==null?[]:[...this.kb.closest(e,t)]}async add(e,t){if(this.kb==null)throw new Error("RoutingTable is not started");await this.kb.add(e,t)}async remove(e){if(this.kb==null)throw new Error("RoutingTable is not started");let t=await gr(e);await this.kb.remove(t)}updateMetrics(){if(this.metrics==null||this.kb==null)return;let e=0,t=0,n=0,o=20,i=0;function s(a){if(Wf(a)){a.depth>n&&(n=a.depth),t++,e+=a.peers.length,a.peers.length<o&&(o=a.peers.length),a.peers.length>i&&(i=a.peers.length);return}s(a.left),s(a.right)}s(this.kb.root),this.metrics.routingTableSize.update(e),this.metrics.routingTableKadBucketTotal.update(t),this.metrics.routingTableKadBucketAverageOccupancy.update(Math.round(e/t)),this.metrics.routingTableKadBucketMinOccupancy.update(o),this.metrics.routingTableKadBucketMaxOccupancy.update(i),this.metrics.routingTableKadBucketMaxDepth.update(n)}};var gI=[77591,22417,43971,28421,740,29829,71467,228973,196661,78537,27689,36431,44415,14362,19456,106025,96308,2882,49509,21149,87173,131409,75844,23676,121838,30291,17492,2953,7564,110620,129477,127283,53113,72417,165166,109690,21200,102125,24049,71504,90342,25307,72039,26812,26715,32264,133800,71161,88956,171987,51779,24425,16671,30251,186294,247761,14202,2121,8465,35024,4876,85917,169730,3638,256836,96184,943,18678,6583,52907,35807,112254,214097,18796,11595,9243,23554,887,268203,382004,24590,111335,11625,16619,29039,102425,69006,97976,92362,32552,63717,41433,128974,137630,59943,10019,13986,35430,33665,108037,43799,43280,38195,29078,58629,18265,14425,46832,235538,40830,77881,110717,58937,3463,325358,51300,47623,117252,19007,10170,20540,91237,294813,4951,79841,56232,36270,128547,69209,66275,100156,32063,73531,34439,80937,28892,44466,88595,216307,32583,49620,16605,82127,45807,21630,78726,20235,40163,111007,96926,5567,72083,21665,58844,39419,179767,48328,42662,51550,5251,37811,49608,81056,50854,55513,20922,18891,197409,164656,32593,71449,220474,58919,85682,67854,13758,35066,3565,61905,214793,119572,141419,21504,10302,27354,67003,46131,32668,15165,64871,34450,17821,2757,11452,34189,5160,12257,85523,560,53385,65887,119549,135620,312353,115979,122356,10867,193231,124537,54783,90675,120791,4715,142253,50943,17271,43358,25331,4917,120566,34580,12878,33786,160528,32523,4869,301307,104817,81491,23276,8832,97911,31265,52065,7998,49622,9715,43998,34091,84587,20664,69041,29419,53205,10838,58288,116145,6185,5154,141795,35924,21307,144738,43730,12085,8279,10002,119,133779,199668,72938,31768,39176,67875,38453,9700,44144,4121,116048,41733,12868,82669,92308,128,34262,11332,7712,90764,36141,13553,71312,77470,117314,96549,49135,23602,54468,28605,6327,62308,17171,67531,21319,14105,894,107722,46157,8503,51069,100472,45138,15246,14577,35609,191464,1757,13364,161349,32067,91705,81144,52339,5408,91066,21983,14157,100545,4372,26630,129112,1423,29676,213626,4397,88436,99190,6877,49958,26122,114348,60661,29818,293118,50042,179738,16400,163423,89627,31040,43973,36638,45952,5153,1894,109322,1898,134021,12402,112077,68309,190269,69866,31938,107383,11522,105232,11248,14868,39852,71707,186525,16530,38162,106212,11700,5130,16608,26998,59586,108399,230033,43683,48135,82179,2073,5015,196684,189293,16378,23452,8301,35640,11632,214551,29240,57644,33137,91949,55157,52384,117313,5090,17717,89668,49363,82238,241035,66216,29066,184088,97206,62820,26595,4241,135635,173672,8202,459,71355,146294,29587,3008,135385,141203,14803,6634,45094,69362,50925,546,51884,62011,83296,234584,44515,56050,89476,87751,19373,12691,149923,19794,13833,35846,87557,58339,2884,19145,25647,12224,11024,77338,64608,122297,53025,7205,36189,36294,170779,21750,7739,173883,75192,35664,224240,113121,30181,26267,27036,117827,92015,106516,55628,203549,67949,60462,60844,35911,20457,1820,920,19773,8738,73173,181993,38521,98254,76257,46008,92796,5384,26868,151566,22124,2411,15919,186872,180021,28099,152961,78811,80237,62352,102653,74259,184890,16792,123702,224945,29940,19512,75283,14059,112691,92811,233329,20411,138569,53341,109802,50600,134528,66747,5529,166531,31578,64732,67189,1596,126357,967,167999,206598,109752,119431,207825,78791,91938,10301,27311,24233,252343,28831,32812,66002,112267,90895,8786,8095,16824,22866,21813,60507,174833,19549,130985,117051,52110,6938,81923,123864,38061,919,18680,53534,46739,112893,161529,85429,26761,11900,81121,91968,15390,217947,56524,1713,6654,37089,85630,138866,61850,16491,75577,16884,98296,73523,6140,44645,6062,36366,29844,57946,37932,42472,5266,20834,19309,33753,127182,134259,35810,41805,45878,312001,14881,47757,49251,120050,44252,3708,25856,107864,120347,1228,36550,41682,34496,47025,8393,173365,246526,12894,161607,35670,90785,126572,2095,124731,157033,58694,554,12786,9642,4817,16136,47864,174698,66992,4639,69284,10625,40710,27763,51738,30404,264105,137904,109882,52487,42824,57514,2740,10479,146799,107390,16586,88038,174951,9410,16185,44158,5568,40658,46108,12763,97385,26175,108859,664,230732,67470,46663,14395,50750,141320,93140,15361,47997,55784,6791,307840,118569,107326,18056,58281,260415,54691,8790,73332,45633,7511,45674,143373,14031,11799,94491,35646,96544,14560,26049,32983,25791,83814,42094,231370,63955,139212,2359,169908,3108,183486,105867,28197,32941,124968,26402,88267,149768,23053,3078,19091,52924,25383,19209,111548,97361,3959,24880,235061,9099,24921,161254,151405,20508,7159,34381,20133,11434,74036,19974,34769,36585,1076,22454,17354,38727,235160,111547,96454,117448,156940,91330,37299,7310,26915,117060,51369,22620,61861,322264,106850,111694,15091,2624,40345,300446,177064,1707,27389,54792,327783,132669,183543,59003,17744,20603,151134,106923,53084,71803,279424,319816,11579,21946,16728,38274,72711,5085,83391,88646,40159,25027,34680,10752,12988,54126,30365,18338,100445,230674,44874,84974,143877,123253,139372,28082,91477,144002,13096,219729,46016,50029,42377,14601,6660,58244,58978,23918,88206,113611,64452,17541,41032,10942,12021,49189,10978,40175,37156,10947,71709,106894,112538,57007,137486,150608,152719,40615,7746,279716,13101,19524,28708,40578,72320,1096,182051,94527,51275,22833,45164,81917,77519,48508,5421,140302,37845,149830,5587,27579,5357,428725,248187,6326,206760,39814,32585,89923,44341,288753,284443,96368,31201,94189,119504,20359,52073,103216,179,27934,32801,96035,34111,34309,101326,18198,20704,210266,37643,27880,141873,106e3,19414,56614,167714,66483,107885,86602,4379,20796,75467,4987,5017,118857,26003,34308,114428,29198,6686,29697,73632,3739,69795,16798,41504,7207,30722,21436,36735,28067,28545,3239,11221,36031,41889,100010,19247,317673,29495,174554,6424,129725,53845,94986,7955,59676,2604,191497,19735,102214,62954,23844,11872,179525,261436,34492,428,78404,142035,16747,17246,27578,37021,33672,57944,26056,135760,2369,61674,122066,31327,19374,157065,40553,130982,69619,71290,38855,72100,92903,95940,51422,165999,65713,57873,50726,7288,20272,2081,42326,22624,81120,57914,79352,19447,1684,72302,11774,302559,161481,96396,13692,414988,3721,79066,56627,46883,21150,11747,12184,5856,113458,176117,84416,52079,27933,3354,59765,141359,2212,216309,2555,23458,196722,142463,45701,44548,28798,19418,215,29916,9396,10574,114226,84475,13520,18694,34056,4524,90302,62930,13539,19407,77209,7728,38088,9535,2263,23875,183945,17750,26274,67172,10585,28042,22199,7478,51331,66030,26774,192929,31434,25850,50197,52926,178158,4679,181256,70184,229600,9959,105594,72158,73974,2726,35085,78087,23284,35568,51713,155676,5401,27254,11966,17569,223253,71993,103357,111477,55722,30504,26034,46774,35392,36285,214814,41143,163465,1051,16094,81044,6636,76489,179102,20712,39178,35683,125177,54219,30617,52994,25324,50123,2543,87529,58995,10688,125199,12388,60158,125481,131646,7642,133350,65874,3438,97277,101450,10075,56344,116821,50778,60547,98016,106135,13859,14255,16300,77373,173521,8285,45932,37426,4054,114295,55947,7703,39114,52,51119,128135,19714,60715,9554,50492,88180,2823,118271,52993,122625,97919,23859,37895,25040,33614,32102,20431,3577,9275,15686,43031,157741,110358,1884,40291,125391,13736,5008,64881,87336,77381,70711,43032,49155,118587,70494,4318,10168,30126,12580,10524,280104,104001,145413,2862,84140,6603,106005,13566,12780,11251,42830,571,179910,82443,13146,469,42714,32591,265217,424024,92553,54721,134100,6007,15242,114681,59030,16718,85465,200214,85982,55174,165013,23493,56964,82529,109150,32706,27568,82442,5350,14976,13165,44890,60021,21343,33978,17264,4655,22328,27819,75730,16567,55483,14510,17926,45827,150609,3704,7385,272531,161543,76904,122163,52405,2039,19165,41623,14423,228354,3369,176360,85491,7122,35789,303724,4465,13628,2233,55311,118771,20713,10006,221519,45115,71021,35650,29775,7337,10864,20665,21142,1746,15080,1624,32449,10905,105743,229797,7701,3940,22997,178467,57208,389057,39683,59403,63344,63125,54847,69691,18336,56448,3362,37202,18282,29648,138224,35867,10495,5911,28814,26653,31514,176702,26550,45621,11734,4525,40543,73944,121080,27858,155561,14887,44670,30742,8796,107455,113472,56369,75581,183777,240095,133699,153299,8768,160464,26058,49078,103971,21875,71486,44888,17156,9678,89541,123019,102337,3972,83930,21245,87852,109660,287918,183019,686,10100,39177,283941,11274,24736,26793,26214,25995,77011,141580,4070,23742,46285,46632,30700,26669,19056,35951,115575,174034,56097,35463,87425,24575,44245,38701,82317,85922,281616,100333,147697,61503,7730,84330,8530,59917,61597,17173,9092,32658,90288,193136,39023,20381,56654,31132,7779,1919,1375,117128,30819,11169,40938,23935,115201,101155,151034,4835,11231,74550,89388,59951,91704,107312,167882,115062,12732,72738,88703,464019,158267,57995,60496,737,14371,123867,4174,243339,159946,7568,16025,134556,110916,38103,191,80226,88794,29688,27230,10454,76308,57647,77409,113483,66864,14745,19808,12023,46583,84805,16015,17102,2231,20611,3547,95740,250131,34559,108894,8498,15853,159169,148920,20942,2813,93160,45188,210613,45531,52587,149062,39782,28194,57849,60965,84954,89766,84453,100927,16501,27658,165311,103841,54192,207341,19558,20084,319622,5672,205467,98462,61849,36279,13609,147177,24726,165015,209489,59591,31157,6551,117580,75060,141146,277310,21072,22023,106474,63041,137443,122965,68371,5383,42146,98961,113467,30863,23794,4843,99630,30392,82679,13699,241612,33601,93146,24319,18643,32155,95669,40440,15333,34089,67799,142144,58245,38633,114531,117400,77861,188726,5507,2568,8853,10987,107222,2663,2421,11530,13345,30075,41785,118661,104786,17459,12490,16281,71936,193555,17431,5944,71758,26485,77317,20803,367167,158,7362,93430,11735,172445,46002,11532,54482,930,62911,2235,23004,179236,4764,101859,208113,22477,55163,95579,14098,67320,162556,90709,156949,3826,57492,4025,34092,87442,104565,6718,186015,28214,14209,10039,107186,233912,58877,81637,55265,39828,6194,145813,50831,105849,4974,88319,122296,10272,197216,95714,51540,72418,23324,91555,8743,140452,250249,51666,34124,7229,38592,129641,78169,174242,22464,149964,51450,14034,10026,95376,26190,120062,14401,8700,265,31386,143573,7203,229889,61567,4227,140981,2466,72052,10787,10062,30958,6099,38471,30103,23202,208101,70847,467,58934,32271,32984,36637,24107,30771,17109,73353,13650,2098,157040,67366,66904,106018,265380,107238,18535,44025,32681,144983,62505,91295,56120,3082,77508,10322,63023,36700,81885,224127,16721,45023,239261,111272,13852,7866,149243,204199,32309,22084,42029,38316,126644,104973,14406,43454,67322,61310,15789,40285,24026,181047,6301,70927,23319,115823,27248,66693,115875,278566,63007,146844,56841,59007,87368,180001,22370,42114,80605,12022,10374,308,25079,14689,12618,63368,7936,264973,212291,136713,95999,105801,18965,32075,48700,52230,35119,96912,32992,8586,16606,101333,101812,14969,39930,759,193090,27387,42914,12937,5058,62646,64528,38624,25743,37502,3716,4435,30352,178687,26461,132611,42002,138442,35833,59582,16345,8048,60319,49349,309,47800,49739,90482,26405,34470,63786,32479,85028,39866,47846,11649,23934,29466,2816,42864,31828,7410,74885,49632,47629,111801,90749,19536,18767,105764,59606,21223,10746,76298,22220,39408,7190,79654,64856,11602,82156,272765,17079,70089,245473,51813,184407,384678,1576,122249,5064,27481,6188,25790,74361,27541,318284,45430,31488,620,93579,45723,192118,22670,51913,4162,70244,35966,26397,16199,50899,209613,121702,287507,2993,36101,132229,67345,33062,76295,118628,78705,52316,34375,107083,107454,44863,127561,33964,3073,154010,190914,55967,39074,6272,31047,5550,41123,26154,98638,47110,19998,148091,50229,31329,59900,195442,19106,61347,73497,70015,682,45850,25776,38022,148951,6288,37411,232526,109277,27286,32342,9262,5220,16651,23175,46740,129438,78614,121925,66914,88710,127952,5563,21500,34521,10739,14863,191006,62956,17359,16749,67027,56284,69134,43301,35039,58883,54466,60823,404451,75743,59856,86979,7923,34273,83785,32142,7693,268986,197428,282681,17049,22346,22990,92245,107180,3357,37104,96724,49153,7683,31197,43267,82231,164276,23696,20848,188364,22309,24821,158707,1018,22514,70922,27792,45589,59709,10765,736,35218,63479,51987,24275,63588,55361,92929,81964,4658,20122,12330,44058,13065,311456,72224,8337,211229,38979,22590,138478,52757,32595,133600,8838,31549,94412,43391,90056,1585,94802,127271,6223,31889,137038,132910,2165,57616,230152,6080,10748,36737,74579,134062,50525,180532,119270,34556,76155,82394,52595,29258,31435,87820,67996,26943,183878,38007,2410,13526,180297,69856,3503,187396,167700,7838,16701,9199,56267,3661,37407,65994,23767,5708,62508,221700,67088,86978,46776,84434,32088,5612,9149,88244,21685,95151,46750,189612,2979,506311,2594,3628,40074,105039,78243,28523,6651,38058,71999,30992,12764,68261,108991,6165,26450,61961,13400,22426,7490,60890,109623,2070,12958,50355,67979,257096,7213,42578,52121,35716,65461,7516,124758,39268,302,64712,14977,1467,219452,2840,34229,11121,21602,19270,63574,8024,1532,17331,79839,78885,52029,180767,57957,6069,91265,61380,55767,8927,32881,287603,22149,35029,68876,6428,199567,46926,13412,104132,21434,366616,45060,110046,81924,128910,45886,52821,130416,29416,77342,21762,67329,121432,79924,11724,38625,81006,102033,28338,13326,3250,82056,82526,38212,21112,12382,111495,3263,7414,86274,93490,40844,30224,45212,24019,48411,71367,24941,76729,57776,3769,38114,202019,197745,31953,237533,33270,201580,255648,100798,44741,32241,98468,106931,10085,15090,170358,33154,66787,18819,69760,25061,234005,82660,6295,131975,16874,9076,4094,25005,17740,40908,19533,220019,44330,99792,50040,19619,13950,55228,24423,31253,95308,103177,184795,28590,82285,5059,3210,75525,49894,70007,56178,10580,36051,139681,21617,98736,3555,106306,164189,37352,63915,47824,24883,145530,61904,28444,11483,19837,145446,30420,112972,85939,11835,191233,2262,20705,58630,1753,148334,1197,144714,6887,11223,107667,60879,77914,4151,57417,81594,96681,169430,1784,20444,95138,254041,27038,596,7117,72808,13759,3353,126776,21074,55322,27081,36942,39547,139830,179275,4453,713,8722,71399,19204,25785,22794,23923,104114,11291,25458,102309,88396,75288,230440,206396,104551,58447,130857,37247,94734,31548,176529,226077,65159,20104,10096,66881,94191,237909,27109,37404,1520,27421,25220,113003,23423,24884,50585,6286,231877,150800,11789,3226,90004,60642,5053,202400,61442,132531,175329,57138,30116,103847,9973,75367,16452,32360,59119,21246,10191,164804,23305,61051,37348,154530,13214,5468,50403,66754,130976,50559,80515,14436,155492,84017,5472,43107,41240,2890,90431,70188,382,76234,48040,50211,281038,237007,32115,142178,1536,22761,96429,1811,31243,1679,49143,55209,17402,235054,61494,7462,77030,34925,87609,78002,9499,9027,73289,201078,101379,63544,27666,5469,10642,30029,49816,132979,95620,58086,351930,116300,2110,2043,30845,6154,11279,16727,4122,2277,27281,4971,3650,39060,61970,65951,39674,75686,38151,11370,130809,177895,32665,63725,122267,7857,39618,118483,44792,157755,178624,136994,24260,41308,22471,12404,21707,12486,30473,52781,50246,20247,39065,909,56825,103158,128603,31542,1089,41935,32744,12428,37963,84420,33134,72921,208449,42622,168151,127335,147107,46699,38216,12591,94342,85814,31423,24944,2605,87542,67473,192551,4496,56321,91819,17630,6300,256183,114569,202090,33209,35289,34897,24967,40520,43470,5344,10199,34810,14283,10381,10017,62923,49924,23233,64539,13051,35686,19698,11570,135555,120868,44924,87065,52318,52335,47586,140906,245885,109834,78668,9065,46990,25258,72022,61243,40838,4545,146387,10537,11557,17470,36930,68104,46711,24264,79401,81043,18225,120488,24746,84338,81652,28266,13776,21878,46973,1047,230465,73357,95777,24973,210160,62210,58404,110633,169651,6937,41870,9909,26822,191062,76553,27519,96256,239070,2478,205678,67955,58532,20601,50120,19148,78501,195724,110740,8249,109665,27446,30568,57631,31425,49752,32820,65504,50079,3663,102256,219898,23849,211315,14645,4359,91767,9528,12449,49366,7941,49763,107848,8930,27086,50686,9744,10447,81935,39513,46514,1670,29229,6172,22312,137280,97759,9806,14445,22976,56458,73391,34983,93760,174219,52573,33149,59747,2429,136277,75123,165263,91040,7446,57632,48633,97140,246081,84766,151684,79918,93268,120346,54059,54875,77858,32996,103590,45276,11968,19600,25849,17159,132907,42828,16817,4913,99462,103303,27395,5737,74184,20749,21160,14377,77062,131403,158735,10999,27799,77785,9320,34366,51593,61070,33746,47048,29268,36675,30262,53297,9832,82e3,20188,122292,39917,7331,18160,68301,185935,134830,15031,4935,10004,165845,185534,46923,30109,44134,122631,18874,22903,112790,26561,18549,348902,82871,140345,255565,135390,63556,103747,145055,179600,145662,296111,61661,211987,23952,52342,126343,48450,32919,44277,82185,9591,62139,205363,376969,394874,108461,18040,120885,14798,39863,16571,16794,58271,81025,55206,14640,118656,6361,44092,85970,6262,153863,108244,180200,72264,79947,38044,10050,5735,61221,80712,5471,115689,11391,11661,184257,20010,60116,30320,19327,134598,45455,27542,18004,125092,452272,1549,91523,46567,180063,156026,2608,11174,58848,37788,65907,80194,30490,5786,40775,119519,106241,11323,156297,8425,61495,2617,29675,2425,59886,112582,49142,59618,4863,50597,86710,50650,168632,27693,85641,83643,18993,25768,84284,28090,93592,36627,312804,43381,9887,9402,100931,97165,3311,173330,66805,28935,4963,184460,3201,78102,19126,21607,37496,24938,22615,16153,32862,134792,153318,61120,6067,2812,12826,12792,23825,37559,64662,202250,102694,155488,85881,149193,46233,65383,15521,106982,11358,176786,25752,39717,34208,24510,32464,77742,39371,72028,138229,60688,71386,102834,132477,2208,11548,63670,271279,28351,30338,38620,32491,99845,143885,152266,13252,2825,178663,108097,1775,78201,14897,113573,163346,62292,171129,22183,96598,38733,64971,166776,117445,9968,146393,44677,74867,20908,97328,12761,25656,26785,9148,112344,26115,99176,110121,22437,49547,6180,79320,5835,31392,43328,33377,75870,119860,69497,80273,7325,155219,43167,111173,28347,20222,3763,71752,55041,47252,14618,28088,15012,97805,194698,54636,2036,41349,6173,96604,61530,51859,43782,13361,24334,22668,24792,7070,23441,16789,3209,36211,208475,26242,32880,122181,182407,21444,31060,88459,29929,77907,12716,10934,97005,20599,31690,8403,58445,30303,22700,10336,86731,103115,337709,72556,46788,112566,47684,67089,53548,36874,56487,41387,125985,26893,40071,106683,73712,18787,40105,72992,67246,137276,50802,36790,70328,138827,22466,39263,183295,29858,50975,9322,57397,10654,24364,30383,55799,41600,23584,127295,296610,129078,143558,244131,86397,36049,1085,80677,3820,108139,5476,34767,24683,7758,13060,7239,131671,250593,59556,103392,29810,4188,252323,39404,116877,7651,43600,40338,13554,157253,39196,25978,144387,61211,234,50104,6129,10449,93777,9240,356378,274148,4439,72970,3724,147770,78680,62570,115877,40027,40547,36817,224392,64609,34795,165027,67440,2477,37206,23431,50754,164797,46018,94995,170982,27051,7957,22767,3674,27900,56419,18930,60701,41302,2692,84749,339721,61996,111094,80221,50129,1045,8153,62945,19202,8250,37208,37418,32560,79477,41106,88569,33963,36693,5892,30570,1581,66471,49647,11922,160717,29442,5643,114865,82962,95982,132098,22633,22838,94726,54556,28566,205039,162340,33216,16849,35847,221339,94851,26533,71469,1805,3804,12935,45483,71020,36310,65381,192960,34240,35165,59773,1248,46954,155332,96864,4246,388800,16129,57133,74592,44807,442014,38203,42574,80818,91592,26377,36424,65760,977,77387,22628,147610,28018,30561,98454,6969,119628,63648,18170,36854,26601,64018,22027,37279,51395,152934,21153,9430,58760,194742,5330,55115,34158,28917,174111,13171,122326,1526,43896,66094,25325,4234,148354,11450,275,18999,112191,44365,22723,68409,8733,57746,96565,75007,14196,108844,29475,88599,177563,100792,106156,86323,93726,14248,135341,194131,40126,47099,14779,8272,39597,95983,171398,65882,28052,10393,47213,40689,22120,72212,106829,34964,109146,753,648,21660,30047,17527,181025,5619,145357,4085,216883,9359,186951,24779,53931,24545,36197,223296,62628,168101,4243,107313,30321,26642,13049,51059,31027,107912,807,73550,26551,84369,122422,165872,49754,74213,234264,33151,52014,33100,87183,22365,52500,40013,23302,5652,72723,21404,26107,48434,587,94049,168493,96418,32871,70860,31709,25128,443,71597,166253,15670,70994,26341,133675,28280,75491,54756,47955,56028,26182,11952,113272,472197,64640,110753,17919,337,50642,22576,142,87371,53391,93210,126694,15285,19642,85667,14148,1506,42092,52962,33243,11970,20734,135843,57044,58880,13002,219134,22876,64754,232519,4257,43120,321573,24799,64526,124728,52579,81472,70831,276848,17403,74359,23021,182101,74597,23744,148267,12055,7976,5349,11772,67540,167347,65318,18720,127832,108238,22828,90233,9987,259080,118185,73209,79270,13775,90100,137742,90799,70569,15699,19961,9087,67475,57872,39731,8810,134897,131868,146849,19898,3334,2281,167061,91073,60356,467742,74712,188,53179,137679,92769,29241,9537,132595,80119,1041,88962,5976,40171,44911,102859,139059,104558,98987,47761,19272,71472,113864,175377,73338,10857,23402,23758,1591,139864,5644,4076,118760,16427,134198,18853,20291,100849,37423,22038,36677,19071,195521,57445,11069,31869,55718,66882,148490,44,41296,75242,49704,166810,9906,20943,122258,49112,105667,15969,10344,6408,187694,21399,72742,58970,14867,14376,81889,41856,23225,15042,56993,16074,131389,74276,72407,53875,383108,53597,37363,68993,44854,122548,430927,198279,38430,80409,12245,2981,628,2818,17760,37437,238229,7968,46892,2200,3730,34190,65983,37959,112291,87850,70827,6522,20750,73913,111621,41652,19587,2780,58668,25916,85259,18200,168962,95781,42445,102050,7776,57662,103313,47742,96358,41964,66174,100396,29069,204735,19679,27978,7479,40264,22534,61183,36081,107436,58223,14680,23002,101311,24716,124108,12908,5646,31750,40380,14215,232799,102772,14122,96775,61398,50917,12096,149880,67833,598749,124194,155871,49216,790,14677,65319,56917,7440,145744,95701,12206,49405,129269,76199,45732,9767,11058,9047,210885,11051,7392,26307,2130,8132,147526,20802,232698,115660,50060,59789,57344,107623,80343,112676,23291,9866,160971,34032,118291,15719,59730,164911,28975,2659,58046,78480,21854,66209,53863,109085,116045,29021,46481,107552,22130,18764,70254,31272,11300,52460,43933,84738,20721,53869,190840,79673,105300,7561,321817,66924,13940,33281,101046,183181,32176,71878,5678,62924,79535,56646,40303,19559,27703,93042,73368,42187,3670,37376,46440,7023,36816,109628,20680,5940,276440,275233,170848,112093,136996,14984,20226,111441,77693,112960,48577,39370,55707,50314,123404,26570,54281,61372,123391,4857,35928,246740,132507,106646,44241,7196,92258,9825,37688,51197,303141,5590,15476,132986,10955,85782,34486,26696,7991,28813,18858,39546,11703,11365,38185,5716,93555,11925,40121,60002,6985,10976,171384,3887,43394,13337,56346,6381,252336,39573,75042,53711,1028,31781,44295,95925,131713,7214,68125,43571,70954,213234,1628,8760,13391,65485,17320,56038,1710,25248,60803,57399,19839,3870,326,281556,50945,72400,21460,316244,75619,56246,98775,481,13513,55765,50427,7388,123519,32929,57908,27124,61316,101097,57467,30228,48792,10788,20402,37318,50526,155730,34456,158065,145305,17832,43733,64052,4506,35072,205355,177028,184004,187081,68616,35938,83703,10367,36892,93186,260137,51934,89970,4985,23445,26755,21558,7948,78741,23376,124405,85594,68596,57536,49351,12619,56593,132668,99924,109728,71844,71935,196018,65464,17617,14987,89701,143773,33997,8687,22701,33258,2914,4436,72108,85610,9671,49067,2327,82988,1361,1672,44033,35777,30269,24057,10605,82236,616,15793,13919,47249,112086,116698,9484,80207,90574,33304,68624,93127,56101,42210,160929,4827,38995,38095,4701,125119,5027,33680,9236,231236,14135,87837,23318,70261,78893,30151,81482,14332,1084,74256,27532,46644,79185,3148,62615,6981,55672,31668,36825,1849,14536,37446,14738,23779,43058,162749,72199,1168,21346,5592,85932,85302,9668,18351,57135,150360,2080,228015,77953,34670,119302,151751,31009,106725,84265,45214,59289,74178,113071,263206,111009,4021,44449,188119,192629,123592,392506,292847,114487,12831,205858,9852,20780,79648,75767,357014,97721,18166,21005,67950,33226,204009,16536,2987,11335,66717,144910,47950,17262,55060,15063,2934,51038,26775,178497,66008,3427,49433,128592,20036,157553,63861,3089,23015,51210,28696,35933,49942,71135,231518,99620,17248,21835,176536,20676,16944,38700,165831,233253,295625,36723,13023,52745,10907,19423,67972,125868,95473,82875,1183,108455,52685,33417,64095,21433,52438,33191,127809,44505,211823,7810,2752,95548,162031,7185,91196,47563,61721,33359,17897,23682,42806,178101,22874,49707,199897,75419,82456,8618,11171,79712,116847,18783,44190,46564,5346,59046,95032,7893,14916,3214,26800,24172,121453,34362,10250,17408,18888,4840,68696,22831,13162,36005,32512,14800,62357,41723,45046,27247,37486,5372,2564,34261,298500,66509,133920,89138,31305,117697,19097,108304,81386,84106,23802,46411,63304,946,51417,41777,41041,19501,115864,60743,294354,37955,94165,18116,1156,17937,20645,57114,90804,58042,48643,92288,9861,2557,88546,61333,101008,12853,5148,87856,4152,144503,73841,18718,9789,147565,10846,42085,12789,30223,8993,56352,67203,2448,28215,6052,23540,126319,75933,36689,80235,23231,23561,21383,38800,77548,102798,21234,31468,158608,46188,63960,191679,8051,67014,11185,170078,42186,28827,34777,41930,212079,12421,34750,24111,110344,73918,45171,70826,141949,40063,23979,24254,37309,26724,27179,24718,83648,54938,14591,17425,29525,102675,48975,48654,12316,8929,60640,41709,50168,63264,89812,50716,48632,38755,138583,160123,55579,71829,24230,233277,46322,39650,166388,34718,24108,98252,7031,106695,62498,18258,35062,217827,78731,34824,33354,19520,60852,2432,60224,8587,2836,62955,702,20227,42285,40560,95592,62486,11094,53035,143291,18842,46177,77994,1770,9657,107422,172915,32655,128716,25886,25164,156740,119928,165875,85817,11007,89110,33956,12652,65156,180266,8494,36889,19958,20955,96,1264,118288,135769,44754,86671,5632,19026,168220,289120,33569,93821,66144,70635,7687,5642,2714,55445,56636,71545,184182,93133,7332,37389,12643,52315,22729,11014,158742,17050,152889,50178,34601,41945,52136,9948,26914,63548,95721,115951,40759,8960,158258,38938,49232,48325,42234,81523,253019,66128,40978,20048,238048,38760,62928,122560,118532,43687,137472,163689,26680,9878,17448,51035,16211,60834,36749,29178,14241,59868,150086,2305,26477,42422,34342,165341,83279,33894,14257,29928,12743,13957,125571,89134,66712,10952,16507,147839,30146,7249,16565,45399,39874,114565,215780,31990,230881,171477,102,196546,44538,10880,84948,281705,86651,10617,31395,2342,453658,43569,60561,132901,21845,17727,58556,258242,22262,58728,4008,77997,11806,37431,30599,81375,109137,185787,114085,217292,97453,169085,30593,60212,11544,102056,65580,2384,91655,4855,95725,7295,157994,16228,20669,53276,141590,105246,17334,25440,76067,17967,39321,38911,11362,28559,63807,21627,26468,85816,40120,1025,15234,58319,69516,66512,124548,75845,78873,22137,46681,51242,85683,32909,76747,35555,43396,101465,1765,73094,1077,2962,39028,66777,57831,42048,15828,13962,36041,63657,52412,5242,58846,2141,5506,219012,134451,3936,182230,17558,17153,152237,22621,49377,170216,35257,68233,65374,6510,11126,212151,7184,2480,22517,3437,33073,30156,16557,3768,55067,86829,91e3,12350,148650,66017,79424,70885,49066,28250,21369,51213,34533,11510,3258,18176,18465,84413,6315,36411,163765,4346,356,107618,598,13727,285026,162695,8749,14583,7132,63521,184253,32378,25991,5604,30961,53675,4874,84693,5086,34811,26978,56564,7904,33519,51221,113942,69253,6664,125563,22055,220680,102008,742,51930,19494,176108,44424,35123,13025,75685,11759,74335,22250,181453,131147,16984,132115,154311,11991,76452,52609,85351,196,30969,9198,74919,2529,56838,71779,29187,116304,3504,62330,41190,86153,28393,254926,104228,105189,13264,84359,3574,12415,8534,57147,10175,188174,59504,60932,66318,16407,107921,17638,99103,49278,28403,39786,145865,8462,3558,43406,142271,29139,21989,36552,93955,72365,7176,13556,106185,37957,321774,17782,129017,51154,27938,24952,1935,39366,2791,33489,41582,56078,24558,9311,5449,218786,27808,190429,68013,36020,86003,29735,3404,87348,119357,115714,2324,86796,81973,40992,43376,93621,28784,16808,36367,2517,2909,191926,24978,55303,53308,205724,60068,3098,21375,64784,23949,26579,63121,12319,80145,39967,97861,6757,70143,67642,37082,34698,69140,122883,46151,62187,80934,429,19437,135071,137885,222647,13331,154065,327,61778,74257,40116,37493,14855,85079,237641,42342,102164,199965,71204,4662,29368,5042,113914,122214,8955,13149,102503,43173,5659,163787,69003,307084,63392,171080,21390,81918,86666,36622,24126,28887,5736,28054,207170,163428,79891,346467,95363,38980,111806,80828,9200,19288,294896,114468,87405,111715,141705,7015,72754,68463,48738,243147,33397,101210,37051,98801,82847,20397,4940,185559,18716,54718,83491,11725,40803,1128,12128,23060,5174,7745,67007,46701,1571,27807,180186,256996,18975,16837,7877,212758,250379,15440,87954,57755,24719,124057,83461,258,50864,8874,29038,71289,31627,15429,9005,4061,113851,107716,82819,13651,79656,117851,17539,111446,12938,39724,190787,4352,15402,21070,62708,8539,23777,73853,13552,38810,86117,16285,56400,1718,75342,142863,29033,378,110113,180321,32586,23606,26393,160984,207987,23783,8406,16904,24596,47274,11693,46539,60524,78595,48423,31718,20170,9009,146268,15183,191060,172765,1349,138436,37365,10970,40509,225817,20021,70394,152138,21541,66559,66544,89352,2725,17258,91345,7313,3815,115868,8660,40362,4071,103524,39388,118275,21950,6549,38226,32754,209574,29201,43495,18028,20296,40597,18370,47520,202450,24134,2219,8195,69545,38041,136934,46374,19041,159811,84865,58620,846,98749,13569,30714,97246,32186,4479,27355,92973,35214,151491,75963,37631,1561,27200,238083,23182,60756,12291,25766,39355,102333,87362,65741,59906,19538,201575,48772,102938,24438,292580,39964,66366,9004,61379,50548,37622,38732,28379,68180,76622,17488,69849,5963,7219,48143,43413,55358,540,58691,29506,19245,52193,48621,5518,13048,118625,44755,191081,42061,89197,2259,60665,66994,71210,51232,3585,142096,55024,7892,8345,58653,463307,65658,64319,137941,136323,53499,12746,43492,6978,95163,29925,60175,5128,7352,41463,184756,121146,20473,18426,4598,5309,54580,14277,121151,10691,56711,43880,63409,76682,11830,172218,264898,32632,66536,81062,31649,25788,92774,60222,11100,63159,9432,224657,25240,53613,152,138620,163829,2397,85345,12501,37507,64932,38575,43522,65789,80198,78796,35226,3851,108891,73311,3060,28391,93671,39663,46142,30982,66041,37281,68157,26553,71872,81142,211527,39747,118119,22695,2859,11066,20232,168911,7933,197005,17066,111071,44434,133994,120798,12766,227798,45756,132852,29917,36076,55352,65281,129800,41958,18944,84678,18580,168093,132621,39997,54092,27740,32354,3770,114118,103242,43918,15899,18574,145944,3190,123469,219903,24169,100571,62403,16776,92779,14535,17168,16475,14304,37231,1712,28218,242754,61688,28980,1318,51359,222657,99200,67989,31772,23932,35351,201251,49041,27306,19128,40135,3986,77333,19649,120683,151927,21081,7076,78375,77501,101599,8011,89585,96715,58179,5378,102138,106793,26051,217276,4197,16297,27014,46721,13322,22806,5278,29629,70632,9647,71519,58818,40603,128530,8903,36770,56900,31483,26935,43845,34265,34920,87658,6114,84767,64250,47318,50720,19264,162514,33357,13117,6705,46696,75032,71054,87004,42035,69138,11903,99854,102328,19611,34525,69312,6431,49842,101600,133178,108751,41829,89939,225664,48916,99556,9195,130387,5960,36857,116724,53518,94002,39077,53996,6945,22261,64291,8314,152785,57588,16522,9091,5048,87671,35441,39509,1945,12423,158923,178413,37549,14095,1475,73188,62878,4819,24012,68534,42606,4010,120809,57497,59564,101758,103718,32701,80116,12345,95834,46918,21468,53213,15665,31200,3867,5140,96013,250744,21016,10069,13968,35449,180829,27683,39704,59956,22893,3115,26293,32785,75934,62445,141162,62720,2018,83638,19949,114012,95006,3330,99829,130935,309272,9565,55874,121727,37017,23586,319858,40970,27602,8625,112329,61060,100088,118525,25922,16232,1907,60671,51583,44553,80993,5262,94679,8676,940,20736,11823,3020,16476,12340,152600,97416,3703,25744,66826,16245,16876,46446,84798,74227,176020,45192,61955,75496,23946,23626,40372,26036,6149,11822,30582,16541,41914,82385,232823,40921,80773,14930,3631,7517,39619,4348,36180,126106,138939,62611,1477,113512,47321,25052,14546,118881,29060,23589,128322,36795,18401,137921,104699,267929,36194,172791,18113,4766,188215,30083,332586,94089,5805,77909,22194,68234,154976,43220,40660,70001,184893,138095,11128,103010,22663,5108,212615,8485,5565,49222,54614,26530,42639,16319,55062,152662,105595,21114,22216,10294,68158,10436,86950,7206,62115,3977,3657,59874,456,118617,18156,106663,112229,80992,17442,8217,55551,5133,34344,251927,51153,39364,201321,7816,66803,23057,156724,145664,14276,95705,979,2796,6875,13429,212525,50602,26276,28284,3424,19465,52397,46963,31420,51399,206476,92317,48851,637,100820,83349,10317,60227,21972,6908,282439,32857,224767,95629,83882,42106,87338,69757,29840,68709,37665,45244,114577,49188,175943,54009,186746,106158,70168,3358,234002,50555,9221,129338,9562,20118,32923,78479,118280,65752,4977,10474,102174,60947,129006,10570,83451,8598,8078,159367,123785,80438,16742,5905,5281,181513,42402,6977,163136,93179,42191,14968,50421,112401,105440,33456,57347,121611,4221,94954,36517,24046,27796,6255,33394,72990,135408,116627,1233,57874,25654,95419,68156,401399,313338,55208,45573,93124,119251,47200,38196,11909,130667,45391,73904,64964,167846,4137,115606,52036,62214,7969,160925,7187,1132,134835,40309,73195,64494,80472,444841,61111,26500,45323,40743,53625,52797,22659,15631,29739,36706,28841,39147,102836,26794,10536,14845,87305,45874,12241,127587,83833,57183,79722,30844,41304,84655,20825,92500,3722,25655,27811,10157,81634,31362,34088,92487,70123,22190,185100,72658,139035,192523,88241,2078,230490,44528,85638,100198,22088,29982,291233,241062,13865,4445,137791,37835,107218,31726,19718,38234,72528,23046,19177,66695,5109,17251,28077,5617,21554,47839,72425,133825,1486,73065,181275,141508,21768,62971,63082,2512,34200,9904,120309,6392,91243,68416,268253,41199,116757,138551,185526,41246,28986,4093,19057,17295,4148,245766,122360,35356,112075,20301,75441,10998,7977,19769,62922,937,63547,100196,26427,157820,20983,236696,22935,8140,90315,156004,47204,140973,7726,45097,52725,22636,23436,257282,105247,522,88389,216031,202204,46812,211666,19693,68828,81691,45925,11256,30292,372,5236,167826,88328,232776,151611,5360,82104,18841,80393,25465,18285,20320,72377,31730,33160,45803,38715,27705,37379,24163,18360,103586,4015,32305,269494,91252,20080,36567,54650,7797,57073,12650,31164,42209,6375,261663,105528,81661,106002,2800,5375,17247,43151,4442,15727,194619,100855,144898,62320,78465,39929,16454,1967,28311,61363,17219,9395,8745,121445,76939,80385,162380,22009,54191,44248,16299,122830,48151,74429,78291,64755,14238,44966,2511,17712,67954,93583,829,105899,49935,84750,11591,33185,85447,42717,27409,208542,28965,62052,52525,5597,25694,65594,16343,63224,276188,12475,9331,127507,38522,57287,24128,133161,79723,105548,133695,48917,27558,43278,46520,13778,141954,110785,83366,17715,46317,105763,66298,147013,41086,94180,16478,220447,44611,730,19722,78975,117889,125643,26254,16574,18480,65006,15806,38549,246418,46052,36056,8440,34984,30170,3163,59800,4458,115442,4283,41970,33507,104078,1653,22,121158,276486,3655,6338,24048,133421,23641,2161,24422,36006,8086,10675,181474,12307,29514,59143,14729,52509,87128,122470,19446,80852,33314,24573,119864,14237,9652,57779,6612,51851,15284,98871,90581,124466,156831,21190,22015,71380,161906,87247,69201,18392,17908,108470,72962,40719,14338,17911,95260,43339,20610,78916,20710,72451,11315,31448,17263,58853,178878,48111,116002,45497,80506,82605,85880,36300,121755,25215,36118,301929,88728,405223,276136,553,34704,212438,49970,78329,922,20711,25036,257130,38295,145369,18128,15385,30829,55656,48345,8012,3561,28004,122041,192900,58338,112508,41085,29976,87040,47117,23905,4336,92061,138880,97407,42083,172121,6256,25192,172671,5,93568,1420,12677,31605,56743,40620,6015,78415,231077,31298,80026,13902,19048,24924,170586,32955,176119,87859,36731,6773,27711,24658,26475,115216,133207,93250,95820,88522,8317,5714,124047,55219,86860,19677,23961,22928,162209,8904,225992,359835,56084,96201,29392,96558,86071,93643,55114,13347,8183,95129,82012,2017,123336,34219,115554,157159,47747,101684,41008,18735,193781,104151,226906,7552,179874,124113,31159,21162,44010,14771,51268,166128,31382,73124,77438,92830,205709,12113,1292,38937,13114,1334,2118,15597,69581,14449,21934,76618,48728,67038,14967,51495,24243,87736,147249,26720,11119,46063,43749,5843,44147,152629,133428,65703,14269,45604,57982,28672,55616,45957,8438,95433,37698,220862,132034,39456,61870,4161,26501,73560,56418,9845,4654,20916,10456,88920,119358,9015,65931,96507,48029,38534,21676,109081,43078,34943,25089,6131,28766,23665,5477,10255,16695,67,45778,42443,42770,29534,23733,100513,62617,42630,48746,14191,43753,50295,26007,8792,57243,43119,54725,164253,58250,112304,131796,25165,4651,3188,24831,47748,3705,19540,13211,102095,5593,18699,23666,32005,117571,33541,60584,74573,86311,99443,25172,27222,168938,7143,11853,53560,18834,19960,86522,28217,53266,117700,72989,34323,18721,66450,34346,74056,47217,202002,46269,9429,68582,75458,37823,82843,96652,32549,145144,27958,19820,158086,31955,201406,135379,31207,192545,12950,51704,9094,248263,76147,64028,110009,79407,89345,99284,223492,47966,26848,15359,201137,2861,110507,71231,72297,31851,118777,71039,151051,240855,16333,50766,14727,7939,4149,80908,418780,88378,59276,1327,7284,38576,79814,65820,42199,84860,49574,62596,12396,70598,40117,8648,7994,16836,7630,14047,359699,106878,525,29037,28064,13380,11675,50669,74216,103539,180314,27449,56299,172344,19274,7301,246099,32043,19422,36506,129317,6806,30140,4614,46639,66926,932,86600,6322,27847,233103,10541,39025,34887,3517,12972,26220,2031,66561,115015,48658,47596,12714,33845,3893,16165,35237,89983,14769,11962,147224,47018,29977,27979,5552,82338,86023,131368,1218,24853,237840,132193,15455,40873,3668,65351,53388,15229,59889,272245,47934,11858,34347,18038,90853,86981,300602,19343,114181,29362,84921,6095,106059,79472,38015,1206,48741,6208,8e4,21916,17423,6002,108083,24479,34931,56661,9511,26995,100694,163853,35997,81254,58321,18919,171890,86877,91341,74503,70477,53412,7027,59281,39892,131302,5864,15947,61301,67466,162369,47956,27874,35624,282324,21270,111847,102548,41482,30955,116737,28264,8592,55458,22301,75090,29821,30697,51709,3041,19208,8038,24634,30467,87509,126428,19389,18814,152686,20701,83474,45832,80891,105808,11378,153223,120770,98186,150633,49838,9141,12755,30962,5260,74490,21256,31678,65062,33326,289838,187831,20595,89768,2805,58535,10844,70085,12090,2451,138068,98544,24461,4511,6754,41684,28203,3383,65355,82833,30161,83924,234361,128424,28921,222594,33975,125491,34069,11508,67464,144226,41850,98703,34371,7901,21254,38398,65651,23549,53883,213340,123269,12028,71764,177701,28758,2623,68395,11549,15232,68603,9660,63116,36079,57093,31198,20475,48467,89984,35619,186847,107469,31389,43631,73867,41949,68841,114250,1605,30564,63403,17588,27680,99533,12641,70325,50428,73426,78379,11855,91651,72081,91720,60198,15743,12065,83398,140046,6761,46598,45900,5068,886,62448,148968,37347,19405,9680,15819,43496,63370,75667,163700,37639,3633,22774,34341,183131,134335,37200,23915,7054,14194,12970,26438,13350,285521,25594,8219,104410,91039,168804,138480,149734,15907,33818,61132,60082,4622,110187,56736,13551,73571,3945,73463,65498,17758,263266,17593,2710,27585,54469,38200,45367,63754,28881,3473,12791,98287,31895,65787,4463,94536,24951,36332,59901,28803,52130,86403,7668,181822,74831,18977,9850,177206,145485,109798,7292,31421,26280,77211,58511,12507,127004,11113,147,8729,56208,43066,79926,129937,31345,83947,39915,46146,98763,42566,1337,13192,18323,105163,80570,117753,16555,72883,11077,159438,40764,70933,83329,26066,12276,72059,21655,173836,126713,69454,153482,91585,70644,102558,110483,6764,127864,190133,3961,101798,20945,71138,82402,90884,69669,44753,923,16939,59700,164258,25969,27082,31399,43846,6306,246093,51342,6153,151581,202801,182731,56475,162188,89426,141356,14355,121815,27536,28023,65257,77523,106668,127314,24947,12790,38796,169698,23555,10725,44573,183083,42088,62716,43265,105958,32050,44067,50118,1668,3874,6243,318411,16599,1691,94999,52378,28671,216728,123258,2059,34969,69225,5913,136280,171443,141515,91662,22175,135282,80020,92270,1663,4808,4482,3495,34691,5226,109830,108512,17342,107488,11606,123190,100247,29666,146527,113014,15794,30894,13224,39585,243192,22351,9903,7836,47699,11078,25468,122291,48821,26780,122679,75521,81450,630,4895,92900,55074,74293,17441,3563,111657,103102,51613,12318,52370,36191,68245,34269,40445,41354,122901,168604,182500,62012,42557,11259,24428,115113,86345,12362,3909,78430,86852,134602,20459,47853,93879,22577,7659,3688,38555,13349,17381,56715,91639,12493,10895,92438,3142,37057,28928,2004,36427,32268,34222,209974,10432,67436,41989,173518,107930,27079,62729,30908,55558,5828,45031,14902,53546,8204,144263,60255,14520,88212,86582,109589,69356,8064,47449,8505,66558,16886,4844,52817,111260,215129,12941,91118,650,20770,6273,73089,40618,62790,2873,35002,14023,97208,19386,102646,36993,143736,135457,35385,113601,17893,32627,84439,100619,56016,6581,57264,172160,45452,111710,203627,70131,24100,322787,1996,35665,70078,22358,90922,83658,4097,63200,58499,14542,99153,52159,6615,12414,63415,31986,16823,1579,65405,137809,8841,16898,48082,259,33014,42375,12260,179850,73667,91389,98882,29532,17311,326251,41092,5928,20742,44964,48019,43505,9317,49265,6643,192712,48424,163487,19861,20113,70848,31928,105333,23685,78563,14638,54755,7158,24142,44018,20774,125255,20331,24280,10163,1285,2336,39851,4299,117269,46714,63816,87779,159624,11731,9971,990,137317,108831,50994,74554,162680,23640,131597,146962,170620,34829,91205,21184,1913,63616,18427,93136,156592,17519,67565,115882,138220,78622,88535,18115,2711,33554,109492,54298,971,24914,25863,36363,45715,27099,194995,14299,178181,111488,72395,322385,157719,130787,11897,81843,83999,11369,49280,118604,40922,61332,110343,53407,75639,40582,300440,54722,25637,13694,48248,48278,194521,56203,52779,48783,72627,10953,376,16733,280238,26351,230789,15132,25168,137270,3588,63704,73376,94031,74284,19443,159557,9697,39901,13351,119050,15406,146455,3460,29556,75195,37673,102524,92329,47289,98413,15311,100684,56345,7116,95480,11590,7200,167,23610,58426,17730,136656,27944,53151,2701,8824,103124,3017,90744,113588,53216,79736,65940,26931,498,29568,80540,143543,21292,1740,59268,16561,180816,42323,50174,40890,52866,10703,57169,4700,17191,4424,93511,49698,166650,26972,48631,165169,82879,69326,202970,4007,2376,231325,139592,22119,62851,37504,68816,58345,67398,186643,43331,277416,53749,15746,23102,17432,4793,151138,48822,54265,48203,198688,14305,54287,2291,18018,113378,123260,7180,97549,87027,120085,2920,76080,8190,102005,5641,64580,14955,59802,54028,58884,19367,81779,412567,85957,97053,103637,78871,29364,27637,141728,4767,30686,112738,130146,42745,12730,105040,14844,232,210944,36581,152317,135543,29744,3129,55647,58149,46319,27265,17499,28005,59948,7170,34138,5702,293047,110892,408,91760,218674,18469,46095,81403,14389,4610,35672,73060,11006,74848,104820,118143,190357,20043,105358,141735,5115,27093,45924,123073,52599,29433,9616,238350,78610,24851,58858,26769,31969,24613,18294,4982,32735,39639,143563,112073,202205,12567,4873,88601,44897,81503,101648,81362,34662,85277,17574,48173,21435,221188,40215,39576,80786,26544,64668,81841,10731,37733,247986,149188,127703,495,18382,54388,72446,43071,30974,198723,89608,41360,190,33045,8386,31658,19992,237838,119015,137622,50890,100913,6460,116233,267230,26621,104129,65114,14190,41542,14888,85962,23342,23041,26453,43725,71809,45186,4770,46452,53894,56616,221286,18973,9038,109299,55365,19366,26863,18808,60909,69353,41738,83463,12100,68561,72860,3980,13796,49340,12332,31311,27418,4255,53430,18976,45523,510,14224,30477,26581,4530,3651,101663,139840,22709,150861,31996,63923,120623,262522,3076,10528,2929,14672,130238,18087,9816,121894,100308,25085,55111,14565,18952,53293,2042,369988,23674,61789,133529,28783,108293,35477,47119,36448,71049,40015,33055,78598,198442,1833,159937,40654,77444,189245,113153,8621,18599,38553,35223,166072,2375,11659,21786,89523,6032,12116,63046,159398,18454,3678,32521,47626,11411,103527,38896,42946,15696,26370,10185,8413,37080,165583,4331,63555,14907,72220,50056,6623,62236,36565,49783,10049,17503,100581,55951,146244,24724,9626,17969,25524,109300,173965,99994,101056,46459,43647,53737,277968,8347,123521,74858,33829,44762,77574,877,81377,222525,123532,30602,43881,53145,2973,16284,81940,61281,127044,63620,9875,14756,114829,19032,9202,52759,119141,23928,120551,19607,3599,33401,76821,73233,117430,39968,36539,7071,5446,121735,194059,15206,45283,6706,15603,65615,1207,165723,92275,34773,104447,8396,32353,205240,164323,13600,60555,79205,25532,22907,33410,57480,107111,69630,32137,47832,70913,33161,20321,2371,117348,10714,86246,1625,11763,17900,268,78457,99175,97940,101092,86660,32221,14041,128504,125080,53744,124263,31017,13897,403,31859,21964,5633,111630,5547,77329,17961,18241,84995,25984,12983,67491,62168,47262,5241,297,51191,7351,8967,147212,82060,16821,782,11033,82431,62957,5026,43459,77963,203477,53528,6247,191852,87774,74164,215654,13467,1522,219964,28589,244104,16242,117821,67725,72570,156792,17186,15979,26990,44128,193014,35276,57125,16212,166451,68017,6905,77608,16364,53777,75921,76426,37975,26203,269296,64099,84122,12077,38533,830,4407,20139,963,43028,38902,42911,37503,83343,85045,16979,1165,60835,137387,58380,86990,110066,134540,56331,193845,81238,17922,163093,38744,110641,12502,56404,34862,26865,125964,12965,111648,25547,7771,27196,136980,9555,29551,107158,57885,18831,37705,35505,101742,13970,102109,62548,124657,23328,11124,89592,146376,248050,6241,22033,18337,80685,29898,11908,216623,67721,106162,146610,21377,15085,91552,42041,62560,122532,125336,102365,121537,142559,29693,223919,11515,110495,18776,22494,5895,185059,103592,229351,51220,100102,37027,257855,29359,54123,36066,106493,12244,79258,32002,432,56205,94836,90182,6726,14762,29391,48938,26864,38083,60364,3310,60192,14766,205567,57504,110760,22649,24666,46333,21517,3430,13135,28873,27052,158809,11597,20529,6695,23138,22960,37137,45574,6545,305877,43423,26153,24769,59844,14501,10430,134352,56169,13213,103432,49523,35181,13435,12408,129475,64620,230854,77390,51990,15653,83248,33466,44571,117828,51481,2187,10559,68019,18021,54895,48247,18354,33737,4554,108595,37288,39767,116707,9175,3726,108877,21616,83684,49862,1938,8543,276466,20134,108498,48770,102254,31914,131520,185291,100559,51890,209,19526,76471,50544,71814,99351,8172,198526,28816,20419,9109,98389,136777,76479,75596,30635,165417,48216,120220,25955,211071,39314,24308,32164,2559,146280,43403,9233,17947,90585,1786,86920,125662,2457,64741,32152,32918,122882,78538,44001,31723,56426,23375,103172,88177,145697,52506,49319,68016,31664,41488,18486,110400,7030,28241,986,109199,19900,42147,56864,65287,49183,7858,24e3,30453,840,16673,25907,68916,89927,6309,158335,36407,199737,130464,13137,59603,201778,195292,21015,42466,179062,172561,89492,11075,180407,31868,72493,20998,60217,9865,19530,39274,130266,54539,21623,12535,13505,40641,73375,4087,85633,2153,3117,70680,55788,92096,47509,98493,37490,271936,151475,3032,16171,96642,34106,78425,125761,19591,3366,19316,54508,24183,50786,194248,91528,33253,34622,108355,41741,705,3814,3883,108929,13203,67831,10142,59754,68208,29128,84820,56880,38794,24972,48571,40821,40476,18137,164254,24064,236309,79181,11282,395,39169,2013,51587,28551,9645,701,109513,115899,113566,12762,62045,58322,103726,41343,40866,244102,143816,2490,70346,40973,52618,15412,30720,104315,38917,42027,93676,17513,107418,20706,123890,13399,97727,24044,87962,65606,44250,98044,65276,74790,101473,19350,91570,1326,87790,172042,7577,100813,86896,85891,41512,108130,27794,14875,71431,12835,156250,58135,3759,22476,42176,115873,34686,56523,73643,108505,51491,20838,12721,32863,45700,29496,13700,34294,55360,29206,155942,123812,7706,163234,203,132720,49358,144431,8130,175788,35818,3270,76832,25710,54095,97274,28779,94621,74396,19092,128242,58067,20885,14670,93255,15107,63291,23654,126900,129421,59294,262659,9798,3251,67344,28600,44629,50672,29072,26999,31526,23183,49175,165843,175455,17282,175411,32022,45989,30298,90690,78118,83156,23749,35636,31317,7069,80381,94561,133756,14960,97404,6138,41065,78041,32843,16601,34123,9559,146529,123377,96395,54441,42012,84257,123541,10745,22139,106459,11720,150883,172651,154996,110538,4728,53447,25704,2009,71152,119354,21166,66604,1429,216162,8637,122250,63520,27180,29172,36124,276428,107787,77184,4680,14952,104903,24418,14793,51561,52931,8371,26342,48526,7118,92066,67280,40653,8847,34597,105438,14198,50163,61188,146286,50315,41205,170829,161496,585,197359,95056,1687,365794,91349,48507,5804,49263,5146,104902,96365,117343,132222,46084,96919,16875,8073,262381,79982,52663,13928,16056,153908,15145,109256,132308,18763,24904,167644,13618,40750,18686,147124,114709,150038,52849,2938,12568,48617,8778,5459,44202,44591,74914,17183,248689,13878,7822,80060,23116,194037,18487,2067,7798,43077,33678,244028,31320,74273,2794,19466,8218,36280,183997,48124,19416,29656,19280,98734,7715,18311,30701,133602,150307,126956,7378,2933,79903,13178,12593,86571,26604,92446,13574,44205,65699,427599,21118,8245,14407,27877,47936,33542,7916,26460,117762,21596,37818,2249,127359,209394,60044,47677,308089,36791,154971,31417,6998,150042,174360,12255,43009,29335,48739,3912,101398,53340,2580,146939,151295,45360,125275,15273,45383,27456,48761,23314,8750,60801,85823,104759,27894,123685,66968,39480,26917,55290,83305,2696,98390,57569,145853,340733,4919,20024,52268,30884,7413,203685,70989,112855,4129,50536,349518,68205,332641,159581,135361,236026,37563,176404,64899,6578,122033,63871,1850,85234,82089,66124,74145,121098,107351,12687,36881,117334,13136,14698,85933,93866,18047,32620,310,15094,46e3,88451,23632,36645,27940,87618,80520,58892,20976,27702,140090,96075,67841,103292,238964,87778,107338,17019,83427,67522,7302,8261,47570,116787,8730,80484,61772,174422,56005,131193,52875,14588,28471,59817,9586,15720,158155,51307,109734,15196,11025,59331,3884,52626,102602,84797,25158,27314,4437,20488,76214,189248,35023,114952,157376,2827,62439,102878,129749,36405,10329,109339,108633,36662,1254,13267,5470,87105,58004,15397,10434,159667,21864,52022,179464,3013,32147,31496,116832,18494,105502,129227,107267,50033,13481,9954,24267,22141,16257,116154,36185,950,115685,11305,176708,2048,178671,112573,287867,162328,497663,95170,50979,193861,50987,30368,136257,31830,46549,15119,169876,23788,17462,249887,57377,1949,35448,14791,43769,210091,3783,34612,282103,88380,245190,5457,20491,98908,11402,86899,117916,16028,162584,60644,320177,156096,31065,55876,22e3,77655,9992,23397,13757,317623,63978,215255,2443,17648,93231,27388,104529,93807,55505,140477,12046,112040,70887,40152,94365,112353,25063,114679,266061,71248,119555,15589,2244,617,14129,211431,70110,100652,7777,4383,85911,89221,21010,120615,58357,86405,37554,41647,18,15143,69662,60491,14714,186134,148344,42347,5410,168175,44535,42449,343894,129417,99682,20659,27272,140483,63455,222159,17536,13722,42637,62324,11976,114691,148109,2283,32057,182393,4295,147364,33705,2075,44303,30274,28331,63740,69740,29148,10346,44862,33716,73937,153333,12930,38784,247159,2515,41053,20256,83368,256189,54639,115240,5096,24661,175419,153552,26516,141,138176,63885,34115,47222,55709,2765,28479,38875,236608,12229,22921,77291,54426,45388,2860,57787,114579,295139,105782,17826,71066,19119,54364,69385,16568,12323,28057,33346,34919,124763,155533,101386,31644,8627,49001,303600,29868,63213,9103,77280,71333,9696,138789,37059,24823,5057,21352,32368,114208,56803,19424,10445,58514,8661,209508,26187,171838,10460,63454,14016,122504,41328,21329,46618,32493,38225,7855,31763,7945,29876,8734,6438,24205,97490,139977,130740,47323,33195,85390,57194,13813,60600,21313,96251,7699,27584,170521,139271,1363,4402,336738,129223,84983,69150,13147,3590,163929,207225,155260,55916,20288,4503,8398,98490,11773,27512,37113,84976,86558,28365,11756,116005,182148,13733,115313,47644,67208,85069,9347,14995,226141,14704,101835,41159,35314,13113,63526,214039,29978,50446,83339,17440,129441,72522,118641,97816,24907,73844,15717,118884,167255,96509,162793,30847,36849,51297,78974,77793,10427,1873,2972,9999,35074,28190,64297,146836,46298,60038,163007,108919,61219,2403,75022,127339,4233,110389,69022,9833,128097,88016,79390,222936,22570,94657,28462,56956,38803,81536,30474,152794,19566,16481,147408,74574,81895,20731,1918,1366,76367,187321,54494,24366,21690,61696,33283,107477,77499,31112,414383,74362,18463,218441,120929,59848,258629,201924,69269,454,19989,13054,59894,3623,58908,20681,35723,78523,102680,38988,184112,108087,50944,132704,52966,21699,18860,96349,201411,82697,85395,95658,5093,6427,177894,44191,32755,26961,155739,6249,31310,81030,26574,84311,120155,86730,113535,7424,48888,13516,45747,98098,20077,183995,81945,43210,26704,40420,75831,45648,11180,6855,57927,65528,124096,34851,2598,156633,107572,127352,38169,123845,60142,62722,105584,232364,23211,68120,1601,22169,89299,747,258039,80572,7258,152249,11862,101204,8834,121434,33761,19175,133142,46343,40178,48723,3589,41977,30210,38868,62257,10087,82658,87827,90646,16415,47552,351723,28298,72225,91146,272760,1701,11295,1652,109651,300747,51863,198800,29446,11794,32345,37538,22356,33102,37590,113544,37970,11478,179743,25454,103417,59905,221970,105196,145604,7817,164809,102360,16974,75840,255333,56902,6659,1954,645,59400,67769,7689,18675,5215,13793,20536,27852,3387,29523,259718,16860,94625,43143,29245,15848,233581,22685,63631,78557,22836,133302,84513,1348,51826,47129,98836,58284,1830,1749,94642,10933,6145,12506,10975,13879,103781,144434,10268,28409,32346,52968,121567,107374,77268,23686,35097,10501,155275,15303,47136,21102,168741,55332,90385,15996,84817,681,137803,25054,142275,6163,38175,8056,124296,240642,65621,4934,178205,16101,62803,60964,18230,100622,76465,44689,14545,9543,47514,16852,93380,28048,12047,107106,37575,101485,77047,57326,34819,96137,76916,6469,46264,115983,75768,87668,69942,13027,165,8373,114231,26434,52844,42799,182044,23580,146254,38081,43236,33883,146220,382894,14606,46035,36481,166621,35417,95382,2957,59384,60428,36358,66343,75378,22267,22950,83528,17577,56474,25285,4619,179691,75355,95836,53295,34588,171410,4487,14679,84208,44015,18562,109133,54101,11531,86052,174479,303157,28095,9953,35642,14564,39802,16145,77606,117406,53038,121117,53624,22062,1212,7632,127157,237292,189087,10478,127345,102515,181997,86752,87623,10966,121602,68783,68681,83042,114380,138349,191305,67176,50085,39016,1427,42384,1412,67118,122616,72389,25260,2237,13576,137346,19938,20304,2191,68759,5373,61364,238507,75814,23931,69565,38993,131741,38364,12528,87762,5679,129853,5310,186831,32653,90338,260176,389531,108118,26843,43985,50175,30563,25106,56965,18130,140428,4542,165503,117991,24219,229605,1819,129663,1240,3797,76093,18398,71339,51919,93043,27175,47060,216257,6483,35051,1217,16512,80798,129064,13225,69339,8548,237079,72298,2575,34280,51379,117910,55671,53345,247552,29486,39328,140821,34681,57045,60177,5004,90269,78522,2479,322607,48474,61296,13057,31558,4678,59271,6699,27044,31988,35944,12503,83480,4389,136508,3781,114121,70279,4488,155829,42214,2898,68191,75695,305850,45041,74344,106509,30087,17429,93292,12477,290,23080,114802,35714,18751,26554,105424,17775,2144,2412,100610,65192,113975,52975,180272,135050,129815,76238,106483,21440,63186,4260,46189,9711,28249,4169,23429,23390,8324,141585,63809,67668,38457,38063,39226,59972,1189,203916,62368,14403,16949,61767,85801,1739,40147,35049,76757,33124,62102,15780,103593,103009,53484,22952,67973,114645,6566,5245,50462,7601,8288,3513,194571,80276,1908,54592,5124,58571,2513,6800,273997,193904,1119,17991,117245,2508,129156,82366,26278,71465,63341,56943,39662,106116,94966,156875,9736,2204,122308,94418,27134,1280,24539,49022,45314,3764,50904,46424,30699,28087,293839,9400,33646,40165,822,147499,50263,116179,29085,11863,31314,5578,17797,5104,12454,1604,15342,219206,10232,67800,94261,25872,13565,90339,78971,75377,26649,41184,47695,11514,35369,20767,14227,41953,309396,148270,147938,33074,14453,27499,109019,39018,25738,240196,158931,52820,8612,95853,21524,137010,84901,70869,70021,116794,48404,38771,6732,1070,70990,187297,49140,5238,576,3564,253975,16027,16483,2811,37775,19034,25259,4053,2e3,70083,95774,19713,33431,92703,91314,42381,288770,48194,95985,3991,77418,13406,241328,245086,56533,35275,62725,9246,51924,70181,95331,16163,31410,79016,39312,120878,119371,275987,80124,27712,9186,220,23598,146167,85209,68238,282190,57048,31273,30555,80913,17594,75779,59160,135002,101219,189377,29225,96735,60126,62522,104e3,27620,86814,17240,147533,11001,5425,43682,410,49460,87270,69480,46315,59448,1816,76201,9431,11788,87960,29063,65539,47347,11678,33846,7008,196704,9895,6753,8633,120892,59970,572824,115934,6646,202559,892,48351,37611,251282,57823,67263,57750,26527,34485,90747,7685,88370,6144,64182,1709,41969,21458,62327,181657,49247,225330,122600,114574,107124,85361,111833,63243,71420,15655,191178,72430,18063,51425,54002,12364,53225,86557,18193,97580,41232,138398,67821,128724,8944,233212,101353,52099,42127,14006,120107,32789,32132,3498,18123,33758,56058,5779,128760,59888,98869,18445,84702,51911,13234,218379,20093,39031,8074,70195,20708,23462,24355,131384,60189,26390,10403,41060,7140,10781,49410,42261,87202,82566,41663,43105,60276,2768,5733,74176,28329,2297,145430,131632,83615,122915,105441,655,224102,5284,136426,67763,16294,188511,32538,61049,27893,3394,13951,159099,28542,17930,145360,9492,190122,32285,78855,26440,13570,58648,73908,4239,124561,2444,74172,53131,11468,10794,73566,11623,35343,64710,30481,4163,10328,38309,29901,10538,154377,76132,92405,24839,11679,3465,13449,11637,7824,2337,57754,1260,14458,41118,19878,38661,13416,159180,37074,163164,54137,28627,52134,184900,8520,40385,29546,30502,22386,66527,107458,6850,24022,47983,30603,35083,8934,304066,39500,9,28261,33026,77251,9374,44833,116312,34990,29236,63563,125639,135405,165398,159055,55690,88141,69643,236964,31983,25572,20436,36746,60896,31850,16179,11828,5888,3043,66368,9750,31167,7915,53111,36430,1333,64344,93659,20061,60596,180191,51630,6792,30244,43509,101058,22409,420,44210,109783,43223,27030,72477,72831,32679,29235,7675,47556,12258,39907,149412,84926,118247,24692,71717,105038,86009,45941,41189,89453,29856,52543,30627,226798,67303,59230,67415,34408,1367,99685,16867,128419,52147,4111,125381,117881,16173,44093,102224,31575,23234,24870,83790,127407,239098,3200,994,1255,100903,242275,117266,55116,38205,16140,29662,11307,40414,208793,123355,56470,4862,75600,30119,58218,70828,24075,26974,7802,192353,4851,5475,78720,66596,3409,28573,64396,30381,30690,59859,88256,5406,99945,103064,34463,37727,24238,86643,60088,4057,23741,5967,162904,38240,28356,93858,25510,122879,6897,3278,7057,11971,4400,35461,211413,21395,59615,39471,87233,55795,128426,3051,22470,41950,14705,3974,180108,80476,78442,204996,91987,15634,67610,139015,142373,35611,51134,10387,4353,153456,57749,181039,14183,68447,151532,21107,36452,20551,3186,46247,46383,129666,88736,140662,146243,2066,8360,7978,64818,106963,17896,47801,10723,114821,223295,74192,3293,3393,16987,74064,11277,91622,4270,29828,27951,387869,103235,1374,61988,120083,477,145892,128378,11779,211263,61354,18221,17869,46530,83061,108538,157981,90608,67199,95080,49064,195814,12302,66307,10348,231346,160732,112859,63633,146558,21271,31037,198802,47622,12862,95710,3910,77850,73961,85585,34752,61e3,4082,24595,103679,71107,8208,79568,150019,16615,24961,139857,32664,197366,4559,54735,32696,4126,162019,75698,13916,70108,159638,19834,9349,24675,175560,49643,18206,52459,27992,10809,88865,401975,133172,29e3,34558,30915,3658,25834,42430,36562,125265,18182,10155,40149,97082,208980,19575,60853,90529,66545,9600,789,46420,2317,88593,55595,98980,115302,5742,169155,1073,177901,3472,11189,63711,78643,65472,50459,127979,93,42202,67053,21720,157650,11145,141378,42033,22824,85705,79114,35584,15974,1510,54172,28562,12451,104226,19190,97151,73024,20948,5151,81741,21499,29006,84183,198074,54003,45120,170125,26240,35177,28389,64863,79974,60778,176915,232183,45342,2038,80253,41564,40703,32689,5430,100689,5366,23007,134279,14266,26712,73993,24934,64242,52113,102887,61801,46415,201049,54251,62133,122757,164883,30815,139966,2319,30842,766,13362,10287,134518,86111,81665,82440,28333,43019,18963,8804,161944,23439,102144,101145,80029,39052,248708,30350,117340,11878,128467,974,138625,63961,5237,74778,61834,67040,43814,13690,65947,33809,232476,115258,181745,28824,94013,9510,10246,93722,81976,7217,114383,3493,16014,69045,72692,12145,80981,9507,6692,1620,60820,330444,35474,33962,4797,7053,295463,46445,27026,12491,77988,49524,35675,90947,29114,166705,101385,133782,32704,6186,84595,176031,185623,45966,151302,63069,1699,107491,947,15458,74452,196212,6046,10498,12163,10239,35191,243951,9277,9090,29539,54460,22820,26514,112549,60372,51753,48756,21812,70861,260326,41,44222,10441,16961,48148,138771,216194,5914,52153,53400,212036,56519,26245,10117,45888,15294,138019,90913,26368,43842,42111,23348,6082,194845,161089,156206,51546,11647,30759,302912,262094,8635,78876,26535,35283,54183,31183,85484,147873,12989,5197,6356,72894,65347,20150,27370,73787,1493,45918,12366,190217,20724,13858,10981,67449,81213,7553,14115,72242,271517,11842,48310,88743,143726,22177,3290,243231,58452,62937,12592,1654,40066,33477,13751,9921,128442,15868,7106,75236,83773,10775,36938,10482,170465,17368,17469,161508,32752,98340,800,19824,264456,3901,87319,2867,26782,9630,113102,185815,24197,44584,86366,40224,3636,140916,31731,267731,9567,53678,72984,29389,27963,17106,50282,284911,60170,8322,12608,23374,89652,5268,39044,229766,8869,151350,31436,177342,12269,183212,120418,116270,2843,78888,69192,7865,184099,1086,129897,18383,70508,20242,18508,229924,124569,35749,50589,55626,9884,83115,40971,30671,18135,14452,38861,17844,201826,5549,26413,17189,13561,38539,10679,143331,3314,36785,171194,49685,187713,67506,4618,104039,17060,195080,50648,33159,19238,67559,134840,28599,157523,17130,38064,117398,94355,31918,13575,34538,40326,13997,3494,348283,62481,26862,3603,104426,244363,153709,112487,304612,199674,41239,35545,54869,293005,28223,26277,26899,4533,18518,15492,38587,80488,70485,160395,263,60162,11382,222152,4696,250751,51921,182609,10707,48463,46243,1227,49111,111564,46502,33342,56846,68541,63559,858,139927,16654,229375,76759,26478,33205,95828,23399,92945,2637,35630,28470,143992,50214,14174,21456,166191,65665,1711,21594,78019,97599,111701,36,147151,110246,189022,43021,30397,40757,131935,42065,73335,48039,26596,28984,15102,2361,7421,202167,69744,43766,52826,3642,83304,33873,75140,63169,192389,36551,92748,13039,123959,233220,21738,84447,77230,20228,187852,19095,25799,92136,108774,29237,53947,2299,118106,2687,8830,42331,202924,33667,2023,73763,30704,19363,19779,16737,35629,48081,24068,101013,162338,291912,13749,24745,328289,167679,70086,48299,23306,16732,17801,43322,54589,3586,63653,43624,53474,925,109177,251316,43805,13082,19511,86565,142182,92461,17117,101033,103319,64589,4022,4351,235897,5352,82705,107142,46391,156084,5860,61365,10558,13045,7717,18357,33922,12590,33065,6928,46993,783,46937,67846,8952,26295,6107,119656,18799,17458,50747,4229,179559,112727,118080,20683,41464,125468,51560,49749,44231,7359,35339,62988,136487,67015,5208,29150,24956,105186,48858,6143,18097,6972,16404,73489,58742,97196,36357,164616,5834,32267,13746,147733,15113,132091,34127,106298,39729,106426,22294,9780,15602,36213,71502,42808,66802,599,60755,5851,39120,67363,108623,126368,72770,91263,32486,30596,151717,7951,52002,43103,11768,68942,40901,39344,24037,127500,116890,48403,16926,86750,17745,48648,159545,34460,58419,5634,114317,67865,31462,23352,24010,98185,125708,69686,68337,13610,26271,70691,2980,4768,27225,102402,75453,28106,8104,6931,1176,6274,6475,112635,22498,6176,238686,26832,28893,90319,14441,15682,15087,39517,45270,109134,104440,45965,47645,81772,7876,52683,87720,12898,4505,185665,2769,113401,15664,57592,105229,137381,97059,119268,6876,43309,33886,128363,35476,144249,67013,143587,83367,25703,91436,59347,53236,2289,16519,19844,46309,58558,99834,23313,218816,231303,36388,51333,183535,109792,139277,54306,90139,18235,8275,32710,37677,82464,86025,92204,88842,117723,37570,128723,234242,76350,73795,34896,148247,58424,11105,11744,45746,63372,17118,49772,199520,81902,38004,22911,33752,3125,1995,53792,4689,26909,108150,146062,69674,41811,161444,84855,8999,28561,16731,93937,3189,21967,24890,22943,1356,145300,51569,28802,517,118679,31703,40607,48098,108854,25003,10233,73969,177495,5248,24516,215347,146192,48712,60626,69188,40735,5866,586,101541,6509,47590,52129,5969,222045,110933,25733,24223,65339,62812,2414,155418,35819,16022,78423,43138,20995,128255,240673,46745,236093,72176,57085,97841,61248,107,36068,193177,105427,55726,215229,20446,47228,100420,87091,14429,121708,23605,21157,187721,21880,2997,203976,99166,95068,25877,7724,98925,83401,4829,13182,18229,13718,239662,38653,116505,153497,30589,89029,38962,181302,43853,78872,180301,4786,248240,7401,106136,112590,77745,19731,60880,77789,125748,135487,5975,48627,34084,12419,215770,47557,254582,10364,106495,21856,67539,88981,38805,21428,48732,42316,12149,16078,52808,25327,51322,33850,51147,12253,122354,46077,56483,254553,115417,81834,150991,94662,86668,7381,12841,100650,18218,15741,22372,68294,50705,15535,84660,61887,22553,72299,31361,24824,17743,46820,64288,31582,77006,111674,116384,30760,80920,86149,77192,51979,79691,60342,122805,103800,240873,160744,233114,78962,54920,8608,3484,316104,72548,24337,5088,230040,21926,10172,36838,26,86221,83458,102176,12062,17571,41929,41170,28428,68239,41750,103930,2634,18313,53019,34825,97837,63115,24606,73157,152474,14715,91439,37033,109806,140259,30668,174760,380,135597,95673,136073,65073,134249,13829,17279,122305,4420,46444,10237,64848,203623,70728,10349,182885,65075,24519,25783,40318,34139,22222,63394,55266,102764,41422,20126,65100,90408,53640,35128,48932,11192,38935,96839,34782,39492,19396,41332,6250,5511,19492,51304,25936,104466,54099,73771,86115,5080,7669,30891,111700,13931,25276,72289,135447,14820,258641,25265,31005,281179,75286,393,95359,14623,13584,6680,101227,80173,44933,76666,54542,13244,39348,458,25379,109451,134348,81143,6959,65554,12027,51311,8716,57589,140731,28467,23316,17272,30458,25980,55229,77197,83798,28302,114784,7428,34548,26241,14712,39336,103304,18928,54080,12870,334,87722,15208,16895,142098,114262,39820,83913,57817,28682,7721,14900,108672,11250,62246,42849,415188,1724,26555,24549,25505,26443,107450,145899,61035,43528,6901,60726,65906,267741,21338,147590,42079,18924,73017,135236,15393,5206,4026,84185,1531,5988,113890,82647,303391,7386,69844,71611,189865,76523,31877,13315,19314,198575,32821,1928,67641,25913,104475,103489,3297,70391,18406,15446,113347,19295,93790,27856,1792,167471,116449,8541,4408,41757,63233,25765,86680,64501,27034,24816,34975,6079,4486,49693,36229,16917,21581,62426,27862,11612,54284,35702,194034,355,24277,48262,87411,70504,310164,118018,12516,47559,43502,57433,107139,9290,66533,80863,14634,34312,91725,28606,21342,67241,72355,43244,375789,37402,174015,105070,8342,44167,67494,1890,16365,11723,271002,1865,47918,8350,45564,27742,25110,125803,8553,49504,81925,62211,4534,15491,19011,80373,206920,667,102405,128623,245524,5553,113309,192739,65766,19567,22832,261958,29679,21293,71134,20962,105123,24721,860,21752,33448,18372,157167,94822,35770,173224,232737,75729,28937,46828,28062,25453,5207,140366,36665,30652,6169,67920,150458,92040,23186,184604,92330,20891,176492,49427,27828,38305,42495,143982,49560,25503,90043,29747,65328,47830,12932,11068,77721,9003,25213,94205,140426,46090,89945,138173,192691,33329,112232,129905,35709,27514,1841,19957,31411,127476,53572,17497,173549,55063,175135,19841,69314,5192,237921,117660,150697,4060,273045,50414,98940,65348,153665,164423,58804,156695,48994,213928,86036,28608,8355,39574,34540,16927,135680,18374,151587,10830,53805,16878,16623,4282,48030,8537,14986,46102,13062,72897,72,33050,108227,39451,45935,651,113320,40535,95176,57450,48843,5003,19019,10407,211163,3848,1068,4988,32091,30095,41692,15099,43602,107434,50744,7627,171349,16313,150832,352665,207750,33937,38256,51091,156e3,87889,90663,84175,24908,114900,50365,31494,83829,5398,169342,47521,54818,18935,8356,43094,41212,174536,10082,92550,6678,60614,23355,69721,14796,34149,128830,58187,3179,208,40325,28399,225029,401412,51150,31580,207268,6657,10993,69818,64282,289845,23308,12961,38447,6681,52944,31855,2572,47646,120728,179148,37240,45196,218274,4816,3695,21961,50084,35209,18073,51452,27004,6100,33941,1377,84831,171214,85,141510,9078,99227,32610,6417,11718,49868,65579,87902,73018,49062,46280,61742,21512,40862,107733,15941,29168,157765,144919,14487,5767,158014,140070,7241,573,71584,16921,223566,40331,179473,35081,47926,140885,41508,52104,59180,42310,32811,29048,123517,102413,80208,10104,14746,12649,153641,126022,37965,113017,4171,83,142592,2809,6362,50416,71323,116894,260776,16204,1524,5760,30351,12658,20703,54403,36083,45408,74772,4946,14485,50759,111222,10890,2195,167147,92962,130534,16283,177256,35016,15472,210156,151187,73922,117691,43250,52051,37392,24811,24358,30830,5775,818,21969,1476,127322,151783,58392,31021,106913,65215,89407,90802,28531,11690,20234,95249,44602,37256,18707,11928,5161,4410,26571,51903,49768,22008,25252,65780,209499,68769,203726,13249,137363,48845,86823,6658,5674,31881,1083,1823,108676,34518,166752,13791,14287,91576,91429,8665,11529,26401,16191,91972,30964,5254,28486,54697,79613,66520,18447,22870,45203,194466,22822,51703,12278,76716,44595,73455,33546,12235,144843,36154,51247,11116,33040,3180,225753,60864,1972,28469,12891,28879,10338,144157,56294,353058,38302,41447,87532,110616,27065,168438,6557,1213,50804,144643,24817,2390,136531,38174,247513,16190,4059,122791,131994,137430,39506,57650,16305,5188,54309,106128,20628,88071,67394,395446,250285,66176,91254,1399,114196,43915,60230,44853,27206,106353,43013,18733,345105,226453,51202,16607,57106,117175,35492,10476,89598,127439,15187,39624,13688,61570,10615,31111,59370,6238,175252,32143,224492,41388,95408,34384,148238,78307,38959,9340,160091,61443,15737,11216,41244,170,38299,102443,113097,26382,14027,33707,3957,76300,66160,19431,18900,6952,1717,108656,82206,188021,257335,27295,43999,41210,31777,46956,57457,12657,11489,15697,48060,204748,53583,82422,284790,30503,137341,8120,19615,220311,15991,10217,63424,9808,67431,70976,98221,4491,15177,28535,144789,751,13230,2394,1504,33977,132104,30316,22230,931,97193,185240,24826,22687,174322,15307,22988,1390,188745,180325,29580,59068,74903,18994,29195,79,15436,7622,38462,11566,138710,44828,45774,37768,99236,68137,84083,19282,22698,17134,74807,126662,173497,46248,16938,119735,3212,28292,213652,49013,9975,32180,45660,86250,4801,68788,95490,77482,113751,11994,44624,94452,46839,128497,100316,5798,58588,73184,202987,65417,37790,88524,1606,43156,97964,105717,34947,11203,100060,37742,130074,93653,107799,94311,196106,41347,8035,10780,16390,27883,118236,167395,1979,25006,19375,31628,18916,144723,78502,114047,103107,86492,107686,5844,20934,206963,23556,22591,16562,146333,20167,10471,117434,33085,2863,9740,36669,41849,37271,22790,18209,28979,8231,12952,54408,21731,25130,45208,55748,138120,75826,414,29593,9925,292865,25999,683,123149,7036,92159,86055,61827,103680,23176,54918,58466,57578,13305,5709,86479,16697,31064,17660,200919,10770,49793,33423,32370,52047,16488,62555,6459,8426,83493,7763,59725,82812,18628,67760,79405,68557,9612,7673,28102,56517,69620,171797,32458,29541,15870,81109,32080,207644,71495,21202,11039,91036,61230,2810,130800,32260,4613,60590,37112,75214,33979,126402,155062,30642,63875,12810,194463,82799,47664,16725,36685,43367,61099,449,172150,102867,21691,301838,36745,7130,18671,57316,34852,38034,54182,35578,65900,99486,19771,3456,2658,16914,99866,28390,28109,8262,21147,34353,20006,4228,137085,1675,203023,283196,198286,214375,163329,290603,152574,40471,83506,30068,14730,23177,131539,34759,27668,32178,71896,104799,116305,85430,119262,42860,25160,8911,23428,49437,105322,6519,16203,6349,74711,1230,38045,8540,75165,44736,25909,51026,317034,4984,32281,91312,27060,44431,17817,45363,155937,239085,35697,59784,91993,29531,126740,213757,76560,167776,285273,24262,8237,65030,41160,74437,48804,118916,13159,37842,1031,75349,1478,11655,108777,23435,277425,101734,67469,70231,124711,43532,28514,65526,54956,1e3,21882,17728,25302,40952,52214,149632,1999,2111,3259,63362,89961,220561,39777,26335,9063,10572,12416,34551,34623,38604,24723,5947,15588,69927,66252,119177,69173,46629,28714,70715,212408,20521,406913,74380,11716,50659,50862,37009,88460,130101,7210,53853,538,65120,151950,55806,163748,52837,13153,21100,16674,64536,6091,138201,44837,58547,3723,163,2177,32288,85454,34033,8497,14282,25742,10535,10741,79559,117493,243787,49337,100718,79495,40139,42956,7551,55433,15421,31509,23034,45081,547,61176,53434,328001,8470,36263,30145,4519,74173,53935,11845,73774,60211,78025,3,4102,73782,109293,315332,48412,26683,13714,6865,20128,18490,104141,325,39470,171970,115860,15707,7268,73301,74336,31370,2368,111827,107757,136231,142844,97138,96638,84053,38691,23801,1588,10573,122098,77039,240,186135,146101,11996,18143,112963,46171,155836,348769,47795,121213,116266,132515,3344,144804,31286,99187,255838,129694,35894,48779,55235,148582,71967,65282,15174,13920,47080,6147,108242,157593,125025,7136,1286,28957,127956,28402,98813,20805,7532,109417,40610,5041,32958,15142,18408,108596,33543,50517,27748,80114,233434,91447,487,37094,100048,30541,43477,10639,89862,155868,37667,8726,60684,237903,73408,99589,12190,38739,97348,3914,13594,2680,149016,13907,30171,28343,23530,115225,61104,35821,147679,14337,4297,244282,24085,326976,56428,7851,21303,131620,71446,83253,68692,111870,5224,15813,38197,49026,45057,13660,3306,76345,40671,27905,91072,996,68527,62085,91351,122634,55109,168209,2024,27560,112707,17352,8306,167115,169921,166958,5031,46020,11844,67284,19130,76185,6920,32849,5450,14610,22451,21002,17392,31872,66682,84796,13709,40210,59898,12029,8719,53564,21462,91884,21647,88379,194428,12754,37797,132826,160016,22567,54383,53186,77611,31107,8339,4694,19185,90355,23597,17222,140675,28442,23668,55977,9128,61555,28774,155229,17658,9390,24379,69357,15752,127381,239631,62460,93181,55913,45133,140155,18676,25249,33164,29581,82837,67223,22362,29975,7317,52813,1943,29613,20012,207130,49617,49651,5636,15334,36313,29226,28084,95247,72072,19e3,224932,15811,114,32127,38097,37508,88507,37225,27359,91626,12193,69279,20608,11055,88156,92808,2152,57259,55275,72789,24475,104414,1708,9882,3818,48661,66897,1631,34806,227930,85815,87753,18321,250664,72733,25107,206797,50891,8082,196411,92596,96764,152823,65514,22819,387277,62176,51225,40329,15563,189,3659,73670,64357,51793,275136,33482,86653,74615,67058,11318,125720,15388,22388,8267,1730,102663,170910,40784,7144,85373,13040,7088,94309,583,44224,140424,77439,18496,164026,36578,4722,9151,5824,63365,26510,35199,40500,79277,32495,44614,35233,9566,203293,152144,7097,2330,183480,98629,13423,330887,44130,68600,30939,97829,31012,345465,56747,94879,4939,160027,149761,99423,46099,32251,15332,8761,96094,128555,5763,235318,222223,55729,30241,55420,201746,3987,81382,8259,49325,23287,7719,24633,251100,92311,18591,110533,64759,170260,393860,7175,21144,132887,3593,75346,101277,91109,16387,259187,11627,57459,173829,44694,55780,49797,89192,120443,62622,3904,14814,23887,1027,112258,64955,99800,11132,66353,36202,48624,18158,88481,96882,43059,11040,2455,7077,21651,181159,99126,100434,61388,68186,19161,110468,120052,8819,55324,41494,7014,37689,3618,87729,92615,207943,9823,128657,12587,15857,6379,67628,51216,71775,157617,63244,1503,3864,218754,110864,5769,21492,7243,1192,87921,85529,31512,18537,42698,35350,73510,84474,34301,8991,21013,35034,566,38832,19838,35586,37216,39413,55006,12178,59742,856,84563,6900,25632,17437,49786,30723,13847,70845,4044,7843,23944,235976,55530,48942,6518,20939,73769,192653,52936,95207,23895,132542,142982,22632,87452,48042,54018,178468,10728,26230,23559,363,81269,142012,5718,346258,31456,84333,246476,51018,66692,101804,120570,39962,30373,70593,2864,60541,19425,54209,104092,7201,31545,48018,25865,15442,46257,40443,8328,6451,111782,47527,97754,33046,470,245116,31095,39,91934,87208,73470,36708,36521,12801,70624,36272,8892,79768,12427,55454,103756,5908,52390,62962,22720,141138,94634,41689,128402,126390,6628,106394,35527,134394,82727,254651,194502,148064,89549,3202,28359,957,21954,27906,49840,142747,8307,24206,48978,1186,71728,133038,71474,91306,6333,110959,74600,70387,18983,62609,56057,22970,1147,135850,1321,28834,3578,59715,102227,32827,81415,99952,55636,257598,390,22702,35701,85872,402916,39216,189795,14929,19467,10112,144422,61514,5279,63421,134686,41436,8424,51925,10598,132295,124416,4604,194739,210929,57866,31829,51626,50007,9976,91878,61906,56168,81906,60918,61859,40017,23059,16887,40927,62064,12785,32893,32913,21782,93965,20169,44387,79084,38463,11457,93950,27127,157050,2697,337088,5116,54128,48255,33279,8821,27352,25515,124022,65710,28906,38557,33390,1722,104435,72215,38551,12094,30978,25113,6671,37355,175109,42862,98024,65406,221276,59624,118012,64637,78760,86697,21426,1639,40350,12584,67193,84144,31396,7863,143011,69629,63112,9454,28666,65798,46372,134721,6314,51402,30837,151922,2847,38676,38008,92823,136245,17540,5504,109295,205242,37606,5211,214892,1586,20670,208711,137743,19328,40652,16995,20023,14657,154919,34422,12996,13918,38221,47690,16398,2959,37680,89122,6721,198469,91876,172043,83898,101992,26084,94570,3635,76958,22853,76497,38266,176590,168403,44464,142840,79180,184594,1984,41806,83147,11985,6546,366068,59732,24533,271505,8736,39084,222992,93429,28962,58985,86665,8432,30028,14548,32439,54424,165029,55175,27458,69046,121277,46168,33732,20661,24581,135574,123110,37556,79260,72611,16957,12939,46162,58238,44907,72936,253758,41324,32518,96480,11949,124438,65280,43256,34107,53533,43531,37037,28366,45970,32741,173438,6121,194202,62969,26355,30314,58370,28455,1848,50519,82830,90393,21761,295490,10936,256940,133568,44050,20269,4089,27457,21610,219460,36743,14821,101388,52005,13124,30979,140816,167362,26054,18458,60789,34917,40447,26606,33422,9066,3452,83614,5761,20263,137238,25038,91310,101,52322,74548,42572,38084,214054,186568,31802,17665,30620,141936,37730,14420,4265,187218,49640,188208,51441,55388,96452,66659,40869,42039,60967,221027,19234,178581,29105,96050,9165,196118,157335,3738,40354,117436,2965,34136,59659,15570,50843,230035,31444,71260,43886,18316,5387,38500,168508,17406,32174,8828,103373,143806,90367,3560,18719,122310,16508,26719,2541,105429,6645,37998,73190,10591,235916,49737,87112,233941,53188,32193,79154,4544,52905,126477,7580,63501,57314,3216,31337,6541,103083,60846,49,9756,15481,1355,43840,14319,13743,27486,10222,73114,230718,418644,16706,6674,279748,23058,45273,295831,86306,2743,5535,88773,21829,35253,120938,31153,3169,16839,42847,8751,80974,33942,36867,35514,16485,26474,77775,56877,5391,48346,3882,108713,31403,27804,55248,26235,43821,136104,40118,175507,28034,203908,18732,1788,34030,106427,36958,54359,7251,44936,15356,69139,455,157915,22173,140291,50348,43275,82066,49621,54952,15216,36226,96695,66855,6936,1987,8227,196087,4631,68827,99004,47541,110265,17953,147605,110242,58520,31312,38724,329975,642,3155,34497,75937,6207,73843,6120,17249,51429,117746,3218,910,68961,319671,14938,29555,34700,1649,66673,72268,9655,76800,153087,6941,210168,27130,35398,1780,73242,3135,56689,19556,165307,8765,35967,121458,13333,70453,17350,117253,22265,13340,44265,39869,441,3742,135025,23581,33309,16543,17731,13291,157637,283005,21408,101360,63887,52312,83873,5338,233779,23759,186949,34531,177320,38069,156465,91004,19353,59852,68160,14891,1338,1072,29823,1950,28901,81407,313445,73038,84807,162348,240257,37162,138934,16111,58013,41253,102951,16457,96056,19541,56402,67217,41638,94381,89674,29481,37456,80815,151579,13937,13683,132537,19699,134545,67020,29816,222341,141235,427578,48868,129557,233342,23077,87871,16213,18728,16184,9469,37913,19680,2798,171356,178328,13216,50049,72690,71904,124644,55455,7504,29052,41036,266546,19899,30391,188755,8659,59469,16,104298,112943,53865,76203,138226,68857,139953,14125,107625,119795,173133,4398,50273,48808,54390,16466,122086,31835,67035,50971,48859,7508,46427,66477,73021,84615,39985,83076,46779,201569,53336,36443,60865,168164,143810,51393,25548,169307,32896,24485,38424,21837,29087,275813,51674,6714,64883,46169,187369,55186,76192,12852,12018,62134,31067,118303,16542,12125,10579,4928,26291,43854,7091,10946,253716,109062,39283,17261,113012,258512,47764,125126,32646,55892,80279,201623,149872,3192,385,1208,48750,5376,58738,22335,5427,82416,47811,32435,143086,38930,94128,59975,156037,37977,38224,62485,7698,50405,71027,16462,21559,136153,34131,107506,162069,63703,3101,215029,40407,4178,3774,9187,80019,17880,97926,67579,2600,18405,8351,47924,86638,70820,92206,86453,29610,42241,119200,3198,15466,67813,57863,35454,4779,99518,4649,104641,144269,33730,38073,65864,6838,109456,193298,154007,5623,45741,30846,182578,25573,157224,1543,58575,138703,146140,44971,49356,18275,59064,20300,13122,11848,24453,11973,9797,86843,2919,25530,49210,1130,161220,76788,75373,85604,34926,36014,17777,17255,51533,11676,92226,51845,119859,21525,5936,18507,28050,1140,31418,14857,34207,47859,10750,36382,32079,106909,59426,87757,38393,110042,15965,97104,33757,35344,97993,53979,33651,45407,41884,82515,173089,7177,58371,35365,47543,51927,35587,10670,23544,29306,84233,39976,76076,62097,9007,8668,28119,78281,120790,19835,143020,54968,18670,64959,20649,34469,42570,33001,136570,87796,120044,1106,58700,63951,127623,12805,83057,40212,31773,49850,7361,54336,347524,101314,23751,19569,48791,29174,49369,20467,7465,75842,38281,623,112457,60210,28849,51003,94720,6426,90047,85560,43761,3579,85105,34607,90410,118528,7224,42907,111163,18168,6960,161135,191298,5247,100584,127552,171568,20121,91173,12636,54615,20199,63730,98105,2396,40387,14438,125012,4765,33235,12865,45299,37728,82098,77872,114037,59253,19675,24838,398016,102561,11446,17069,57508,178277,65836,99941,26114,2585,271882,136866,50126,11027,155648,118367,14585,8910,123015,335383,40434,41016,53021,14439,87098,176860,201543,121888,2358,9286,5739,22666,54270,37884,169381,33984,93859,16124,89364,72207,51639,76366,99029,65812,2198,12147,174891,194289,6986,30252,88822,21284,11445,288337,160821,33034,100869,43852,25761,52882,1144,103809,1924,84458,86079,43411,13542,139276,18141,34978,41298,7276,26481,173800,33210,17951,142652,33616,33677,2210,19941,98568,2486,192414,80136,12058,235883,50963,249638,29572,27221,47034,6124,72107,63346,97620,158513,299699,40388,23235,37176,224244,198386,121323,67992,23827,63170,17838,106622,158590,26807,5345,23489,91891,55474,74834,37981,13058,5977,72552,34706,26828,145172,19904,21367,34043,960,77092,91381,4733,47446,7680,41697,5170,16960,14741,46101,13656,473,51842,37433,11103,11551,121951,13191,97536,165932,50397,51628,129028,9069,44885,6590,59195,47045,32940,225472,90345,21833,13303,29407,96615,141951,5198,6028,18395,7181,3861,14966,156358,167182,36529,55253,25942,173153,30959,27261,50691,150176,162201,38467,48462,80602,42163,118482,168,108756,26011,17166,54149,456538,22512,91374,13816,90358,131615,18132,226707,1824,28139,26860,42253,93877,77351,65575,8980,80574,22020,27948,40422,91324,76376,13528,39281,91685,82215,122541,144066,1983,193851,17283,26320,2739,194978,4790,26845,42627,61300,65815,174612,55133,4200,191130,79771,158321,52280,166796,221620,62461,11278,4067,88152,83409,31717,121367,13522,47325,37945,10406,174348,249321,154101,64912,29938,51775,17220,15776,166138,78890,84425,54121,42861,16368,24572,291647,10197,32073,22651,11677,97509,26952,35787,18424,41910,71614,94977,72318,41594,70024,275419,37702,60199,7335,39107,61315,18271,18394,33768,87884,104277,123724,7277,56288,71981,189803,49320,3352,6798,14240,8954,69220,94433,57372,28620,68863,193727,85575,42309,41667,67689,42081,22543,44824,12719,28540,114236,101553,27638,27296,4300,5353,4663,19379,94098,3758,95888,95144,80344,87320,28447,259518,12718,71391,152731,37063,24132,31911,104896,15672,103782,1521,4945,72541,23717,122632,15619,87175,206120,29428,189780,61416,28350,44457,972,1175,47233,198738,95789,41907,21953,97034,59341,22864,53713,16873,32971,20693,20954,31336,21477,16169,38370,16412,9019,3841,24599,21938,17085,6484,81198,76413,5849,72514,12320,65247,276175,37234,59796,52642,16312,57349,198507,94148,46134,18958,125552,1747,18725,151873,14901,5490,68287,29470,3689,64794,40814,26018,25692,54450,2703,88278,124886,173087,174e3,24159,179477,24276,46004,201876,209202,445,52876,31948,30206,157610,39180,18439,44124,50469,5774,96278,222758,200216,50290,45486,20435,46986,46276,140133,142326,15569,13363,47522,92583,2182,7135,16853,22998,30272,4952,63263,35623,39096,53789,44864,20053,110392,124213,4630,16087,28221,127787,25839,77481,44693,13464,113146,6983,27069,55717,50102,4760,7107,26186,66507,59145,36032,104182,71328,29425,64317,50781,47465,94298,69706,74899,22754,120756,25108,93077,56834,73286,39928,16218,41699,176763,7555,70819,50083,26895,23315,26014,16773,123079,41712,5719,31516,90427,158540,85051,183128,40864,27505,55392,9058,45224,96857,30901,136622,96557,56304,120061,11501,151448,5773,89743,7769,86069,2935,18471,41628,10114,33660,110170,49479,26745,92846,33221,26731,18795,87076,8550,2100,29972,120289,3077,72490,33784,2630,208722,50861,63483,79029,6419,39467,14302,45286,64207,9686,67513,44170,1050,77246,59266,17055,53801,7150,11111,42432,4278,94579,362117,36175,42902,41933,39002,98489,22913,74161,84773,57036,17556,162288,74485,178760,93867,73635,128860,50362,261,67455,80001,46080,35662,4368,25247,19230,74393,22588,1822,27682,235324,13798,85998,13194,235067,23514,71669,147632,23191,134748,214683,105101,1518,25489,247114,7380,54842,26922,3971,26361,20844,68642,170517,77339,123255,8963,77818,150998,48466,36806,2732,23261,11741,236162,18243,126216,28690,50546,16385,92760,197383,246558,201295,88255,67588,71687,176076,172653,169058,33906,63747,24835,157621,43338,30050,46152,132741,2770,51371,94835,6614,15112,11749,56936,1250,19027,399017,58036,100215,23388,55815,308768,124152,94803,9521,64186,8971,28,30427,62163,7616,103838,35079,29203,131235,7743,17389,10882,37420,61460,228512,85363,41581,131077,62822,119647,10130,54445,26925,19968,29016,24446,74028,24176,61448,67185,9254,8563,119129,9771,99184,37716,39514,10532,221512,258753,218630,55980,23394,32141,61924,66749,32411,3741,36475,26678,77010,44946,91203,128749,116953,20476,49625,53116,13735,102335,29376,51946,83407,67892,59212,34685,21083,1546,112982,32972,74397,1078,190545,16082,86140,58591,89611,101531,10061,105104,76319,20035,17551,52611,169061,190842,100780,23907,90413,115619,9675,34710,193435,49443,129734,11183,258877,16318,136182,126808,44635,27304,192375,2599,125648,47051,12091,23814,721,58800,40137,66726,97930,60877,74487,7942,54326,9841,41428,13762,8211,85383,6950,99177,79806,201786,296464,124087,13144,29741,41721,47634,55088,254286,106408,17041,99064,12942,64086,45233,14005,2612,55827,255,7984,13980,38574,12776,46654,73499,249951,2101,26676,25996,132326,116415,119062,50449,31033,23038,11589,179252,20007,14860,129270,21143,17796,144715,60106,70758,69842,34674,282133,44014,16774,57268,38528,24053,46373,201667,28327,471023,51889,102667,21193,114909,84132,69317,96723,67969,16134,68145,15058,28765,32035,2524,101089,98664,25045,76571,14957,86040,118506,262428,154764,81573,39681,283900,73287,127825,544,80448,52347,38512,175971,15180,45467,33086,46552,48894,81107,43213,36672,54025,76703,8053,7608,13299,56619,20752,238099,54164,105133,1444,32942,953,37564,8e3,66316,119463,106817,404,13667,149108,128597,31267,10269,49836,106150,1484,52330,76965,160486,171648,38456,31263,22424,37738,66245,67467,143369,60471,75610,20895,115528,86070,60854,40796,49347,18989,15030,11371,37578,15779,79867,10187,86462,46402,155626,93200,40229,7090,57547,108053,99598,11088,47505,41218,206017,2173,20988,30219,22919,80563,57566,42369,93141,41675,2407,182519,120495,27154,16702,29456,14349,7958,16688,117177,140375,42467,261919,74916,153569,10836,34742,49526,7621,105997,12212,2270,392377,7755,17959,25086,232152,138791,33847,13860,35316,5811,1344,71259,50452,207539,92635,50359,5821,33674,30255,2086,2587,96264,17543,42,6029,9580,43007,139248,82831,12917,29607,25786,51467,42137,85161,100698,31561,88989,121990,278500,3602,109344,37982,15279,116442,28936,30880,87894,58079,128661,126731,67392,28051,146885,4861,16216,97344,42827,147561,153948,22684,21335,47685,1853,43349,15185,59642,10229,25520,187921,108972,5579,98037,24945,6697,19193,63734,137934,75056,89740,19767,224268,56138,63643,151661,39313,70618,84031,89723,84074,13703,85626,35460,8867,64845,3439,57906,99776,63968,49270,81130,34356,16210,23547,36446,34090,140028,72439,2221,22163,57058,363492,113754,18913,95451,48663,54464,54037,176097,68425,3023,34906,29482,117389,341780,80431,58330,16753,92616,60907,94846,147486,4498,48646,7773,46801,7778,18946,464978,47558,33223,177444,7328,15626,63337,94700,11743,9351,255024,39098,16447,42647,96230,39769,58840,10068,63439,35800,65843,58823,413844,9156,51258,7434,61791,85018,6872,3692,28096,7121,33024,6009,75532,31997,192535,9661,3304,9547,14753,31987,25314,55689,15896,20430,39472,31340,99744,25398,115569,54883,28719,205423,23071,57855,64638,149867,25671,82403,37616,20668,39989,77996,74948,140555,175248,64810,36515,46595,4958,248773,24045,28728,136673,168704,20804,114833,100325,27135,21205,96151,153134,45992,7093,13992,76047,1980,19432,145001,75159,87462,17710,1013,45556,34297,144882,20648,26061,11319,129567,108555,18872,464580,33386,22717,65948,167189,5603,135042,79542,8801,202632,18114,91882,5973,5239,67315,4431,60916,47819,71693,32597,32606,18183,45072,80329,76385,24749,51305,40314,156514,14693,130345,13168,66214,18029,12858,34801,27628,14544,10823,40522,40185,33739,148694,23548,9923,61012,28859,17933,19442,34364,99849,164107,141167,30629,21054,6744,36491,8096,42474,41706,155060,30650,10600,163442,1143,96655,61390,52359,7559,51568,64256,203854,4467,22453,14504,436398,7878,6980,8293,63610,293747,16167,35763,19627,147603,15419,18032,110744,51346,33681,54571,40472,48615,39073,21604,13754,173027,92560,11083,47299,63062,11813,52007,29883,9734,139722,15953,1550,20651,13616,49306,16113,90089,92326,7584,30712,72424,164858,6831,152871,55746,197721,34167,196442,6022,112107,55215,7538,123381,4920,43539,77165,8939,50392,34192,20225,79762,22505,58667,40770,29788,97180,82835,4568,8579,13273,363569,35898,49983,436,36598,3237,131691,62418,35591,8101,4073,379438,65218,76072,33887,2968,27573,212619,288680,68278,72851,150504,217896,6913,121339,22017,35340,51072,43616,75043,31437,10833,81487,4364,22968,41454,106687,85446,19863,109625,149241,524,141850,214404,54376,657,237023,9401,108137,53800,32474,49712,53334,126876,27337,45552,177696,8269,15036,12097,42240,2328,125374,119295,99715,2500,19624,39441,27220,102691,60957,94543,39101,18566,67362,13975,78230,25017,34017,239007,90027,39351,41681,35354,43822,1043,916,58587,141983,94818,38799,75459,41114,67432,16195,36606,59568,22272,126769,31424,68659,12287,134302,257977,5756,207285,95637,47248,117689,19583,77451,22373,12200,54993,117118,34244,29386,34562,53819,71267,64172,77665,49368,7716,59301,25749,45426,194789,17297,2650,1766,32501,45198,20403,20984,6600,14171,94604,19037,5402,29896,9938,59935,109708,88081,145182,44844,39167,352626,164173,35374,45982,6122,154,73419,220487,53834,53601,17992,8609,229321,5610,68098,66815,71012,95069,140968,27396,8957,134489,24656,86659,56598,134852,17316,123838,255436,6613,41610,138033,81452,32023,32396,123687,63398,8693,29712,30407,19296,121188,3551,36099,20032,111948,56624,16547,27453,35916,15378,52039,56849,13489,22214,73177,53097,277349,2157,14029,187886,10260,141743,246460,91880,50869,3788,49486,133566,54950,33120,129337,53768,18333,9525,26902,312251,10297,9020,70759,16647,112432,59260,84609,9818,82766,73569,468,46001,75780,55028,52106,11498,43645,108069,17150,17753,29417,16705,31799,9606,289,122254,115975,8620,6133,255357,56908,14456,133464,43554,79224,11247,29630,160,12756,25464,65960,350428,62521,321796,100359,67358,35169,46172,113128,48988,88868,31094,33266,6847,60887,98188,49659,69117,92977,220228,13947,80181,35103,62170,97351,13475,2440,199768,19498,36597,46971,25234,67806,62881,84717,73648,181966,10488,94149,21550,26655,63436,48375,14405,165650,9621,24439,28043,42735,4490,29963,56674,45373,1934,262446,50855,67098,26898,5261,52696,40644,33900,9440,180286,87162,22940,19704,26936,69769,10254,101759,27406,12243,48e3,73926,113215,54935,5726,192787,4312,106216,9366,11550,52949,23457,212271,277152,133895,108374,6191,96477,29980,218916,58024,54696,40853,91124,65894,91170,65908,252552,6793,29212,15389,44516,122515,52617,35058,9017,103536,39510,49136,19242,130652,662077,74699,47024,31422,8517,73351,24399,13867,128360,4810,4434,61779,111983,61036,17798,110240,59722,102960,39688,10001,23803,23039,176498,56659,44814,134295,17188,77577,74466,226175,102472,154333,63900,111747,18062,41171,79669,32773,408933,42562,28931,30907,107388,43487,2946,240310,23938,24354,319,184983,7927,6488,1422,10790,68809,68209,64775,4361,202,17123,59634,51200,44391,18188,17843,2619,74278,3230,9540,47187,21702,36274,56894,43907,16310,34790,16866,6150,5561,13587,107545,108873,126867,86986,28640,33427,19017,5762,80637,17430,46903,2047,131055,25958,13558,5444,47152,13900,44563,122857,45348,70863,39593,54332,38068,33637,318,40310,143467,18502,24520,11377,62013,28942,27246,28269,83545,17999,59015,90707,30065,15161,34720,1263,37008,2012,6060,98575,92933,5721,299,199555,24578,29223,2985,743,115825,109523,136657,47454,26378,53586,3733,174945,93340,244456,5693,37386,28782,89767,27545,23573,18798,136425,34320,84778,20041,48453,38215,7477,71958,40621,8773,5874,187927,105965,51100,43533,18083,8443,10180,43597,2003,183999,69689,12216,129696,146188,62389,34044,68410,12765,43273,26949,266807,3345,34477,79197,5688,47539,213110,21634,22257,50092,32222,42346,39530,63668,98,134978,74022,5152,59088,174145,37220,9934,9545,118937,5724,87240,19875,15784,40143,23263,87513,181654,285152,37881,263241,4966,43934,10433,186657,6470,74416,225854,25908,142677,246262,32280,6192,75890,45546,143264,135305,29742,47013,77787,11732,126658,8763,37950,21806,57557,113464,89465,108995,164574,23894,22996,23169,15369,23117,17642,130607,40503,36239,280990,44666,9981,40427,147487,26869,168452,32886,32991,46798,240839,15111,70502,65697,88548,44145,28701,48767,31139,206777,35659,181164,166262,14554,171445,31786,66523,76607,17956,6507,31279,90476,116611,167918,6560,1243,115324,80128,41867,55897,187323,37069,32596,189444,145931,13390,105530,65709,26805,6999,55714,41300,22915,68951,22138,21120,22264,10058,19945,33635,56123,99085,10032,5818,6016,46649,57476,35264,94413,112522,262288,93686,83038,14341,23204,28807,66084,77987,6101,126673,7133,38126,5923,122091,170240,97772,46874,215746,43948,41622,3272,55596,8332,146411,251315,13533,8561,81521,115449,48616,175175,2063,186556,3036,134537,75772,29728,82360,22973,186559,86348,89100,38388,82297,45610,2613,87082,9986,177812,57884,23591,47485,42543,33582,44713,74439,257444,252451,31825,35631,38540,33066,5147,13973,4343,51830,70378,22827,26448,95560,36896,241741,48067,203953,298860,61620,20450,3220,67272,6586,107662,100160,108684,6929,57226,4762,7457,1320,40404,77204,99309,62750,208653,59977,44e3,74315,34332,5819,172217,64904,114077,18147,84012,1791,98456,90930,21446,116669,103938,7422,85140,59713,5768,326211,16239,75411,13229,29398,10758,236107,1539,112472,95979,152154,151294,306,21196,38146,10700,6891,84282,109646,56492,40539,6589,119491,51354,30685,140209,136906,29622,73617,49553,70525,51671,166869,139616,74395,37439,49595,45678,11959,33211,86560,52434,9282,62690,112155,130810,5243,108261,99970,265613,72551,80049,6391,33365,90721,66737,69872,87011,1860,9032,112544,60905,37371,89015,140351,19076,850,373531,2802,36725,218795,72062,28990,16550,24614,7815,6187,26336,33373,32162,42791,73555,32062,23386,10244,56392,49442,27076,136262,12412,14883,1134,33675,97153,199281,15608,100152,74072,47942,254301,36451,16026,10687,65067,56708,254030,30290,50490,13864,57941,259331,35588,23485,43486,24869,21620,92971,22072,88645,1048,182050,13343,32452,14825,19509,3325,216938,45740,99716,189082,53740,78245,25609,24311,176777,47340,308354,40669,66085,14102,125339,9225,128709,97207,1271,200933,78439,113451,88975,18324,46521,11819,18570,141756,72512,170020,52754,63550,118515,103073,93330,32736,50499,14722,31600,68452,398867,29316,172786,18417,104924,2606,5670,84818,16288,67106,59580,82929,607401,291,85829,359,15897,35830,50696,65630,52672,22115,356968,29895,40837,231192,34024,38957,26722,406,23335,124952,72068,68804,13268,147101,164740,276569,162596,66943,11569,26654,66358,4777,23229,102127,5848,978,2921,59666,5371,28212,90108,42938,39320,2499,4271,108792,33510,125072,71653,65239,38250,66357,38577,13964,86251,35708,50755,36010,29448,12209,3844,38222,206337,100876,67827,137088,14167,252225,84163,195270,1306,5703,54198,779,46802,22028,51124,86759,70560,113164,35685,162145,45471,34561,422,2611,6464,47486,19223,38246,9191,18331,89942,243642,212364,15893,17518,22617,6409,30046,126182,59716,36560,104428,18846,26592,19458,50793,147333,30826,1388,27647,10922,14495,33545,19269,135828,39727,41601,46931,233379,49169,131130,182112,16276,82381,118209,142445,128310,19672,28740,82907,33436,3118,102206,28723,24819,41937,38854,5157,3881,111491,1142,9776,421673,152241,29309,14961,87854,6054,15424,3796,82656,54996,2108,55367,239450,154525,9643,118103,106041,64601,68549,48707,30266,25772,18740,9462,229669,91798,112152,191327,14493,72828,8175,66636,236474,25817,87351,129027,76653,20422,22983,71240,27846,44661,12399,46158,77704,53101,35032,11072,17300,109294,33638,24408,1895,11241,760,17584,82479,125877,63150,141075,34259,23274,81698,15732,43577,48340,91584,14688,16379,24481,150280,96420,262050,48635,43727,61819,56268,72003,88178,17281,79912,13218,122519,125295,166396,11811,2171,118930,67746,17636,178278,174656,95661,173039,83845,79689,17473,98555,127696,203415,54730,22925,232239,9309,12136,175026,20740,180188,10747,39816,314017,266131,10040,175732,112550,220651,31974,37393,888,23008,86799,4303,64905,148467,75337,251,3284,370102,50264,9835,5438,23655,4481,29851,329,12855,7162,64931,78141,12804,42372,296771,83547,18624,34874,86271,3360,48665,77735,88767,11463,63527,28889,22258,29140,194315,113924,25499,6406,31334,1845,4802,49184,43455,35469,127594,92970,61038,115005,38840,87761,106838,8811,20572,55637,11162,96721,132425,108925,2948,125457,36356,3502,75270,27622,127192,2561,123095,49394,61155,16897,110064,9699,89448,53356,19628,220310,21622,83036,9885,112214,6087,26713,17901,161912,91492,3440,68594,9266,92238,8087,6866,150194,72175,80701,13459,31836,43243,239700,95846,44749,50647,21945,230538,120612,132371,244604,5193,105637,34661,41341,68775,85393,1874,8771,33718,49672,77403,595452,99507,6490,58895,128742,7704,39239,73217,43816,62824,37804,199976,22361,80005,87514,94832,14089,4574,139975,59142,75523,100268,43906,53442,15152,2547,186002,17011,19513,204282,3343,60568,128318,119250,4298,51871,41336,71759,21921,45074,98169,145889,99427,11350,1237,5520,28799,7803,53702,21026,136352,38293,128690,12158,90132,44600,10184,26957,39459,126025,78904,82999,59373,39301,150198,120529,153042,20177,50089,14764,271571,30530,123161,38975,101562,22941,5648,124654,109243,69817,71675,49162,106884,21241,107795,30258,16572,188262,141456,7688,60718,8271,11044,32440,104608,103419,236109,93156,43293,128929,42107,67180,25201,115254,185488,130954,72813,167547,20537,39969,38432,22582,184022,1139,27199,5655,17767,97412,122606,209377,27070,35871,326617,188954,42680,73512,80911,22629,3011,95021,315242,157737,383,41821,41808,19335,27950,15674,25677,110950,35375,76835,59108,57370,35262,16569,160415,37706,78086,32041,49691,137143,9782,172080,50148,77917,6323,10110,69172,17711,21795,59511,76184,135114,31046,132319,59105,157578,20549,80778,57649,158421,65143,4575,72235,21899,10797,92745,34035,106079,80159,4508,78304,25350,75457,46458,32937,25623,47,8531,104751,84953,8138,36508,187199,66310,115274,13253,32461,38536,1916,42007,187160,35055,26325,84394,35963,94216,45590,97782];var _2=15,I2=class{log;peerRouting;routingTable;refreshInterval;refreshQueryTimeout;commonPrefixLengthRefreshedAt;refreshTimeoutId;constructor(e,t){let{peerRouting:n,routingTable:o,refreshInterval:i,refreshQueryTimeout:s,logPrefix:a}=t;this.log=e.logger.forComponent(`${a}:routing-table:refresh`),this.peerRouting=n,this.routingTable=o,this.refreshInterval=i??W_,this.refreshQueryTimeout=s??G_,this.commonPrefixLengthRefreshedAt=[],this.refreshTable=this.refreshTable.bind(this)}async afterStart(){this.log(`refreshing routing table every ${this.refreshInterval}ms`),this.refreshTable(!0)}async stop(){this.refreshTimeoutId!=null&&clearTimeout(this.refreshTimeoutId)}refreshTable(e=!1){this.log("refreshing routing table");let t=this._maxCommonPrefix(),n=this._getTrackedCommonPrefixLengthsForRefresh(t);this.log(`max common prefix length ${t}`),this.log(`tracked CPLs [ ${n.map(o=>o.toISOString()).join(", ")} ]`),Promise.all(n.map(async(o,i)=>{try{if(await this._refreshCommonPrefixLength(i,o,e),this._numPeersForCpl(t)===0){let s=Math.min(2*(i+1),n.length-1);for(let a=i+1;a<s+1;a++)try{await this._refreshCommonPrefixLength(a,o,e)}catch(c){this.log.error(c)}}}catch(s){this.log.error(s)}})).catch(o=>{this.log.error(o)}).then(()=>{this.refreshTimeoutId=setTimeout(this.refreshTable,this.refreshInterval),this.refreshTimeoutId.unref!=null&&this.refreshTimeoutId.unref()}).catch(o=>{this.log.error(o)})}async _refreshCommonPrefixLength(e,t,n){if(!n&&t.getTime()>Date.now()-this.refreshInterval){this.log("not running refresh for cpl %s as time since last refresh not above interval",e);return}let o=await this._generateRandomPeerId(e);this.log("starting refreshing cpl %s with key %p (routing table size was %s)",e,o,this.routingTable.size);let i=AbortSignal.timeout(this.refreshQueryTimeout);let s=await w2(this.peerRouting.getClosestPeers(o.toMultihash().bytes,{signal:i}));this.log(`found ${s} peers that were close to imaginary peer %p`,o),this.log("finished refreshing cpl %s with key %p (routing table size is now %s)",e,o,this.routingTable.size)}_getTrackedCommonPrefixLengthsForRefresh(e){e>_2&&(e=_2);let t=[];for(let n=0;n<=e;n++)t[n]=this.commonPrefixLengthRefreshedAt[n]??new Date;return t}async _generateRandomPeerId(e){if(this.routingTable.kb==null)throw new Error("Routing table not started");if(this.routingTable.kb.localPeer==null)throw new Error("Local peer not set");let t=qr(2),n=(t[1]<<8)+t[0],o=await this._makePeerId(this.routingTable.kb.localPeer.kadId,n,e),i=Ye(o);return qt(i)}async _makePeerId(e,t,n){if(n>_2)throw new Error(`Cannot generate peer ID for common prefix length greater than ${_2}`);let s=new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(0,!1)^32768>>n,a=65535<<16-(n+1),c=s&a|t&~a,l=gI[c],u=new ArrayBuffer(34),d=new DataView(u,0,u.byteLength);return d.setUint8(0,yt.code),d.setUint8(1,32),d.setUint32(2,l,!1),new Uint8Array(d.buffer,d.byteOffset,d.byteLength)}_maxCommonPrefix(){let e=0;for(let t of this._prefixLengths())t>e&&(e=t);return e}_numPeersForCpl(e){let t=0;for(let n of this._prefixLengths())n===e&&t++;return t}*_prefixLengths(){if(this.routingTable.kb?.localPeer!=null)for(let{kadId:e}of this.routingTable.kb.toIterable()){let t=sn(this.routingTable.kb.localPeer.kadId,e),n=0;for(let o of t)if(o===0)n++;else break;yield n}}};var T2=class{peerId;providers;peerStore;log;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:add-provider`),this.peerId=e.peerId,this.providers=t.providers,this.peerStore=e.peerStore}async handle(e,t){if(t.key==null||t.key.length===0)throw new Oe("Missing key");let n;try{n=le.decode(t.key)}catch{throw new Oe("Invalid CID")}(t.providers==null||t.providers.length===0)&&this.log.error("no providers found in message"),this.log("%p asked us, %p to store provider record for for %c",e,this.peerId,n),await Promise.all(t.providers.map(async o=>{let i=Ye(o.id),s=qt(i),a=o.multiaddrs.map(c=>oe(c));if(!e.equals(s)){this.log("invalid provider peer %p from %p",o.id,e);return}if(o.multiaddrs.length<1){this.log("no valid addresses for provider %p. Ignore",e);return}this.log.trace("received provider %p for %s (addrs %s)",e,n,a),await this.providers.addProvider(n,s),await this.peerStore.merge(s,{multiaddrs:a})}))}};var C2=class{peerRouting;peerInfoMapper;peerId;addressManager;log;constructor(e,t){let{peerRouting:n,logPrefix:o}=t;this.log=e.logger.forComponent(`${o}:rpc:handlers:find-node`),this.peerId=e.peerId,this.addressManager=e.addressManager,this.peerRouting=n,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){if(this.log("incoming request from %p for peers closer to %b",e,t.key),t.key==null)throw new Oe("Invalid FIND_NODE message received - key was missing");let n=await this.peerRouting.getCloserPeersOffline(t.key,e);ge(this.peerId.toMultihash().bytes,t.key)&&n.push({id:this.peerId,multiaddrs:this.addressManager.getAddresses().map(i=>i.decapsulateCode(Ie("p2p").code))});let o={type:We.FIND_NODE,clusterLevel:t.clusterLevel,closer:n.map(this.peerInfoMapper).filter(({multiaddrs:i})=>i.length).map(i=>({id:i.id.toMultihash().bytes,multiaddrs:i.multiaddrs.map(s=>s.bytes)})),providers:[]};return o.closer.length===0&&this.log("could not find any peers closer to %b than %p",t.key,e),o}};var k2=class{peerId;peerRouting;providers;peerStore;peerInfoMapper;log;constructor(e,t){let{peerRouting:n,providers:o,logPrefix:i}=t;this.log=e.logger.forComponent(`${i}:rpc:handlers:get-providers`),this.peerId=e.peerId,this.peerStore=e.peerStore,this.peerRouting=n,this.providers=o,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){if(t.key==null)throw new Oe("Invalid GET_PROVIDERS message received - key was missing");let n;try{n=le.decode(t.key)}catch{throw new Oe("Invalid CID")}this.log("%p asking for providers for %s",e,n);let[o,i]=await Promise.all([tc(Jr(await this.providers.getProviders(n),async a=>{let c=await this.peerStore.get(a);return{id:c.id,multiaddrs:c.addresses.map(({multiaddr:u})=>u)}})),this.peerRouting.getCloserPeersOffline(t.key,this.peerId)]),s={type:We.GET_PROVIDERS,key:t.key,clusterLevel:t.clusterLevel,closer:i.map(this.peerInfoMapper).filter(({id:a,multiaddrs:c})=>c.length>0).map(a=>({id:a.id.toMultihash().bytes,multiaddrs:a.multiaddrs.map(c=>c.bytes)})),providers:o.map(this.peerInfoMapper).filter(({id:a,multiaddrs:c})=>c.length>0).map(a=>({id:a.id.toMultihash().bytes,multiaddrs:a.multiaddrs.map(c=>c.bytes)}))};return this.log("got %s providers %s closerPeers",s.providers.length,s.closer.length),s}async _getAddresses(e){return[]}};var P2=class{peerStore;datastore;peerRouting;log;datastorePrefix;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:get-value`),this.datastorePrefix=`${t.datastorePrefix}/record`,this.peerStore=e.peerStore,this.datastore=e.datastore,this.peerRouting=t.peerRouting}async handle(e,t){let n=t.key;if(this.log("%p asked for key %b",e,n),n==null||n.length===0)throw new Oe("Invalid key");let o={type:We.GET_VALUE,key:n,clusterLevel:t.clusterLevel,closer:[],providers:[]};if(nI(n)){this.log("is public key");let a=oI(n),c;try{let l=await this.peerStore.get(a);if(l.id.publicKey==null)throw new ze("No public key found in key book");c=nr(l.id.publicKey)}catch(l){if(l.name!=="NotFoundError")throw l}if(c!=null)return this.log("returning found public key"),o.record=new mr(n,c,new Date).serialize(),o}let[i,s]=await Promise.all([this._checkLocalDatastore(n),this.peerRouting.getCloserPeersOffline(n,e)]);return i!=null&&(this.log("had record for %b in local datastore",n),o.record=i.serialize()),s.length>0&&(this.log("had %s closer peers in routing table",s.length),o.closer=s.map(a=>({id:a.id.toMultihash().bytes,multiaddrs:a.multiaddrs.map(c=>c.bytes)}))),o}async _checkLocalDatastore(e){this.log("checkLocalDatastore looking for %b",e);let t=Us(this.datastorePrefix,e),n;try{n=await this.datastore.get(t)}catch(i){if(i.name==="NotFoundError")return;throw i}let o=mr.deserialize(n);if(o.timeReceived==null||Date.now()-o.timeReceived.getTime()>B_){await this.datastore.delete(t);return}return o}};var R2=class{log;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:ping`)}async handle(e,t){return this.log("ping from %p",e),t}};var N2=class{components;validators;log;datastorePrefix;constructor(e,t){let{validators:n}=t;this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:put-value`),this.datastorePrefix=`${t.datastorePrefix}/record`,this.validators=n}async handle(e,t){let n=t.key;if(this.log("%p asked us to store value for key %b",e,n),t.record==null){let o=`Empty record from: ${e.toString()}`;throw this.log.error(o),new Oe(o)}try{let o=mr.deserialize(t.record);await vu(this.validators,o),o.timeReceived=new Date;let i=Us(this.datastorePrefix,o.key);await this.components.datastore.put(i,o.serialize().subarray()),this.log("put record for %b into datastore under key %k",n,i)}catch(o){this.log("did not put record for key %b into datastore %o",n,o)}return t}};var D2=class{handlers;routingTable;log;metrics;constructor(e,t){this.metrics={operations:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_inbound_rpc_requests_total`),errors:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_inbound_rpc_errors_total`)},this.log=e.logger.forComponent(`${t.logPrefix}:rpc`),this.routingTable=t.routingTable,this.handlers={[We.GET_VALUE.toString()]:new P2(e,t),[We.PUT_VALUE.toString()]:new N2(e,t),[We.FIND_NODE.toString()]:new C2(e,t),[We.ADD_PROVIDER.toString()]:new T2(e,t),[We.GET_PROVIDERS.toString()]:new k2(e,t),[We.PING.toString()]:new R2(e,t)}}async handleMessage(e,t){let n=this.handlers[t.type];if(n==null){this.log.error(`no handler found for message type: ${t.type}`);return}try{return this.metrics.operations?.increment({[t.type]:!0}),await n.handle(e,t)}catch{this.metrics.errors?.increment({[t.type]:!0})}}onIncomingStream(e){let t="unknown";Promise.resolve().then(async()=>{let{stream:n,connection:o}=e,i=o.remotePeer,s=this;await rr(n,a=>mo(a),async function*(a){for await(let c of a){let l=Ui.decode(c);t=l.type,s.log("incoming %s from %p",l.type,i);let u=await s.handleMessage(i,l);u!=null&&(yield Ui.encode(u))}},a=>po(a),n)}).catch(n=>{this.log.error("error handling %s RPC message from %p - %e",t,e.connection.remotePeer,n)})}};var O2=class extends Le{log;components;protocol;running;registrarId;constructor(e,t){super();let{protocol:n,logPrefix:o}=t;this.components=e,this.log=e.logger.forComponent(`${o}:topology-listener`),this.running=!1,this.protocol=n}isStarted(){return this.running}async start(){this.running||(this.running=!0,this.registrarId=await this.components.registrar.register(this.protocol,{onConnect:e=>{this.log("observed peer %p with protocol %s",e,this.protocol),this.dispatchEvent(new CustomEvent("peer",{detail:e}))}}))}async stop(){this.running=!1,this.registrarId!=null&&(this.components.registrar.unregister(this.registrarId),this.registrarId=void 0)}};var s7=class{dht;constructor(e){this.dht=e}async provide(e,t={}){await kr(this.dht.provide(e,t))}async cancelReprovide(e){await this.dht.cancelReprovide(e)}async*findProviders(e,t={}){for await(let n of this.dht.findProviders(e,t))n.name==="PROVIDER"&&(yield*n.providers)}async put(e,t,n){await kr(this.dht.put(e,t,n))}async get(e,t){for await(let n of this.dht.get(e,t))if(n.name==="VALUE")return n.value;throw new ze("Could not find value for key")}},a7=class{dht;constructor(e){this.dht=e}async findPeer(e,t={}){for await(let n of this.dht.findPeer(e,t))if(n.name==="FINAL_PEER")return n.peer;throw new ze("Peer not found")}async*getClosestPeers(e,t={}){for await(let n of this.dht.getClosestPeers(e,t))n.name==="FINAL_PEER"&&(yield n.peer)}},N$=32,D$=64,L2=class extends Le{protocol;routingTable;providers;network;peerRouting;components;log;running;kBucketSize;clientMode;validators;selectors;queryManager;contentFetching;contentRouting;routingTableRefresh;rpc;topologyListener;querySelf;maxInboundStreams;maxOutboundStreams;dhtContentRouting;dhtPeerRouting;peerInfoMapper;reprovider;constructor(e,t={}){super();let n=t.logPrefix??"libp2p:kad-dht",o=t.datastorePrefix??"/dht",i=t.metricsPrefix??"libp2p_kad_dht",s={queries:e.metrics?.registerMetricGroup(`${i}_operations_total`,{label:"operation"}),errors:e.metrics?.registerCounterGroup(`${i}_operation_errors_total`,{label:"operation"}),queryTime:e.metrics?.registerMetricGroup(`${i}_operation_time_seconds`,{label:"operation"}),errorTime:e.metrics?.registerMetricGroup(`${i}_operation_error_time_seconds`,{label:"operation"})};this.running=!1,this.components=e,this.log=e.logger.forComponent(n),this.protocol=t.protocol??M_,this.kBucketSize=t.kBucketSize??20,this.clientMode=t.clientMode??!0,this.maxInboundStreams=t.maxInboundStreams??N$,this.maxOutboundStreams=t.maxOutboundStreams??D$,this.peerInfoMapper=t.peerInfoMapper??tI;let a=ja();this.providers=new g2(e,{...t.providers,logPrefix:n,datastorePrefix:o,lock:a}),this.validators={...eI,...t.validators},this.selectors={...J_,...t.selectors},this.network=new p2(e,{protocol:this.protocol,logPrefix:n,metricsPrefix:i}),this.routingTable=new S2(e,{kBucketSize:t.kBucketSize,pingOldContactTimeout:t.pingOldContactTimeout,pingOldContactConcurrency:t.pingOldContactConcurrency,pingOldContactMaxQueueSize:t.pingOldContactMaxQueueSize,pingNewContactTimeout:t.pingNewContactTimeout,pingNewContactConcurrency:t.pingNewContactConcurrency,pingNewContactMaxQueueSize:t.pingNewContactMaxQueueSize,protocol:this.protocol,logPrefix:n,metricsPrefix:i,prefixLength:t.prefixLength,splitThreshold:t.kBucketSplitThreshold,network:this.network});let c=de();t.allowQueryWithZeroPeers===!0&&c.resolve(),this.queryManager=new y2(e,{disjointPaths:Math.ceil(this.kBucketSize/2),logPrefix:n,metricsPrefix:i,initialQuerySelfHasRun:c,routingTable:this.routingTable}),this.peerRouting=new m2(e,{routingTable:this.routingTable,network:this.network,validators:this.validators,queryManager:this.queryManager,logPrefix:n}),this.contentFetching=new c2(e,{validators:this.validators,selectors:this.selectors,peerRouting:this.peerRouting,queryManager:this.queryManager,network:this.network,logPrefix:n,datastorePrefix:o}),this.contentRouting=new l2(e,{network:this.network,peerRouting:this.peerRouting,queryManager:this.queryManager,routingTable:this.routingTable,providers:this.providers,logPrefix:n}),this.routingTableRefresh=new I2(e,{peerRouting:this.peerRouting,routingTable:this.routingTable,logPrefix:n}),this.rpc=new D2(e,{routingTable:this.routingTable,providers:this.providers,peerRouting:this.peerRouting,validators:this.validators,logPrefix:n,metricsPrefix:i,datastorePrefix:o,peerInfoMapper:this.peerInfoMapper}),this.topologyListener=new O2(e,{protocol:this.protocol,logPrefix:n}),this.querySelf=new b2(e,{peerRouting:this.peerRouting,interval:t.querySelfInterval,initialInterval:t.initialQuerySelfInterval,logPrefix:n,initialQuerySelfHasRun:c,routingTable:this.routingTable,operationMetrics:s}),this.reprovider=new x2(e,{...t.reprovide,logPrefix:n,metricsPrefix:i,datastorePrefix:o,contentRouting:this.contentRouting,lock:a,operationMetrics:s}),this.network.addEventListener("peer",l=>{let u=l.detail;this.onPeerConnect(u).catch(d=>{this.log.error("could not add %p to routing table",u.id,d)}),this.dispatchEvent(new CustomEvent("peer",{detail:u}))}),this.topologyListener.addEventListener("peer",l=>{let u=l.detail;Promise.resolve().then(async()=>{let d=await this.components.peerStore.get(u),h={id:u,multiaddrs:d.addresses.map(({multiaddr:m})=>m),protocols:d.protocols};await this.onPeerConnect(h)}).catch(d=>{this.log.error("could not add %p to routing table - %e",u,d)})}),this.dhtPeerRouting=new a7(this),this.dhtContentRouting=new s7(this),t.clientMode==null&&e.events.addEventListener("self:peer:update",l=>{this.log("received update of self-peer info"),Promise.resolve().then(async()=>{let u=l.detail.peer.addresses.some(({multiaddr:h})=>iI(h)),d=this.getMode();u&&d==="client"?await this.setMode("server"):d==="server"&&!u&&await this.setMode("client")}).catch(u=>{this.log.error("error setting dht server mode",u)})}),this.get=cc(this.get.bind(this),s,"GET_VALUE"),this.findProviders=cc(this.findProviders.bind(this),s,"FIND_PROVIDERS"),this.findPeer=cc(this.findPeer.bind(this),s,"FIND_PEER"),this.getClosestPeers=cc(this.getClosestPeers.bind(this),s,"GET_CLOSEST_PEERS"),this.provide=cc(this.provide.bind(this),s,"PROVIDE"),this.put=cc(this.put.bind(this),s,"PUT_VALUE")}[Symbol.toStringTag]="@libp2p/kad-dht";[Xe]=["@libp2p/content-routing","@libp2p/peer-routing","@libp2p/peer-discovery"];[Sn]=["@libp2p/identify"];get[jo](){return this.dhtContentRouting}get[Wo](){return this.dhtPeerRouting}get[ma](){return this}async onPeerConnect(e){if(this.log.trace("peer %p connected",e.id),e=this.peerInfoMapper(e),e.multiaddrs.length===0){this.log.trace("ignoring %p as there were no valid addresses in %s after filtering",e.id,e.multiaddrs.map(t=>t.toString()));return}try{await this.routingTable.add(e.id)}catch(t){this.log.error("could not add %p to routing table",e.id,t)}}isStarted(){return this.running}getMode(){return this.clientMode?"client":"server"}async setMode(e,t=!1){if(e===this.getMode()&&!t){this.log("already in %s mode",e);return}if(await this.components.registrar.unhandle(this.protocol),e===this.getMode()&&!t){this.log("already in %s mode",e);return}e==="client"?(this.log("enabling client mode while in %s mode",this.getMode()),this.clientMode=!0):(this.log("enabling server mode while in %s mode",this.getMode()),this.clientMode=!1,await this.components.registrar.handle(this.protocol,this.rpc.onIncomingStream.bind(this.rpc),{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}))}async start(){this.running||(this.running=!0,await this.setMode(this.clientMode?"client":"server",!0),await lr(this.routingTable,this.queryManager,this.network,this.topologyListener,this.routingTableRefresh,this.reprovider),await lr(this.querySelf))}async stop(){this.running=!1,await Cr(this.querySelf,this.queryManager,this.network,this.routingTable,this.routingTableRefresh,this.topologyListener,this.reprovider)}async*put(e,t,n={}){yield*this.contentFetching.put(e,t,n)}async*get(e,t={}){yield*this.contentFetching.get(e,t)}async*provide(e,t={}){yield*this.contentRouting.provide(e,this.components.addressManager.getAddresses(),t)}async cancelReprovide(e){await this.providers.removeProvider(e,this.components.peerId)}async*findProviders(e,t={}){yield*this.contentRouting.findProviders(e,t)}async*findPeer(e,t={}){yield*this.peerRouting.findPeer(e,t)}async*getClosestPeers(e,t={}){yield*this.peerRouting.getClosestPeers(e,t)}async refreshRoutingTable(){this.routingTableRefresh.refreshTable(!0)}};var A2;(function(r){r[r.SEND_QUERY=0]="SEND_QUERY",r[r.PEER_RESPONSE=1]="PEER_RESPONSE",r[r.FINAL_PEER=2]="FINAL_PEER",r[r.QUERY_ERROR=3]="QUERY_ERROR",r[r.PROVIDER=4]="PROVIDER",r[r.VALUE=5]="VALUE",r[r.ADD_PEER=6]="ADD_PEER",r[r.DIAL_PEER=7]="DIAL_PEER"})(A2||(A2={}));function yI(r={}){return e=>new L2(e,r)}var II=Vt(_I(),1),_u=II.default;var AT=Vt(LI(),1);var Iu={};Pt(Iu,{create:()=>Q$,derivedEmptyPasswordKey:()=>U2});var U2={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function Q$(r){let e=r?.algorithm??"AES-GCM",t=r?.keyLength??16,n=r?.nonceLength??12,o=r?.digest??"SHA-256",i=r?.saltLength??16,s=r?.iterations??32767,a=en.get();t*=8;async function c(d,h){let m=a.getRandomValues(new Uint8Array(i)),g=a.getRandomValues(new Uint8Array(n)),w={name:e,iv:g};typeof h=="string"&&(h=V(h));let y;if(h.length===0){y=await a.subtle.importKey("jwk",U2,{name:"AES-GCM"},!0,["encrypt"]);try{let S={name:"PBKDF2",salt:m,iterations:s,hash:{name:o}},v=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(S,v,{name:e,length:t},!0,["encrypt"])}catch{y=await a.subtle.importKey("jwk",U2,{name:"AES-GCM"},!0,["encrypt"])}}else{let S={name:"PBKDF2",salt:m,iterations:s,hash:{name:o}},v=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(S,v,{name:e,length:t},!0,["encrypt"])}let x=await a.subtle.encrypt(w,y,d);return st([m,w.iv,new Uint8Array(x)])}async function l(d,h){let m=d.subarray(0,i),g=d.subarray(i,i+n),w=d.subarray(i+n),y={name:e,iv:g};typeof h=="string"&&(h=V(h));let x;if(h.length===0)try{let v={name:"PBKDF2",salt:m,iterations:s,hash:{name:o}},N=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);x=await a.subtle.deriveKey(v,N,{name:e,length:t},!0,["decrypt"])}catch{x=await a.subtle.importKey("jwk",U2,{name:"AES-GCM"},!0,["decrypt"])}else{let v={name:"PBKDF2",salt:m,iterations:s,hash:{name:o}},N=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);x=await a.subtle.deriveKey(v,N,{name:e,length:t},!0,["decrypt"])}let S=await a.subtle.decrypt(y,x,w);return new Uint8Array(S)}return{encrypt:c,decrypt:l}}var Jn={};Pt(Jn,{Any:()=>si,BaseBlock:()=>Wt,BaseStringBlock:()=>Yf,BitString:()=>Uo,BmpString:()=>fc,Boolean:()=>uc,CharacterString:()=>vc,Choice:()=>ku,Constructed:()=>Zt,DATE:()=>rh,DateTime:()=>oh,Duration:()=>ih,EndOfContent:()=>Qf,Enumerated:()=>dc,GeneralString:()=>xc,GeneralizedTime:()=>Ec,GraphicString:()=>bc,HexBlock:()=>ai,IA5String:()=>wc,Integer:()=>Ln,Null:()=>un,NumericString:()=>pc,ObjectIdentifier:()=>Bn,OctetString:()=>Ur,Primitive:()=>Vi,PrintableString:()=>mc,RawData:()=>f7,RelativeObjectIdentifier:()=>th,Repeated:()=>Sc,Sequence:()=>_t,Set:()=>dn,TIME:()=>sh,TeletexString:()=>gc,TimeOfDay:()=>nh,UTCTime:()=>qs,UniversalString:()=>hc,Utf8String:()=>Zn,ValueBlock:()=>yr,VideotexString:()=>yc,ViewWriter:()=>Cu,VisibleString:()=>Hs,compareSchema:()=>Vs,fromBER:()=>Mn,verifySchema:()=>wK});var Me=Vt($i());function lc(r,e){let t=0;if(r.length===1)return r[0];for(let n=r.length-1;n>=0;n--)t+=r[r.length-1-n]*Math.pow(2,e*n);return t}function Ks(r,e,t=-1){let n=t,o=r,i=0,s=Math.pow(2,e);for(let a=1;a<8;a++){if(r<s){let c;if(n<0)c=new ArrayBuffer(a),i=a;else{if(n<a)return new ArrayBuffer(0);c=new ArrayBuffer(n),i=n}let l=new Uint8Array(c);for(let u=a-1;u>=0;u--){let d=Math.pow(2,u*e);l[i-u-1]=Math.floor(o/d),o-=l[i-u-1]*d}return c}s*=Math.pow(2,e)}return new ArrayBuffer(0)}function K2(...r){let e=0,t=0;for(let i of r)e+=i.length;let n=new ArrayBuffer(e),o=new Uint8Array(n);for(let i of r)o.set(i,t),t+=i.length;return o}function u7(){let r=new Uint8Array(this.valueHex);if(this.valueHex.byteLength>=2){let a=r[0]===255&&r[1]&128,c=r[0]===0&&(r[1]&128)===0;(a||c)&&this.warnings.push("Needlessly long format")}let e=new ArrayBuffer(this.valueHex.byteLength),t=new Uint8Array(e);for(let a=0;a<this.valueHex.byteLength;a++)t[a]=0;t[0]=r[0]&128;let n=lc(t,8),o=new ArrayBuffer(this.valueHex.byteLength),i=new Uint8Array(o);for(let a=0;a<this.valueHex.byteLength;a++)i[a]=r[a];return i[0]&=127,lc(i,8)-n}function BI(r){let e=r<0?r*-1:r,t=128;for(let n=1;n<8;n++){if(e<=t){if(r<0){let s=t-e,a=Ks(s,8,n),c=new Uint8Array(a);return c[0]|=128,a}let o=Ks(e,8,n),i=new Uint8Array(o);if(i[0]&128){let s=o.slice(0),a=new Uint8Array(s);o=new ArrayBuffer(o.byteLength+1),i=new Uint8Array(o);for(let c=0;c<s.byteLength;c++)i[c+1]=a[c];i[0]=0}return o}t*=Math.pow(2,8)}return new ArrayBuffer(0)}function MI(r,e){if(r.byteLength!==e.byteLength)return!1;let t=new Uint8Array(r),n=new Uint8Array(e);for(let o=0;o<t.length;o++)if(t[o]!==n[o])return!1;return!0}function cn(r,e){let t=r.toString(10);if(e<t.length)return"";let n=e-t.length,o=new Array(n);for(let s=0;s<n;s++)o[s]="0";return o.join("").concat(t)}var Zge=Math.log(2);function V2(){if(typeof BigInt>"u")throw new Error("BigInt is not defined. Your environment doesn't implement BigInt.")}function h7(r){let e=0,t=0;for(let o=0;o<r.length;o++){let i=r[o];e+=i.byteLength}let n=new Uint8Array(e);for(let o=0;o<r.length;o++){let i=r[o];n.set(new Uint8Array(i),t),t+=i.byteLength}return n.buffer}function Hi(r,e,t,n){return e instanceof Uint8Array?e.byteLength?t<0?(r.error="Wrong parameter: inputOffset less than zero",!1):n<0?(r.error="Wrong parameter: inputLength less than zero",!1):e.byteLength-t-n<0?(r.error="End of input reached before message was fully decoded (inconsistent offset and length values)",!1):!0:(r.error="Wrong parameter: inputBuffer has zero length",!1):(r.error="Wrong parameter: inputBuffer must be 'Uint8Array'",!1)}var Cu=class{constructor(){this.items=[]}write(e){this.items.push(e)}final(){return h7(this.items)}},Gf=[new Uint8Array([1])],UI="0123456789",d7="name",FI="valueHexView",sK="isHexOnly",aK="idBlock",cK="tagClass",lK="tagNumber",uK="isConstructed",dK="fromBER",fK="toBER",hK="local",ln="",Fo=new ArrayBuffer(0),ng=new Uint8Array(0),Xf="EndOfContent",KI="OCTET STRING",VI="BIT STRING";function ai(r){var e;return e=class extends r{get valueHex(){return this.valueHexView.slice().buffer}set valueHex(n){this.valueHexView=new Uint8Array(n)}constructor(...n){var o;super(...n);let i=n[0]||{};this.isHexOnly=(o=i.isHexOnly)!==null&&o!==void 0?o:!1,this.valueHexView=i.valueHex?Me.BufferSourceConverter.toUint8Array(i.valueHex):ng}fromBER(n,o,i){let s=n instanceof ArrayBuffer?new Uint8Array(n):n;if(!Hi(this,s,o,i))return-1;let a=o+i;return this.valueHexView=s.subarray(o,a),this.valueHexView.length?(this.blockLength=i,a):(this.warnings.push("Zero buffer length"),o)}toBER(n=!1){return this.isHexOnly?n?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.byteLength===this.valueHexView.buffer.byteLength?this.valueHexView.buffer:this.valueHexView.slice().buffer:(this.error="Flag 'isHexOnly' is not set, abort",Fo)}toJSON(){return{...super.toJSON(),isHexOnly:this.isHexOnly,valueHex:Me.Convert.ToHex(this.valueHexView)}}},e.NAME="hexBlock",e}var Ki=class{static blockName(){return this.NAME}get valueBeforeDecode(){return this.valueBeforeDecodeView.slice().buffer}set valueBeforeDecode(e){this.valueBeforeDecodeView=new Uint8Array(e)}constructor({blockLength:e=0,error:t=ln,warnings:n=[],valueBeforeDecode:o=ng}={}){this.blockLength=e,this.error=t,this.warnings=n,this.valueBeforeDecodeView=Me.BufferSourceConverter.toUint8Array(o)}toJSON(){return{blockName:this.constructor.NAME,blockLength:this.blockLength,error:this.error,warnings:this.warnings,valueBeforeDecode:Me.Convert.ToHex(this.valueBeforeDecodeView)}}};Ki.NAME="baseBlock";var yr=class extends Ki{fromBER(e,t,n){throw TypeError("User need to make a specific function in a class which extends 'ValueBlock'")}toBER(e,t){throw TypeError("User need to make a specific function in a class which extends 'ValueBlock'")}};yr.NAME="valueBlock";var H2=class extends ai(Ki){constructor({idBlock:e={}}={}){var t,n,o,i;super(),e?(this.isHexOnly=(t=e.isHexOnly)!==null&&t!==void 0?t:!1,this.valueHexView=e.valueHex?Me.BufferSourceConverter.toUint8Array(e.valueHex):ng,this.tagClass=(n=e.tagClass)!==null&&n!==void 0?n:-1,this.tagNumber=(o=e.tagNumber)!==null&&o!==void 0?o:-1,this.isConstructed=(i=e.isConstructed)!==null&&i!==void 0?i:!1):(this.tagClass=-1,this.tagNumber=-1,this.isConstructed=!1)}toBER(e=!1){let t=0;switch(this.tagClass){case 1:t|=0;break;case 2:t|=64;break;case 3:t|=128;break;case 4:t|=192;break;default:return this.error="Unknown tag class",Fo}if(this.isConstructed&&(t|=32),this.tagNumber<31&&!this.isHexOnly){let o=new Uint8Array(1);if(!e){let i=this.tagNumber;i&=31,t|=i,o[0]=t}return o.buffer}if(!this.isHexOnly){let o=Ks(this.tagNumber,7),i=new Uint8Array(o),s=o.byteLength,a=new Uint8Array(s+1);if(a[0]=t|31,!e){for(let c=0;c<s-1;c++)a[c+1]=i[c]|128;a[s]=i[s-1]}return a.buffer}let n=new Uint8Array(this.valueHexView.byteLength+1);if(n[0]=t|31,!e){let o=this.valueHexView;for(let i=0;i<o.length-1;i++)n[i+1]=o[i]|128;n[this.valueHexView.byteLength]=o[o.length-1]}return n.buffer}fromBER(e,t,n){let o=Me.BufferSourceConverter.toUint8Array(e);if(!Hi(this,o,t,n))return-1;let i=o.subarray(t,t+n);if(i.length===0)return this.error="Zero buffer length",-1;switch(i[0]&192){case 0:this.tagClass=1;break;case 64:this.tagClass=2;break;case 128:this.tagClass=3;break;case 192:this.tagClass=4;break;default:return this.error="Unknown tag class",-1}this.isConstructed=(i[0]&32)===32,this.isHexOnly=!1;let a=i[0]&31;if(a!==31)this.tagNumber=a,this.blockLength=1;else{let c=1,l=this.valueHexView=new Uint8Array(255),u=255;for(;i[c]&128;){if(l[c-1]=i[c]&127,c++,c>=i.length)return this.error="End of input reached before message was fully decoded",-1;if(c===u){u+=255;let h=new Uint8Array(u);for(let m=0;m<l.length;m++)h[m]=l[m];l=this.valueHexView=new Uint8Array(u)}}this.blockLength=c+1,l[c-1]=i[c]&127;let d=new Uint8Array(c);for(let h=0;h<c;h++)d[h]=l[h];l=this.valueHexView=new Uint8Array(c),l.set(d),this.blockLength<=9?this.tagNumber=lc(l,7):(this.isHexOnly=!0,this.warnings.push("Tag too long, represented as hex-coded"))}if(this.tagClass===1&&this.isConstructed)switch(this.tagNumber){case 1:case 2:case 5:case 6:case 9:case 13:case 14:case 23:case 24:case 31:case 32:case 33:case 34:return this.error="Constructed encoding used for primitive type",-1}return t+this.blockLength}toJSON(){return{...super.toJSON(),tagClass:this.tagClass,tagNumber:this.tagNumber,isConstructed:this.isConstructed}}};H2.NAME="identificationBlock";var q2=class extends Ki{constructor({lenBlock:e={}}={}){var t,n,o;super(),this.isIndefiniteForm=(t=e.isIndefiniteForm)!==null&&t!==void 0?t:!1,this.longFormUsed=(n=e.longFormUsed)!==null&&n!==void 0?n:!1,this.length=(o=e.length)!==null&&o!==void 0?o:0}fromBER(e,t,n){let o=Me.BufferSourceConverter.toUint8Array(e);if(!Hi(this,o,t,n))return-1;let i=o.subarray(t,t+n);if(i.length===0)return this.error="Zero buffer length",-1;if(i[0]===255)return this.error="Length block 0xFF is reserved by standard",-1;if(this.isIndefiniteForm=i[0]===128,this.isIndefiniteForm)return this.blockLength=1,t+this.blockLength;if(this.longFormUsed=!!(i[0]&128),this.longFormUsed===!1)return this.length=i[0],this.blockLength=1,t+this.blockLength;let s=i[0]&127;if(s>8)return this.error="Too big integer",-1;if(s+1>i.length)return this.error="End of input reached before message was fully decoded",-1;let a=t+1,c=o.subarray(a,a+s);return c[s-1]===0&&this.warnings.push("Needlessly long encoded length"),this.length=lc(c,8),this.longFormUsed&&this.length<=127&&this.warnings.push("Unnecessary usage of long length form"),this.blockLength=s+1,t+this.blockLength}toBER(e=!1){let t,n;if(this.length>127&&(this.longFormUsed=!0),this.isIndefiniteForm)return t=new ArrayBuffer(1),e===!1&&(n=new Uint8Array(t),n[0]=128),t;if(this.longFormUsed){let o=Ks(this.length,8);if(o.byteLength>127)return this.error="Too big length",Fo;if(t=new ArrayBuffer(o.byteLength+1),e)return t;let i=new Uint8Array(o);n=new Uint8Array(t),n[0]=o.byteLength|128;for(let s=0;s<o.byteLength;s++)n[s+1]=i[s];return t}return t=new ArrayBuffer(1),e===!1&&(n=new Uint8Array(t),n[0]=this.length),t}toJSON(){return{...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,longFormUsed:this.longFormUsed,length:this.length}}};q2.NAME="lengthBlock";var ce={},Wt=class extends Ki{constructor({name:e=ln,optional:t=!1,primitiveSchema:n,...o}={},i){super(o),this.name=e,this.optional=t,n&&(this.primitiveSchema=n),this.idBlock=new H2(o),this.lenBlock=new q2(o),this.valueBlock=i?new i(o):new yr(o)}fromBER(e,t,n){let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}toBER(e,t){let n=t||new Cu;t||HI(this);let o=this.idBlock.toBER(e);if(n.write(o),this.lenBlock.isIndefiniteForm)n.write(new Uint8Array([128]).buffer),this.valueBlock.toBER(e,n),n.write(new ArrayBuffer(2));else{let i=this.valueBlock.toBER(e);this.lenBlock.length=i.byteLength;let s=this.lenBlock.toBER(e);n.write(s),n.write(i)}return t?Fo:n.final()}toJSON(){let e={...super.toJSON(),idBlock:this.idBlock.toJSON(),lenBlock:this.lenBlock.toJSON(),valueBlock:this.valueBlock.toJSON(),name:this.name,optional:this.optional};return this.primitiveSchema&&(e.primitiveSchema=this.primitiveSchema.toJSON()),e}toString(e="ascii"){return e==="ascii"?this.onAsciiEncoding():Me.Convert.ToHex(this.toBER())}onAsciiEncoding(){let e=this.constructor.NAME,t=Me.Convert.ToHex(this.valueBlock.valueBeforeDecodeView);return`${e} : ${t}`}isEqual(e){if(this===e)return!0;if(!(e instanceof this.constructor))return!1;let t=this.toBER(),n=e.toBER();return MI(t,n)}};Wt.NAME="BaseBlock";function HI(r){var e;if(r instanceof ce.Constructed)for(let t of r.valueBlock.value)HI(t)&&(r.lenBlock.isIndefiniteForm=!0);return!!(!((e=r.lenBlock)===null||e===void 0)&&e.isIndefiniteForm)}var Yf=class extends Wt{getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}constructor({value:e=ln,...t}={},n){super(t,n),e&&this.fromString(e)}fromBER(e,t,n){let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.fromBuffer(this.valueBlock.valueHexView),this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}onAsciiEncoding(){return`${this.constructor.NAME} : '${this.valueBlock.value}'`}};Yf.NAME="BaseStringBlock";var j2=class extends ai(yr){constructor({isHexOnly:e=!0,...t}={}){super(t),this.isHexOnly=e}};j2.NAME="PrimitiveValueBlock";var qI,Vi=class extends Wt{constructor(e={}){super(e,j2),this.idBlock.isConstructed=!1}};qI=Vi;ce.Primitive=qI;Vi.NAME="PRIMITIVE";function pK(r,e){if(r instanceof e)return r;let t=new e;return t.idBlock=r.idBlock,t.lenBlock=r.lenBlock,t.warnings=r.warnings,t.valueBeforeDecodeView=r.valueBeforeDecodeView,t}function Pu(r,e=0,t=r.length){let n=e,o=new Wt({},yr),i=new Ki;if(!Hi(i,r,e,t))return o.error=i.error,{offset:-1,result:o};if(!r.subarray(e,e+t).length)return o.error="Zero buffer length",{offset:-1,result:o};let a=o.idBlock.fromBER(r,e,t);if(o.idBlock.warnings.length&&o.warnings.concat(o.idBlock.warnings),a===-1)return o.error=o.idBlock.error,{offset:-1,result:o};if(e=a,t-=o.idBlock.blockLength,a=o.lenBlock.fromBER(r,e,t),o.lenBlock.warnings.length&&o.warnings.concat(o.lenBlock.warnings),a===-1)return o.error=o.lenBlock.error,{offset:-1,result:o};if(e=a,t-=o.lenBlock.blockLength,!o.idBlock.isConstructed&&o.lenBlock.isIndefiniteForm)return o.error="Indefinite length form used for primitive encoding form",{offset:-1,result:o};let c=Wt;switch(o.idBlock.tagClass){case 1:if(o.idBlock.tagNumber>=37&&o.idBlock.isHexOnly===!1)return o.error="UNIVERSAL 37 and upper tags are reserved by ASN.1 standard",{offset:-1,result:o};switch(o.idBlock.tagNumber){case 0:if(o.idBlock.isConstructed&&o.lenBlock.length>0)return o.error="Type [UNIVERSAL 0] is reserved",{offset:-1,result:o};c=ce.EndOfContent;break;case 1:c=ce.Boolean;break;case 2:c=ce.Integer;break;case 3:c=ce.BitString;break;case 4:c=ce.OctetString;break;case 5:c=ce.Null;break;case 6:c=ce.ObjectIdentifier;break;case 10:c=ce.Enumerated;break;case 12:c=ce.Utf8String;break;case 13:c=ce.RelativeObjectIdentifier;break;case 14:c=ce.TIME;break;case 15:return o.error="[UNIVERSAL 15] is reserved by ASN.1 standard",{offset:-1,result:o};case 16:c=ce.Sequence;break;case 17:c=ce.Set;break;case 18:c=ce.NumericString;break;case 19:c=ce.PrintableString;break;case 20:c=ce.TeletexString;break;case 21:c=ce.VideotexString;break;case 22:c=ce.IA5String;break;case 23:c=ce.UTCTime;break;case 24:c=ce.GeneralizedTime;break;case 25:c=ce.GraphicString;break;case 26:c=ce.VisibleString;break;case 27:c=ce.GeneralString;break;case 28:c=ce.UniversalString;break;case 29:c=ce.CharacterString;break;case 30:c=ce.BmpString;break;case 31:c=ce.DATE;break;case 32:c=ce.TimeOfDay;break;case 33:c=ce.DateTime;break;case 34:c=ce.Duration;break;default:{let l=o.idBlock.isConstructed?new ce.Constructed:new ce.Primitive;l.idBlock=o.idBlock,l.lenBlock=o.lenBlock,l.warnings=o.warnings,o=l}}break;case 2:case 3:case 4:default:c=o.idBlock.isConstructed?ce.Constructed:ce.Primitive}return o=pK(o,c),a=o.fromBER(r,e,o.lenBlock.isIndefiniteForm?t:o.lenBlock.length),o.valueBeforeDecodeView=r.subarray(n,n+o.blockLength),{offset:a,result:o}}function Mn(r){if(!r.byteLength){let e=new Wt({},yr);return e.error="Input buffer has zero length",{offset:-1,result:e}}return Pu(Me.BufferSourceConverter.toUint8Array(r).slice(),0,r.byteLength)}function mK(r,e){return r?1:e}var ii=class extends yr{constructor({value:e=[],isIndefiniteForm:t=!1,...n}={}){super(n),this.value=e,this.isIndefiniteForm=t}fromBER(e,t,n){let o=Me.BufferSourceConverter.toUint8Array(e);if(!Hi(this,o,t,n))return-1;if(this.valueBeforeDecodeView=o.subarray(t,t+n),this.valueBeforeDecodeView.length===0)return this.warnings.push("Zero buffer length"),t;let i=t;for(;mK(this.isIndefiniteForm,n)>0;){let s=Pu(o,i,n);if(s.offset===-1)return this.error=s.result.error,this.warnings.concat(s.result.warnings),-1;if(i=s.offset,this.blockLength+=s.result.blockLength,n-=s.result.blockLength,this.value.push(s.result),this.isIndefiniteForm&&s.result.constructor.NAME===Xf)break}return this.isIndefiniteForm&&(this.value[this.value.length-1].constructor.NAME===Xf?this.value.pop():this.warnings.push("No EndOfContent block encoded")),i}toBER(e,t){let n=t||new Cu;for(let o=0;o<this.value.length;o++)this.value[o].toBER(e,n);return t?Fo:n.final()}toJSON(){let e={...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,value:[]};for(let t of this.value)e.value.push(t.toJSON());return e}};ii.NAME="ConstructedValueBlock";var jI,Zt=class extends Wt{constructor(e={}){super(e,ii),this.idBlock.isConstructed=!0}fromBER(e,t,n){this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm;let o=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return o===-1?(this.error=this.valueBlock.error,o):(this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.valueBlock.error.length||(this.blockLength+=this.valueBlock.blockLength),o)}onAsciiEncoding(){let e=[];for(let n of this.valueBlock.value)e.push(n.toString("ascii").split(`
4
15
  `).map(o=>` ${o}`).join(`
5
16
  `));let t=this.idBlock.tagClass===3?`[${this.idBlock.tagNumber}]`:this.constructor.NAME;return e.length?`${t} :
6
17
  ${e.join(`
7
- `)}`:`${t} :`}};H6=_o;G.Constructed=H6;_o.NAME="CONSTRUCTED";var du=class extends Bt{fromBER(e,t,n){return t}toBER(e){return Xr}};du.override="EndOfContentValueBlock";var q6,fu=class extends bt{constructor(e={}){super(e,du),this.idBlock.tagClass=1,this.idBlock.tagNumber=0}};q6=fu;G.EndOfContent=q6;fu.NAME=$a;var z6,Kn=class extends bt{constructor(e={}){super(e,Bt),this.idBlock.tagClass=1,this.idBlock.tagNumber=5}fromBER(e,t,n){return this.lenBlock.length>0&&this.warnings.push("Non-zero length of value block for Null type"),this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.blockLength+=n,t+n>e.byteLength?(this.error="End of input reached before message was fully decoded (inconsistent offset and length values)",-1):t+n}toBER(e,t){let n=new ArrayBuffer(2);if(!e){let o=new Uint8Array(n);o[0]=5,o[1]=0}return t&&t.write(n),n}onAsciiEncoding(){return`${this.constructor.NAME}`}};z6=Kn;G.Null=z6;Kn.NAME="NULL";var hu=class extends Wn(Bt){constructor({value:e,...t}={}){super(t),t.valueHex?this.valueHexView=ye.BufferSourceConverter.toUint8Array(t.valueHex):this.valueHexView=new Uint8Array(1),e&&(this.value=e)}get value(){for(let e of this.valueHexView)if(e>0)return!0;return!1}set value(e){this.valueHexView[0]=e?255:0}fromBER(e,t,n){let o=ye.BufferSourceConverter.toUint8Array(e);return zn(this,o,t,n)?(this.valueHexView=o.subarray(t,t+n),n>1&&this.warnings.push("Boolean value encoded in more then 1 octet"),this.isHexOnly=!0,I2.call(this),this.blockLength=n,t+n):-1}toBER(){return this.valueHexView.slice()}toJSON(){return{...super.toJSON(),value:this.value}}};hu.NAME="BooleanValueBlock";var W6,pu=class extends bt{constructor(e={}){super(e,hu),this.idBlock.tagClass=1,this.idBlock.tagNumber=1}getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.getValue}`}};W6=pu;G.Boolean=W6;pu.NAME="BOOLEAN";var mu=class extends Wn(vn){constructor({isConstructed:e=!1,...t}={}){super(t),this.isConstructed=e}fromBER(e,t,n){let o=0;if(this.isConstructed){if(this.isHexOnly=!1,o=vn.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let i=0;i<this.value.length;i++){let s=this.value[i].constructor.NAME;if(s===$a){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only",-1}if(s!==F6)return this.error="OCTET STRING may consists of OCTET STRINGs only",-1}}else this.isHexOnly=!0,o=super.fromBER(e,t,n),this.blockLength=n;return o}toBER(e,t){return this.isConstructed?vn.prototype.toBER.call(this,e,t):e?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),isConstructed:this.isConstructed}}};mu.NAME="OctetStringValueBlock";var G6,Hn=class r extends bt{constructor({idBlock:e={},lenBlock:t={},...n}={}){var o,i;(o=n.isConstructed)!==null&&o!==void 0||(n.isConstructed=!!(!((i=n.value)===null||i===void 0)&&i.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},mu),this.idBlock.tagClass=1,this.idBlock.tagNumber=4}fromBER(e,t,n){if(this.valueBlock.isConstructed=this.idBlock.isConstructed,this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm,n===0)return this.idBlock.error.length===0&&(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length===0&&(this.blockLength+=this.lenBlock.blockLength),t;if(!this.valueBlock.isConstructed){let i=(e instanceof ArrayBuffer?new Uint8Array(e):e).subarray(t,t+n);try{if(i.byteLength){let s=Hu(i,0,i.byteLength);s.offset!==-1&&s.offset===n&&(this.valueBlock.value=[s.result])}}catch{}}return super.fromBER(e,t,n)}onAsciiEncoding(){return this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length?_o.prototype.onAsciiEncoding.call(this):`${this.constructor.NAME} : ${ye.Convert.ToHex(this.valueBlock.valueHexView)}`}getValue(){if(!this.idBlock.isConstructed)return this.valueBlock.valueHexView.slice().buffer;let e=[];for(let t of this.valueBlock.value)t instanceof r&&e.push(t.valueBlock.valueHexView);return ye.BufferSourceConverter.concat(e)}};G6=Hn;G.OctetString=G6;Hn.NAME=F6;var gu=class extends Wn(vn){constructor({unusedBits:e=0,isConstructed:t=!1,...n}={}){super(n),this.unusedBits=e,this.isConstructed=t,this.blockLength=this.valueHexView.byteLength}fromBER(e,t,n){if(!n)return t;let o=-1;if(this.isConstructed){if(o=vn.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let a of this.value){let c=a.constructor.NAME;if(c===$a){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only",-1}if(c!==V6)return this.error="BIT STRING may consists of BIT STRINGs only",-1;let l=a.valueBlock;if(this.unusedBits>0&&l.unusedBits>0)return this.error='Using of "unused bits" inside constructive BIT STRING allowed for least one only',-1;this.unusedBits=l.unusedBits}return o}let i=ye.BufferSourceConverter.toUint8Array(e);if(!zn(this,i,t,n))return-1;let s=i.subarray(t,t+n);if(this.unusedBits=s[0],this.unusedBits>7)return this.error="Unused bits for BitString must be in range 0-7",-1;if(!this.unusedBits){let a=s.subarray(1);try{if(a.byteLength){let c=Hu(a,0,a.byteLength);c.offset!==-1&&c.offset===n-1&&(this.value=[c.result])}}catch{}}return this.valueHexView=s.subarray(1),this.blockLength=s.length,t+n}toBER(e,t){if(this.isConstructed)return vn.prototype.toBER.call(this,e,t);if(e)return new ArrayBuffer(this.valueHexView.byteLength+1);if(!this.valueHexView.byteLength)return Xr;let n=new Uint8Array(this.valueHexView.length+1);return n[0]=this.unusedBits,n.set(this.valueHexView,1),n.buffer}toJSON(){return{...super.toJSON(),unusedBits:this.unusedBits,isConstructed:this.isConstructed}}};gu.NAME="BitStringValueBlock";var Q6,As=class extends bt{constructor({idBlock:e={},lenBlock:t={},...n}={}){var o,i;(o=n.isConstructed)!==null&&o!==void 0||(n.isConstructed=!!(!((i=n.value)===null||i===void 0)&&i.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},gu),this.idBlock.tagClass=1,this.idBlock.tagNumber=3}fromBER(e,t,n){return this.valueBlock.isConstructed=this.idBlock.isConstructed,this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm,super.fromBER(e,t,n)}onAsciiEncoding(){if(this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length)return _o.prototype.onAsciiEncoding.call(this);{let e=[],t=this.valueBlock.valueHexView;for(let o of t)e.push(o.toString(2).padStart(8,"0"));let n=e.join("");return`${this.constructor.NAME} : ${n.substring(0,n.length-this.valueBlock.unusedBits)}`}}};Q6=As;G.BitString=Q6;As.NAME=V6;var Y6;function CS(r,e){let t=new Uint8Array([0]),n=new Uint8Array(r),o=new Uint8Array(e),i=n.slice(0),s=i.length-1,a=o.slice(0),c=a.length-1,l=0,u=c<s?s:c,d=0;for(let f=u;f>=0;f--,d++){switch(!0){case d<a.length:l=i[s-d]+a[c-d]+t[0];break;default:l=i[s-d]+t[0]}switch(t[0]=l/10,!0){case d>=i.length:i=ou(new Uint8Array([l%10]),i);break;default:i[s-d]=l%10}}return t[0]>0&&(i=ou(t,i)),i}function U6(r){if(r>=Fa.length)for(let e=Fa.length;e<=r;e++){let t=new Uint8Array([0]),n=Fa[e-1].slice(0);for(let o=n.length-1;o>=0;o--){let i=new Uint8Array([(n[o]<<1)+t[0]]);t[0]=i[0]/10,n[o]=i[0]%10}t[0]>0&&(n=ou(t,n)),Fa.push(n)}return Fa[r]}function kS(r,e){let t=0,n=new Uint8Array(r),o=new Uint8Array(e),i=n.slice(0),s=i.length-1,a=o.slice(0),c=a.length-1,l,u=0;for(let d=c;d>=0;d--,u++)switch(l=i[s-u]-a[c-u]-t,!0){case l<0:t=1,i[s-u]=l+10;break;default:t=0,i[s-u]=l}if(t>0)for(let d=s-c+1;d>=0;d--,u++)if(l=i[s-u]-t,l<0)t=1,i[s-u]=l+10;else{t=0,i[s-u]=l;break}return i.slice()}var Ka=class extends Wn(Bt){constructor({value:e,...t}={}){super(t),this._valueDec=0,t.valueHex&&this.setValueHex(),e!==void 0&&(this.valueDec=e)}setValueHex(){this.valueHexView.length>=4?(this.warnings.push("Too big Integer for decoding, hex only"),this.isHexOnly=!0,this._valueDec=0):(this.isHexOnly=!1,this.valueHexView.length>0&&(this._valueDec=I2.call(this)))}set valueDec(e){this._valueDec=e,this.isHexOnly=!1,this.valueHexView=new Uint8Array(B6(e))}get valueDec(){return this._valueDec}fromDER(e,t,n,o=0){let i=this.fromBER(e,t,n);if(i===-1)return i;let s=this.valueHexView;return s[0]===0&&s[1]&128?this.valueHexView=s.subarray(1):o!==0&&s.length<o&&(o-s.length>1&&(o=s.length+1),this.valueHexView=s.subarray(o-s.length)),i}toDER(e=!1){let t=this.valueHexView;switch(!0){case(t[0]&128)!==0:{let n=new Uint8Array(this.valueHexView.length+1);n[0]=0,n.set(t,1),this.valueHexView=n}break;case(t[0]===0&&(t[1]&128)===0):this.valueHexView=this.valueHexView.subarray(1);break}return this.toBER(e)}fromBER(e,t,n){let o=super.fromBER(e,t,n);return o===-1||this.setValueHex(),o}toBER(e){return e?new ArrayBuffer(this.valueHexView.length):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}toString(){let e=this.valueHexView.length*8-1,t=new Uint8Array(this.valueHexView.length*8/3),n=0,o,i=this.valueHexView,s="",a=!1;for(let c=i.byteLength-1;c>=0;c--){o=i[c];for(let l=0;l<8;l++){if((o&1)===1)switch(n){case e:t=kS(U6(n),t),s="-";break;default:t=CS(t,U6(n))}n++,o>>=1}}for(let c=0;c<t.length;c++)t[c]&&(a=!0),a&&(s+=M6.charAt(t[c]));return a===!1&&(s+=M6.charAt(0)),s}};Y6=Ka;Ka.NAME="IntegerValueBlock";Object.defineProperty(Y6.prototype,"valueHex",{set:function(r){this.valueHexView=new Uint8Array(r),this.setValueHex()},get:function(){return this.valueHexView.slice().buffer}});var X6,et=class r extends bt{constructor(e={}){super(e,Ka),this.idBlock.tagClass=1,this.idBlock.tagNumber=2}toBigInt(){return iu(),BigInt(this.valueBlock.toString())}static fromBigInt(e){iu();let t=BigInt(e),n=new Va,o=t.toString(16).replace(/^-/,""),i=new Uint8Array(ye.Convert.FromHex(o));if(t<0){let a=new Uint8Array(i.length+(i[0]&128?1:0));a[0]|=128;let l=BigInt(`0x${ye.Convert.ToHex(a)}`)+t,u=ye.BufferSourceConverter.toUint8Array(ye.Convert.FromHex(l.toString(16)));u[0]|=128,n.write(u)}else i[0]&128&&n.write(new Uint8Array([0])),n.write(i);return new r({valueHex:n.final()})}convertToDER(){let e=new r({valueHex:this.valueBlock.valueHexView});return e.valueBlock.toDER(),e}convertFromDER(){return new r({valueHex:this.valueBlock.valueHexView[0]===0?this.valueBlock.valueHexView.subarray(1):this.valueBlock.valueHexView})}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()}`}};X6=et;G.Integer=X6;et.NAME="INTEGER";var j6,yu=class extends et{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=10}};j6=yu;G.Enumerated=j6;yu.NAME="ENUMERATED";var Ha=class extends Wn(Bt){constructor({valueDec:e=-1,isFirstSid:t=!1,...n}={}){super(n),this.valueDec=e,this.isFirstSid=t}fromBER(e,t,n){if(!n)return t;let o=ye.BufferSourceConverter.toUint8Array(e);if(!zn(this,o,t,n))return-1;let i=o.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=i[a]&127,this.blockLength++,!!(i[a]&128));a++);let s=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)s[a]=this.valueHexView[a];return this.valueHexView=s,i[this.blockLength-1]&128?(this.error="End of input reached before message was fully decoded",-1):(this.valueHexView[0]===0&&this.warnings.push("Needlessly long format of SID encoding"),this.blockLength<=8?this.valueDec=mi(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}set valueBigInt(e){iu();let t=BigInt(e).toString(2);for(;t.length%7;)t="0"+t;let n=new Uint8Array(t.length/7);for(let o=0;o<n.length;o++)n[o]=parseInt(t.slice(o*7,o*7+7),2)+(o+1<n.length?128:0);this.fromBER(n.buffer,0,n.length)}toBER(e){if(this.isHexOnly){if(e)return new ArrayBuffer(this.valueHexView.byteLength);let o=this.valueHexView,i=new Uint8Array(this.blockLength);for(let s=0;s<this.blockLength-1;s++)i[s]=o[s]|128;return i[this.blockLength-1]=o[this.blockLength-1],i.buffer}let t=To(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",Xr;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),i=t.byteLength-1;for(let s=0;s<i;s++)n[s]=o[s]|128;n[i]=o[i]}return n}toString(){let e="";if(this.isHexOnly)e=ye.Convert.ToHex(this.valueHexView);else if(this.isFirstSid){let t=this.valueDec;this.valueDec<=39?e="0.":this.valueDec<=79?(e="1.",t-=40):(e="2.",t-=80),e+=t.toString()}else e=this.valueDec.toString();return e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec,isFirstSid:this.isFirstSid}}};Ha.NAME="sidBlock";var wu=class extends Bt{constructor({value:e=Is,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let i=new Ha;if(o=i.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=i.error,o;this.value.length===0&&(i.isFirstSid=!0),this.blockLength+=i.blockLength,n-=i.blockLength,this.value.push(i)}return o}toBER(e){let t=[];for(let n=0;n<this.value.length;n++){let o=this.value[n].toBER(e);if(o.byteLength===0)return this.error=this.value[n].error,Xr;t.push(o)}return T2(t)}fromString(e){this.value=[];let t=0,n=0,o="",i=!1;do if(n=e.indexOf(".",t),n===-1?o=e.substring(t):o=e.substring(t,n),t=n+1,i){let s=this.value[0],a=0;switch(s.valueDec){case 0:break;case 1:a=40;break;case 2:a=80;break;default:this.value=[];return}let c=parseInt(o,10);if(isNaN(c))return;s.valueDec=c+a,i=!1}else{let s=new Ha;if(o>Number.MAX_SAFE_INTEGER){iu();let a=BigInt(o);s.valueBigInt=a}else if(s.valueDec=parseInt(o,10),isNaN(s.valueDec))return;this.value.length||(s.isFirstSid=!0,i=!0),this.value.push(s)}while(n!==-1)}toString(){let e="",t=!1;for(let n=0;n<this.value.length;n++){t=this.value[n].isHexOnly;let o=this.value[n].toString();n!==0&&(e=`${e}.`),t?(o=`{${o}}`,this.value[n].isFirstSid?e=`2.{${o} - 80}`:e+=o):e+=o}return e}toJSON(){let e={...super.toJSON(),value:this.toString(),sidArray:[]};for(let t=0;t<this.value.length;t++)e.sidArray.push(this.value[t].toJSON());return e}};wu.NAME="ObjectIdentifierValueBlock";var Z6,_r=class extends bt{constructor(e={}){super(e,wu),this.idBlock.tagClass=1,this.idBlock.tagNumber=6}getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};Z6=_r;G.ObjectIdentifier=Z6;_r.NAME="OBJECT IDENTIFIER";var qa=class extends Wn($n){constructor({valueDec:e=0,...t}={}){super(t),this.valueDec=e}fromBER(e,t,n){if(n===0)return t;let o=ye.BufferSourceConverter.toUint8Array(e);if(!zn(this,o,t,n))return-1;let i=o.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=i[a]&127,this.blockLength++,!!(i[a]&128));a++);let s=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)s[a]=this.valueHexView[a];return this.valueHexView=s,i[this.blockLength-1]&128?(this.error="End of input reached before message was fully decoded",-1):(this.valueHexView[0]===0&&this.warnings.push("Needlessly long format of SID encoding"),this.blockLength<=8?this.valueDec=mi(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}toBER(e){if(this.isHexOnly){if(e)return new ArrayBuffer(this.valueHexView.byteLength);let o=this.valueHexView,i=new Uint8Array(this.blockLength);for(let s=0;s<this.blockLength-1;s++)i[s]=o[s]|128;return i[this.blockLength-1]=o[this.blockLength-1],i.buffer}let t=To(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",Xr;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),i=t.byteLength-1;for(let s=0;s<i;s++)n[s]=o[s]|128;n[i]=o[i]}return n.buffer}toString(){let e="";return this.isHexOnly?e=ye.Convert.ToHex(this.valueHexView):e=this.valueDec.toString(),e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}};qa.NAME="relativeSidBlock";var bu=class extends Bt{constructor({value:e=Is,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let i=new qa;if(o=i.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=i.error,o;this.blockLength+=i.blockLength,n-=i.blockLength,this.value.push(i)}return o}toBER(e,t){let n=[];for(let o=0;o<this.value.length;o++){let i=this.value[o].toBER(e);if(i.byteLength===0)return this.error=this.value[o].error,Xr;n.push(i)}return T2(n)}fromString(e){this.value=[];let t=0,n=0,o="";do{n=e.indexOf(".",t),n===-1?o=e.substring(t):o=e.substring(t,n),t=n+1;let i=new qa;if(i.valueDec=parseInt(o,10),isNaN(i.valueDec))return!0;this.value.push(i)}while(n!==-1);return!0}toString(){let e="",t=!1;for(let n=0;n<this.value.length;n++){t=this.value[n].isHexOnly;let o=this.value[n].toString();n!==0&&(e=`${e}.`),t&&(o=`{${o}}`),e+=o}return e}toJSON(){let e={...super.toJSON(),value:this.toString(),sidArray:[]};for(let t=0;t<this.value.length;t++)e.sidArray.push(this.value[t].toJSON());return e}};bu.NAME="RelativeObjectIdentifierValueBlock";var J6,xu=class extends bt{constructor(e={}){super(e,bu),this.idBlock.tagClass=1,this.idBlock.tagNumber=13}getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};J6=xu;G.RelativeObjectIdentifier=J6;xu.NAME="RelativeObjectIdentifier";var eg,ut=class extends _o{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=16}};eg=ut;G.Sequence=eg;ut.NAME="SEQUENCE";var tg,vu=class extends _o{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=17}};tg=vu;G.Set=tg;vu.NAME="SET";var Eu=class extends Wn(Bt){constructor({...e}={}){super(e),this.isHexOnly=!0,this.value=Is}toJSON(){return{...super.toJSON(),value:this.value}}};Eu.NAME="StringValueBlock";var Su=class extends Eu{};Su.NAME="SimpleStringValueBlock";var Ht=class extends cu{constructor({...e}={}){super(e,Su)}fromBuffer(e){this.valueBlock.value=String.fromCharCode.apply(null,ye.BufferSourceConverter.toUint8Array(e))}fromString(e){let t=e.length,n=this.valueBlock.valueHexView=new Uint8Array(t);for(let o=0;o<t;o++)n[o]=e.charCodeAt(o);this.valueBlock.value=e}};Ht.NAME="SIMPLE STRING";var Au=class extends Ht{fromBuffer(e){this.valueBlock.valueHexView=ye.BufferSourceConverter.toUint8Array(e);try{this.valueBlock.value=ye.Convert.ToUtf8String(e)}catch(t){this.warnings.push(`Error during "decodeURIComponent": ${t}, using raw string`),this.valueBlock.value=ye.Convert.ToBinary(e)}}fromString(e){this.valueBlock.valueHexView=new Uint8Array(ye.Convert.FromUtf8String(e)),this.valueBlock.value=e}};Au.NAME="Utf8StringValueBlock";var rg,qn=class extends Au{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=12}};rg=qn;G.Utf8String=rg;qn.NAME="UTF8String";var Iu=class extends Ht{fromBuffer(e){this.valueBlock.value=ye.Convert.ToUtf16String(e),this.valueBlock.valueHexView=ye.BufferSourceConverter.toUint8Array(e)}fromString(e){this.valueBlock.value=e,this.valueBlock.valueHexView=new Uint8Array(ye.Convert.FromUtf16String(e))}};Iu.NAME="BmpStringValueBlock";var ng,Tu=class extends Iu{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=30}};ng=Tu;G.BmpString=ng;Tu.NAME="BMPString";var _u=class extends Ht{fromBuffer(e){let t=ArrayBuffer.isView(e)?e.slice().buffer:e.slice(0),n=new Uint8Array(t);for(let o=0;o<n.length;o+=4)n[o]=n[o+3],n[o+1]=n[o+2],n[o+2]=0,n[o+3]=0;this.valueBlock.value=String.fromCharCode.apply(null,new Uint32Array(t))}fromString(e){let t=e.length,n=this.valueBlock.valueHexView=new Uint8Array(t*4);for(let o=0;o<t;o++){let i=To(e.charCodeAt(o),8),s=new Uint8Array(i);if(s.length>4)continue;let a=4-s.length;for(let c=s.length-1;c>=0;c--)n[o*4+c+a]=s[c]}this.valueBlock.value=e}};_u.NAME="UniversalStringValueBlock";var og,Cu=class extends _u{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=28}};og=Cu;G.UniversalString=og;Cu.NAME="UniversalString";var ig,ku=class extends Ht{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=18}};ig=ku;G.NumericString=ig;ku.NAME="NumericString";var sg,Pu=class extends Ht{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=19}};sg=Pu;G.PrintableString=sg;Pu.NAME="PrintableString";var ag,Ru=class extends Ht{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=20}};ag=Ru;G.TeletexString=ag;Ru.NAME="TeletexString";var cg,Du=class extends Ht{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=21}};cg=Du;G.VideotexString=cg;Du.NAME="VideotexString";var lg,Lu=class extends Ht{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=22}};lg=Lu;G.IA5String=lg;Lu.NAME="IA5String";var ug,Nu=class extends Ht{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=25}};ug=Nu;G.GraphicString=ug;Nu.NAME="GraphicString";var dg,za=class extends Ht{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=26}};dg=za;G.VisibleString=dg;za.NAME="VisibleString";var fg,Bu=class extends Ht{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=27}};fg=Bu;G.GeneralString=fg;Bu.NAME="GeneralString";var hg,Ou=class extends Ht{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=29}};hg=Ou;G.CharacterString=hg;Ou.NAME="CharacterString";var pg,Wa=class extends za{constructor({value:e,valueDate:t,...n}={}){if(super(n),this.year=0,this.month=0,this.day=0,this.hour=0,this.minute=0,this.second=0,e){this.fromString(e),this.valueBlock.valueHexView=new Uint8Array(e.length);for(let o=0;o<e.length;o++)this.valueBlock.valueHexView[o]=e.charCodeAt(o)}t&&(this.fromDate(t),this.valueBlock.valueHexView=new Uint8Array(this.toBuffer())),this.idBlock.tagClass=1,this.idBlock.tagNumber=23}fromBuffer(e){this.fromString(String.fromCharCode.apply(null,ye.BufferSourceConverter.toUint8Array(e)))}toBuffer(){let e=this.toString(),t=new ArrayBuffer(e.length),n=new Uint8Array(t);for(let o=0;o<e.length;o++)n[o]=e.charCodeAt(o);return t}fromDate(e){this.year=e.getUTCFullYear(),this.month=e.getUTCMonth()+1,this.day=e.getUTCDate(),this.hour=e.getUTCHours(),this.minute=e.getUTCMinutes(),this.second=e.getUTCSeconds()}toDate(){return new Date(Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second))}fromString(e){let n=/(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})Z/ig.exec(e);if(n===null){this.error="Wrong input string for conversion";return}let o=parseInt(n[1],10);o>=50?this.year=1900+o:this.year=2e3+o,this.month=parseInt(n[2],10),this.day=parseInt(n[3],10),this.hour=parseInt(n[4],10),this.minute=parseInt(n[5],10),this.second=parseInt(n[6],10)}toString(e="iso"){if(e==="iso"){let t=new Array(7);return t[0]=tr(this.year<2e3?this.year-1900:this.year-2e3,2),t[1]=tr(this.month,2),t[2]=tr(this.day,2),t[3]=tr(this.hour,2),t[4]=tr(this.minute,2),t[5]=tr(this.second,2),t[6]="Z",t.join("")}return super.toString(e)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.toDate().toISOString()}`}toJSON(){return{...super.toJSON(),year:this.year,month:this.month,day:this.day,hour:this.hour,minute:this.minute,second:this.second}}};pg=Wa;G.UTCTime=pg;Wa.NAME="UTCTime";var mg,Mu=class extends Wa{constructor(e={}){var t;super(e),(t=this.millisecond)!==null&&t!==void 0||(this.millisecond=0),this.idBlock.tagClass=1,this.idBlock.tagNumber=24}fromDate(e){super.fromDate(e),this.millisecond=e.getUTCMilliseconds()}toDate(){return new Date(Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second,this.millisecond))}fromString(e){let t=!1,n="",o="",i=0,s,a=0,c=0;if(e[e.length-1]==="Z")n=e.substring(0,e.length-1),t=!0;else{let d=new Number(e[e.length-1]);if(isNaN(d.valueOf()))throw new Error("Wrong input string for conversion");n=e}if(t){if(n.indexOf("+")!==-1)throw new Error("Wrong input string for conversion");if(n.indexOf("-")!==-1)throw new Error("Wrong input string for conversion")}else{let d=1,f=n.indexOf("+"),h="";if(f===-1&&(f=n.indexOf("-"),d=-1),f!==-1){if(h=n.substring(f+1),n=n.substring(0,f),h.length!==2&&h.length!==4)throw new Error("Wrong input string for conversion");let p=parseInt(h.substring(0,2),10);if(isNaN(p.valueOf()))throw new Error("Wrong input string for conversion");if(a=d*p,h.length===4){if(p=parseInt(h.substring(2,4),10),isNaN(p.valueOf()))throw new Error("Wrong input string for conversion");c=d*p}}}let l=n.indexOf(".");if(l===-1&&(l=n.indexOf(",")),l!==-1){let d=new Number(`0${n.substring(l)}`);if(isNaN(d.valueOf()))throw new Error("Wrong input string for conversion");i=d.valueOf(),o=n.substring(0,l)}else o=n;switch(!0){case o.length===8:if(s=/(\d{4})(\d{2})(\d{2})/ig,l!==-1)throw new Error("Wrong input string for conversion");break;case o.length===10:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let d=60*i;this.minute=Math.floor(d),d=60*(d-this.minute),this.second=Math.floor(d),d=1e3*(d-this.second),this.millisecond=Math.floor(d)}break;case o.length===12:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let d=60*i;this.second=Math.floor(d),d=1e3*(d-this.second),this.millisecond=Math.floor(d)}break;case o.length===14:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let d=1e3*i;this.millisecond=Math.floor(d)}break;default:throw new Error("Wrong input string for conversion")}let u=s.exec(o);if(u===null)throw new Error("Wrong input string for conversion");for(let d=1;d<u.length;d++)switch(d){case 1:this.year=parseInt(u[d],10);break;case 2:this.month=parseInt(u[d],10);break;case 3:this.day=parseInt(u[d],10);break;case 4:this.hour=parseInt(u[d],10)+a;break;case 5:this.minute=parseInt(u[d],10)+c;break;case 6:this.second=parseInt(u[d],10);break;default:throw new Error("Wrong input string for conversion")}if(t===!1){let d=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.millisecond);this.year=d.getUTCFullYear(),this.month=d.getUTCMonth(),this.day=d.getUTCDay(),this.hour=d.getUTCHours(),this.minute=d.getUTCMinutes(),this.second=d.getUTCSeconds(),this.millisecond=d.getUTCMilliseconds()}}toString(e="iso"){if(e==="iso"){let t=[];return t.push(tr(this.year,4)),t.push(tr(this.month,2)),t.push(tr(this.day,2)),t.push(tr(this.hour,2)),t.push(tr(this.minute,2)),t.push(tr(this.second,2)),this.millisecond!==0&&(t.push("."),t.push(tr(this.millisecond,3))),t.push("Z"),t.join("")}return super.toString(e)}toJSON(){return{...super.toJSON(),millisecond:this.millisecond}}};mg=Mu;G.GeneralizedTime=mg;Mu.NAME="GeneralizedTime";var gg,Uu=class extends qn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=31}};gg=Uu;G.DATE=gg;Uu.NAME="DATE";var yg,Fu=class extends qn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=32}};yg=Fu;G.TimeOfDay=yg;Fu.NAME="TimeOfDay";var wg,Vu=class extends qn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=33}};wg=Vu;G.DateTime=wg;Vu.NAME="DateTime";var bg,$u=class extends qn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=34}};bg=$u;G.Duration=bg;$u.NAME="Duration";var xg,Ku=class extends qn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=14}};xg=Ku;G.TIME=xg;Ku.NAME="TIME";function U(r,e="utf8"){let t=Ml[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.encoder.encode(r).substring(1)}function qt(r){if(isNaN(r)||r<=0)throw new _("random bytes length must be a Number bigger than 0");return ui(r)}var Ga=class extends Error{constructor(e="An error occurred while signing a message"){super(e),this.name="SigningError"}},Qa=class extends Error{constructor(e="An error occurred while verifying a message"){super(e),this.name="VerificationError"}},qu=class extends Error{constructor(e="Missing Web Crypto API"){super(e),this.name="WebCryptoMissingError"}};var vg={get(r=globalThis){let e=r.crypto;if(e?.subtle==null)throw new qu("Missing Web Crypto API. The most likely cause of this error is that this page is being accessed from an insecure context (i.e. not HTTPS). For more information and possible resolutions see https://github.com/libp2p/js-libp2p/blob/main/packages/crypto/README.md#web-crypto-api");return e}};var rr=vg;async function Eg(r){let e=await rr.get().subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:r,publicExponent:new Uint8Array([1,0,1]),hash:{name:"SHA-256"}},!0,["sign","verify"]),t=await PS(e);return{privateKey:t[0],publicKey:t[1]}}async function Sg(r,e){let t=await rr.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]),n=await rr.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},t,e instanceof Uint8Array?e:e.subarray());return new Uint8Array(n,0,n.byteLength)}async function Ag(r,e,t){let n=await rr.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);return rr.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},n,e,t instanceof Uint8Array?t:t.subarray())}async function PS(r){if(r.privateKey==null||r.publicKey==null)throw new _("Private and public key are required");return Promise.all([rr.get().subtle.exportKey("jwk",r.privateKey),rr.get().subtle.exportKey("jwk",r.publicKey)])}function k2(r){if(r.kty!=="RSA")throw new _("invalid key type");if(r.n==null)throw new _("invalid key modulus");return N(r.n,"base64url").length*8}var Ts=class{type="RSA";_key;_raw;_multihash;constructor(e,t){this._key=e,this._multihash=t}get raw(){return this._raw==null&&(this._raw=Ya.jwkToPkix(this._key)),this._raw}toMultihash(){return this._multihash}toCID(){return X.createV1(114,this._multihash)}toString(){return ve.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ne(this.raw,e.raw)}verify(e,t){return Ag(this._key,t,e)}},Xa=class{type="RSA";_key;_raw;publicKey;constructor(e,t){this._key=e,this.publicKey=t}get raw(){return this._raw==null&&(this._raw=Ya.jwkToPkcs1(this._key)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ne(this.raw,e.raw)}sign(e){return Sg(this._key,e)}};var zu=8192,P2=18;function Ig(r){let{result:e}=gi(r),t=e.valueBlock.value;return{n:En(t[1]),e:En(t[2]),d:En(t[3]),p:En(t[4]),q:En(t[5]),dp:En(t[6]),dq:En(t[7]),qi:En(t[8]),kty:"RSA",alg:"RS256"}}function RS(r){if(r.n==null||r.e==null||r.d==null||r.p==null||r.q==null||r.dp==null||r.dq==null||r.qi==null)throw new _("JWK was missing components");let t=new ut({value:[new et({value:0}),et.fromBigInt(Sn(N(r.n,"base64url"))),et.fromBigInt(Sn(N(r.e,"base64url"))),et.fromBigInt(Sn(N(r.d,"base64url"))),et.fromBigInt(Sn(N(r.p,"base64url"))),et.fromBigInt(Sn(N(r.q,"base64url"))),et.fromBigInt(Sn(N(r.dp,"base64url"))),et.fromBigInt(Sn(N(r.dq,"base64url"))),et.fromBigInt(Sn(N(r.qi,"base64url")))]}).toBER();return new Uint8Array(t,0,t.byteLength)}function Tg(r){let{result:e}=gi(r),t=e.valueBlock.value[1].valueBlock.value[0].valueBlock.value;return{kty:"RSA",n:En(t[0]),e:En(t[1])}}function R2(r){if(r.n==null||r.e==null)throw new _("JWK was missing components");let t=new ut({value:[new ut({value:[new _r({value:"1.2.840.113549.1.1.1"}),new Kn]}),new As({valueHex:new ut({value:[et.fromBigInt(Sn(N(r.n,"base64url"))),et.fromBigInt(Sn(N(r.e,"base64url")))]}).toBER()})]}).toBER();return new Uint8Array(t,0,t.byteLength)}function En(r){let e=r.valueBlock.valueHexView;for(;e[0]===0;)e=e.subarray(1);return U(e,"base64url")}function Sn(r){let e=[];return r.forEach(function(t){let n=t.toString(16);n.length%2>0&&(n=`0${n}`),e.push(n)}),BigInt("0x"+e.join(""))}function Wu(r){let e=Ig(r);return _g(e)}function D2(r){let e=Tg(r);if(k2(e)>zu)throw new Dn("Key size is too large");let t=Ir(xn.encode({Type:Ge.RSA,Data:r})),n=Zt(P2,t);return new Ts(e,n)}function _g(r){if(k2(r)>zu)throw new _("Key size is too large");let e=Cg(r),t=Ir(xn.encode({Type:Ge.RSA,Data:R2(e.publicKey)})),n=Zt(P2,t);return new Xa(e.privateKey,new Ts(e.publicKey,n))}async function L2(r){if(r>zu)throw new _("Key size is too large");let e=await Eg(r),t=Ir(xn.encode({Type:Ge.RSA,Data:R2(e.publicKey)})),n=Zt(P2,t);return new Xa(e.privateKey,new Ts(e.publicKey,n))}function Cg(r){if(r==null)throw new _("Missing key parameter");return{privateKey:r,publicKey:{kty:r.kty,n:r.n,e:r.e}}}var Gu=class extends gs{constructor(e,t){super(),this.finished=!1,this.destroyed=!1,ai(e);let n=Wr(t);if(this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let o=this.blockLen,i=new Uint8Array(o);i.set(n.length>o?e.create().update(n).digest():n);for(let s=0;s<i.length;s++)i[s]^=54;this.iHash.update(i),this.oHash=e.create();for(let s=0;s<i.length;s++)i[s]^=106;this.oHash.update(i),i.fill(0)}update(e){return ms(this),this.iHash.update(e),this}digestInto(e){ms(this),ps(e,this.outputLen),this.finished=!0,this.iHash.digestInto(e),this.oHash.update(e),this.oHash.digestInto(e),this.destroy()}digest(){let e=new Uint8Array(this.oHash.outputLen);return this.digestInto(e),e}_cloneInto(e){e||(e=Object.create(Object.getPrototypeOf(this),{}));let{oHash:t,iHash:n,finished:o,destroyed:i,blockLen:s,outputLen:a}=this;return e=e,e.finished=o,e.destroyed=i,e.blockLen=s,e.outputLen=a,e.oHash=t._cloneInto(e.oHash),e.iHash=n._cloneInto(e.iHash),e}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}},Co=(r,e,t)=>new Gu(r,e).update(t).digest();Co.create=(r,e)=>new Gu(r,e);function kg(r){r.lowS!==void 0&&Gr("lowS",r.lowS),r.prehash!==void 0&&Gr("prehash",r.prehash)}function DS(r){let e=La(r);Ar(e,{a:"field",b:"field"},{allowedPrivateKeyLengths:"array",wrapPrivateKey:"boolean",isTorsionFree:"function",clearCofactor:"function",allowInfinityPoint:"boolean",fromBytes:"function",toBytes:"function"});let{endo:t,Fp:n,a:o}=e;if(t){if(!n.eql(o,n.ZERO))throw new Error("invalid endomorphism, can only be defined for Koblitz curves that have a=0");if(typeof t!="object"||typeof t.beta!="bigint"||typeof t.splitScalar!="function")throw new Error("invalid endomorphism, expected beta: bigint and splitScalar: function")}return Object.freeze({...e})}var{bytesToNumberBE:LS,hexToBytes:NS}=Xl,N2=class extends Error{constructor(e=""){super(e)}},Gn={Err:N2,_tlv:{encode:(r,e)=>{let{Err:t}=Gn;if(r<0||r>256)throw new t("tlv.encode: wrong tag");if(e.length&1)throw new t("tlv.encode: unpadded data");let n=e.length/2,o=di(n);if(o.length/2&128)throw new t("tlv.encode: long form length too big");let i=n>127?di(o.length/2|128):"";return di(r)+i+o+e},decode(r,e){let{Err:t}=Gn,n=0;if(r<0||r>256)throw new t("tlv.encode: wrong tag");if(e.length<2||e[n++]!==r)throw new t("tlv.decode: wrong tlv");let o=e[n++],i=!!(o&128),s=0;if(!i)s=o;else{let c=o&127;if(!c)throw new t("tlv.decode(long): indefinite length not supported");if(c>4)throw new t("tlv.decode(long): byte length is too big");let l=e.subarray(n,n+c);if(l.length!==c)throw new t("tlv.decode: length bytes not complete");if(l[0]===0)throw new t("tlv.decode(long): zero leftmost byte");for(let u of l)s=s<<8|u;if(n+=c,s<128)throw new t("tlv.decode(long): not minimal encoding")}let a=e.subarray(n,n+s);if(a.length!==s)throw new t("tlv.decode: wrong value length");return{v:a,l:e.subarray(n+s)}}},_int:{encode(r){let{Err:e}=Gn;if(r<Qn)throw new e("integer: negative integers are not allowed");let t=di(r);if(Number.parseInt(t[0],16)&8&&(t="00"+t),t.length&1)throw new e("unexpected DER parsing assertion: unpadded hex");return t},decode(r){let{Err:e}=Gn;if(r[0]&128)throw new e("invalid signature integer: negative");if(r[0]===0&&!(r[1]&128))throw new e("invalid signature integer: unnecessary leading zero");return LS(r)}},toSig(r){let{Err:e,_int:t,_tlv:n}=Gn,o=typeof r=="string"?NS(r):r;ws(o);let{v:i,l:s}=n.decode(48,o);if(s.length)throw new e("invalid signature: left bytes after parsing");let{v:a,l:c}=n.decode(2,i),{v:l,l:u}=n.decode(2,c);if(u.length)throw new e("invalid signature: left bytes after parsing");return{r:t.decode(a),s:t.decode(l)}},hexFromSig(r){let{_tlv:e,_int:t}=Gn,n=e.encode(2,t.encode(r.r)),o=e.encode(2,t.encode(r.s)),i=n+o;return e.encode(48,i)}},Qn=BigInt(0),ft=BigInt(1),rO=BigInt(2),Pg=BigInt(3),nO=BigInt(4);function BS(r){let e=DS(r),{Fp:t}=e,n=So(e.n,e.nBitLength),o=e.toBytes||((g,m,y)=>{let x=m.toAffine();return Fn(Uint8Array.from([4]),t.toBytes(x.x),t.toBytes(x.y))}),i=e.fromBytes||(g=>{let m=g.subarray(1),y=t.fromBytes(m.subarray(0,t.BYTES)),x=t.fromBytes(m.subarray(t.BYTES,2*t.BYTES));return{x:y,y:x}});function s(g){let{a:m,b:y}=e,x=t.sqr(g),w=t.mul(x,g);return t.add(t.add(w,t.mul(g,m)),y)}if(!t.eql(t.sqr(e.Gy),s(e.Gx)))throw new Error("bad generator point: equation left != right");function a(g){return Ra(g,ft,e.n)}function c(g){let{allowedPrivateKeyLengths:m,nByteLength:y,wrapPrivateKey:x,n:w}=e;if(m&&typeof g!="bigint"){if(vo(g)&&(g=On(g)),typeof g!="string"||!m.includes(g.length))throw new Error("invalid private key");g=g.padStart(y*2,"0")}let I;try{I=typeof g=="bigint"?g:Mn(Re("private key",g,y))}catch{throw new Error("invalid private key, expected hex or "+y+" bytes, got "+typeof g)}return x&&(I=Ie(I,w)),wt("private key",I,ft,w),I}function l(g){if(!(g instanceof f))throw new Error("ProjectivePoint expected")}let u=hi((g,m)=>{let{px:y,py:x,pz:w}=g;if(t.eql(w,t.ONE))return{x:y,y:x};let I=g.is0();m==null&&(m=I?t.ONE:t.inv(w));let B=t.mul(y,m),L=t.mul(x,m),P=t.mul(w,m);if(I)return{x:t.ZERO,y:t.ZERO};if(!t.eql(P,t.ONE))throw new Error("invZ was invalid");return{x:B,y:L}}),d=hi(g=>{if(g.is0()){if(e.allowInfinityPoint&&!t.is0(g.py))return;throw new Error("bad point: ZERO")}let{x:m,y}=g.toAffine();if(!t.isValid(m)||!t.isValid(y))throw new Error("bad point: x or y not FE");let x=t.sqr(y),w=s(m);if(!t.eql(x,w))throw new Error("bad point: equation left != right");if(!g.isTorsionFree())throw new Error("bad point: not in prime-order subgroup");return!0});class f{constructor(m,y,x){if(this.px=m,this.py=y,this.pz=x,m==null||!t.isValid(m))throw new Error("x required");if(y==null||!t.isValid(y))throw new Error("y required");if(x==null||!t.isValid(x))throw new Error("z required");Object.freeze(this)}static fromAffine(m){let{x:y,y:x}=m||{};if(!m||!t.isValid(y)||!t.isValid(x))throw new Error("invalid affine point");if(m instanceof f)throw new Error("projective point not allowed");let w=I=>t.eql(I,t.ZERO);return w(y)&&w(x)?f.ZERO:new f(y,x,t.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(m){let y=t.invertBatch(m.map(x=>x.pz));return m.map((x,w)=>x.toAffine(y[w])).map(f.fromAffine)}static fromHex(m){let y=f.fromAffine(i(Re("pointHex",m)));return y.assertValidity(),y}static fromPrivateKey(m){return f.BASE.multiply(c(m))}static msm(m,y){return eu(f,n,m,y)}_setWindowSize(m){p.setWindowSize(this,m)}assertValidity(){d(this)}hasEvenY(){let{y:m}=this.toAffine();if(t.isOdd)return!t.isOdd(m);throw new Error("Field doesn't support isOdd")}equals(m){l(m);let{px:y,py:x,pz:w}=this,{px:I,py:B,pz:L}=m,P=t.eql(t.mul(y,L),t.mul(I,w)),S=t.eql(t.mul(x,L),t.mul(B,w));return P&&S}negate(){return new f(this.px,t.neg(this.py),this.pz)}double(){let{a:m,b:y}=e,x=t.mul(y,Pg),{px:w,py:I,pz:B}=this,L=t.ZERO,P=t.ZERO,S=t.ZERO,A=t.mul(w,w),F=t.mul(I,I),D=t.mul(B,B),O=t.mul(w,I);return O=t.add(O,O),S=t.mul(w,B),S=t.add(S,S),L=t.mul(m,S),P=t.mul(x,D),P=t.add(L,P),L=t.sub(F,P),P=t.add(F,P),P=t.mul(L,P),L=t.mul(O,L),S=t.mul(x,S),D=t.mul(m,D),O=t.sub(A,D),O=t.mul(m,O),O=t.add(O,S),S=t.add(A,A),A=t.add(S,A),A=t.add(A,D),A=t.mul(A,O),P=t.add(P,A),D=t.mul(I,B),D=t.add(D,D),A=t.mul(D,O),L=t.sub(L,A),S=t.mul(D,F),S=t.add(S,S),S=t.add(S,S),new f(L,P,S)}add(m){l(m);let{px:y,py:x,pz:w}=this,{px:I,py:B,pz:L}=m,P=t.ZERO,S=t.ZERO,A=t.ZERO,F=e.a,D=t.mul(e.b,Pg),O=t.mul(y,I),$=t.mul(x,B),k=t.mul(w,L),R=t.add(y,x),E=t.add(I,B);R=t.mul(R,E),E=t.add(O,$),R=t.sub(R,E),E=t.add(y,w);let v=t.add(I,L);return E=t.mul(E,v),v=t.add(O,k),E=t.sub(E,v),v=t.add(x,w),P=t.add(B,L),v=t.mul(v,P),P=t.add($,k),v=t.sub(v,P),A=t.mul(F,E),P=t.mul(D,k),A=t.add(P,A),P=t.sub($,A),A=t.add($,A),S=t.mul(P,A),$=t.add(O,O),$=t.add($,O),k=t.mul(F,k),E=t.mul(D,E),$=t.add($,k),k=t.sub(O,k),k=t.mul(F,k),E=t.add(E,k),O=t.mul($,E),S=t.add(S,O),O=t.mul(v,E),P=t.mul(R,P),P=t.sub(P,O),O=t.mul(R,$),A=t.mul(v,A),A=t.add(A,O),new f(P,S,A)}subtract(m){return this.add(m.negate())}is0(){return this.equals(f.ZERO)}wNAF(m){return p.wNAFCached(this,m,f.normalizeZ)}multiplyUnsafe(m){let{endo:y,n:x}=e;wt("scalar",m,Qn,x);let w=f.ZERO;if(m===Qn)return w;if(this.is0()||m===ft)return this;if(!y||p.hasPrecomputes(this))return p.wNAFCachedUnsafe(this,m,f.normalizeZ);let{k1neg:I,k1:B,k2neg:L,k2:P}=y.splitScalar(m),S=w,A=w,F=this;for(;B>Qn||P>Qn;)B&ft&&(S=S.add(F)),P&ft&&(A=A.add(F)),F=F.double(),B>>=ft,P>>=ft;return I&&(S=S.negate()),L&&(A=A.negate()),A=new f(t.mul(A.px,y.beta),A.py,A.pz),S.add(A)}multiply(m){let{endo:y,n:x}=e;wt("scalar",m,ft,x);let w,I;if(y){let{k1neg:B,k1:L,k2neg:P,k2:S}=y.splitScalar(m),{p:A,f:F}=this.wNAF(L),{p:D,f:O}=this.wNAF(S);A=p.constTimeNegate(B,A),D=p.constTimeNegate(P,D),D=new f(t.mul(D.px,y.beta),D.py,D.pz),w=A.add(D),I=F.add(O)}else{let{p:B,f:L}=this.wNAF(m);w=B,I=L}return f.normalizeZ([w,I])[0]}multiplyAndAddUnsafe(m,y,x){let w=f.BASE,I=(L,P)=>P===Qn||P===ft||!L.equals(w)?L.multiplyUnsafe(P):L.multiply(P),B=I(this,y).add(I(m,x));return B.is0()?void 0:B}toAffine(m){return u(this,m)}isTorsionFree(){let{h:m,isTorsionFree:y}=e;if(m===ft)return!0;if(y)return y(f,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){let{h:m,clearCofactor:y}=e;return m===ft?this:y?y(f,this):this.multiplyUnsafe(e.h)}toRawBytes(m=!0){return Gr("isCompressed",m),this.assertValidity(),o(f,this,m)}toHex(m=!0){return Gr("isCompressed",m),On(this.toRawBytes(m))}}f.BASE=new f(e.Gx,e.Gy,t.ONE),f.ZERO=new f(t.ZERO,t.ONE,t.ZERO);let h=e.nBitLength,p=Jl(f,e.endo?Math.ceil(h/2):h);return{CURVE:e,ProjectivePoint:f,normPrivateKeyToScalar:c,weierstrassEquation:s,isWithinCurveOrder:a}}function OS(r){let e=La(r);return Ar(e,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...e})}function Rg(r){let e=OS(r),{Fp:t,n}=e,o=t.BYTES+1,i=2*t.BYTES+1;function s(k){return Ie(k,n)}function a(k){return jl(k,n)}let{ProjectivePoint:c,normPrivateKeyToScalar:l,weierstrassEquation:u,isWithinCurveOrder:d}=BS({...e,toBytes(k,R,E){let v=R.toAffine(),C=t.toBytes(v.x),T=Fn;return Gr("isCompressed",E),E?T(Uint8Array.from([R.hasEvenY()?2:3]),C):T(Uint8Array.from([4]),C,t.toBytes(v.y))},fromBytes(k){let R=k.length,E=k[0],v=k.subarray(1);if(R===o&&(E===2||E===3)){let C=Mn(v);if(!Ra(C,ft,t.ORDER))throw new Error("Point is not on curve");let T=u(C),K;try{K=t.sqrt(T)}catch(ae){let ie=ae instanceof Error?": "+ae.message:"";throw new Error("Point is not on curve"+ie)}let q=(K&ft)===ft;return(E&1)===1!==q&&(K=t.neg(K)),{x:C,y:K}}else if(R===i&&E===4){let C=t.fromBytes(v.subarray(0,t.BYTES)),T=t.fromBytes(v.subarray(t.BYTES,2*t.BYTES));return{x:C,y:T}}else{let C=o,T=i;throw new Error("invalid Point, expected length of "+C+", or uncompressed "+T+", got "+R)}}}),f=k=>On(Eo(k,e.nByteLength));function h(k){let R=n>>ft;return k>R}function p(k){return h(k)?s(-k):k}let g=(k,R,E)=>Mn(k.slice(R,E));class m{constructor(R,E,v){this.r=R,this.s=E,this.recovery=v,this.assertValidity()}static fromCompact(R){let E=e.nByteLength;return R=Re("compactSignature",R,E*2),new m(g(R,0,E),g(R,E,2*E))}static fromDER(R){let{r:E,s:v}=Gn.toSig(Re("DER",R));return new m(E,v)}assertValidity(){wt("r",this.r,ft,n),wt("s",this.s,ft,n)}addRecoveryBit(R){return new m(this.r,this.s,R)}recoverPublicKey(R){let{r:E,s:v,recovery:C}=this,T=L(Re("msgHash",R));if(C==null||![0,1,2,3].includes(C))throw new Error("recovery id invalid");let K=C===2||C===3?E+e.n:E;if(K>=t.ORDER)throw new Error("recovery id 2 or 3 invalid");let q=C&1?"03":"02",Y=c.fromHex(q+f(K)),ae=a(K),ie=s(-T*ae),de=s(v*ae),xe=c.BASE.multiplyAndAddUnsafe(Y,ie,de);if(!xe)throw new Error("point at infinify");return xe.assertValidity(),xe}hasHighS(){return h(this.s)}normalizeS(){return this.hasHighS()?new m(this.r,s(-this.s),this.recovery):this}toDERRawBytes(){return fi(this.toDERHex())}toDERHex(){return Gn.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return fi(this.toCompactHex())}toCompactHex(){return f(this.r)+f(this.s)}}let y={isValidPrivateKey(k){try{return l(k),!0}catch{return!1}},normPrivateKeyToScalar:l,randomPrivateKey:()=>{let k=h2(e.n);return w6(e.randomBytes(k),e.n)},precompute(k=8,R=c.BASE){return R._setWindowSize(k),R.multiply(BigInt(3)),R}};function x(k,R=!0){return c.fromPrivateKey(k).toRawBytes(R)}function w(k){let R=vo(k),E=typeof k=="string",v=(R||E)&&k.length;return R?v===o||v===i:E?v===2*o||v===2*i:k instanceof c}function I(k,R,E=!0){if(w(k))throw new Error("first arg must be private key");if(!w(R))throw new Error("second arg must be public key");return c.fromHex(R).multiply(l(k)).toRawBytes(E)}let B=e.bits2int||function(k){if(k.length>8192)throw new Error("input is too large");let R=Mn(k),E=k.length*8-e.nBitLength;return E>0?R>>BigInt(E):R},L=e.bits2int_modN||function(k){return s(B(k))},P=Da(e.nBitLength);function S(k){return wt("num < 2^"+e.nBitLength,k,Qn,P),Eo(k,e.nByteLength)}function A(k,R,E=F){if(["recovered","canonical"].some(Ne=>Ne in E))throw new Error("sign() legacy options not supported");let{hash:v,randomBytes:C}=e,{lowS:T,prehash:K,extraEntropy:q}=E;T==null&&(T=!0),k=Re("msgHash",k),kg(E),K&&(k=Re("prehashed msgHash",v(k)));let Y=L(k),ae=l(R),ie=[S(ae),S(Y)];if(q!=null&&q!==!1){let Ne=q===!0?C(t.BYTES):q;ie.push(Re("extraEntropy",Ne))}let de=Fn(...ie),xe=Y;function Le(Ne){let Ve=B(Ne);if(!d(Ve))return;let _t=a(Ve),Xt=c.BASE.multiply(Ve).toAffine(),Ut=s(Xt.x);if(Ut===Qn)return;let hn=s(_t*s(xe+Ut*ae));if(hn===Qn)return;let Rn=(Xt.x===Ut?0:2)|Number(Xt.y&ft),va=hn;return T&&h(hn)&&(va=p(hn),Rn^=1),new m(Ut,va,Rn)}return{seed:de,k2sig:Le}}let F={lowS:e.lowS,prehash:!1},D={lowS:e.lowS,prehash:!1};function O(k,R,E=F){let{seed:v,k2sig:C}=A(k,R,E),T=e;return c2(T.hash.outputLen,T.nByteLength,T.hmac)(v,C)}c.BASE._setWindowSize(8);function $(k,R,E,v=D){let C=k;R=Re("msgHash",R),E=Re("publicKey",E);let{lowS:T,prehash:K,format:q}=v;if(kg(v),"strict"in v)throw new Error("options.strict was renamed to lowS");if(q!==void 0&&q!=="compact"&&q!=="der")throw new Error("format must be compact or der");let Y=typeof C=="string"||vo(C),ae=!Y&&!q&&typeof C=="object"&&C!==null&&typeof C.r=="bigint"&&typeof C.s=="bigint";if(!Y&&!ae)throw new Error("invalid signature, expected Uint8Array, hex string or Signature instance");let ie,de;try{if(ae&&(ie=new m(C.r,C.s)),Y){try{q!=="compact"&&(ie=m.fromDER(C))}catch(Rn){if(!(Rn instanceof Gn.Err))throw Rn}!ie&&q!=="der"&&(ie=m.fromCompact(C))}de=c.fromHex(E)}catch{return!1}if(!ie||T&&ie.hasHighS())return!1;K&&(R=e.hash(R));let{r:xe,s:Le}=ie,Ne=L(R),Ve=a(Le),_t=s(Ne*Ve),Xt=s(xe*Ve),Ut=c.BASE.multiplyAndAddUnsafe(de,_t,Xt)?.toAffine();return Ut?s(Ut.x)===xe:!1}return{CURVE:e,getPublicKey:x,getSharedSecret:I,sign:O,verify:$,ProjectivePoint:c,Signature:m,utils:y}}function MS(r){return{hash:r,hmac:(e,...t)=>Co(r,e,t2(...t)),randomBytes:ui}}function Dg(r,e){let t=n=>Rg({...r,...MS(n)});return{...t(e),create:t}}var Bg=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),Lg=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),US=BigInt(1),B2=BigInt(2),Ng=(r,e)=>(r+e/B2)/e;function FS(r){let e=Bg,t=BigInt(3),n=BigInt(6),o=BigInt(11),i=BigInt(22),s=BigInt(23),a=BigInt(44),c=BigInt(88),l=r*r*r%e,u=l*l*r%e,d=Me(u,t,e)*u%e,f=Me(d,t,e)*u%e,h=Me(f,B2,e)*l%e,p=Me(h,o,e)*h%e,g=Me(p,i,e)*p%e,m=Me(g,a,e)*g%e,y=Me(m,c,e)*m%e,x=Me(y,a,e)*g%e,w=Me(x,t,e)*u%e,I=Me(w,s,e)*p%e,B=Me(I,n,e)*l%e,L=Me(B,B2,e);if(!O2.eql(O2.sqr(L),r))throw new Error("Cannot find square root");return L}var O2=So(Bg,void 0,void 0,{sqrt:FS}),Cr=Dg({a:BigInt(0),b:BigInt(7),Fp:O2,n:Lg,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:r=>{let e=Lg,t=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-US*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),o=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),i=t,s=BigInt("0x100000000000000000000000000000000"),a=Ng(i*r,e),c=Ng(-n*r,e),l=Ie(r-a*t-c*o,e),u=Ie(-a*n-c*i,e),d=l>s,f=u>s;if(d&&(l=e-l),f&&(u=e-u),l>s||u>s)throw new Error("splitScalar: Endomorphism failed, k="+r);return{k1neg:d,k1:l,k2neg:f,k2:u}}}},Ir),fO=BigInt(0);var hO=Cr.ProjectivePoint;function M2(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function Og(r,e){let t=ct.digest(e instanceof Uint8Array?e:e.subarray());if(M2(t))return t.then(({digest:n})=>Cr.sign(n,r).toDERRawBytes()).catch(n=>{throw new Ga(String(n))});try{return Cr.sign(t.digest,r).toDERRawBytes()}catch(n){throw new Ga(String(n))}}function Mg(r,e,t){let n=ct.digest(t instanceof Uint8Array?t:t.subarray());if(M2(n))return n.then(({digest:o})=>Cr.verify(e,o,r)).catch(o=>{throw new Qa(String(o))});try{return Cr.verify(e,n.digest,r)}catch(o){throw new Qa(String(o))}}var ja=class{type="secp256k1";raw;_key;constructor(e){this._key=Vg(e),this.raw=Ug(this._key)}toMultihash(){return Jt.digest(Nt(this))}toCID(){return X.createV1(114,this.toMultihash())}toString(){return ve.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ne(this.raw,e.raw)}verify(e,t){return Mg(this._key,t,e)}},Za=class{type="secp256k1";raw;publicKey;constructor(e,t){this.raw=Fg(e),this.publicKey=new ja(t??$g(e))}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:ne(this.raw,e.raw)}sign(e){return Og(this.raw,e)}};function U2(r){return new Za(r)}function F2(r){return new ja(r)}async function Kg(){let r=VS();return new Za(r)}function Ug(r){return Cr.ProjectivePoint.fromHex(r).toRawBytes(!0)}function Fg(r){try{return Cr.getPublicKey(r,!0),r}catch(e){throw new Ea(String(e))}}function Vg(r){try{return Cr.ProjectivePoint.fromHex(r),r}catch(e){throw new Dn(String(e))}}function $g(r){try{return Cr.getPublicKey(r,!0)}catch(e){throw new Ea(String(e))}}function VS(){return Cr.utils.randomPrivateKey()}async function Qu(r,e){if(r==="Ed25519")return D6();if(r==="secp256k1")return Kg();if(r==="RSA")return L2(e??2048);throw new Vr}function tt(r){let{Type:e,Data:t}=xn.decode(r),n=t??new Uint8Array;switch(e){case Ge.RSA:return D2(n);case Ge.Ed25519:return v2(n);case Ge.secp256k1:return F2(n);default:throw new Vr}}function Yu(r){let{Type:e,Data:t}=xn.decode(r.digest),n=t??new Uint8Array;switch(e){case Ge.Ed25519:return v2(n);case Ge.secp256k1:return F2(n);default:throw new Vr}}function Nt(r){return xn.encode({Type:Ge[r.type],Data:r.raw})}function Hg(r){let e=Ua.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case Ge.RSA:return Wu(t);case Ge.Ed25519:return x2(t);case Ge.secp256k1:return U2(t);default:throw new Vr}}function qg(r){return r.byteLength===64?x2(r):r.byteLength===32?U2(r):Wu(r)}function _s(r){return Ua.encode({Type:Ge[r.type],Data:r.raw})}var zg=Symbol.for("nodejs.util.inspect.custom"),$S=114,Ja=class{type;multihash;publicKey;string;constructor(e){this.type=e.type,this.multihash=e.multihash,Object.defineProperty(this,"string",{enumerable:!1,writable:!0})}get[Symbol.toStringTag](){return`PeerId(${this.toString()})`}[hl]=!0;toString(){return this.string==null&&(this.string=ve.encode(this.multihash.bytes).slice(1)),this.string}toMultihash(){return this.multihash}toCID(){return X.createV1($S,this.multihash)}toJSON(){return this.toString()}equals(e){if(e==null)return!1;if(e instanceof Uint8Array)return ne(this.multihash.bytes,e);if(typeof e=="string")return this.toString()===e;if(e?.toMultihash()?.bytes!=null)return ne(this.multihash.bytes,e.toMultihash().bytes);throw new Error("not valid Id")}[zg](){return`PeerId(${this.toString()})`}},ec=class extends Ja{type="RSA";publicKey;constructor(e){super({...e,type:"RSA"}),this.publicKey=e.publicKey}},tc=class extends Ja{type="Ed25519";publicKey;constructor(e){super({...e,type:"Ed25519"}),this.publicKey=e.publicKey}},rc=class extends Ja{type="secp256k1";publicKey;constructor(e){super({...e,type:"secp256k1"}),this.publicKey=e.publicKey}},KS=2336,nc=class{type="url";multihash;publicKey;url;constructor(e){this.url=e.toString(),this.multihash=Jt.digest(N(this.url))}[zg](){return`PeerId(${this.url})`}[hl]=!0;toString(){return this.toCID().toString()}toMultihash(){return this.multihash}toCID(){return X.createV1(KS,this.toMultihash())}toJSON(){return this.toString()}equals(e){return e==null?!1:(e instanceof Uint8Array&&(e=U(e)),e.toString()===this.toString())}};var HS=114,Wg=2336;function Ue(r,e){let t;if(r.charAt(0)==="1"||r.charAt(0)==="Q")t=Ae(ve.decode(`z${r}`));else{if(e==null)throw new _('Please pass a multibase decoder for strings that do not start with "1" or "Q"');t=Ae(e.decode(r))}return ot(t)}function An(r){if(r.type==="Ed25519")return new tc({multihash:r.toCID().multihash,publicKey:r});if(r.type==="secp256k1")return new rc({multihash:r.toCID().multihash,publicKey:r});if(r.type==="RSA")return new ec({multihash:r.toCID().multihash,publicKey:r});throw new Vr}function Gg(r){return An(r.publicKey)}function ot(r){if(zS(r))return new ec({multihash:r});if(qS(r))try{let e=Yu(r);if(e.type==="Ed25519")return new tc({multihash:r,publicKey:e});if(e.type==="secp256k1")return new rc({multihash:r,publicKey:e})}catch{let t=U(r.digest);return new nc(new URL(t))}throw new uo("Supplied PeerID Multihash is invalid")}function In(r){if(r?.multihash==null||r.version==null||r.version===1&&r.code!==HS&&r.code!==Wg)throw new wl("Supplied PeerID CID is invalid");if(r.code===Wg){let e=U(r.multihash.digest);return new nc(new URL(e))}return ot(r.multihash)}function qS(r){return r.code===Jt.code}function zS(r){return r.code===ct.code}function yi(r,e){let t={[Symbol.iterator]:()=>t,next:()=>{let n=r.next(),o=n.value;return n.done===!0||o==null?{done:!0,value:void 0}:{done:!1,value:e(o)}}};return t}function Xu(r){let e=Ae(ve.decode(`z${r}`));return ot(e)}var ht=class{map;constructor(e){if(this.map=new Map,e!=null)for(let[t,n]of e.entries())this.map.set(t.toString(),{key:t,value:n})}[Symbol.iterator](){return this.entries()}clear(){this.map.clear()}delete(e){return this.map.delete(e.toString())}entries(){return yi(this.map.entries(),e=>[e[1].key,e[1].value])}forEach(e){this.map.forEach((t,n)=>{e(t.value,t.key,this)})}get(e){return this.map.get(e.toString())?.value}has(e){return this.map.has(e.toString())}set(e,t){this.map.set(e.toString(),{key:e,value:t})}keys(){return yi(this.map.values(),e=>e.key)}values(){return yi(this.map.values(),e=>e.value)}get size(){return this.map.size}};var zt=class r{set;constructor(e){if(this.set=new Set,e!=null)for(let t of e)this.set.add(t.toString())}get size(){return this.set.size}[Symbol.iterator](){return this.values()}add(e){this.set.add(e.toString())}clear(){this.set.clear()}delete(e){this.set.delete(e.toString())}entries(){return yi(this.set.entries(),e=>{let t=Xu(e[0]);return[t,t]})}forEach(e){this.set.forEach(t=>{let n=Xu(t);e(n,n,this)})}has(e){return this.set.has(e.toString())}values(){return yi(this.set.values(),e=>Xu(e))}intersection(e){let t=new r;for(let n of e)this.has(n)&&t.add(n);return t}difference(e){let t=new r;for(let n of this)e.has(n)||t.add(n);return t}union(e){let t=new r;for(let n of e)t.add(n);for(let n of this)t.add(n);return t}};function V2(){return new zt}function Qg(r,e,t,n){ai(r);let o=u6({dkLen:32,asyncTick:10},n),{c:i,dkLen:s,asyncTick:a}=o;if(go(i),go(s),go(a),i<1)throw new Error("PBKDF2: iterations (c) should be >= 1");let c=Wr(e),l=Wr(t),u=new Uint8Array(s),d=Co.create(r,c),f=d._cloneInto().update(l);return{c:i,dkLen:s,asyncTick:a,DK:u,PRF:d,PRFSalt:f}}function Yg(r,e,t,n,o){return r.destroy(),e.destroy(),n&&n.destroy(),o.fill(0),t}function Xg(r,e,t,n){let{c:o,dkLen:i,DK:s,PRF:a,PRFSalt:c}=Qg(r,e,t,n),l,u=new Uint8Array(4),d=li(u),f=new Uint8Array(a.outputLen);for(let h=1,p=0;p<i;h++,p+=a.outputLen){let g=s.subarray(p,p+a.outputLen);d.setInt32(0,h,!1),(l=c._cloneInto(l)).update(u).digestInto(f),g.set(f.subarray(0,g.length));for(let m=1;m<o;m++){a._cloneInto(l).update(f).digestInto(f);for(let y=0;y<g.length;y++)g[y]^=f[y]}}return Yg(a,c,s,l,f)}async function ju(r,e,t,n){let{c:o,dkLen:i,asyncTick:s,DK:a,PRF:c,PRFSalt:l}=Qg(r,e,t,n),u,d=new Uint8Array(4),f=li(d),h=new Uint8Array(c.outputLen);for(let p=1,g=0;g<i;p++,g+=c.outputLen){let m=a.subarray(g,g+c.outputLen);f.setInt32(0,p,!1),(u=l._cloneInto(u)).update(d).digestInto(h),m.set(h.subarray(0,m.length)),await c6(o-1,s,()=>{c._cloneInto(u).update(h).digestInto(h);for(let y=0;y<m.length;y++)m[y]^=h[y]})}return Yg(c,l,a,u,h)}var oc=new Uint32Array([1732584193,4023233417,2562383102,271733878,3285377520]),ko=new Uint32Array(80),$2=class extends yo{constructor(){super(64,20,8,!1),this.A=oc[0]|0,this.B=oc[1]|0,this.C=oc[2]|0,this.D=oc[3]|0,this.E=oc[4]|0}get(){let{A:e,B:t,C:n,D:o,E:i}=this;return[e,t,n,o,i]}set(e,t,n,o,i){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=i|0}process(e,t){for(let c=0;c<16;c++,t+=4)ko[c]=e.getUint32(t,!1);for(let c=16;c<80;c++)ko[c]=ql(ko[c-3]^ko[c-8]^ko[c-14]^ko[c-16],1);let{A:n,B:o,C:i,D:s,E:a}=this;for(let c=0;c<80;c++){let l,u;c<20?(l=zl(o,i,s),u=1518500249):c<40?(l=o^i^s,u=1859775393):c<60?(l=Wl(o,i,s),u=2400959708):(l=o^i^s,u=3395469782);let d=ql(n,5)+l+a+u+ko[c]|0;a=s,s=i,i=ql(o,30),o=n,n=d}n=n+this.A|0,o=o+this.B|0,i=i+this.C|0,s=s+this.D|0,a=a+this.E|0,this.set(n,o,i,s,a)}roundClean(){ko.fill(0)}destroy(){this.set(0,0,0,0,0),this.buffer.fill(0)}},jg=ys(()=>new $2);var Zg={sha1:jg,"sha2-256":Ir,"sha2-512":xo};function ic(r,e,t,n,o){if(o!=="sha1"&&o!=="sha2-256"&&o!=="sha2-512"){let a=Object.keys(Zg).join(" / ");throw new _(`Hash '${o}' is unknown or not supported. Must be ${a}`)}let i=Zg[o],s=Xg(i,r,e,{c:t,dkLen:n});return nt.encode(s).substring(1)}var K2={32:16777619n,64:1099511628211n,128:309485009821345068724781371n,256:374144419156711147060143317175368453031918731002211n,512:35835915874844867368919076489095108449946327955754392558399825615420669938882575126094039892345713852759n,1024:5016456510113118655434598811035278955030765345404790744303017523831112055108147451509157692220295382716162651878526895249385292291816524375083746691371804094271873160484737966720260389217684476157468082573n},Jg={32:2166136261n,64:14695981039346656037n,128:144066263297769815596495629667062367629n,256:100029257958052580907070968620625704837092796014241193945225284501741471925557n,512:9659303129496669498009435400716310466090418745672637896108374329434462657994582932197716438449813051892206539805784495328239340083876191928701583869517785n,1024:14197795064947621068722070641403218320880622795441933960878474914617582723252296732303717722150864096521202355549365628174669108571814760471015076148029755969804077320157692458563003215304957150157403644460363550505412711285966361610267868082893823963790439336411086884584107735010676915n},e8=new globalThis.TextEncoder;function WS(r,e){let t=K2[e],n=Jg[e];for(let o=0;o<r.length;o++)n^=BigInt(r[o]),n=BigInt.asUintN(e,n*t);return n}function GS(r,e,t){if(t.length===0)throw new Error("The `utf8Buffer` option must have a length greater than zero");let n=K2[e],o=Jg[e],i=r;for(;i.length>0;){let s=e8.encodeInto(i,t);i=i.slice(s.read);for(let a=0;a<s.written;a++)o^=BigInt(t[a]),o=BigInt.asUintN(e,o*n)}return o}function H2(r,{size:e=32,utf8Buffer:t}={}){if(!K2[e])throw new Error("The `size` option must be one of 32, 64, 128, 256, 512, or 1024");if(typeof r=="string"){if(t)return GS(r,e,t);r=e8.encode(r)}return WS(r,e)}var sc={hash:r=>Number(H2(r,{size:32})),hashV:(r,e)=>QS(sc.hash(r,e))};function QS(r){let e=r.toString(16);return e.length%2===1&&(e=`0${e}`),N(e,"base16")}var q2=64,jr=class{fp;h;seed;constructor(e,t,n,o=2){if(o>q2)throw new TypeError("Invalid Fingerprint Size");let i=t.hashV(e,n),s=se(o);for(let a=0;a<s.length;a++)s[a]=i[a];s.length===0&&(s[0]=7),this.fp=s,this.h=t,this.seed=n}hash(){return this.h.hash(this.fp,this.seed)}equals(e){return e?.fp instanceof Uint8Array?ne(this.fp,e.fp):!1}};function wi(r,e){return Math.floor(Math.random()*(e-r))+r}var bi=class{contents;constructor(e){this.contents=new Array(e).fill(null)}has(e){if(!(e instanceof jr))throw new TypeError("Invalid Fingerprint");return this.contents.some(t=>e.equals(t))}add(e){if(!(e instanceof jr))throw new TypeError("Invalid Fingerprint");for(let t=0;t<this.contents.length;t++)if(this.contents[t]==null)return this.contents[t]=e,!0;return!0}swap(e){if(!(e instanceof jr))throw new TypeError("Invalid Fingerprint");let t=wi(0,this.contents.length-1),n=this.contents[t];return this.contents[t]=e,n}remove(e){if(!(e instanceof jr))throw new TypeError("Invalid Fingerprint");let t=this.contents.findIndex(n=>e.equals(n));return t>-1?(this.contents[t]=null,!0):!1}};var YS=500,ac=class{bucketSize;filterSize;fingerprintSize;buckets;count;hash;seed;constructor(e){this.filterSize=e.filterSize,this.bucketSize=e.bucketSize??4,this.fingerprintSize=e.fingerprintSize??2,this.count=0,this.buckets=[],this.hash=e.hash??sc,this.seed=e.seed??wi(0,Math.pow(2,10))}add(e){typeof e=="string"&&(e=N(e));let t=new jr(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,o=(n^t.hash())%this.filterSize;if(this.buckets[n]==null&&(this.buckets[n]=new bi(this.bucketSize)),this.buckets[o]==null&&(this.buckets[o]=new bi(this.bucketSize)),this.buckets[n].add(t)||this.buckets[o].add(t))return this.count++,!0;let i=[n,o],s=i[wi(0,i.length-1)];this.buckets[s]==null&&(this.buckets[s]=new bi(this.bucketSize));for(let a=0;a<YS;a++){let c=this.buckets[s].swap(t);if(c!=null&&(s=(s^c.hash())%this.filterSize,this.buckets[s]==null&&(this.buckets[s]=new bi(this.bucketSize)),this.buckets[s].add(c)))return this.count++,!0}return!1}has(e){typeof e=="string"&&(e=N(e));let t=new jr(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,o=this.buckets[n]?.has(t)??!1;if(o)return o;let i=(n^t.hash())%this.filterSize;return this.buckets[i]?.has(t)??!1}remove(e){typeof e=="string"&&(e=N(e));let t=new jr(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,o=this.buckets[n]?.remove(t)??!1;if(o)return this.count--,o;let i=(n^t.hash())%this.filterSize,s=this.buckets[i]?.remove(t)??!1;return s&&this.count--,s}get reliable(){return Math.floor(100*(this.count/this.filterSize))<=90}},XS={1:.5,2:.84,4:.95,8:.98};function jS(r=.001){return r>.002?2:r>1e-5?4:8}function t8(r,e=.001){let t=jS(e),n=XS[t],o=Math.round(r/n),i=Math.min(Math.ceil(Math.log2(1/e)+Math.log2(2*t)),q2);return{filterSize:o,bucketSize:t,fingerprintSize:i}}var Zu=class{filterSize;bucketSize;fingerprintSize;scale;filterSeries;hash;seed;constructor(e){this.bucketSize=e.bucketSize??4,this.filterSize=e.filterSize??(1<<18)/this.bucketSize,this.fingerprintSize=e.fingerprintSize??2,this.scale=e.scale??2,this.hash=e.hash??sc,this.seed=e.seed??wi(0,Math.pow(2,10)),this.filterSeries=[new ac({filterSize:this.filterSize,bucketSize:this.bucketSize,fingerprintSize:this.fingerprintSize,hash:this.hash,seed:this.seed})]}add(e){if(typeof e=="string"&&(e=N(e)),this.has(e))return!0;let t=this.filterSeries.find(n=>n.reliable);if(t==null){let n=this.filterSize*Math.pow(this.scale,this.filterSeries.length);t=new ac({filterSize:n,bucketSize:this.bucketSize,fingerprintSize:this.fingerprintSize,hash:this.hash,seed:this.seed}),this.filterSeries.push(t)}return t.add(e)}has(e){typeof e=="string"&&(e=N(e));for(let t=0;t<this.filterSeries.length;t++)if(this.filterSeries[t].has(e))return!0;return!1}remove(e){typeof e=="string"&&(e=N(e));for(let t=0;t<this.filterSeries.length;t++)if(this.filterSeries[t].remove(e))return!0;return!1}get count(){return this.filterSeries.reduce((e,t)=>e+t.count,0)}};function nr(r,e=.001,t){return new Zu({...t8(r,e),...t??{}})}var Ju=class{filter;constructor(e,t){this.filter=nr(e,t)}has(e){return this.filter.has(e.toMultihash().bytes)}add(e){this.filter.add(e.toMultihash().bytes)}remove(e){this.filter.remove?.(e.toMultihash().bytes)}};function z2(r,e=.001){return new Ju(r,e)}var W2=class extends ht{metric;constructor(e){super();let{name:t,metrics:n}=e;this.metric=n.registerMetric(t),this.updateComponentMetric()}set(e,t){return super.set(e,t),this.updateComponentMetric(),this}delete(e){let t=super.delete(e);return this.updateComponentMetric(),t}clear(){super.clear(),this.updateComponentMetric()}updateComponentMetric(){this.metric.update(this.size)}};function cc(r){let{name:e,metrics:t}=r,n;return t!=null?n=new W2({name:e,metrics:t}):n=new ht,n}var Yn=class{full;pendingBytes;wantlist;blocks;blockPresences;constructor(e=!1,t=0){this.full=e,this.wantlist=new Map,this.blocks=new Map,this.blockPresences=new Map,this.pendingBytes=0}addWantlistEntry(e,t){let n=nt.encode(e.multihash.bytes);this.wantlist.set(n,t)}addBlockPresence(e,t){let n=nt.encode(e.multihash.bytes);this.blockPresences.set(n,t)}addBlock(e,t){let n=nt.encode(e.multihash.bytes);this.blocks.set(n,t)}};function ZS(r){let e=new Uint8Array(r.reduce((n,o)=>n+pe(o),0)),t=0;for(let n of r)e=$e(n,e,t),t+=pe(n);return e}var r8=ZS;function G2(r){return r8([r.version,r.code,r.multihash.code,r.multihash.digest.byteLength])}var ed=class{peerId;blockstore;network;wants;exchangeCount;bytesSent;bytesReceived;lastExchange;maxSizeReplaceHasWithBlock;log;constructor(e,t){this.peerId=e.peerId,this.blockstore=e.blockstore,this.network=e.network,this.wants=new Map,this.log=e.logger.forComponent(`helia:bitswap:ledger:${e.peerId}`),this.exchangeCount=0,this.bytesSent=0,this.bytesReceived=0,this.maxSizeReplaceHasWithBlock=t.maxSizeReplaceHasWithBlock??1024}sentBytes(e){this.exchangeCount++,this.lastExchange=new Date().getTime(),this.bytesSent+=e}receivedBytes(e){this.exchangeCount++,this.lastExchange=new Date().getTime(),this.bytesReceived+=e}debtRatio(){return this.bytesSent/(this.bytesReceived+1)}async sendBlocksToPeer(e){let t=new Yn,n=new Set;for(let[o,i]of this.wants.entries())try{let s=await this.blockstore.get(i.cid,e);i.wantType===Je.WantHave?s.byteLength<this.maxSizeReplaceHasWithBlock?(this.log("sending have and block for %c",i.cid),n.add(o),t.addBlock(i.cid,{data:s,prefix:G2(i.cid)})):(this.log("sending have for %c",i.cid),t.addBlockPresence(i.cid,{cid:i.cid.bytes,type:Sr.HaveBlock})):(this.log("sending block for %c",i.cid),n.add(o),t.addBlock(i.cid,{data:s,prefix:G2(i.cid)}))}catch(s){if(s.name!=="NotFoundError")throw s;if(this.log("do not have block for %c",i.cid),!i.sendDontHave||i.sentDontHave===!0)continue;i.sentDontHave=!0,t.addBlockPresence(i.cid,{cid:i.cid.bytes,type:Sr.DontHaveBlock})}if(t.blocks.size>0||t.blockPresences.size>0){this.log("sending message"),await this.network.sendMessage(this.peerId,t,e),this.log("sent message"),this.sentBytes([...t.blocks.values()].reduce((o,i)=>o+i.data.byteLength,0));for(let o of n)this.wants.delete(o)}}};var td=class{blockstore;network;ledgerMap;maxSizeReplaceHasWithBlock;log;logger;constructor(e,t={}){this.blockstore=e.blockstore,this.network=e.network,this.maxSizeReplaceHasWithBlock=t.maxSizeReplaceHasWithBlock,this.log=e.logger.forComponent("helia:bitswap:peer-want-lists"),this.logger=e.logger,this.ledgerMap=cc({name:"helia_bitswap_ledger_map",metrics:e.metrics}),this.network.addEventListener("bitswap:message",n=>{this.receiveMessage(n.detail.peer,n.detail.message).catch(o=>{this.log.error("error receiving bitswap message from %p",n.detail.peer,o)})}),this.network.addEventListener("peer:disconnected",n=>{this.peerDisconnected(n.detail)})}ledgerForPeer(e){let t=this.ledgerMap.get(e);if(t!=null)return{peer:t.peerId,value:t.debtRatio(),sent:t.bytesSent,received:t.bytesReceived,exchanged:t.exchangeCount}}wantListForPeer(e){let t=this.ledgerMap.get(e);if(t!=null)return[...t.wants.values()]}peers(){return Array.from(this.ledgerMap.values()).map(e=>e.peerId)}async receiveMessage(e,t){let n=this.ledgerMap.get(e);if(n==null&&(n=new ed({peerId:e,blockstore:this.blockstore,network:this.network,logger:this.logger},{maxSizeReplaceHasWithBlock:this.maxSizeReplaceHasWithBlock}),this.ledgerMap.set(e,n)),n.receivedBytes(t.blocks?.reduce((o,i)=>o+i.data.byteLength,0)??0),t.wantlist!=null){t.wantlist.full===!0&&n.wants.clear();for(let o of t.wantlist.entries){let i=X.decode(o.cid),s=U(i.multihash.bytes,"base64");o.cancel===!0?(this.log("peer %p cancelled want of block for %c",e,i),n.wants.delete(s)):(o.wantType===Je.WantHave?this.log("peer %p wanted block presence for %c",e,i):this.log("peer %p wanted block for %c",e,i),n.wants.set(s,{cid:i,priority:o.priority,wantType:o.wantType??Je.WantBlock,sendDontHave:o.sendDontHave??!1}))}}this.log("send blocks to peer"),await n.sendBlocksToPeer()}async receivedBlock(e,t){let n=U(e.multihash.bytes,"base64"),o=[];for(let i of this.ledgerMap.values())i.wants.has(n)&&o.push(i);await Promise.all(o.map(async i=>i.sendBlocksToPeer(t)))}peerDisconnected(e){this.ledgerMap.delete(e)}};function JS(r,e){try{if(typeof r=="string"&&r.length>0)return eA(r);if(typeof r=="number"&&isFinite(r))return e?.long?rA(r):tA(r);throw new Error("Value is not a string or number.")}catch(t){let n=nA(t)?`${t.message}. value=${JSON.stringify(r)}`:"An unknown error has occured.";throw new Error(n)}}function eA(r){if(r=String(r),r.length>100)throw new Error("Value exceeds the maximum length of 100 characters.");let e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(r);if(!e)return NaN;let t=parseFloat(e[1]),n=(e[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return t*315576e5;case"weeks":case"week":case"w":return t*6048e5;case"days":case"day":case"d":return t*864e5;case"hours":case"hour":case"hrs":case"hr":case"h":return t*36e5;case"minutes":case"minute":case"mins":case"min":case"m":return t*6e4;case"seconds":case"second":case"secs":case"sec":case"s":return t*1e3;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:throw new Error(`The unit ${n} was matched, but no matching case exists.`)}}var nd=JS;function tA(r){let e=Math.abs(r);return e>=864e5?`${Math.round(r/864e5)}d`:e>=36e5?`${Math.round(r/36e5)}h`:e>=6e4?`${Math.round(r/6e4)}m`:e>=1e3?`${Math.round(r/1e3)}s`:`${r}ms`}function rA(r){let e=Math.abs(r);return e>=864e5?rd(r,e,864e5,"day"):e>=36e5?rd(r,e,36e5,"hour"):e>=6e4?rd(r,e,6e4,"minute"):e>=1e3?rd(r,e,1e3,"second"):`${r} ms`}function rd(r,e,t,n){let o=e>=t*1.5;return`${Math.round(r/t)} ${n}${o?"s":""}`}function nA(r){return typeof r=="object"&&r!==null&&"message"in r}function Q2(r){t.debug=t,t.default=t,t.coerce=c,t.disable=i,t.enable=o,t.enabled=s,t.humanize=nd,t.destroy=l,Object.keys(r).forEach(u=>{t[u]=r[u]}),t.names=[],t.skips=[],t.formatters={};function e(u){let d=0;for(let f=0;f<u.length;f++)d=(d<<5)-d+u.charCodeAt(f),d|=0;return t.colors[Math.abs(d)%t.colors.length]}t.selectColor=e;function t(u){let d,f=null,h,p;function g(...m){if(!g.enabled)return;let y=g,x=Number(new Date),w=x-(d||x);y.diff=w,y.prev=d,y.curr=x,d=x,m[0]=t.coerce(m[0]),typeof m[0]!="string"&&m.unshift("%O");let I=0;m[0]=m[0].replace(/%([a-zA-Z%])/g,(L,P)=>{if(L==="%%")return"%";I++;let S=t.formatters[P];if(typeof S=="function"){let A=m[I];L=S.call(y,A),m.splice(I,1),I--}return L}),t.formatArgs.call(y,m),(y.log||t.log).apply(y,m)}return g.namespace=u,g.useColors=t.useColors(),g.color=t.selectColor(u),g.extend=n,g.destroy=t.destroy,Object.defineProperty(g,"enabled",{enumerable:!0,configurable:!1,get:()=>f!==null?f:(h!==t.namespaces&&(h=t.namespaces,p=t.enabled(u)),p),set:m=>{f=m}}),typeof t.init=="function"&&t.init(g),g}function n(u,d){let f=t(this.namespace+(typeof d>"u"?":":d)+u);return f.log=this.log,f}function o(u){t.save(u),t.namespaces=u,t.names=[],t.skips=[];let d,f=(typeof u=="string"?u:"").split(/[\s,]+/),h=f.length;for(d=0;d<h;d++)f[d]&&(u=f[d].replace(/\*/g,".*?"),u[0]==="-"?t.skips.push(new RegExp("^"+u.substr(1)+"$")):t.names.push(new RegExp("^"+u+"$")))}function i(){let u=[...t.names.map(a),...t.skips.map(a).map(d=>"-"+d)].join(",");return t.enable(""),u}function s(u){if(u[u.length-1]==="*")return!0;let d,f;for(d=0,f=t.skips.length;d<f;d++)if(t.skips[d].test(u))return!1;for(d=0,f=t.names.length;d<f;d++)if(t.names[d].test(u))return!0;return!1}function a(u){return u.toString().substring(2,u.toString().length-2).replace(/\.\*\?$/,"*")}function c(u){return u instanceof Error?u.stack??u.message:u}function l(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return t.setupFormatters(t.formatters),t.enable(t.load()),t}var od=uA(),oA=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function iA(){return typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)?!0:typeof navigator<"u"&&navigator.userAgent?.toLowerCase().match(/(edge|trident)\/(\d+)/)!=null?!1:typeof document<"u"&&document.documentElement?.style?.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent?.toLowerCase().match(/firefox\/(\d+)/)!=null&&parseInt(RegExp.$1,10)>=31||typeof navigator<"u"&&navigator.userAgent?.toLowerCase().match(/applewebkit\/(\d+)/)}function sA(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+nd(this.diff),!this.useColors)return;let e="color: "+this.color;r.splice(1,0,e,"color: inherit");let t=0,n=0;r[0].replace(/%[a-zA-Z%]/g,o=>{o!=="%%"&&(t++,o==="%c"&&(n=t))}),r.splice(n,0,e)}var aA=console.debug??console.log??(()=>{});function cA(r){try{r?od?.setItem("debug",r):od?.removeItem("debug")}catch{}}function lA(){let r;try{r=od?.getItem("debug")}catch{}return!r&&typeof globalThis.process<"u"&&"env"in globalThis.process&&(r=globalThis.process.env.DEBUG),r}function uA(){try{return localStorage}catch{}}function dA(r){r.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}}}var n8=Q2({formatArgs:sA,save:cA,load:lA,useColors:iA,setupFormatters:dA,colors:oA,storage:od,log:aA});var or=n8;or.formatters.b=r=>r==null?"undefined":ve.baseEncode(r);or.formatters.t=r=>r==null?"undefined":at.baseEncode(r);or.formatters.m=r=>r==null?"undefined":nt.baseEncode(r);or.formatters.p=r=>r==null?"undefined":r.toString();or.formatters.c=r=>r==null?"undefined":r.toString();or.formatters.k=r=>r==null?"undefined":r.toString();or.formatters.a=r=>r==null?"undefined":r.toString();or.formatters.e=r=>r==null?"undefined":o8(r.stack)??o8(r.message)??r.toString();function fA(r){let e=()=>{};return e.enabled=!1,e.color="",e.diff=0,e.log=()=>{},e.namespace=r,e.destroy=()=>!0,e.extend=()=>e,e}function Po(){return{forComponent(r){return pr(r)}}}function pr(r){let e=fA(`${r}:trace`);return or.enabled(`${r}:trace`)&&or.names.map(t=>t.toString()).find(t=>t.includes(":trace"))!=null&&(e=or(`${r}:trace`)),Object.assign(or(r),{error:or(`${r}:error`),trace:e})}function o8(r){if(r!=null&&(r=r.trim(),r.length!==0))return r}var X2=Mr(s8(),1);var uc=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},j2=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},a8=r=>globalThis.DOMException===void 0?new j2(r):new DOMException(r),c8=r=>{let e=r.reason===void 0?a8("This operation was aborted."):r.reason;return e instanceof Error?e:a8(e)};function Zr(r,e){let{milliseconds:t,fallback:n,message:o,customTimers:i={setTimeout,clearTimeout}}=e,s,a,l=new Promise((u,d)=>{if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);if(e.signal){let{signal:h}=e;h.aborted&&d(c8(h)),a=()=>{d(c8(h))},h.addEventListener("abort",a,{once:!0})}if(t===Number.POSITIVE_INFINITY){r.then(u,d);return}let f=new uc;s=i.setTimeout.call(void 0,()=>{if(n){try{u(n())}catch(h){d(h)}return}typeof r.cancel=="function"&&r.cancel(),o===!1?u():o instanceof Error?d(o):(f.message=o??`Promise timed out after ${t} milliseconds`,d(f))},t),(async()=>{try{u(await r)}catch(h){d(h)}})()}).finally(()=>{l.clear(),a&&e.signal&&e.signal.removeEventListener("abort",a)});return l.clear=()=>{i.clearTimeout.call(void 0,s),s=void 0},l}function Z2(r,e,t){let n=0,o=r.length;for(;o>0;){let i=Math.trunc(o/2),s=n+i;t(r[s],e)<=0?(n=++s,o-=i+1):o=i}return n}var dc=class{#e=[];enqueue(e,t){t={priority:0,...t};let n={priority:t.priority,id:t.id,run:e};if(this.size===0||this.#e[this.size-1].priority>=t.priority){this.#e.push(n);return}let o=Z2(this.#e,n,(i,s)=>s.priority-i.priority);this.#e.splice(o,0,n)}setPriority(e,t){let n=this.#e.findIndex(i=>i.id===e);if(n===-1)throw new ReferenceError(`No promise function with the id "${e}" exists in the queue.`);let[o]=this.#e.splice(n,1);this.enqueue(o.run,{priority:t,id:e})}dequeue(){return this.#e.shift()?.run}filter(e){return this.#e.filter(t=>t.priority===e.priority).map(t=>t.run)}get size(){return this.#e.length}};var Tn=class extends X2.default{#e;#t;#r=0;#o;#a;#l=0;#i;#u;#n;#m;#s=0;#d;#c;#g;#b=1n;timeout;constructor(e){if(super(),e={carryoverConcurrencyCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:dc,...e},!(typeof e.intervalCap=="number"&&e.intervalCap>=1))throw new TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${e.intervalCap?.toString()??""}\` (${typeof e.intervalCap})`);if(e.interval===void 0||!(Number.isFinite(e.interval)&&e.interval>=0))throw new TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${e.interval?.toString()??""}\` (${typeof e.interval})`);this.#e=e.carryoverConcurrencyCount,this.#t=e.intervalCap===Number.POSITIVE_INFINITY||e.interval===0,this.#o=e.intervalCap,this.#a=e.interval,this.#n=new e.queueClass,this.#m=e.queueClass,this.concurrency=e.concurrency,this.timeout=e.timeout,this.#g=e.throwOnTimeout===!0,this.#c=e.autoStart===!1}get#x(){return this.#t||this.#r<this.#o}get#v(){return this.#s<this.#d}#E(){this.#s--,this.#f(),this.emit("next")}#S(){this.#w(),this.#y(),this.#u=void 0}get#A(){let e=Date.now();if(this.#i===void 0){let t=this.#l-e;if(t<0)this.#r=this.#e?this.#s:0;else return this.#u===void 0&&(this.#u=setTimeout(()=>{this.#S()},t)),!0}return!1}#f(){if(this.#n.size===0)return this.#i&&clearInterval(this.#i),this.#i=void 0,this.emit("empty"),this.#s===0&&this.emit("idle"),!1;if(!this.#c){let e=!this.#A;if(this.#x&&this.#v){let t=this.#n.dequeue();return t?(this.emit("active"),t(),e&&this.#y(),!0):!1}}return!1}#y(){this.#t||this.#i!==void 0||(this.#i=setInterval(()=>{this.#w()},this.#a),this.#l=Date.now()+this.#a)}#w(){this.#r===0&&this.#s===0&&this.#i&&(clearInterval(this.#i),this.#i=void 0),this.#r=this.#e?this.#s:0,this.#h()}#h(){for(;this.#f(););}get concurrency(){return this.#d}set concurrency(e){if(!(typeof e=="number"&&e>=1))throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${e}\` (${typeof e})`);this.#d=e,this.#h()}async#I(e){return new Promise((t,n)=>{e.addEventListener("abort",()=>{n(e.reason)},{once:!0})})}setPriority(e,t){this.#n.setPriority(e,t)}async add(e,t={}){return t.id??=(this.#b++).toString(),t={timeout:this.timeout,throwOnTimeout:this.#g,...t},new Promise((n,o)=>{this.#n.enqueue(async()=>{this.#s++,this.#r++;try{t.signal?.throwIfAborted();let i=e({signal:t.signal});t.timeout&&(i=Zr(Promise.resolve(i),{milliseconds:t.timeout})),t.signal&&(i=Promise.race([i,this.#I(t.signal)]));let s=await i;n(s),this.emit("completed",s)}catch(i){if(i instanceof uc&&!t.throwOnTimeout){n();return}o(i),this.emit("error",i)}finally{this.#E()}},t),this.emit("add"),this.#f()})}async addAll(e,t){return Promise.all(e.map(async n=>this.add(n,t)))}start(){return this.#c?(this.#c=!1,this.#h(),this):this}pause(){this.#c=!0}clear(){this.#n=new this.#m}async onEmpty(){this.#n.size!==0&&await this.#p("empty")}async onSizeLessThan(e){this.#n.size<e||await this.#p("next",()=>this.#n.size<e)}async onIdle(){this.#s===0&&this.#n.size===0||await this.#p("idle")}async#p(e,t){return new Promise(n=>{let o=()=>{t&&!t()||(this.off(e,o),n())};this.on(e,o)})}get size(){return this.#n.size}sizeBy(e){return this.#n.filter(e).length}get pending(){return this.#s}get isPaused(){return this.#c}};function sd(r){let e=[mr.A];return r==null?e:Array.isArray(r)?r.length===0?e:r:[r]}var J2=60;function ad(r){return{Status:r.Status??0,TC:r.TC??r.flag_tc??!1,RD:r.RD??r.flag_rd??!1,RA:r.RA??r.flag_ra??!1,AD:r.AD??r.flag_ad??!1,CD:r.CD??r.flag_cd??!1,Question:(r.Question??r.questions??[]).map(e=>({name:e.name,type:mr[e.type]})),Answer:(r.Answer??r.answers??[]).map(e=>({name:e.name,type:mr[e.type],TTL:e.TTL??e.ttl??J2,data:e.data instanceof Uint8Array?U(e.data):e.data}))}}var mA=4;function ep(r,e={}){let t=new Tn({concurrency:e.queryConcurrency??mA});return async(n,o={})=>{let i=new URLSearchParams;i.set("name",n),sd(o.types).forEach(a=>{i.append("type",mr[a])}),o.onProgress?.(new W("dns:query",{detail:n}));let s=await t.add(async()=>{let a=await fetch(`${r}?${i}`,{headers:{accept:"application/dns-json"},signal:o?.signal});if(a.status!==200)throw new Error(`Unexpected HTTP status: ${a.status} - ${a.statusText}`);let c=ad(await a.json());return o.onProgress?.(new W("dns:response",{detail:c})),c},{signal:o.signal});if(s==null)throw new Error("No DNS response received");return s}}function l8(){return[ep("https://cloudflare-dns.com/dns-query"),ep("https://dns.google/resolve")]}var f8=Mr(d8(),1);var tp=class{lru;constructor(e){this.lru=(0,f8.default)(e)}get(e,t){let n=!0,o=[];for(let i of t){let s=this.getAnswers(e,i);if(s.length===0){n=!1;break}o.push(...s)}if(n)return ad({answers:o})}getAnswers(e,t){let n=`${e.toLowerCase()}-${t}`,o=this.lru.get(n);if(o!=null){let i=o.filter(s=>s.expires>Date.now()).map(({expires:s,value:a})=>({...a,TTL:Math.round((s-Date.now())/1e3),type:mr[a.type]}));return i.length===0&&this.lru.remove(n),i}return[]}add(e,t){let n=`${e.toLowerCase()}-${t.type}`,o=this.lru.get(n)??[];o.push({expires:Date.now()+(t.TTL??J2)*1e3,value:t}),this.lru.set(n,o)}remove(e,t){let n=`${e.toLowerCase()}-${t}`;this.lru.remove(n)}clear(){this.lru.clear()}};function h8(r){return new tp(r)}var gA=1e3,cd=class{resolvers;cache;constructor(e){this.resolvers={},this.cache=h8(e.cacheSize??gA),Object.entries(e.resolvers??{}).forEach(([t,n])=>{Array.isArray(n)||(n=[n]),t.endsWith(".")||(t=`${t}.`),this.resolvers[t]=n}),this.resolvers["."]==null&&(this.resolvers["."]=l8())}async query(e,t={}){let n=sd(t.types),o=t.cached!==!1?this.cache.get(e,n):void 0;if(o!=null)return t.onProgress?.(new W("dns:cache",{detail:o})),o;let i=`${e.split(".").pop()}.`,s=(this.resolvers[i]??this.resolvers["."]).sort(()=>Math.random()>.5?-1:1),a=[];for(let c of s){if(t.signal?.aborted===!0)break;try{let l=await c(e,{...t,types:n});for(let u of l.Answer)this.cache.add(e,u);return l}catch(l){a.push(l),t.onProgress?.(new W("dns:error",{detail:l}))}}throw a.length===1?a[0]:new AggregateError(a,`DNS lookup of ${e} ${n} failed`)}};var mr;(function(r){r[r.A=1]="A",r[r.CNAME=5]="CNAME",r[r.TXT=16]="TXT",r[r.AAAA=28]="AAAA"})(mr||(mr={}));function ld(r={}){return new cd(r)}var yA=["string","number","bigint","symbol"],wA=["Function","Generator","AsyncGenerator","GeneratorFunction","AsyncGeneratorFunction","AsyncFunction","Observable","Array","Buffer","Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","HTMLElement","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function p8(r){if(r===null)return"null";if(r===void 0)return"undefined";if(r===!0||r===!1)return"boolean";let e=typeof r;if(yA.includes(e))return e;if(e==="function")return"Function";if(Array.isArray(r))return"Array";if(bA(r))return"Buffer";let t=xA(r);return t||"Object"}function bA(r){return r&&r.constructor&&r.constructor.isBuffer&&r.constructor.isBuffer.call(null,r)}function xA(r){let e=Object.prototype.toString.call(r).slice(8,-1);if(wA.includes(e))return e}var b=class{constructor(e,t,n){this.major=e,this.majorEncoded=e<<5,this.name=t,this.terminal=n}toString(){return`Type[${this.major}].${this.name}`}compare(e){return this.major<e.major?-1:this.major>e.major?1:0}};b.uint=new b(0,"uint",!0);b.negint=new b(1,"negint",!0);b.bytes=new b(2,"bytes",!0);b.string=new b(3,"string",!0);b.array=new b(4,"array",!1);b.map=new b(5,"map",!1);b.tag=new b(6,"tag",!1);b.float=new b(7,"float",!0);b.false=new b(7,"false",!0);b.true=new b(7,"true",!0);b.null=new b(7,"null",!0);b.undefined=new b(7,"undefined",!0);b.break=new b(7,"break",!0);var M=class{constructor(e,t,n){this.type=e,this.value=t,this.encodedLength=n,this.encodedBytes=void 0,this.byteValue=void 0}toString(){return`Token[${this.type}].${this.value}`}};var Cs=globalThis.process&&!globalThis.process.browser&&globalThis.Buffer&&typeof globalThis.Buffer.isBuffer=="function",vA=new TextDecoder,EA=new TextEncoder;function ud(r){return Cs&&globalThis.Buffer.isBuffer(r)}function fc(r){return r instanceof Uint8Array?ud(r)?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r:Uint8Array.from(r)}var w8=Cs?(r,e,t)=>t-e>64?globalThis.Buffer.from(r.subarray(e,t)).toString("utf8"):g8(r,e,t):(r,e,t)=>t-e>64?vA.decode(r.subarray(e,t)):g8(r,e,t),dd=Cs?r=>r.length>64?globalThis.Buffer.from(r):m8(r):r=>r.length>64?EA.encode(r):m8(r),_n=r=>Uint8Array.from(r),ks=Cs?(r,e,t)=>ud(r)?new Uint8Array(r.subarray(e,t)):r.slice(e,t):(r,e,t)=>r.slice(e,t),b8=Cs?(r,e)=>(r=r.map(t=>t instanceof Uint8Array?t:globalThis.Buffer.from(t)),fc(globalThis.Buffer.concat(r,e))):(r,e)=>{let t=new Uint8Array(e),n=0;for(let o of r)n+o.length>t.length&&(o=o.subarray(0,t.length-n)),t.set(o,n),n+=o.length;return t},x8=Cs?r=>globalThis.Buffer.allocUnsafe(r):r=>new Uint8Array(r);function v8(r,e){if(ud(r)&&ud(e))return r.compare(e);for(let t=0;t<r.length;t++)if(r[t]!==e[t])return r[t]<e[t]?-1:1;return 0}function m8(r){let e=[],t=0;for(let n=0;n<r.length;n++){let o=r.charCodeAt(n);o<128?e[t++]=o:o<2048?(e[t++]=o>>6|192,e[t++]=o&63|128):(o&64512)===55296&&n+1<r.length&&(r.charCodeAt(n+1)&64512)===56320?(o=65536+((o&1023)<<10)+(r.charCodeAt(++n)&1023),e[t++]=o>>18|240,e[t++]=o>>12&63|128,e[t++]=o>>6&63|128,e[t++]=o&63|128):(e[t++]=o>>12|224,e[t++]=o>>6&63|128,e[t++]=o&63|128)}return e}function g8(r,e,t){let n=[];for(;e<t;){let o=r[e],i=null,s=o>239?4:o>223?3:o>191?2:1;if(e+s<=t){let a,c,l,u;switch(s){case 1:o<128&&(i=o);break;case 2:a=r[e+1],(a&192)===128&&(u=(o&31)<<6|a&63,u>127&&(i=u));break;case 3:a=r[e+1],c=r[e+2],(a&192)===128&&(c&192)===128&&(u=(o&15)<<12|(a&63)<<6|c&63,u>2047&&(u<55296||u>57343)&&(i=u));break;case 4:a=r[e+1],c=r[e+2],l=r[e+3],(a&192)===128&&(c&192)===128&&(l&192)===128&&(u=(o&15)<<18|(a&63)<<12|(c&63)<<6|l&63,u>65535&&u<1114112&&(i=u))}}i===null?(i=65533,s=1):i>65535&&(i-=65536,n.push(i>>>10&1023|55296),i=56320|i&1023),n.push(i),e+=s}return rp(n)}var y8=4096;function rp(r){let e=r.length;if(e<=y8)return String.fromCharCode.apply(String,r);let t="",n=0;for(;n<e;)t+=String.fromCharCode.apply(String,r.slice(n,n+=y8));return t}var SA=256,hc=class{constructor(e=SA){this.chunkSize=e,this.cursor=0,this.maxCursor=-1,this.chunks=[],this._initReuseChunk=null}reset(){this.cursor=0,this.maxCursor=-1,this.chunks.length&&(this.chunks=[]),this._initReuseChunk!==null&&(this.chunks.push(this._initReuseChunk),this.maxCursor=this._initReuseChunk.length-1)}push(e){let t=this.chunks[this.chunks.length-1];if(this.cursor+e.length<=this.maxCursor+1){let o=t.length-(this.maxCursor-this.cursor)-1;t.set(e,o)}else{if(t){let o=t.length-(this.maxCursor-this.cursor)-1;o<t.length&&(this.chunks[this.chunks.length-1]=t.subarray(0,o),this.maxCursor=this.cursor-1)}e.length<64&&e.length<this.chunkSize?(t=x8(this.chunkSize),this.chunks.push(t),this.maxCursor+=t.length,this._initReuseChunk===null&&(this._initReuseChunk=t),t.set(e,0)):(this.chunks.push(e),this.maxCursor+=e.length)}this.cursor+=e.length}toBytes(e=!1){let t;if(this.chunks.length===1){let n=this.chunks[0];e&&this.cursor>n.length/2?(t=this.cursor===n.length?n:n.subarray(0,this.cursor),this._initReuseChunk=null,this.chunks=[]):t=ks(n,0,this.cursor)}else t=b8(this.chunks,this.cursor);return e&&this.reset(),t}};var j="CBOR decode error:",Xn="CBOR encode error:",pc=[];pc[23]=1;pc[24]=2;pc[25]=3;pc[26]=5;pc[27]=9;function jn(r,e,t){if(r.length-e<t)throw new Error(`${j} not enough data for type`)}var pt=[24,256,65536,4294967296,BigInt("18446744073709551616")];function gr(r,e,t){jn(r,e,1);let n=r[e];if(t.strict===!0&&n<pt[0])throw new Error(`${j} integer encoded in more bytes than necessary (strict decode)`);return n}function yr(r,e,t){jn(r,e,2);let n=r[e]<<8|r[e+1];if(t.strict===!0&&n<pt[1])throw new Error(`${j} integer encoded in more bytes than necessary (strict decode)`);return n}function wr(r,e,t){jn(r,e,4);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3];if(t.strict===!0&&n<pt[2])throw new Error(`${j} integer encoded in more bytes than necessary (strict decode)`);return n}function br(r,e,t){jn(r,e,8);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3],o=r[e+4]*16777216+(r[e+5]<<16)+(r[e+6]<<8)+r[e+7],i=(BigInt(n)<<BigInt(32))+BigInt(o);if(t.strict===!0&&i<pt[3])throw new Error(`${j} integer encoded in more bytes than necessary (strict decode)`);if(i<=Number.MAX_SAFE_INTEGER)return Number(i);if(t.allowBigInt===!0)return i;throw new Error(`${j} integers outside of the safe integer range are not supported`)}function E8(r,e,t,n){return new M(b.uint,gr(r,e+1,n),2)}function S8(r,e,t,n){return new M(b.uint,yr(r,e+1,n),3)}function A8(r,e,t,n){return new M(b.uint,wr(r,e+1,n),5)}function I8(r,e,t,n){return new M(b.uint,br(r,e+1,n),9)}function kr(r,e){return xt(r,0,e.value)}function xt(r,e,t){if(t<pt[0]){let n=Number(t);r.push([e|n])}else if(t<pt[1]){let n=Number(t);r.push([e|24,n])}else if(t<pt[2]){let n=Number(t);r.push([e|25,n>>>8,n&255])}else if(t<pt[3]){let n=Number(t);r.push([e|26,n>>>24&255,n>>>16&255,n>>>8&255,n&255])}else{let n=BigInt(t);if(n<pt[4]){let o=[e|27,0,0,0,0,0,0,0],i=Number(n&BigInt(4294967295)),s=Number(n>>BigInt(32)&BigInt(4294967295));o[8]=i&255,i=i>>8,o[7]=i&255,i=i>>8,o[6]=i&255,i=i>>8,o[5]=i&255,o[4]=s&255,s=s>>8,o[3]=s&255,s=s>>8,o[2]=s&255,s=s>>8,o[1]=s&255,r.push(o)}else throw new Error(`${j} encountered BigInt larger than allowable range`)}}kr.encodedSize=function(e){return xt.encodedSize(e.value)};xt.encodedSize=function(e){return e<pt[0]?1:e<pt[1]?2:e<pt[2]?3:e<pt[3]?5:9};kr.compareTokens=function(e,t){return e.value<t.value?-1:e.value>t.value?1:0};function T8(r,e,t,n){return new M(b.negint,-1-gr(r,e+1,n),2)}function _8(r,e,t,n){return new M(b.negint,-1-yr(r,e+1,n),3)}function C8(r,e,t,n){return new M(b.negint,-1-wr(r,e+1,n),5)}var np=BigInt(-1),k8=BigInt(1);function P8(r,e,t,n){let o=br(r,e+1,n);if(typeof o!="bigint"){let i=-1-o;if(i>=Number.MIN_SAFE_INTEGER)return new M(b.negint,i,9)}if(n.allowBigInt!==!0)throw new Error(`${j} integers outside of the safe integer range are not supported`);return new M(b.negint,np-BigInt(o),9)}function fd(r,e){let t=e.value,n=typeof t=="bigint"?t*np-k8:t*-1-1;xt(r,e.type.majorEncoded,n)}fd.encodedSize=function(e){let t=e.value,n=typeof t=="bigint"?t*np-k8:t*-1-1;return n<pt[0]?1:n<pt[1]?2:n<pt[2]?3:n<pt[3]?5:9};fd.compareTokens=function(e,t){return e.value<t.value?1:e.value>t.value?-1:0};function mc(r,e,t,n){jn(r,e,t+n);let o=ks(r,e+t,e+t+n);return new M(b.bytes,o,t+n)}function R8(r,e,t,n){return mc(r,e,1,t)}function D8(r,e,t,n){return mc(r,e,2,gr(r,e+1,n))}function L8(r,e,t,n){return mc(r,e,3,yr(r,e+1,n))}function N8(r,e,t,n){return mc(r,e,5,wr(r,e+1,n))}function B8(r,e,t,n){let o=br(r,e+1,n);if(typeof o=="bigint")throw new Error(`${j} 64-bit integer bytes lengths not supported`);return mc(r,e,9,o)}function hd(r){return r.encodedBytes===void 0&&(r.encodedBytes=r.type===b.string?dd(r.value):r.value),r.encodedBytes}function Ps(r,e){let t=hd(e);xt(r,e.type.majorEncoded,t.length),r.push(t)}Ps.encodedSize=function(e){let t=hd(e);return xt.encodedSize(t.length)+t.length};Ps.compareTokens=function(e,t){return IA(hd(e),hd(t))};function IA(r,e){return r.length<e.length?-1:r.length>e.length?1:v8(r,e)}function gc(r,e,t,n,o){let i=t+n;jn(r,e,i);let s=new M(b.string,w8(r,e+t,e+i),i);return o.retainStringBytes===!0&&(s.byteValue=ks(r,e+t,e+i)),s}function O8(r,e,t,n){return gc(r,e,1,t,n)}function M8(r,e,t,n){return gc(r,e,2,gr(r,e+1,n),n)}function U8(r,e,t,n){return gc(r,e,3,yr(r,e+1,n),n)}function F8(r,e,t,n){return gc(r,e,5,wr(r,e+1,n),n)}function V8(r,e,t,n){let o=br(r,e+1,n);if(typeof o=="bigint")throw new Error(`${j} 64-bit integer string lengths not supported`);return gc(r,e,9,o,n)}var $8=Ps;function Rs(r,e,t,n){return new M(b.array,n,t)}function K8(r,e,t,n){return Rs(r,e,1,t)}function H8(r,e,t,n){return Rs(r,e,2,gr(r,e+1,n))}function q8(r,e,t,n){return Rs(r,e,3,yr(r,e+1,n))}function z8(r,e,t,n){return Rs(r,e,5,wr(r,e+1,n))}function W8(r,e,t,n){let o=br(r,e+1,n);if(typeof o=="bigint")throw new Error(`${j} 64-bit integer array lengths not supported`);return Rs(r,e,9,o)}function G8(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${j} indefinite length items not allowed`);return Rs(r,e,1,1/0)}function pd(r,e){xt(r,b.array.majorEncoded,e.value)}pd.compareTokens=kr.compareTokens;pd.encodedSize=function(e){return xt.encodedSize(e.value)};function Ds(r,e,t,n){return new M(b.map,n,t)}function Q8(r,e,t,n){return Ds(r,e,1,t)}function Y8(r,e,t,n){return Ds(r,e,2,gr(r,e+1,n))}function X8(r,e,t,n){return Ds(r,e,3,yr(r,e+1,n))}function j8(r,e,t,n){return Ds(r,e,5,wr(r,e+1,n))}function Z8(r,e,t,n){let o=br(r,e+1,n);if(typeof o=="bigint")throw new Error(`${j} 64-bit integer map lengths not supported`);return Ds(r,e,9,o)}function J8(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${j} indefinite length items not allowed`);return Ds(r,e,1,1/0)}function md(r,e){xt(r,b.map.majorEncoded,e.value)}md.compareTokens=kr.compareTokens;md.encodedSize=function(e){return xt.encodedSize(e.value)};function e5(r,e,t,n){return new M(b.tag,t,1)}function t5(r,e,t,n){return new M(b.tag,gr(r,e+1,n),2)}function r5(r,e,t,n){return new M(b.tag,yr(r,e+1,n),3)}function n5(r,e,t,n){return new M(b.tag,wr(r,e+1,n),5)}function o5(r,e,t,n){return new M(b.tag,br(r,e+1,n),9)}function gd(r,e){xt(r,b.tag.majorEncoded,e.value)}gd.compareTokens=kr.compareTokens;gd.encodedSize=function(e){return xt.encodedSize(e.value)};var RA=20,DA=21,LA=22,NA=23;function i5(r,e,t,n){if(n.allowUndefined===!1)throw new Error(`${j} undefined values are not supported`);return n.coerceUndefinedToNull===!0?new M(b.null,null,1):new M(b.undefined,void 0,1)}function s5(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${j} indefinite length items not allowed`);return new M(b.break,void 0,1)}function op(r,e,t){if(t){if(t.allowNaN===!1&&Number.isNaN(r))throw new Error(`${j} NaN values are not supported`);if(t.allowInfinity===!1&&(r===1/0||r===-1/0))throw new Error(`${j} Infinity values are not supported`)}return new M(b.float,r,e)}function a5(r,e,t,n){return op(ip(r,e+1),3,n)}function c5(r,e,t,n){return op(sp(r,e+1),5,n)}function l5(r,e,t,n){return op(h5(r,e+1),9,n)}function yd(r,e,t){let n=e.value;if(n===!1)r.push([b.float.majorEncoded|RA]);else if(n===!0)r.push([b.float.majorEncoded|DA]);else if(n===null)r.push([b.float.majorEncoded|LA]);else if(n===void 0)r.push([b.float.majorEncoded|NA]);else{let o,i=!1;(!t||t.float64!==!0)&&(d5(n),o=ip(Jr,1),n===o||Number.isNaN(n)?(Jr[0]=249,r.push(Jr.slice(0,3)),i=!0):(f5(n),o=sp(Jr,1),n===o&&(Jr[0]=250,r.push(Jr.slice(0,5)),i=!0))),i||(BA(n),o=h5(Jr,1),Jr[0]=251,r.push(Jr.slice(0,9)))}}yd.encodedSize=function(e,t){let n=e.value;if(n===!1||n===!0||n===null||n===void 0)return 1;if(!t||t.float64!==!0){d5(n);let o=ip(Jr,1);if(n===o||Number.isNaN(n))return 3;if(f5(n),o=sp(Jr,1),n===o)return 5}return 9};var u5=new ArrayBuffer(9),Pr=new DataView(u5,1),Jr=new Uint8Array(u5,0);function d5(r){if(r===1/0)Pr.setUint16(0,31744,!1);else if(r===-1/0)Pr.setUint16(0,64512,!1);else if(Number.isNaN(r))Pr.setUint16(0,32256,!1);else{Pr.setFloat32(0,r);let e=Pr.getUint32(0),t=(e&2139095040)>>23,n=e&8388607;if(t===255)Pr.setUint16(0,31744,!1);else if(t===0)Pr.setUint16(0,(r&2147483648)>>16|n>>13,!1);else{let o=t-127;o<-24?Pr.setUint16(0,0):o<-14?Pr.setUint16(0,(e&2147483648)>>16|1<<24+o,!1):Pr.setUint16(0,(e&2147483648)>>16|o+15<<10|n>>13,!1)}}}function ip(r,e){if(r.length-e<2)throw new Error(`${j} not enough data for float16`);let t=(r[e]<<8)+r[e+1];if(t===31744)return 1/0;if(t===64512)return-1/0;if(t===32256)return NaN;let n=t>>10&31,o=t&1023,i;return n===0?i=o*2**-24:n!==31?i=(o+1024)*2**(n-25):i=o===0?1/0:NaN,t&32768?-i:i}function f5(r){Pr.setFloat32(0,r,!1)}function sp(r,e){if(r.length-e<4)throw new Error(`${j} not enough data for float32`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,4).getFloat32(0,!1)}function BA(r){Pr.setFloat64(0,r,!1)}function h5(r,e){if(r.length-e<8)throw new Error(`${j} not enough data for float64`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,8).getFloat64(0,!1)}yd.compareTokens=kr.compareTokens;function Ee(r,e,t){throw new Error(`${j} encountered invalid minor (${t}) for major ${r[e]>>>5}`)}function wd(r){return()=>{throw new Error(`${j} ${r}`)}}var V=[];for(let r=0;r<=23;r++)V[r]=Ee;V[24]=E8;V[25]=S8;V[26]=A8;V[27]=I8;V[28]=Ee;V[29]=Ee;V[30]=Ee;V[31]=Ee;for(let r=32;r<=55;r++)V[r]=Ee;V[56]=T8;V[57]=_8;V[58]=C8;V[59]=P8;V[60]=Ee;V[61]=Ee;V[62]=Ee;V[63]=Ee;for(let r=64;r<=87;r++)V[r]=R8;V[88]=D8;V[89]=L8;V[90]=N8;V[91]=B8;V[92]=Ee;V[93]=Ee;V[94]=Ee;V[95]=wd("indefinite length bytes/strings are not supported");for(let r=96;r<=119;r++)V[r]=O8;V[120]=M8;V[121]=U8;V[122]=F8;V[123]=V8;V[124]=Ee;V[125]=Ee;V[126]=Ee;V[127]=wd("indefinite length bytes/strings are not supported");for(let r=128;r<=151;r++)V[r]=K8;V[152]=H8;V[153]=q8;V[154]=z8;V[155]=W8;V[156]=Ee;V[157]=Ee;V[158]=Ee;V[159]=G8;for(let r=160;r<=183;r++)V[r]=Q8;V[184]=Y8;V[185]=X8;V[186]=j8;V[187]=Z8;V[188]=Ee;V[189]=Ee;V[190]=Ee;V[191]=J8;for(let r=192;r<=215;r++)V[r]=e5;V[216]=t5;V[217]=r5;V[218]=n5;V[219]=o5;V[220]=Ee;V[221]=Ee;V[222]=Ee;V[223]=Ee;for(let r=224;r<=243;r++)V[r]=wd("simple values are not supported");V[244]=Ee;V[245]=Ee;V[246]=Ee;V[247]=i5;V[248]=wd("simple values are not supported");V[249]=a5;V[250]=c5;V[251]=l5;V[252]=Ee;V[253]=Ee;V[254]=Ee;V[255]=s5;var en=[];for(let r=0;r<24;r++)en[r]=new M(b.uint,r,1);for(let r=-1;r>=-24;r--)en[31-r]=new M(b.negint,r,1);en[64]=new M(b.bytes,new Uint8Array(0),1);en[96]=new M(b.string,"",1);en[128]=new M(b.array,0,1);en[160]=new M(b.map,0,1);en[244]=new M(b.false,!1,1);en[245]=new M(b.true,!0,1);en[246]=new M(b.null,null,1);function p5(r){switch(r.type){case b.false:return _n([244]);case b.true:return _n([245]);case b.null:return _n([246]);case b.bytes:return r.value.length?void 0:_n([64]);case b.string:return r.value===""?_n([96]):void 0;case b.array:return r.value===0?_n([128]):void 0;case b.map:return r.value===0?_n([160]):void 0;case b.uint:return r.value<24?_n([Number(r.value)]):void 0;case b.negint:if(r.value>=-24)return _n([31-Number(r.value)])}}var MA={float64:!1,mapSorter:VA,quickEncodeToken:p5};function UA(){let r=[];return r[b.uint.major]=kr,r[b.negint.major]=fd,r[b.bytes.major]=Ps,r[b.string.major]=$8,r[b.array.major]=pd,r[b.map.major]=md,r[b.tag.major]=gd,r[b.float.major]=yd,r}var m5=UA(),ap=new hc,xd=class r{constructor(e,t){this.obj=e,this.parent=t}includes(e){let t=this;do if(t.obj===e)return!0;while(t=t.parent);return!1}static createCheck(e,t){if(e&&e.includes(t))throw new Error(`${Xn} object contains circular references`);return new r(t,e)}},Ro={null:new M(b.null,null),undefined:new M(b.undefined,void 0),true:new M(b.true,!0),false:new M(b.false,!1),emptyArray:new M(b.array,0),emptyMap:new M(b.map,0)},Do={number(r,e,t,n){return!Number.isInteger(r)||!Number.isSafeInteger(r)?new M(b.float,r):r>=0?new M(b.uint,r):new M(b.negint,r)},bigint(r,e,t,n){return r>=BigInt(0)?new M(b.uint,r):new M(b.negint,r)},Uint8Array(r,e,t,n){return new M(b.bytes,r)},string(r,e,t,n){return new M(b.string,r)},boolean(r,e,t,n){return r?Ro.true:Ro.false},null(r,e,t,n){return Ro.null},undefined(r,e,t,n){return Ro.undefined},ArrayBuffer(r,e,t,n){return new M(b.bytes,new Uint8Array(r))},DataView(r,e,t,n){return new M(b.bytes,new Uint8Array(r.buffer,r.byteOffset,r.byteLength))},Array(r,e,t,n){if(!r.length)return t.addBreakTokens===!0?[Ro.emptyArray,new M(b.break)]:Ro.emptyArray;n=xd.createCheck(n,r);let o=[],i=0;for(let s of r)o[i++]=bd(s,t,n);return t.addBreakTokens?[new M(b.array,r.length),o,new M(b.break)]:[new M(b.array,r.length),o]},Object(r,e,t,n){let o=e!=="Object",i=o?r.keys():Object.keys(r),s=o?r.size:i.length;if(!s)return t.addBreakTokens===!0?[Ro.emptyMap,new M(b.break)]:Ro.emptyMap;n=xd.createCheck(n,r);let a=[],c=0;for(let l of i)a[c++]=[bd(l,t,n),bd(o?r.get(l):r[l],t,n)];return FA(a,t),t.addBreakTokens?[new M(b.map,s),a,new M(b.break)]:[new M(b.map,s),a]}};Do.Map=Do.Object;Do.Buffer=Do.Uint8Array;for(let r of"Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64".split(" "))Do[`${r}Array`]=Do.DataView;function bd(r,e={},t){let n=p8(r),o=e&&e.typeEncoders&&e.typeEncoders[n]||Do[n];if(typeof o=="function"){let s=o(r,n,e,t);if(s!=null)return s}let i=Do[n];if(!i)throw new Error(`${Xn} unsupported type: ${n}`);return i(r,n,e,t)}function FA(r,e){e.mapSorter&&r.sort(e.mapSorter)}function VA(r,e){let t=Array.isArray(r[0])?r[0][0]:r[0],n=Array.isArray(e[0])?e[0][0]:e[0];if(t.type!==n.type)return t.type.compare(n.type);let o=t.type.major,i=m5[o].compareTokens(t,n);return i===0&&console.warn("WARNING: complex key types used, CBOR key sorting guarantees are gone"),i}function g5(r,e,t,n){if(Array.isArray(e))for(let o of e)g5(r,o,t,n);else t[e.type.major](r,e,n)}function cp(r,e,t){let n=bd(r,t);if(!Array.isArray(n)&&t.quickEncodeToken){let o=t.quickEncodeToken(n);if(o)return o;let i=e[n.type.major];if(i.encodedSize){let s=i.encodedSize(n,t),a=new hc(s);if(i(a,n,t),a.chunks.length!==1)throw new Error(`Unexpected error: pre-calculated length for ${n} was wrong`);return fc(a.chunks[0])}}return ap.reset(),g5(ap,n,e,t),ap.toBytes(!0)}function Lo(r,e){return e=Object.assign({},MA,e),cp(r,m5,e)}var $A={strict:!1,allowIndefinite:!0,allowUndefined:!0,allowBigInt:!0},vd=class{constructor(e,t={}){this._pos=0,this.data=e,this.options=t}pos(){return this._pos}done(){return this._pos>=this.data.length}next(){let e=this.data[this._pos],t=en[e];if(t===void 0){let n=V[e];if(!n)throw new Error(`${j} no decoder for major type ${e>>>5} (byte 0x${e.toString(16).padStart(2,"0")})`);let o=e&31;t=n(this.data,this._pos,o,this.options)}return this._pos+=t.encodedLength,t}},yc=Symbol.for("DONE"),Ed=Symbol.for("BREAK");function KA(r,e,t){let n=[];for(let o=0;o<r.value;o++){let i=Ls(e,t);if(i===Ed){if(r.value===1/0)break;throw new Error(`${j} got unexpected break to lengthed array`)}if(i===yc)throw new Error(`${j} found array but not enough entries (got ${o}, expected ${r.value})`);n[o]=i}return n}function HA(r,e,t){let n=t.useMaps===!0,o=n?void 0:{},i=n?new Map:void 0;for(let s=0;s<r.value;s++){let a=Ls(e,t);if(a===Ed){if(r.value===1/0)break;throw new Error(`${j} got unexpected break to lengthed map`)}if(a===yc)throw new Error(`${j} found map but not enough entries (got ${s} [no key], expected ${r.value})`);if(n!==!0&&typeof a!="string")throw new Error(`${j} non-string keys not supported (got ${typeof a})`);if(t.rejectDuplicateMapKeys===!0&&(n&&i.has(a)||!n&&a in o))throw new Error(`${j} found repeat map key "${a}"`);let c=Ls(e,t);if(c===yc)throw new Error(`${j} found map but not enough entries (got ${s} [no value], expected ${r.value})`);n?i.set(a,c):o[a]=c}return n?i:o}function Ls(r,e){if(r.done())return yc;let t=r.next();if(t.type===b.break)return Ed;if(t.type.terminal)return t.value;if(t.type===b.array)return KA(t,r,e);if(t.type===b.map)return HA(t,r,e);if(t.type===b.tag){if(e.tags&&typeof e.tags[t.value]=="function"){let n=Ls(r,e);return e.tags[t.value](n)}throw new Error(`${j} tag not supported (${t.value})`)}throw new Error("unsupported")}function lp(r,e){if(!(r instanceof Uint8Array))throw new Error(`${j} data to decode must be a Uint8Array`);e=Object.assign({},$A,e);let t=e.tokenizer||new vd(r,e),n=Ls(t,e);if(n===yc)throw new Error(`${j} did not find any content to decode`);if(n===Ed)throw new Error(`${j} got unexpected break`);return[n,r.subarray(t.pos())]}function xr(r,e){let[t,n]=lp(r,e);if(n.length>0)throw new Error(`${j} too many terminals, data makes no sense`);return t}var Zn="/",y5=new TextEncoder().encode(Zn),Sd=y5[0],De=class r{_buf;constructor(e,t){if(typeof e=="string")this._buf=N(e);else if(e instanceof Uint8Array)this._buf=e;else throw new Error("Invalid key, should be String of Uint8Array");if(t==null&&(t=!0),t&&this.clean(),this._buf.byteLength===0||this._buf[0]!==Sd)throw new Error("Invalid key")}toString(e="utf8"){return U(this._buf,e)}uint8Array(){return this._buf}get[Symbol.toStringTag](){return`Key(${this.toString()})`}static withNamespaces(e){return new r(e.join(Zn))}static random(){return new r(Math.random().toString().substring(2))}static asKey(e){return e instanceof Uint8Array||typeof e=="string"?new r(e):typeof e.uint8Array=="function"?new r(e.uint8Array()):null}clean(){if((this._buf==null||this._buf.byteLength===0)&&(this._buf=y5),this._buf[0]!==Sd){let e=new Uint8Array(this._buf.byteLength+1);e.fill(Sd,0,1),e.set(this._buf,1),this._buf=e}for(;this._buf.byteLength>1&&this._buf[this._buf.byteLength-1]===Sd;)this._buf=this._buf.subarray(0,-1)}less(e){let t=this.list(),n=e.list();for(let o=0;o<t.length;o++){if(n.length<o+1)return!1;let i=t[o],s=n[o];if(i<s)return!0;if(i>s)return!1}return t.length<n.length}reverse(){return r.withNamespaces(this.list().slice().reverse())}namespaces(){return this.list()}baseNamespace(){let e=this.namespaces();return e[e.length-1]}list(){return this.toString().split(Zn).slice(1)}type(){return qA(this.baseNamespace())}name(){return zA(this.baseNamespace())}instance(e){return new r(this.toString()+":"+e)}path(){let e=this.parent().toString();return e.endsWith(Zn)||(e+=Zn),e+=this.type(),new r(e)}parent(){let e=this.list();return e.length===1?new r(Zn):new r(e.slice(0,-1).join(Zn))}child(e){return this.toString()===Zn?e:e.toString()===Zn?this:new r(this.toString()+e.toString(),!1)}isAncestorOf(e){return e.toString()===this.toString()?!1:e.toString().startsWith(this.toString())}isDecendantOf(e){return e.toString()===this.toString()?!1:this.toString().startsWith(e.toString())}isTopLevel(){return this.list().length===1}concat(...e){return r.withNamespaces([...this.namespaces(),...WA(e.map(t=>t.namespaces()))])}};function qA(r){let e=r.split(":");return e.length<2?"":e.slice(0,-1).join(":")}function zA(r){let e=r.split(":");return e[e.length-1]}function WA(r){return[].concat(...r)}function Ad({enumerable:r=!0,configurable:e=!1}={}){return{enumerable:r,configurable:e,writable:!1}}function*GA(r,e){if(e!=null&&typeof e=="object")if(Array.isArray(e))for(let[t,n]of e.entries()){let o=[...r,t],i=X.asCID(n);i!=null?yield[o.join("/"),i]:typeof n=="object"&&(yield*dp(n,o))}else{let t=X.asCID(e);t!=null?yield[r.join("/"),t]:yield*dp(e,r)}}function*dp(r,e){if(r==null||r instanceof Uint8Array)return;let t=X.asCID(r);t!=null&&(yield[e.join("/"),t]);for(let[n,o]of Object.entries(r)){let i=[...e,n];yield*GA(i,o)}}function*QA(r,e){if(Array.isArray(e))for(let[t,n]of e.entries()){let o=[...r,t];yield o.join("/"),typeof n=="object"&&X.asCID(n)==null&&(yield*fp(n,o))}else yield*fp(e,r)}function*fp(r,e){if(!(r==null||typeof r!="object"))for(let[t,n]of Object.entries(r)){let o=[...e,t];yield o.join("/"),n!=null&&!(n instanceof Uint8Array)&&typeof n=="object"&&X.asCID(n)==null&&(yield*QA(o,n))}}function YA(r,e){let t=r;for(let[n,o]of e.entries()){if(t=t[o],t==null)throw new Error(`Object has no property at ${e.slice(0,n+1).map(s=>`[${JSON.stringify(s)}]`).join("")}`);let i=X.asCID(t);if(i!=null)return{value:i,remaining:e.slice(n+1).join("/")}}return{value:t}}var hp=class{cid;bytes;value;asBlock;constructor({cid:e,bytes:t,value:n}){if(e==null||t==null||typeof n>"u")throw new Error("Missing required argument");this.cid=e,this.bytes=t,this.value=n,this.asBlock=this,Object.defineProperties(this,{cid:Ad(),bytes:Ad(),value:Ad(),asBlock:Ad()})}links(){return dp(this.value,[])}tree(){return fp(this.value,[])}get(e="/"){return YA(this.value,e.split("/").filter(Boolean))}};function w5({bytes:r,cid:e,value:t,codec:n}){let o=t!==void 0?t:n?.decode(r);if(o===void 0)throw new Error('Missing required argument, must either provide "value" or "codec"');return new hp({cid:e,bytes:r,value:o})}var v5="/pin/",b5="/pinned-block/",pp=wn,x5=1;function Id(r){return r.version===0&&(r=r.toV1()),new De(`${v5}${r.toString(pp)}`)}var Td=class{datastore;blockstore;getCodec;constructor(e,t,n){this.datastore=e,this.blockstore=t,this.getCodec=n}async*add(e,t={}){let n=Id(e);if(await this.datastore.has(n))throw new Error("Already pinned");let o=Math.round(t.depth??1/0);if(o<0)throw new Error("Depth must be greater than or equal to 0");let i=new Vt({concurrency:x5});for await(let a of this.#e(e,i,{...t,depth:o}))await this.#t(a,c=>c.pinnedBy.find(l=>ne(l,e.bytes))!=null?!1:(c.pinCount++,c.pinnedBy.push(e.bytes),!0),t),yield a;let s={depth:o,metadata:t.metadata??{}};await this.datastore.put(n,Lo(s),t)}async*#e(e,t,n){if(n.depth===-1)return;let o=await this.getCodec(e.code),i=await this.blockstore.get(e,n),s=w5({bytes:i,cid:e,codec:o});yield e;for await(let[,a]of s.links())yield*await t.add(async()=>this.#e(a,t,{...n,depth:n.depth-1}))}async#t(e,t,n){let o=new De(`${b5}${pp.encode(e.multihash.bytes)}`),i={pinCount:0,pinnedBy:[]};try{i=xr(await this.datastore.get(o,n))}catch(a){if(a.name!=="NotFoundError")throw a}if(t(i)){if(i.pinCount===0&&await this.datastore.has(o)){await this.datastore.delete(o);return}await this.datastore.put(o,Lo(i),n),n.onProgress?.(new W("helia:pin:add",e))}}async*rm(e,t={}){let n=Id(e),o=await this.datastore.get(n,t),i=xr(o);await this.datastore.delete(n,t);let s=new Vt({concurrency:x5});for await(let a of this.#e(e,s,{...t,depth:i.depth}))await this.#t(a,c=>(c.pinCount--,c.pinnedBy=c.pinnedBy.filter(l=>ne(l,e.bytes)),!0),{...t,depth:i.depth}),yield a}async*ls(e={}){for await(let{key:t,value:n}of this.datastore.query({prefix:v5+(e.cid!=null?`${e.cid.toString(wn)}`:"")},e)){let o=X.parse(t.toString().substring(5),wn),i=xr(n);yield{cid:o,...i}}}async isPinned(e,t={}){let n=new De(`${b5}${pp.encode(e.multihash.bytes)}`);return this.datastore.has(n,t)}async get(e,t){let n=Id(e),o=await this.datastore.get(n,t);return xr(o)}async setMetadata(e,t,n){let o=Id(e),i=await this.datastore.get(o,n),s=xr(i);s.metadata=t??{},await this.datastore.put(o,Lo(s),n)}};var mp=1,gp=5;var wc=class extends Error{static name="InsufficientProvidersError";constructor(e="Insufficient providers found"){super(e),this.name="InsufficientProvidersError"}},No=class extends Error{static name="NoRoutersAvailableError";constructor(e="No routers available"){super(e),this.name="NoRoutersAvailableError"}},bc=class extends Error{static name="UnknownHashAlgorithmError";constructor(e="Unknown hash algorithm"){super(e),this.name="UnknownHashAlgorithmError"}},xc=class extends Error{static name="UnknownCodecError";constructor(e="Unknown codec"){super(e),this.name="UnknownCodecError"}};var XA=5,_d=class{log;routers;providerLookupConcurrency;constructor(e,t){this.log=e.logger.forComponent("helia:routing"),this.routers=t.routers??[],this.providerLookupConcurrency=t.providerLookupConcurrency??XA,this.findProviders=e.metrics?.traceFunction("helia.routing.findProviders",this.findProviders.bind(this),{optionsIndex:1})??this.findProviders,this.provide=e.metrics?.traceFunction("helia.routing.provide",this.provide.bind(this),{optionsIndex:1})??this.provide,this.cancelReprovide=e.metrics?.traceFunction("helia.routing.cancelReprovide",this.cancelReprovide.bind(this),{optionsIndex:1})??this.cancelReprovide,this.put=e.metrics?.traceFunction("helia.routing.put",this.put.bind(this),{optionsIndex:2})??this.put,this.get=e.metrics?.traceFunction("helia.routing.get",this.get.bind(this),{optionsIndex:1})??this.get,this.findPeer=e.metrics?.traceFunction("helia.routing.findPeer",this.findPeer.bind(this),{optionsIndex:1})??this.findPeer,this.getClosestPeers=e.metrics?.traceFunction("helia.routing.getClosestPeers",this.getClosestPeers.bind(this),{optionsIndex:1})??this.getClosestPeers}async start(){await gt(...this.routers)}async stop(){await kt(...this.routers)}async*findProviders(e,t={}){if(this.routers.length===0)throw new No("No content routers available");let n=new yt({concurrency:this.providerLookupConcurrency});n.addEventListener("error",()=>{});for await(let o of Kt(n.toGenerator(),...vi(this.routers,"findProviders").map(i=>i.findProviders(e,t))))if(o!=null){if(o.multiaddrs.length===0){if(n.find(o.id)!=null)continue;n.add(async()=>{try{let i=await this.findPeer(o.id,t);return i.multiaddrs.length===0?null:i}catch(i){return this.log.error("could not load multiaddrs for peer %p",o.id,i),null}},{peerId:o.id,signal:t.signal}).catch(i=>{this.log.error("could not load multiaddrs for peer %p",o.id,i)})}yield o}}async provide(e,t={}){if(this.routers.length===0)throw new No("No content routers available");await Promise.all(vi(this.routers,"provide").map(async n=>{await n.provide(e,t)}))}async cancelReprovide(e,t={}){await Promise.all(vi(this.routers,"cancelReprovide").map(async n=>{await n.cancelReprovide(e,t)}))}async put(e,t,n){await Promise.all(vi(this.routers,"put").map(async o=>{await o.put(e,t,n)}))}async get(e,t){return Promise.any(vi(this.routers,"get").map(async n=>n.get(e,t)))}async findPeer(e,t){if(this.routers.length===0)throw new No("No peer routers available");let n=this,o=Kt(...vi(this.routers,"findPeer").map(i=>async function*(){try{yield await i.findPeer(e,t)}catch(s){n.log.error(s)}}()));for await(let i of o)if(i!=null)return i;throw new Be("Could not find peer in routing")}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new No("No peer routers available");for await(let n of Kt(...vi(this.routers,"getClosestPeers").map(o=>o.getClosestPeers(e,t))))n!=null&&(yield n)}};function vi(r,e){return r.filter(t=>t[e]!=null)}var Bo={},Ns=r=>{r.addEventListener("message",e=>{Ns.dispatchEvent("message",r,e)}),r.port!=null&&r.port.addEventListener("message",e=>{Ns.dispatchEvent("message",r,e)})};Ns.addEventListener=(r,e)=>{Bo[r]==null&&(Bo[r]=[]),Bo[r].push(e)};Ns.removeEventListener=(r,e)=>{Bo[r]!=null&&(Bo[r]=Bo[r].filter(t=>t===e))};Ns.dispatchEvent=function(r,e,t){Bo[r]!=null&&Bo[r].forEach(n=>n(e,t))};var yp=Ns;var wp="lock:worker:request-read",bp="lock:worker:release-read",xp="lock:master:grant-read",vp="lock:worker:request-write",Ep="lock:worker:release-write",Sp="lock:master:grant-write";var E5=(r=21)=>Math.random().toString().substring(2);var S5=(r,e,t,n,o)=>(i,s)=>{if(s.data.type!==t)return;let a={type:s.data.type,name:s.data.name,identifier:s.data.identifier};r.dispatchEvent(new MessageEvent(e,{data:{name:a.name,handler:async()=>{i.postMessage({type:o,name:a.name,identifier:a.identifier}),await new Promise(c=>{let l=u=>{if(u?.data==null)return;let d={type:u.data.type,name:u.data.name,identifier:u.data.identifier};d.type===n&&d.identifier===a.identifier&&(i.removeEventListener("message",l),c())};i.addEventListener("message",l)})}}}))},A5=(r,e,t,n)=>async()=>{let o=E5();return globalThis.postMessage({type:e,identifier:o,name:r}),new Promise(i=>{let s=a=>{if(a?.data==null)return;let c={type:a.data.type,identifier:a.data.identifier};c.type===t&&c.identifier===o&&(globalThis.removeEventListener("message",s),i(()=>{globalThis.postMessage({type:n,identifier:o,name:r})}))};globalThis.addEventListener("message",s)})},jA={singleProcess:!1},I5=r=>{if(r=Object.assign({},jA,r),!!globalThis.document||r.singleProcess){let t=new EventTarget;return yp.addEventListener("message",S5(t,"requestReadLock",wp,bp,xp)),yp.addEventListener("message",S5(t,"requestWriteLock",vp,Ep,Sp)),t}return{isWorker:!0,readLock:t=>A5(t,wp,xp,bp),writeLock:t=>A5(t,vp,Sp,Ep)}};var Ei={},Oo;async function Ap(r,e){let t,n=new Promise(o=>{t=o});return r.add(async()=>Zr((async()=>{await new Promise(o=>{t(()=>{o()})})})(),{milliseconds:e.timeout})),n}var ZA=(r,e)=>{if(Oo.isWorker===!0)return{readLock:Oo.readLock(r,e),writeLock:Oo.writeLock(r,e)};let t=new Tn({concurrency:1}),n;return{async readLock(){if(n!=null)return Ap(n,e);n=new Tn({concurrency:e.concurrency,autoStart:!1});let o=n,i=Ap(n,e);return t.add(async()=>{o.start(),await o.onIdle().then(()=>{n===o&&(n=null)})}),i},async writeLock(){return n=null,Ap(t,e)}}},JA={name:"lock",concurrency:1/0,timeout:846e5,singleProcess:!1};function Si(r){let e=Object.assign({},JA,r);return Oo==null&&(Oo=I5(e),Oo.isWorker!==!0&&(Oo.addEventListener("requestReadLock",t=>{Ei[t.data.name]!=null&&Ei[t.data.name].readLock().then(async n=>t.data.handler().finally(()=>{n()}))}),Oo.addEventListener("requestWriteLock",async t=>{Ei[t.data.name]!=null&&Ei[t.data.name].writeLock().then(async n=>t.data.handler().finally(()=>{n()}))}))),Ei[e.name]==null&&(Ei[e.name]=ZA(e.name,e)),Ei[e.name]}var Cd=class{lock;child;pins;started;constructor(e,t,n={}){this.child=e,this.pins=t,this.lock=Si({singleProcess:n.holdGcLock}),this.started=!1}isStarted(){return this.started}async start(){await gt(this.child),this.started=!0}async stop(){await kt(this.child),this.started=!1}unwrap(){return this.child}async put(e,t,n={}){n?.signal?.throwIfAborted();let o=await this.lock.readLock();try{return await this.child.put(e,t,n)}finally{o()}}async*putMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{yield*this.child.putMany(e,t)}finally{n()}}async get(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{return await this.child.get(e,t)}finally{n()}}async*getMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{yield*this.child.getMany(e,t)}finally{n()}}async delete(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.writeLock();try{if(await this.pins.isPinned(e))throw new Error("CID was pinned");await this.child.delete(e,t)}finally{n()}}async*deleteMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.writeLock();try{let o=this;yield*this.child.deleteMany(async function*(){for await(let i of e){if(await o.pins.isPinned(i))throw new Error("CID was pinned");yield i}}(),t)}finally{n()}}async has(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{return await this.child.has(e,t)}finally{n()}}async*getAll(e={}){e?.signal?.throwIfAborted();let t=await this.lock.readLock();try{yield*this.child.getAll(e)}finally{t()}}createSession(e,t){return t?.signal?.throwIfAborted(),this.child.createSession(e,t)}};var Ip=new De("/version"),T5=1;async function _5(r){if(!await r.has(Ip)){await r.put(Ip,N(`${T5}`));return}let e=await r.get(Ip),t=U(e);if(parseInt(t,10)!==T5)throw new Error("Unknown datastore version, a datastore migration may be required")}var Cp={};Qe(Cp,{code:()=>_p,decode:()=>cI,decodeOptions:()=>iI,encode:()=>aI,encodeOptions:()=>nI,name:()=>sI,toByteView:()=>k5});var C5=42;function k5(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function eI(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=X.asCID(r);if(!e)return null;let t=new Uint8Array(e.bytes.byteLength+1);return t.set(e.bytes,1),[new M(b.tag,C5),new M(b.bytes,t)]}function tI(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function rI(r){if(Number.isNaN(r))throw new Error("`NaN` is not supported by the IPLD Data Model and cannot be encoded");if(r===1/0||r===-1/0)throw new Error("`Infinity` and `-Infinity` is not supported by the IPLD Data Model and cannot be encoded");return null}var Tp={float64:!0,typeEncoders:{Object:eI,undefined:tI,number:rI}},nI={...Tp,typeEncoders:{...Tp.typeEncoders}};function oI(r){if(r[0]!==0)throw new Error("Invalid CID for CBOR tag 42; expected leading 0x00");return X.decode(r.subarray(1))}var kd={allowIndefinite:!1,coerceUndefinedToNull:!0,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};kd.tags[C5]=oI;var iI={...kd,tags:kd.tags.slice()},sI="dag-cbor",_p=113,aI=r=>Lo(r,Tp),cI=r=>xr(k5(r),kd);var Bp={};Qe(Bp,{code:()=>Np,decode:()=>R5,encode:()=>P5,format:()=>bI,name:()=>wI,parse:()=>vI,stringify:()=>bI});var kp=class extends Array{constructor(){super(),this.inRecursive=[]}prefix(e){let t=this.inRecursive[this.inRecursive.length-1];t&&(t.type===b.array&&(t.elements++,t.elements!==1&&e.push([44])),t.type===b.map&&(t.elements++,t.elements!==1&&(t.elements%2===1?e.push([44]):e.push([58]))))}[b.uint.major](e,t){this.prefix(e);let n=String(t.value),o=[];for(let i=0;i<n.length;i++)o[i]=n.charCodeAt(i);e.push(o)}[b.negint.major](e,t){this[b.uint.major](e,t)}[b.bytes.major](e,t){throw new Error(`${Xn} unsupported type: Uint8Array`)}[b.string.major](e,t){this.prefix(e);let n=dd(JSON.stringify(t.value));e.push(n.length>32?fc(n):n)}[b.array.major](e,t){this.prefix(e),this.inRecursive.push({type:b.array,elements:0}),e.push([91])}[b.map.major](e,t){this.prefix(e),this.inRecursive.push({type:b.map,elements:0}),e.push([123])}[b.tag.major](e,t){}[b.float.major](e,t){if(t.type.name==="break"){let s=this.inRecursive.pop();if(s){if(s.type===b.array)e.push([93]);else if(s.type===b.map)e.push([125]);else throw new Error("Unexpected recursive type; this should not happen!");return}throw new Error("Unexpected break; this should not happen!")}if(t.value===void 0)throw new Error(`${Xn} unsupported type: undefined`);if(this.prefix(e),t.type.name==="true"){e.push([116,114,117,101]);return}else if(t.type.name==="false"){e.push([102,97,108,115,101]);return}else if(t.type.name==="null"){e.push([110,117,108,108]);return}let n=String(t.value),o=[],i=!1;for(let s=0;s<n.length;s++)o[s]=n.charCodeAt(s),!i&&(o[s]===46||o[s]===101||o[s]===69)&&(i=!0);i||(o.push(46),o.push(48)),e.push(o)}};function lI(r,e){if(Array.isArray(r[0])||Array.isArray(e[0]))throw new Error(`${Xn} complex map keys are not supported`);let t=r[0],n=e[0];if(t.type!==b.string||n.type!==b.string)throw new Error(`${Xn} non-string map keys are not supported`);if(t<n)return-1;if(t>n)return 1;throw new Error(`${Xn} unexpected duplicate map keys, this is not supported`)}var uI={addBreakTokens:!0,mapSorter:lI};function Pp(r,e){return e=Object.assign({},uI,e),cp(r,new kp,e)}var Bs=class{constructor(e,t={}){this._pos=0,this.data=e,this.options=t,this.modeStack=["value"],this.lastToken=""}pos(){return this._pos}done(){return this._pos>=this.data.length}ch(){return this.data[this._pos]}currentMode(){return this.modeStack[this.modeStack.length-1]}skipWhitespace(){let e=this.ch();for(;e===32||e===9||e===13||e===10;)e=this.data[++this._pos]}expect(e){if(this.data.length-this._pos<e.length)throw new Error(`${j} unexpected end of input at position ${this._pos}`);for(let t=0;t<e.length;t++)if(this.data[this._pos++]!==e[t])throw new Error(`${j} unexpected token at position ${this._pos}, expected to find '${String.fromCharCode(...e)}'`)}parseNumber(){let e=this._pos,t=!1,n=!1,o=a=>{for(;!this.done();){let c=this.ch();if(a.includes(c))this._pos++;else break}};if(this.ch()===45&&(t=!0,this._pos++),this.ch()===48)if(this._pos++,this.ch()===46)this._pos++,n=!0;else return new M(b.uint,0,this._pos-e);if(o([48,49,50,51,52,53,54,55,56,57]),t&&this._pos===e+1)throw new Error(`${j} unexpected token at position ${this._pos}`);if(!this.done()&&this.ch()===46){if(n)throw new Error(`${j} unexpected token at position ${this._pos}`);n=!0,this._pos++,o([48,49,50,51,52,53,54,55,56,57])}!this.done()&&(this.ch()===101||this.ch()===69)&&(n=!0,this._pos++,!this.done()&&(this.ch()===43||this.ch()===45)&&this._pos++,o([48,49,50,51,52,53,54,55,56,57]));let i=String.fromCharCode.apply(null,this.data.subarray(e,this._pos)),s=parseFloat(i);return n?new M(b.float,s,this._pos-e):this.options.allowBigInt!==!0||Number.isSafeInteger(s)?new M(s>=0?b.uint:b.negint,s,this._pos-e):new M(s>=0?b.uint:b.negint,BigInt(i),this._pos-e)}parseString(){if(this.ch()!==34)throw new Error(`${j} unexpected character at position ${this._pos}; this shouldn't happen`);this._pos++;for(let i=this._pos,s=0;i<this.data.length&&s<65536;i++,s++){let a=this.data[i];if(a===92||a<32||a>=128)break;if(a===34){let c=String.fromCharCode.apply(null,this.data.subarray(this._pos,i));return this._pos=i+1,new M(b.string,c,s)}}let e=this._pos,t=[],n=()=>{if(this._pos+4>=this.data.length)throw new Error(`${j} unexpected end of unicode escape sequence at position ${this._pos}`);let i=0;for(let s=0;s<4;s++){let a=this.ch();if(a>=48&&a<=57)a-=48;else if(a>=97&&a<=102)a=a-97+10;else if(a>=65&&a<=70)a=a-65+10;else throw new Error(`${j} unexpected unicode escape character at position ${this._pos}`);i=i*16+a,this._pos++}return i},o=()=>{let i=this.ch(),s=null,a=i>239?4:i>223?3:i>191?2:1;if(this._pos+a>this.data.length)throw new Error(`${j} unexpected unicode sequence at position ${this._pos}`);let c,l,u,d;switch(a){case 1:i<128&&(s=i);break;case 2:c=this.data[this._pos+1],(c&192)===128&&(d=(i&31)<<6|c&63,d>127&&(s=d));break;case 3:c=this.data[this._pos+1],l=this.data[this._pos+2],(c&192)===128&&(l&192)===128&&(d=(i&15)<<12|(c&63)<<6|l&63,d>2047&&(d<55296||d>57343)&&(s=d));break;case 4:c=this.data[this._pos+1],l=this.data[this._pos+2],u=this.data[this._pos+3],(c&192)===128&&(l&192)===128&&(u&192)===128&&(d=(i&15)<<18|(c&63)<<12|(l&63)<<6|u&63,d>65535&&d<1114112&&(s=d))}s===null?(s=65533,a=1):s>65535&&(s-=65536,t.push(s>>>10&1023|55296),s=56320|s&1023),t.push(s),this._pos+=a};for(;!this.done();){let i=this.ch(),s;switch(i){case 92:if(this._pos++,this.done())throw new Error(`${j} unexpected string termination at position ${this._pos}`);switch(s=this.ch(),this._pos++,s){case 34:case 39:case 92:case 47:t.push(s);break;case 98:t.push(8);break;case 116:t.push(9);break;case 110:t.push(10);break;case 102:t.push(12);break;case 114:t.push(13);break;case 117:t.push(n());break;default:throw new Error(`${j} unexpected string escape character at position ${this._pos}`)}break;case 34:return this._pos++,new M(b.string,rp(t),this._pos-e);default:if(i<32)throw new Error(`${j} invalid control character at position ${this._pos}`);i<128?(t.push(i),this._pos++):o()}}throw new Error(`${j} unexpected end of string at position ${this._pos}`)}parseValue(){switch(this.ch()){case 123:return this.modeStack.push("obj-start"),this._pos++,new M(b.map,1/0,1);case 91:return this.modeStack.push("array-start"),this._pos++,new M(b.array,1/0,1);case 34:return this.parseString();case 110:return this.expect([110,117,108,108]),new M(b.null,null,4);case 102:return this.expect([102,97,108,115,101]),new M(b.false,!1,5);case 116:return this.expect([116,114,117,101]),new M(b.true,!0,4);case 45:case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return this.parseNumber();default:throw new Error(`${j} unexpected character at position ${this._pos}`)}}next(){switch(this.skipWhitespace(),this.currentMode()){case"value":return this.modeStack.pop(),this.parseValue();case"array-value":{if(this.modeStack.pop(),this.ch()===93)return this._pos++,this.skipWhitespace(),new M(b.break,void 0,1);if(this.ch()!==44)throw new Error(`${j} unexpected character at position ${this._pos}, was expecting array delimiter but found '${String.fromCharCode(this.ch())}'`);return this._pos++,this.modeStack.push("array-value"),this.skipWhitespace(),this.parseValue()}case"array-start":return this.modeStack.pop(),this.ch()===93?(this._pos++,this.skipWhitespace(),new M(b.break,void 0,1)):(this.modeStack.push("array-value"),this.skipWhitespace(),this.parseValue());case"obj-key":if(this.ch()===125)return this.modeStack.pop(),this._pos++,this.skipWhitespace(),new M(b.break,void 0,1);if(this.ch()!==44)throw new Error(`${j} unexpected character at position ${this._pos}, was expecting object delimiter but found '${String.fromCharCode(this.ch())}'`);this._pos++,this.skipWhitespace();case"obj-start":{if(this.modeStack.pop(),this.ch()===125)return this._pos++,this.skipWhitespace(),new M(b.break,void 0,1);let e=this.parseString();if(this.skipWhitespace(),this.ch()!==58)throw new Error(`${j} unexpected character at position ${this._pos}, was expecting key/value delimiter ':' but found '${String.fromCharCode(this.ch())}'`);return this._pos++,this.modeStack.push("obj-value"),e}case"obj-value":return this.modeStack.pop(),this.modeStack.push("obj-key"),this.skipWhitespace(),this.parseValue();default:throw new Error(`${j} unexpected parse state at position ${this._pos}; this shouldn't happen`)}}};function Rp(r,e){return e=Object.assign({tokenizer:new Bs(r,e)},e),xr(r,e)}function fI(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function hI(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=X.asCID(r);if(!e)return null;let t=e.toString();return[new M(b.map,1/0,1),new M(b.string,"/",1),new M(b.string,t,t.length),new M(b.break,void 0,1)]}function Pd(r){let e=nt.encode(r).slice(1);return[new M(b.map,1/0,1),new M(b.string,"/",1),new M(b.map,1/0,1),new M(b.string,"bytes",5),new M(b.string,e,e.length),new M(b.break,void 0,1),new M(b.break,void 0,1)]}function tn(r){return Pd(new Uint8Array(r.buffer,r.byteOffset,r.byteLength))}function pI(r){return Pd(new Uint8Array(r))}function mI(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function gI(r){if(Number.isNaN(r))throw new Error("`NaN` is not supported by the IPLD Data Model and cannot be encoded");if(r===1/0||r===-1/0)throw new Error("`Infinity` and `-Infinity` is not supported by the IPLD Data Model and cannot be encoded");return null}var yI={typeEncoders:{Object:hI,Buffer:Pd,Uint8Array:Pd,Int8Array:tn,Uint16Array:tn,Int16Array:tn,Uint32Array:tn,Int32Array:tn,Float32Array:tn,Float64Array:tn,Uint8ClampedArray:tn,BigInt64Array:tn,BigUint64Array:tn,DataView:tn,ArrayBuffer:pI,undefined:mI,number:gI}},Dp=class extends Bs{constructor(e,t){super(e,t),this.tokenBuffer=[]}done(){return this.tokenBuffer.length===0&&super.done()}_next(){return this.tokenBuffer.length>0?this.tokenBuffer.pop():super.next()}next(){let e=this._next();if(e.type===b.map){let t=this._next();if(t.type===b.string&&t.value==="/"){let n=this._next();if(n.type===b.string){if(this._next().type!==b.break)throw new Error("Invalid encoded CID form");return this.tokenBuffer.push(n),new M(b.tag,42,0)}if(n.type===b.map){let o=this._next();if(o.type===b.string&&o.value==="bytes"){let i=this._next();if(i.type===b.string){for(let a=0;a<2;a++)if(this._next().type!==b.break)throw new Error("Invalid encoded Bytes form");let s=nt.decode(`m${i.value}`);return new M(b.bytes,s,i.value.length)}this.tokenBuffer.push(i)}this.tokenBuffer.push(o)}this.tokenBuffer.push(n)}this.tokenBuffer.push(t)}return e}},Lp={allowIndefinite:!1,allowUndefined:!1,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};Lp.tags[42]=X.parse;var wI="dag-json",Np=297,P5=r=>Pp(r,yI),R5=r=>{let e=fI(r),t=Object.assign(Lp,{tokenizer:new Dp(e,Lp)});return Rp(e,t)},bI=r=>xI.decode(P5(r));var xI=new TextDecoder,vI=r=>R5(EI.encode(r)),EI=new TextEncoder;var $p={};Qe($p,{code:()=>Vp,createLink:()=>$5,createNode:()=>V5,decode:()=>BI,encode:()=>NI,name:()=>LI,prepare:()=>Up,validate:()=>Fp});var SI=new TextDecoder;function Op(r,e){let t=0;for(let n=0;;n+=7){if(n>=64)throw new Error("protobuf: varint overflow");if(e>=r.length)throw new Error("protobuf: unexpected end of data");let o=r[e++];if(t+=n<28?(o&127)<<n:(o&127)*2**n,o<128)break}return[t,e]}function Rd(r,e){let t;[t,e]=Op(r,e);let n=e+t;if(t<0||n<0)throw new Error("protobuf: invalid length");if(n>r.length)throw new Error("protobuf: unexpected end of data");return[r.subarray(e,n),n]}function D5(r,e){let t;return[t,e]=Op(r,e),[t&7,t>>3,e]}function AI(r){let e={},t=r.length,n=0;for(;n<t;){let o,i;if([o,i,n]=D5(r,n),i===1){if(e.Hash)throw new Error("protobuf: (PBLink) duplicate Hash section");if(o!==2)throw new Error(`protobuf: (PBLink) wrong wireType (${o}) for Hash`);if(e.Name!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Name before Hash");if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Tsize before Hash");[e.Hash,n]=Rd(r,n)}else if(i===2){if(e.Name!==void 0)throw new Error("protobuf: (PBLink) duplicate Name section");if(o!==2)throw new Error(`protobuf: (PBLink) wrong wireType (${o}) for Name`);if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Tsize before Name");let s;[s,n]=Rd(r,n),e.Name=SI.decode(s)}else if(i===3){if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) duplicate Tsize section");if(o!==0)throw new Error(`protobuf: (PBLink) wrong wireType (${o}) for Tsize`);[e.Tsize,n]=Op(r,n)}else throw new Error(`protobuf: (PBLink) invalid fieldNumber, expected 1, 2 or 3, got ${i}`)}if(n>t)throw new Error("protobuf: (PBLink) unexpected end of data");return e}function L5(r){let e=r.length,t=0,n,o=!1,i;for(;t<e;){let a,c;if([a,c,t]=D5(r,t),a!==2)throw new Error(`protobuf: (PBNode) invalid wireType, expected 2, got ${a}`);if(c===1){if(i)throw new Error("protobuf: (PBNode) duplicate Data section");[i,t]=Rd(r,t),n&&(o=!0)}else if(c===2){if(o)throw new Error("protobuf: (PBNode) duplicate Links section");n||(n=[]);let l;[l,t]=Rd(r,t),n.push(AI(l))}else throw new Error(`protobuf: (PBNode) invalid fieldNumber, expected 1 or 2, got ${c}`)}if(t>e)throw new Error("protobuf: (PBNode) unexpected end of data");let s={};return i&&(s.Data=i),s.Links=n||[],s}var B5=new TextEncoder,N5=2**32,II=2**31;function TI(r,e){let t=e.length;if(typeof r.Tsize=="number"){if(r.Tsize<0)throw new Error("Tsize cannot be negative");if(!Number.isSafeInteger(r.Tsize))throw new Error("Tsize too large for encoding");t=vc(e,t,r.Tsize)-1,e[t]=24}if(typeof r.Name=="string"){let n=B5.encode(r.Name);t-=n.length,e.set(n,t),t=vc(e,t,n.length)-1,e[t]=18}return r.Hash&&(t-=r.Hash.length,e.set(r.Hash,t),t=vc(e,t,r.Hash.length)-1,e[t]=10),e.length-t}function O5(r){let e=CI(r),t=new Uint8Array(e),n=e;if(r.Data&&(n-=r.Data.length,t.set(r.Data,n),n=vc(t,n,r.Data.length)-1,t[n]=10),r.Links)for(let o=r.Links.length-1;o>=0;o--){let i=TI(r.Links[o],t.subarray(0,n));n-=i,n=vc(t,n,i)-1,t[n]=18}return t}function _I(r){let e=0;if(r.Hash){let t=r.Hash.length;e+=1+t+Os(t)}if(typeof r.Name=="string"){let t=B5.encode(r.Name).length;e+=1+t+Os(t)}return typeof r.Tsize=="number"&&(e+=1+Os(r.Tsize)),e}function CI(r){let e=0;if(r.Data){let t=r.Data.length;e+=1+t+Os(t)}if(r.Links)for(let t of r.Links){let n=_I(t);e+=1+n+Os(n)}return e}function vc(r,e,t){e-=Os(t);let n=e;for(;t>=II;)r[e++]=t&127|128,t/=128;for(;t>=128;)r[e++]=t&127|128,t>>>=7;return r[e]=t,n}function Os(r){return r%2===0&&r++,Math.floor((kI(r)+6)/7)}function kI(r){let e=0;return r>=N5&&(r=Math.floor(r/N5),e=32),r>=65536&&(r>>>=16,e+=16),r>=256&&(r>>>=8,e+=8),e+PI[r]}var PI=[0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8];var RI=["Data","Links"],DI=["Hash","Name","Tsize"],Mp=new TextEncoder;function U5(r,e){if(r===e)return 0;let t=r.Name?Mp.encode(r.Name):[],n=e.Name?Mp.encode(e.Name):[],o=t.length,i=n.length;for(let s=0,a=Math.min(o,i);s<a;++s)if(t[s]!==n[s]){o=t[s],i=n[s];break}return o<i?-1:i<o?1:0}function M5(r,e){return!Object.keys(r).some(t=>!e.includes(t))}function F5(r){if(typeof r.asCID=="object"){let t=X.asCID(r);if(!t)throw new TypeError("Invalid DAG-PB form");return{Hash:t}}if(typeof r!="object"||Array.isArray(r))throw new TypeError("Invalid DAG-PB form");let e={};if(r.Hash){let t=X.asCID(r.Hash);try{t||(typeof r.Hash=="string"?t=X.parse(r.Hash):r.Hash instanceof Uint8Array&&(t=X.decode(r.Hash)))}catch(n){throw new TypeError(`Invalid DAG-PB form: ${n.message}`)}t&&(e.Hash=t)}if(!e.Hash)throw new TypeError("Invalid DAG-PB form");return typeof r.Name=="string"&&(e.Name=r.Name),typeof r.Tsize=="number"&&(e.Tsize=r.Tsize),e}function Up(r){if((r instanceof Uint8Array||typeof r=="string")&&(r={Data:r}),typeof r!="object"||Array.isArray(r))throw new TypeError("Invalid DAG-PB form");let e={};if(r.Data!==void 0)if(typeof r.Data=="string")e.Data=Mp.encode(r.Data);else if(r.Data instanceof Uint8Array)e.Data=r.Data;else throw new TypeError("Invalid DAG-PB form");if(r.Links!==void 0)if(Array.isArray(r.Links))e.Links=r.Links.map(F5),e.Links.sort(U5);else throw new TypeError("Invalid DAG-PB form");else e.Links=[];return e}function Fp(r){if(!r||typeof r!="object"||Array.isArray(r)||r instanceof Uint8Array||r["/"]&&r["/"]===r.bytes)throw new TypeError("Invalid DAG-PB form");if(!M5(r,RI))throw new TypeError("Invalid DAG-PB form (extraneous properties)");if(r.Data!==void 0&&!(r.Data instanceof Uint8Array))throw new TypeError("Invalid DAG-PB form (Data must be bytes)");if(!Array.isArray(r.Links))throw new TypeError("Invalid DAG-PB form (Links must be a list)");for(let e=0;e<r.Links.length;e++){let t=r.Links[e];if(!t||typeof t!="object"||Array.isArray(t)||t instanceof Uint8Array||t["/"]&&t["/"]===t.bytes)throw new TypeError("Invalid DAG-PB form (bad link)");if(!M5(t,DI))throw new TypeError("Invalid DAG-PB form (extraneous properties on link)");if(t.Hash===void 0)throw new TypeError("Invalid DAG-PB form (link must have a Hash)");if(t.Hash==null||!t.Hash["/"]||t.Hash["/"]!==t.Hash.bytes)throw new TypeError("Invalid DAG-PB form (link Hash must be a CID)");if(t.Name!==void 0&&typeof t.Name!="string")throw new TypeError("Invalid DAG-PB form (link Name must be a string)");if(t.Tsize!==void 0){if(typeof t.Tsize!="number"||t.Tsize%1!==0)throw new TypeError("Invalid DAG-PB form (link Tsize must be an integer)");if(t.Tsize<0)throw new TypeError("Invalid DAG-PB form (link Tsize cannot be negative)")}if(e>0&&U5(t,r.Links[e-1])===-1)throw new TypeError("Invalid DAG-PB form (links must be sorted by Name bytes)")}}function V5(r,e=[]){return Up({Data:r,Links:e})}function $5(r,e,t){return F5({Hash:t,Name:r,Tsize:e})}function K5(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}var LI="dag-pb",Vp=112;function NI(r){Fp(r);let e={};return r.Links&&(e.Links=r.Links.map(t=>{let n={};return t.Hash&&(n.Hash=t.Hash.bytes),t.Name!==void 0&&(n.Name=t.Name),t.Tsize!==void 0&&(n.Tsize=t.Tsize),n})),r.Data&&(e.Data=r.Data),O5(e)}function BI(r){let e=K5(r),t=L5(e),n={};return t.Data&&(n.Data=t.Data),t.Links&&(n.Links=t.Links.map(o=>{let i={};try{i.Hash=X.decode(o.Hash)}catch{}if(!i.Hash)throw new Error("Invalid Hash field found in link, expected CID");return o.Name!==void 0&&(i.Name=o.Name),o.Tsize!==void 0&&(i.Tsize=o.Tsize),i})),n}function Ms(r){return r?.then!=null}function H5(r=[],e){let t={[Vp]:$p,[ri]:as,[_p]:Cp,[Np]:Bp,[M0]:Nl};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let i=e(n);Ms(i)?o=await i:o=i,t[o.code]=o}if(o!=null)return o;throw new xc(`Could not load codec for ${n}`)}}function q5(r=[],e){let t={[ct.code]:ct,[Ol.code]:Ol,[Jt.code]:Jt};return r.forEach(n=>{t[n.code]=n}),async n=>{let o=t[n];if(o==null&&e!=null){let i=e(n);Ms(i)?o=await i:o=i,t[o.code]=o}if(o!=null)return o;throw new bc(`No hasher configured for multihash code 0x${n.toString(16)}, please configure one. You can look up which hash this is at https://github.com/multiformats/multicodec/blob/master/table.csv`)}}var Rr=class r extends Error{static name="NotFoundError";static code="ERR_NOT_FOUND";name=r.name;code=r.code;constructor(e="Not Found"){super(e)}};var Jn=class{has(e,t){return Promise.reject(new Error(".has is not implemented"))}put(e,t,n){return Promise.reject(new Error(".put is not implemented"))}async*putMany(e,t){for await(let{cid:n,block:o}of e)await this.put(n,o,t),yield n}get(e,t){return Promise.reject(new Error(".get is not implemented"))}async*getMany(e,t){for await(let n of e)yield{cid:n,block:await this.get(n,t)}}delete(e,t){return Promise.reject(new Error(".delete is not implemented"))}async*deleteMany(e,t){for await(let n of e)await this.delete(n,t),yield n}async*getAll(e){throw new Error(".getAll is not implemented")}};var Dd=0,Ld=class extends Jn{child;constructor(e){super(),this.child=e}put(e,t){return e.multihash.code===Dd||this.child==null?e:this.child.put(e,t)}get(e){if(e.multihash.code===Dd)return e.multihash.digest;if(this.child==null)throw new Rr;return this.child.get(e)}has(e){return e.multihash.code===Dd?!0:this.child==null?!1:this.child.has(e)}delete(e){if(e.code!==Dd&&this.child!=null)return this.child.delete(e)}getAll(e){return this.child!=null?this.child.getAll(e):[]}};function OI(r){return r[Symbol.asyncIterator]!=null}function MI(r,e){let t=0;if(OI(r))return async function*(){for await(let c of r)await e(c,t++)&&(yield c)}();let n=is(r),{value:o,done:i}=n.next();if(i===!0)return function*(){}();let s=e(o,t++);if(typeof s.then=="function")return async function*(){await s&&(yield o);for await(let c of n)await e(c,t++)&&(yield c)}();let a=e;return function*(){s===!0&&(yield o);for(let c of n)a(c,t++)&&(yield c)}()}var rn=MI;function UI(r){return r[Symbol.asyncIterator]!=null}function z5(r){return r?.then!=null}function FI(r,e){let t=0;if(UI(r))return async function*(){for await(let c of r){let l=e(c,t++);z5(l)&&await l,yield c}}();let n=is(r),{value:o,done:i}=n.next();if(i===!0)return function*(){}();if(typeof e(o,t++)?.then=="function")return async function*(){yield o;for await(let c of n){let l=e(c,t++);z5(l)&&await l,yield c}}();let a=e;return function*(){yield o;for(let c of n)a(c,t++),yield c}()}var Ai=FI;var Nd=class{child;getHasher;log;logger;components;constructor(e){this.log=e.logger.forComponent("helia:networked-storage"),this.logger=e.logger,this.components=e,this.child=new Ld(e.blockstore),this.getHasher=e.getHasher}async put(e,t,n={}){return await this.child.has(e,n)?(n.onProgress?.(new W("blocks:put:duplicate",e)),e):(n.onProgress?.(new W("blocks:put:providers:notify",e)),await Promise.all(this.components.blockBrokers.map(async o=>o.announce?.(e,t,n))),n.onProgress?.(new W("blocks:put:blockstore:put",e)),this.child.put(e,t,n))}async*putMany(e,t={}){let n=rn(e,async({cid:i})=>{let s=await this.child.has(i,t);return s&&t.onProgress?.(new W("blocks:put-many:duplicate",i)),!s}),o=Ai(n,async({cid:i,block:s})=>{t.onProgress?.(new W("blocks:put-many:providers:notify",i)),await Promise.all(this.components.blockBrokers.map(async a=>a.announce?.(i,s,t)))});t.onProgress?.(new W("blocks:put-many:blockstore:put-many")),yield*this.child.putMany(o,t)}async get(e,t={}){if(t.offline!==!0&&!await this.child.has(e,t)){let n=await this.getHasher(e.multihash.code);t.onProgress?.(new W("blocks:get:providers:get",e));let o=await W5(e,this.components.blockBrokers,n,{...t,log:this.log});return t.onProgress?.(new W("blocks:get:blockstore:put",e)),await this.child.put(e,o,t),t.onProgress?.(new W("blocks:get:providers:notify",e)),await Promise.all(this.components.blockBrokers.map(async i=>i.announce?.(e,o,t))),o}return t.onProgress?.(new W("blocks:get:blockstore:get",e)),this.child.get(e,t)}async*getMany(e,t={}){t.onProgress?.(new W("blocks:get-many:blockstore:get-many")),yield*this.child.getMany(Ai(e,async n=>{if(t.offline!==!0&&!await this.child.has(n,t)){let o=await this.getHasher(n.multihash.code);t.onProgress?.(new W("blocks:get-many:providers:get",n));let i=await W5(n,this.components.blockBrokers,o,{...t,log:this.log});t.onProgress?.(new W("blocks:get-many:blockstore:put",n)),await this.child.put(n,i,t),t.onProgress?.(new W("blocks:get-many:providers:notify",n)),await Promise.all(this.components.blockBrokers.map(async s=>s.announce?.(n,i,t)))}}))}async delete(e,t={}){t.onProgress?.(new W("blocks:delete:blockstore:delete",e)),await this.child.delete(e,t)}async*deleteMany(e,t={}){t.onProgress?.(new W("blocks:delete-many:blockstore:delete-many")),yield*this.child.deleteMany(async function*(){for await(let n of e)yield n}(),t)}async has(e,t={}){return this.child.has(e,t)}async*getAll(e={}){e.onProgress?.(new W("blocks:get-all:blockstore:get-many")),yield*this.child.getAll(e)}},Bd=class extends Nd{started;constructor(e){super(e),this.started=!1}isStarted(){return this.started}async start(){await gt(this.child,...this.components.blockBrokers),this.started=!0}async stop(){await kt(this.child,...this.components.blockBrokers),this.started=!1}unwrap(){return this.child}createSession(e,t){let n=this.components.blockBrokers.map(o=>o.createSession==null?o:o.createSession(t));return new Kp({blockstore:this.child,blockBrokers:n,getHasher:this.getHasher,logger:this.logger},{root:e})}},Kp=class extends Nd{closeController;constructor(e,t){super(e),this.closeController=new AbortController,this.closeController.signal,this.log=e.logger.forComponent(`helia:session-storage:${t.root}`)}close(){this.closeController.abort()}async put(e,t,n={}){let o=ce([this.closeController.signal,n.signal]);try{return await super.put(e,t,{...n,signal:o})}finally{o.clear()}}async*putMany(e,t={}){let n=ce([this.closeController.signal,t.signal]);try{yield*super.putMany(e,{...t,signal:n})}finally{n.clear()}}async get(e,t={}){let n=ce([this.closeController.signal,t.signal]);try{return await super.get(e,{...t,signal:n})}finally{n.clear()}}async*getMany(e,t={}){let n=ce([this.closeController.signal,t.signal]);try{yield*super.getMany(e,{...t,signal:n})}finally{n.clear()}}async delete(e,t={}){let n=ce([this.closeController.signal,t.signal]);try{await super.delete(e,{...t,signal:n})}finally{n.clear()}}async*deleteMany(e,t={}){let n=ce([this.closeController.signal,t.signal]);try{yield*super.deleteMany(e,{...t,signal:n})}finally{n.clear()}}async has(e,t={}){let n=ce([this.closeController.signal,t.signal]);try{return await super.has(e,{...t,signal:n})}finally{n.clear()}}async*getAll(e={}){let t=ce([this.closeController.signal,e.signal]);try{yield*super.getAll({...e,signal:t})}finally{t.clear()}}};function VI(r){return typeof r.retrieve=="function"}var $I=(r,e)=>{if(e==null)throw new _(`No hasher configured for multihash code 0x${r.multihash.code.toString(16)}, please configure one. You can look up which hash this is at https://github.com/multiformats/multicodec/blob/master/table.csv`);return async t=>{let n,o=e.digest(t);if(Ms(o)?n=await o:n=o,!ne(n.digest,r.multihash.digest))throw new uo("Hash of downloaded block did not match multihash from passed CID")}};async function W5(r,e,t,n){let o=$I(r,t),i=new AbortController,s=ce([i.signal,n.signal]);i.signal;let a=[];for(let c of e)VI(c)&&a.push(c);try{return await Promise.any(a.map(async c=>{try{let l=!1,u=await c.retrieve(r,{...n,signal:s,validateFn:async d=>{await o(d),l=!0}});return l||await o(u),u}catch(l){throw n.log.error("could not retrieve verified block for %c",r,l),l}}))}finally{i.abort(),s.clear()}}var Ii=class extends ge{intialPeerSearchComplete;requests;name;log;logger;minProviders;maxProviders;providers;evictionFilter;constructor(e,t){super(),this.name=t.name,this.logger=e.logger,this.log=e.logger.forComponent(this.name),this.requests=new Map,this.minProviders=t.minProviders??1,this.maxProviders=t.maxProviders??5,this.providers=[],this.evictionFilter=nr(this.maxProviders)}async retrieve(e,t={}){let n=nt.encode(e.multihash.bytes),o=this.requests.get(n);if(o!=null)return this.log("join existing request for %c",e),o;let i=J();if(this.requests.set(n,i.promise),this.providers.length===0){let l=!1;this.intialPeerSearchComplete==null&&(l=!0,this.log=this.logger.forComponent(`${this.name}:${e}`),this.intialPeerSearchComplete=this.findProviders(e,this.minProviders,t)),await this.intialPeerSearchComplete,l&&this.log("found initial session peers for %c",e)}let s=!1,a=new Vt({concurrency:this.maxProviders});a.addEventListener("error",()=>{}),a.addEventListener("failure",l=>{this.log.error("error querying provider %o, evicting from session",l.detail.job.options.provider,l.detail.error),this.evict(l.detail.job.options.provider)}),a.addEventListener("success",l=>{s=!0,i.resolve(l.detail.result)}),a.addEventListener("idle",()=>{s||t.signal?.aborted===!0||Promise.resolve().then(async()=>{this.log("no session peers had block for for %c, finding new providers",e);for(let l=0;l<this.minProviders&&this.providers.length!==0;l++){let u=this.providers[Math.floor(Math.random()*this.providers.length)];this.evict(u)}await this.findProviders(e,this.minProviders,t),this.log("found new providers re-retrieving %c",e),this.requests.delete(n),i.resolve(await this.retrieve(e,t))}).catch(l=>{this.log.error("could not find new providers for %c",e,l),i.reject(l)})});let c=l=>{a.add(async()=>this.queryProvider(e,l.detail,t),{provider:l.detail}).catch(u=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c",e,u)})};this.addEventListener("provider",c),Promise.all([...this.providers].map(async l=>a.add(async()=>this.queryProvider(e,l,t),{provider:l}))).catch(l=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c",e,l)});try{return await i.promise}finally{this.removeEventListener("provider",c),a.clear(),this.requests.delete(n)}}evict(e){this.evictionFilter.add(this.toEvictionKey(e));let t=this.providers.findIndex(n=>this.equals(n,e));t!==-1&&this.providers.splice(t,1)}isEvicted(e){return this.evictionFilter.has(this.toEvictionKey(e))}hasProvider(e){return!!(this.providers.find(t=>this.equals(t,e))!=null||this.isEvicted(e))}async findProviders(e,t,n){let o=J(),i=0;return Promise.resolve().then(async()=>{this.log("finding %d-%d new provider(s) for %c",t,this.maxProviders,e);for await(let s of this.findNewProviders(e,n)){if(i===this.maxProviders||n.signal?.aborted===!0)break;if(!this.hasProvider(s)&&(this.log("found %d/%d new providers",i,this.maxProviders),this.providers.push(s),this.safeDispatchEvent("provider",{detail:s}),i++,i===t&&(this.log("session is ready"),o.resolve()),this.providers.length===this.maxProviders)){this.log("found max session peers",i);break}}if(this.log("found %d/%d new session peers",i,this.maxProviders),i<t)throw new wc(`Found ${i} of ${t} ${this.name} providers for ${e}`)}).catch(s=>{this.log.error("error searching routing for potential session peers for %c",e,s.errors??s),o.reject(s)}),o.promise}};var Od=class{blockstore;datastore;pins;logger;routing;getCodec;getHasher;dns;metrics;log;constructor(e){this.logger=e.logger??Po(),this.log=this.logger.forComponent("helia"),this.getHasher=q5(e.hashers,e.loadHasher),this.getCodec=H5(e.codecs,e.loadCodec),this.dns=e.dns??ld(),this.metrics=e.metrics;let t={blockstore:e.blockstore,datastore:e.datastore,logger:this.logger,blockBrokers:[],getHasher:this.getHasher,getCodec:this.getCodec,dns:this.dns,metrics:this.metrics,...e.components??{}};this.routing=t.routing=new _d(t,{routers:(e.routers??[]).flatMap(o=>{let i=[o];return o[pn]!=null&&i.push(o[pn]),o[mn]!=null&&i.push(o[mn]),i}),providerLookupConcurrency:e.providerLookupConcurrency});let n=new Bd(t);this.pins=new Td(e.datastore,n,this.getCodec),this.blockstore=new Cd(n,this.pins,{holdGcLock:e.holdGcLock??!0}),this.datastore=e.datastore,t.blockBrokers=e.blockBrokers.map(o=>o(t))}async start(){await _5(this.datastore),await gt(this.blockstore,this.datastore,this.routing)}async stop(){await kt(this.blockstore,this.datastore,this.routing)}async gc(e={}){let t=await this.blockstore.lock.writeLock();try{let n=this,o=this.blockstore.unwrap();this.log("gc start"),await Rt(o.deleteMany(async function*(){for await(let{cid:i}of o.getAll())try{if(await n.pins.isPinned(i,e))continue;yield i,e.onProgress?.(new W("helia:gc:deleted",i))}catch(s){n.log.error("Error during gc",s),e.onProgress?.(new W("helia:gc:error",s))}}()))}finally{t()}this.log("gc finished")}};var Hp=class extends Ii{wantList;network;constructor(e,t){super(e,{...t,name:"helia:bitswap:session"}),this.wantList=e.wantList,this.network=e.network}async queryProvider(e,t,n){this.log("sending WANT-BLOCK for %c to %p",e,t);let o=await this.wantList.wantSessionBlock(e,t,n);if(this.log("%p %s %c",t,o.has?"has":"does not have",e),o.has&&o.block!=null)return o.block;throw new Error("Provider did not have block")}async*findNewProviders(e,t={}){for await(let n of this.network.findProviders(e,t))yield n.id}toEvictionKey(e){return e.toMultihash().bytes}equals(e,t){return e.equals(t)}};function G5(r,e){return new Hp(r,e)}var Md=class{blocksReceived;duplicateBlocksReceived;dataReceived;duplicateDataReceived;constructor(e){this.blocksReceived=e.metrics?.registerMetricGroup("helia_bitswap_received_blocks"),this.duplicateBlocksReceived=e.metrics?.registerMetricGroup("helia_bitswap_duplicate_received_blocks"),this.dataReceived=e.metrics?.registerMetricGroup("helia_bitswap_data_received_bytes"),this.duplicateDataReceived=e.metrics?.registerMetricGroup("helia_bitswap_duplicate_data_received_bytes")}updateBlocksReceived(e=1,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.blocksReceived?.increment(n)}updateDuplicateBlocksReceived(e=1,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.duplicateBlocksReceived?.increment(n)}updateDataReceived(e,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.dataReceived?.increment(n)}updateDuplicateDataReceived(e,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.duplicateDataReceived?.increment(n)}};var qp=class extends Map{metric;constructor(e){super();let{name:t,metrics:n}=e;this.metric=n.registerMetric(t),this.updateComponentMetric()}set(e,t){return super.set(e,t),this.updateComponentMetric(),this}delete(e){let t=super.delete(e);return this.updateComponentMetric(),t}clear(){super.clear(),this.updateComponentMetric()}updateComponentMetric(){this.metric.update(this.size)}};function Ud(r){let{name:e,metrics:t}=r,n;return t!=null?n=new qp({name:e,metrics:t}):n=new Map,n}function KI(r){if(!(r instanceof Uint8Array))throw new Error("arg needs to be a Uint8Array");let e=[];for(;r.length>0;){let t=$t(r);e.push(t),r=r.slice(pe(t))}return e}var Q5=KI;var Fd=class extends ge{peers;wants;network;log;sendMessagesDelay;sendMessagesTimeout;hashLoader;sendingMessages;constructor(e,t={}){super(),this.peers=cc({name:"helia_bitswap_peers",metrics:e.metrics}),this.wants=Ud({name:"helia_bitswap_wantlist",metrics:e.metrics}),this.network=e.network,this.sendMessagesDelay=t.sendMessagesDelay??10,this.log=e.logger.forComponent("helia:bitswap:wantlist"),this.hashLoader=t.hashLoader,this.network.addEventListener("bitswap:message",n=>{this.receiveMessage(n.detail.peer,n.detail.message).catch(o=>{this.log.error("error receiving bitswap message from %p",n.detail.peer,o)})}),this.network.addEventListener("peer:connected",n=>{this.peerConnected(n.detail).catch(o=>{this.log.error("error processing newly connected bitswap peer %p",n.detail,o)})}),this.network.addEventListener("peer:disconnected",n=>{this.peerDisconnected(n.detail)})}async addEntry(e,t){let n=U(e.multihash.bytes,"base64"),o=this.wants.get(n);o==null&&(o={cid:e,priority:t.priority??1,wantType:t.wantType??Je.WantBlock,cancel:!1,sendDontHave:!0},this.wants.set(n,o)),o.wantType===Je.WantHave&&t.wantType===Je.WantBlock&&(o.wantType=Je.WantBlock),await this.sendMessagesDebounced();try{return t.wantType===Je.WantBlock?(await fr(this,"block",t?.signal,{filter:a=>ne(e.multihash.digest,a.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail:(await fr(this,"presence",t?.signal,{filter:s=>ne(e.multihash.digest,s.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail}finally{t.signal?.aborted===!0&&(this.log("want for %c was aborted, cancelling want",e),o.cancel=!0,await this.sendMessagesDebounced())}}async sendMessagesDebounced(){await this.sendingMessages?.promise,clearTimeout(this.sendMessagesTimeout),this.sendMessagesTimeout=setTimeout(()=>{this.sendMessages().catch(e=>{this.log("error sending messages to peers",e)})},this.sendMessagesDelay)}async sendMessages(){this.sendingMessages=J(),await Promise.all([...this.peers.entries()].map(async([e,t])=>{let n=new Set,o=new Yn;for(let[i,s]of this.wants.entries())t.has(i)||s.cancel||(n.add(i),o.addWantlistEntry(s.cid,{cid:s.cid.bytes,priority:s.priority,wantType:s.wantType,cancel:s.cancel,sendDontHave:s.sendDontHave}));if(o.wantlist.size!==0)try{await this.network.sendMessage(e,o);for(let i of n)t.add(i)}catch(i){this.log.error("error sending full wantlist to new peer",i)}})).catch(e=>{this.log.error("error sending messages",e)});for(let[e,t]of this.wants)if(t.cancel){this.wants.delete(e);for(let n of this.peers.values())n.delete(e)}this.sendingMessages.resolve()}has(e){let t=U(e.multihash.bytes,"base64");return this.wants.has(t)}async wantSessionPresence(e,t,n={}){let o=new Yn;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:Je.WantHave,priority:1}),await this.network.sendMessage(t,o),(await fr(this,"presence",n.signal,{filter:s=>t.equals(s.detail.sender)&&ne(e.multihash.digest,s.detail.cid.multihash.digest)})).detail}async wantBlock(e,t={}){return this.addEntry(e,{...t,wantType:Je.WantBlock})}async wantSessionBlock(e,t,n={}){let o=new Yn;return o.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:Je.WantBlock,priority:1}),await this.network.sendMessage(t,o),(await fr(this,"presence",n.signal,{filter:s=>t.equals(s.detail.sender)&&ne(e.multihash.digest,s.detail.cid.multihash.digest)})).detail}async receivedBlock(e,t){let n=U(e.multihash.bytes,"base64"),o=this.wants.get(n);o!=null&&(o.cancel=!0,await this.sendMessagesDebounced())}async receiveMessage(e,t){this.log("received message from %p with %d blocks",e,t.blocks.length);let n=!1;for(let o of t.blocks){if(o.prefix==null||o.data==null)continue;let i=Q5(o.prefix),s=i[0],a=i[1],c=i[2],l=c===ct.code?ct:await this.hashLoader?.getHasher(c);if(l==null){this.log.error("unknown hash algorithm",c);continue}let u=l.digest(o.data);u.then!=null&&(u=await u);let d=X.create(s===0?0:1,a,u);this.log("received block from %p for %c",e,d),this.safeDispatchEvent("block",{detail:{sender:e,cid:d,block:o.data}}),this.safeDispatchEvent("presence",{detail:{sender:e,cid:d,has:!0,block:o.data}});let f=U(d.multihash.bytes,"base64"),h=this.wants.get(f);h!=null&&(h.cancel=!0,n=!0)}for(let{cid:o,type:i}of t.blockPresences){let s=X.decode(o);this.log("received %s from %p for %c",i,e,s),this.safeDispatchEvent("presence",{detail:{sender:e,cid:s,has:i===Sr.HaveBlock}})}n&&await this.sendMessagesDebounced()}async peerConnected(e){let t=new Set,n=new Yn(!0);for(let[o,i]of this.wants.entries())i.cancel||(t.add(o),n.addWantlistEntry(i.cid,{cid:i.cid.bytes,priority:1,wantType:Je.WantBlock,cancel:!1,sendDontHave:!1}));if(n.wantlist.size===0){this.peers.set(e,t);return}try{await this.network.sendMessage(e,n),this.peers.set(e,t)}catch(o){this.log.error("error sending full wantlist to new peer %p",e,o)}}peerDisconnected(e){this.peers.delete(e)}start(){}stop(){this.peers.clear(),clearTimeout(this.sendMessagesTimeout)}};var Vd=class{log;logger;stats;network;blockstore;peerWantLists;wantList;constructor(e,t={}){this.logger=e.logger,this.log=e.logger.forComponent("helia:bitswap"),this.blockstore=e.blockstore,this.stats=new Md(e),this.network=new Hl(e,t),this.peerWantLists=new td({...e,network:this.network},t),this.wantList=new Fd({...e,network:this.network},t)}createSession(e={}){return G5({wantList:this.wantList,network:this.network,logger:this.logger},e)}async want(e,t={}){let n=new AbortController,o=ce([n.signal,t.signal]);n.signal,this.network.findAndConnect(e,{...t,signal:o}).catch(i=>{n.signal.aborted||this.log.error("error during finding and connect for cid %c",e,i)});try{return(await this.wantList.wantBlock(e,{...t,signal:o})).block}finally{n.abort(),o.clear()}}async notify(e,t,n={}){await Promise.all([this.peerWantLists.receivedBlock(e,n),this.wantList.receivedBlock(e,n)])}getWantlist(){return[...this.wantList.wants.values()].filter(e=>!e.cancel).map(e=>({cid:e.cid,priority:e.priority,wantType:e.wantType}))}getPeerWantlist(e){return this.peerWantLists.wantListForPeer(e)}async start(){this.wantList.start(),await this.network.start()}async stop(){this.wantList.stop(),await this.network.stop()}};var Y5=(r,e={})=>new Vd(r,e);var zp=class{bitswap;started;constructor(e,t={}){let{getHasher:n}=e;this.bitswap=Y5(e,{hashLoader:{getHasher:async o=>n(o)},...t}),this.started=!1}isStarted(){return this.started}async start(){await this.bitswap.start(),this.started=!0}async stop(){await this.bitswap.stop(),this.started=!1}async announce(e,t,n){await this.bitswap.notify(e,t,n)}async retrieve(e,t={}){return this.bitswap.want(e,t)}createSession(e){let t=this.bitswap.createSession(e);return{announce:async(n,o,i)=>{await this.bitswap.notify(n,o,i)},retrieve:async(n,o)=>t.retrieve(n,o)}}};function Wp(r={}){return e=>new zp(e,r)}var $d=class{index=0;input="";new(e){return this.index=0,this.input=e,this}readAtomically(e){let t=this.index,n=e();return n===void 0&&(this.index=t),n}parseWith(e){let t=e();if(this.index===this.input.length)return t}peekChar(){if(!(this.index>=this.input.length))return this.input[this.index]}readChar(){if(!(this.index>=this.input.length))return this.input[this.index++]}readGivenChar(e){return this.readAtomically(()=>{let t=this.readChar();if(t===e)return t})}readSeparator(e,t,n){return this.readAtomically(()=>{if(!(t>0&&this.readGivenChar(e)===void 0))return n()})}readNumber(e,t,n,o){return this.readAtomically(()=>{let i=0,s=0,a=this.peekChar();if(a===void 0)return;let c=a==="0",l=2**(8*o)-1;for(;;){let u=this.readAtomically(()=>{let d=this.readChar();if(d===void 0)return;let f=Number.parseInt(d,e);if(!Number.isNaN(f))return f});if(u===void 0)break;if(i*=e,i+=u,i>l||(s+=1,t!==void 0&&s>t))return}if(s!==0)return!n&&c&&s>1?void 0:i})}readIPv4Addr(){return this.readAtomically(()=>{let e=new Uint8Array(4);for(let t=0;t<e.length;t++){let n=this.readSeparator(".",t,()=>this.readNumber(10,3,!1,1));if(n===void 0)return;e[t]=n}return e})}readIPv6Addr(){let e=t=>{for(let n=0;n<t.length/2;n++){let o=n*2;if(n<t.length-3){let s=this.readSeparator(":",n,()=>this.readIPv4Addr());if(s!==void 0)return t[o]=s[0],t[o+1]=s[1],t[o+2]=s[2],t[o+3]=s[3],[o+4,!0]}let i=this.readSeparator(":",n,()=>this.readNumber(16,4,!0,2));if(i===void 0)return[o,!1];t[o]=i>>8,t[o+1]=i&255}return[t.length,!1]};return this.readAtomically(()=>{let t=new Uint8Array(16),[n,o]=e(t);if(n===16)return t;if(o||this.readGivenChar(":")===void 0||this.readGivenChar(":")===void 0)return;let i=new Uint8Array(14),s=16-(n+2),[a]=e(i.subarray(0,s));return t.set(i.subarray(0,a),16-a),t})}readIPAddr(){return this.readIPv4Addr()??this.readIPv6Addr()}};var X5=45,HI=15,Us=new $d;function Kd(r){if(!(r.length>HI))return Us.new(r).parseWith(()=>Us.readIPv4Addr())}function Hd(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>X5))return Us.new(r).parseWith(()=>Us.readIPv6Addr())}function Ti(r,e=!1){if(r.includes("%")&&(r=r.split("%")[0]),r.length>X5)return;let t=Us.new(r).parseWith(()=>Us.readIPAddr());if(t)return e&&t.length===4?Uint8Array.from([0,0,0,0,0,0,0,0,0,0,255,255,t[0],t[1],t[2],t[3]]):t}function nn(r){return!!Kd(r)}function Fs(r){return!!Hd(r)}function qd(r){return!!Ti(r)}var Z5=Mr(j5(),1),qI=["0.0.0.0/8","10.0.0.0/8","100.64.0.0/10","127.0.0.0/8","169.254.0.0/16","172.16.0.0/12","192.0.0.0/24","192.0.0.0/29","192.0.0.8/32","192.0.0.9/32","192.0.0.10/32","192.0.0.170/32","192.0.0.171/32","192.0.2.0/24","192.31.196.0/24","192.52.193.0/24","192.88.99.0/24","192.168.0.0/16","192.175.48.0/24","198.18.0.0/15","198.51.100.0/24","203.0.113.0/24","240.0.0.0/4","255.255.255.255/32"],zI=qI.map(r=>new Z5.Netmask(r));function Gp(r){for(let e of zI)if(e.contains(r))return!0;return!1}function WI(r){return/^::ffff:([0-9a-fA-F]{1,4}):([0-9a-fA-F]{1,4})$/.test(r)}function GI(r){let e=r.split(":");if(e.length<2)return!1;let t=e[e.length-1].padStart(4,"0"),n=e[e.length-2].padStart(4,"0"),o=`${parseInt(n.substring(0,2),16)}.${parseInt(n.substring(2),16)}.${parseInt(t.substring(0,2),16)}.${parseInt(t.substring(2),16)}`;return Gp(o)}function QI(r){return/^::ffff:([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)}function YI(r){let e=r.split(":"),t=e[e.length-1];return Gp(t)}function XI(r){return/^::$/.test(r)||/^::1$/.test(r)||/^64:ff9b::([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)||/^100::([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2001::([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2001:2[0-9a-fA-F]:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2001:db8:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^2002:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(r)||/^f[c-d]([0-9a-fA-F]{2,2}):/i.test(r)||/^fe[8-9a-bA-B][0-9a-fA-F]:/i.test(r)||/^ff([0-9a-fA-F]{2,2}):/i.test(r)}function Gt(r){return nn(r)?Gp(r):WI(r)?GI(r):QI(r)?YI(r):Fs(r)?XI(r):void 0}var jI=r=>r.toString().split("/").slice(1),Vs=r=>({match:e=>e.length<1?!1:r(e[0])?e.slice(1):!1,pattern:"fn"}),he=r=>({match:e=>Vs(t=>t===r).match(e),pattern:r}),_i=()=>({match:r=>Vs(e=>typeof e=="string").match(r),pattern:"{string}"}),Sc=()=>({match:r=>Vs(e=>!isNaN(parseInt(e))).match(r),pattern:"{number}"}),Ce=()=>({match:r=>{if(r.length<2||r[0]!=="p2p"&&r[0]!=="ipfs")return!1;if(r[1].startsWith("Q")||r[1].startsWith("1"))try{ve.decode(`z${r[1]}`)}catch{return!1}else return!1;return r.slice(2)},pattern:"/p2p/{peerid}"}),Ac=()=>({match:r=>{if(r.length<2||r[0]!=="certhash")return!1;try{L0.decode(r[1])}catch{return!1}return r.slice(2)},pattern:"/certhash/{certhash}"}),Te=r=>({match:e=>{let t=r.match(e);return t===!1?e:t},pattern:`optional(${r.pattern})`}),Mt=(...r)=>({match:e=>{let t;for(let n of r){let o=n.match(e);o!==!1&&(t==null||o.length<t.length)&&(t=o)}return t??!1},pattern:`or(${r.map(e=>e.pattern).join(", ")})`}),me=(...r)=>({match:e=>{for(let t of r){let n=t.match(e);if(n===!1)return!1;e=n}return e},pattern:`and(${r.map(e=>e.pattern).join(", ")})`});function ke(...r){function e(o){let i=jI(o);for(let s of r){let a=s.match(i);if(a===!1)return!1;i=a}return i}function t(o){return e(o)!==!1}function n(o){let i=e(o);return i===!1?!1:i.length===0}return{matchers:r,matches:t,exactMatch:n}}var Wd=me(he("dns4"),_i()),Gd=me(he("dns6"),_i()),Qd=me(he("dnsaddr"),_i()),Yp=me(he("dns"),_i()),hH=ke(Wd,Te(Ce())),pH=ke(Gd,Te(Ce())),mH=ke(Qd,Te(Ce())),Ic=ke(Mt(Yp,Qd,Wd,Gd),Te(Ce())),J5=me(he("ip4"),Vs(nn)),e7=me(he("ip6"),Vs(Fs)),Xp=Mt(J5,e7),eo=Mt(Xp,Yp,Wd,Gd,Qd),t7=ke(Mt(Xp,me(Mt(Yp,Qd,Wd,Gd),Te(Ce())))),gH=ke(J5),yH=ke(e7),r7=ke(Xp),jp=me(eo,he("tcp"),Sc()),Tc=me(eo,he("udp"),Sc()),Ci=ke(me(jp,Te(Ce()))),wH=ke(Tc),Zp=me(Tc,he("quic"),Te(Ce())),Yd=me(Tc,he("quic-v1"),Te(Ce())),ZI=Mt(Zp,Yd),bH=ke(Zp),n7=ke(Yd),Qp=Mt(eo,jp,Tc,Zp,Yd),o7=Mt(me(Qp,he("ws"),Te(Ce()))),to=ke(o7),i7=Mt(me(Qp,he("wss"),Te(Ce())),me(Qp,he("tls"),Te(me(he("sni"),_i())),he("ws"),Te(Ce()))),ki=ke(i7),s7=me(Tc,he("webrtc-direct"),Te(Ac()),Te(Ac()),Te(Ce())),_c=ke(s7),a7=me(Yd,he("webtransport"),Te(Ac()),Te(Ac()),Te(Ce())),Jp=ke(a7),zd=Mt(o7,i7,me(jp,Te(Ce())),me(ZI,Te(Ce())),me(eo,Te(Ce())),s7,a7,Ce()),Xd=ke(zd),JI=me(zd,he("p2p-circuit"),Ce()),ir=ke(JI),eT=Mt(me(zd,he("p2p-circuit"),he("webrtc"),Te(Ce())),me(zd,he("webrtc"),Te(Ce())),me(he("webrtc"),Te(Ce()))),Cc=ke(eT),tT=Mt(me(eo,he("tcp"),Sc(),he("http"),Te(Ce())),me(eo,he("http"),Te(Ce()))),c7=ke(tT),rT=Mt(me(eo,he("tcp"),Mt(me(he("443"),he("http")),me(Sc(),he("https"))),Te(Ce())),me(eo,he("tls"),he("http"),Te(Ce())),me(eo,he("https"),Te(Ce()))),l7=ke(rT),nT=Mt(me(he("memory"),_i(),Te(Ce()))),xH=ke(nT);function u7(r,e,t){let n=0;for(let o of r)if(!(n<e)){if(n>t)break;if(o!==255)return!1;n++}return!0}function d7(r,e,t,n){let o=0;for(let i of r)if(!(o<t)){if(o>n)break;if(i!==e[o])return!1;o++}return!0}function em(r){switch(r.length){case Pi:return r.join(".");case Ri:{let e=[];for(let t=0;t<r.length;t++)t%2===0&&e.push(r[t].toString(16).padStart(2,"0")+r[t+1].toString(16).padStart(2,"0"));return e.join(":")}default:throw new Error("Invalid ip length")}}function f7(r){let e=0;for(let[t,n]of r.entries()){if(n===255){e+=8;continue}for(;n&128;)e++,n=n<<1;if(n&128)return-1;for(let o=t+1;o<r.length;o++)if(r[o]!=0)return-1;break}return e}function h7(r){let e="0x";for(let t of r)e+=(t>>4).toString(16)+(t&15).toString(16);return e}var Pi=4,Ri=16,TH=parseInt("0xFFFF",16),oT=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);function kc(r,e){e.length===Ri&&r.length===Pi&&u7(e,0,11)&&(e=e.slice(12)),e.length===Pi&&r.length===Ri&&d7(r,oT,0,11)&&(r=r.slice(12));let t=r.length;if(t!=e.length)throw new Error("Failed to mask ip");let n=new Uint8Array(t);for(let o=0;o<t;o++)n[o]=r[o]&e[o];return n}function p7(r,e){if(typeof e=="string"&&(e=Ti(e)),e==null)throw new Error("Invalid ip");if(e.length!==r.network.length)return!1;for(let t=0;t<e.length;t++)if((r.network[t]&r.mask[t])!==(e[t]&r.mask[t]))return!1;return!0}function tm(r){let[e,t]=r.split("/");if(!e||!t)throw new Error("Failed to parse given CIDR: "+r);let n=Pi,o=Kd(e);if(o==null&&(n=Ri,o=Hd(e),o==null))throw new Error("Failed to parse given CIDR: "+r);let i=parseInt(t,10);if(Number.isNaN(i)||String(i).length!==t.length||i<0||i>n*8)throw new Error("Failed to parse given CIDR: "+r);let s=rm(i,8*n);return{network:kc(o,s),mask:s}}function rm(r,e){if(e!==8*Pi&&e!==8*Ri)throw new Error("Invalid CIDR mask");if(r<0||r>e)throw new Error("Invalid CIDR mask");let t=e/8,n=new Uint8Array(t);for(let o=0;o<t;o++){if(r>=8){n[o]=255,r-=8;continue}n[o]=255-(255>>r),r=0}return n}var Di=class{constructor(e,t){if(t==null)({network:this.network,mask:this.mask}=tm(e));else{let n=Ti(e);if(n==null)throw new Error("Failed to parse network");t=String(t);let o=parseInt(t,10);if(Number.isNaN(o)||String(o).length!==t.length||o<0||o>n.length*8){let i=Ti(t);if(i==null)throw new Error("Failed to parse mask");this.mask=i}else this.mask=rm(o,8*n.length);this.network=kc(n,this.mask)}}contains(e){return p7({network:this.network,mask:this.mask},e)}toString(){let e=f7(this.mask),t=e!==-1?String(e):h7(this.mask);return em(this.network)+"/"+t}};function m7(r,e){return new Di(r).contains(e)}var g7=nn,iT=Fs,nm=function(r){let e=0;if(r=r.toString().trim(),g7(r)){let t=new Uint8Array(e+4);return r.split(/\./g).forEach(n=>{t[e++]=parseInt(n,10)&255}),t}if(iT(r)){let t=r.split(":",8),n;for(n=0;n<t.length;n++){let i=g7(t[n]),s;i&&(s=nm(t[n]),t[n]=U(s.slice(0,2),"base16")),s!=null&&++n<8&&t.splice(n,0,U(s.slice(2,4),"base16"))}if(t[0]==="")for(;t.length<8;)t.unshift("0");else if(t[t.length-1]==="")for(;t.length<8;)t.push("0");else if(t.length<8){for(n=0;n<t.length&&t[n]!=="";n++);let i=[n,1];for(n=9-t.length;n>0;n--)i.push("0");t.splice.apply(t,i)}let o=new Uint8Array(e+16);for(n=0;n<t.length;n++){let i=parseInt(t[n],16);o[e++]=i>>8&255,o[e++]=i&255}return o}throw new Error("invalid ip address")},y7=function(r,e=0,t){e=~~e,t=t??r.length-e;let n=new DataView(r.buffer);if(t===4){let o=[];for(let i=0;i<t;i++)o.push(r[e+i]);return o.join(".")}if(t===16){let o=[];for(let i=0;i<t;i+=2)o.push(n.getUint16(e+i).toString(16));return o.join(":").replace(/(^|:)0(:0)*:0(:|$)/,"$1::$3").replace(/:{3,4}/,"::")}return""};var $s={},om={},aT=[[4,32,"ip4"],[6,16,"tcp"],[33,16,"dccp"],[41,128,"ip6"],[42,-1,"ip6zone"],[43,8,"ipcidr"],[53,-1,"dns",!0],[54,-1,"dns4",!0],[55,-1,"dns6",!0],[56,-1,"dnsaddr",!0],[132,16,"sctp"],[273,16,"udp"],[275,0,"p2p-webrtc-star"],[276,0,"p2p-webrtc-direct"],[277,0,"p2p-stardust"],[280,0,"webrtc-direct"],[281,0,"webrtc"],[290,0,"p2p-circuit"],[301,0,"udt"],[302,0,"utp"],[400,-1,"unix",!1,!0],[421,-1,"ipfs"],[421,-1,"p2p"],[443,0,"https"],[444,96,"onion"],[445,296,"onion3"],[446,-1,"garlic64"],[448,0,"tls"],[449,-1,"sni"],[460,0,"quic"],[461,0,"quic-v1"],[465,0,"webtransport"],[466,-1,"certhash"],[477,0,"ws"],[478,0,"wss"],[479,0,"p2p-websocket-star"],[480,0,"http"],[481,-1,"http-path"],[777,-1,"memory"]];aT.forEach(r=>{let e=cT(...r);om[e.code]=e,$s[e.name]=e});function cT(r,e,t,n,o){return{code:r,size:e,name:t,resolvable:!!n,path:!!o}}function Z(r){if(typeof r=="number"){if(om[r]!=null)return om[r];throw new Error(`no protocol with code: ${r}`)}else if(typeof r=="string"){if($s[r]!=null)return $s[r];throw new Error(`no protocol with name: ${r}`)}throw new Error(`invalid protocol id type: ${typeof r}`)}var lT=Z("ip4"),uT=Z("ip6"),dT=Z("ipcidr");function cm(r,e){switch(Z(r).code){case 4:case 41:return hT(e);case 42:return am(e);case 43:return U(e,"base10");case 6:case 273:case 33:case 132:return x7(e).toString();case 53:case 54:case 55:case 56:case 400:case 449:case 777:return am(e);case 421:return yT(e);case 444:return b7(e);case 445:return b7(e);case 466:return gT(e);case 481:return globalThis.encodeURIComponent(am(e));default:return U(e,"base16")}}function lm(r,e){switch(Z(r).code){case 4:return w7(e);case 41:return w7(e);case 42:return sm(e);case 43:return N(e,"base10");case 6:case 273:case 33:case 132:return dm(parseInt(e,10));case 53:case 54:case 55:case 56:case 400:case 449:case 777:return sm(e);case 421:return pT(e);case 444:return wT(e);case 445:return bT(e);case 466:return mT(e);case 481:return sm(globalThis.decodeURIComponent(e));default:return N(e,"base16")}}function um(r){let e,t;if(r.stringTuples().forEach(([n,o])=>{(n===lT.code||n===uT.code)&&(t=o),n===dT.code&&(e=o)}),e==null||t==null)throw new Error("Invalid multiaddr");return new Di(t,e)}var im=Object.values(oi).map(r=>r.decoder),fT=function(){let r=im[0].or(im[1]);return im.slice(2).forEach(e=>r=r.or(e)),r}();function w7(r){if(!qd(r))throw new Error("invalid ip address");return nm(r)}function hT(r){let e=y7(r,0,r.length);if(e==null)throw new Error("ipBuff is required");if(!qd(e))throw new Error("invalid ip address");return e}function dm(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r),new Uint8Array(e)}function x7(r){return new DataView(r.buffer).getUint16(r.byteOffset)}function sm(r){let e=N(r),t=Uint8Array.from($e(e.length));return Pe([t,e],t.length+e.length)}function am(r){let e=$t(r);if(r=r.slice(pe(e)),r.length!==e)throw new Error("inconsistent lengths");return U(r)}function pT(r){let e;r[0]==="Q"||r[0]==="1"?e=Ae(ve.decode(`z${r}`)).bytes:e=X.parse(r).multihash.bytes;let t=Uint8Array.from($e(e.length));return Pe([t,e],t.length+e.length)}function mT(r){let e=fT.decode(r),t=Uint8Array.from($e(e.length));return Pe([t,e],t.length+e.length)}function gT(r){let e=$t(r),t=r.slice(pe(e));if(t.length!==e)throw new Error("inconsistent lengths");return"u"+U(t,"base64url")}function yT(r){let e=$t(r),t=r.slice(pe(e));if(t.length!==e)throw new Error("inconsistent lengths");return U(t,"base58btc")}function wT(r){let e=r.split(":");if(e.length!==2)throw new Error(`failed to parse onion addr: ["'${e.join('", "')}'"]' does not contain a port number`);if(e[0].length!==16)throw new Error(`failed to parse onion addr: ${e[0]} not a Tor onion address.`);let t=at.decode("b"+e[0]),n=parseInt(e[1],10);if(n<1||n>65536)throw new Error("Port number is not in range(1, 65536)");let o=dm(n);return Pe([t,o],t.length+o.length)}function bT(r){let e=r.split(":");if(e.length!==2)throw new Error(`failed to parse onion addr: ["'${e.join('", "')}'"]' does not contain a port number`);if(e[0].length!==56)throw new Error(`failed to parse onion addr: ${e[0]} not a Tor onion3 address.`);let t=at.decode(`b${e[0]}`),n=parseInt(e[1],10);if(n<1||n>65536)throw new Error("Port number is not in range(1, 65536)");let o=dm(n);return Pe([t,o],t.length+o.length)}function b7(r){let e=r.slice(0,r.length-2),t=r.slice(r.length-2),n=U(e,"base32"),o=x7(t);return`${n}:${o}`}function v7(r){r=fm(r);let e=[],t=[],n=null,o=r.split("/").slice(1);if(o.length===1&&o[0]==="")return{bytes:new Uint8Array,string:"/",tuples:[],stringTuples:[],path:null};for(let i=0;i<o.length;i++){let s=o[i],a=Z(s);if(a.size===0){e.push([a.code]),t.push([a.code]);continue}if(i++,i>=o.length)throw new jd("invalid address: "+r);if(a.path===!0){n=fm(o.slice(i).join("/")),e.push([a.code,lm(a.code,n)]),t.push([a.code,n]);break}let c=lm(a.code,o[i]);e.push([a.code,c]),t.push([a.code,cm(a.code,c)])}return{string:E7(t),bytes:pm(e),tuples:e,stringTuples:t,path:n}}function hm(r){let e=[],t=[],n=null,o=0;for(;o<r.length;){let i=$t(r,o),s=pe(i),a=Z(i),c=xT(a,r.slice(o+s));if(c===0){e.push([i]),t.push([i]),o+=s;continue}let l=r.slice(o+s,o+s+c);if(o+=c+s,o>r.length)throw new jd("Invalid address Uint8Array: "+U(r,"base16"));e.push([i,l]);let u=cm(i,l);if(t.push([i,u]),a.path===!0){n=u;break}}return{bytes:Uint8Array.from(r),string:E7(t),tuples:e,stringTuples:t,path:n}}function E7(r){let e=[];return r.map(t=>{let n=Z(t[0]);return e.push(n.name),t.length>1&&t[1]!=null&&e.push(t[1]),null}),fm(e.join("/"))}function pm(r){return Pe(r.map(e=>{let t=Z(e[0]),n=Uint8Array.from($e(t.code));return e.length>1&&e[1]!=null&&(n=Pe([n,e[1]])),n}))}function xT(r,e){if(r.size>0)return r.size/8;if(r.size===0)return 0;{let t=$t(e instanceof Uint8Array?e:Uint8Array.from(e));return t+pe(t)}}function fm(r){return"/"+r.trim().split("/").filter(e=>e).join("/")}var jd=class extends Error{static name="ParseError";name="ParseError";constructor(e){super(`Error parsing address: ${e}`)}};var vT=Symbol.for("nodejs.util.inspect.custom"),gm=Symbol.for("@multiformats/js-multiaddr/multiaddr"),ET=[Z("dns").code,Z("dns4").code,Z("dns6").code,Z("dnsaddr").code],mm=class extends Error{constructor(e="No available resolver"){super(e),this.name="NoAvailableResolverError"}},Zd=class r{bytes;#e;#t;#r;#o;[gm]=!0;constructor(e){e==null&&(e="");let t;if(e instanceof Uint8Array)t=hm(e);else if(typeof e=="string"){if(e.length>0&&e.charAt(0)!=="/")throw new Error(`multiaddr "${e}" must start with a "/"`);t=v7(e)}else if(Mo(e))t=hm(e.bytes);else throw new Error("addr must be a string, Buffer, or another Multiaddr");this.bytes=t.bytes,this.#e=t.string,this.#t=t.tuples,this.#r=t.stringTuples,this.#o=t.path}toString(){return this.#e}toJSON(){return this.toString()}toOptions(){let e,t,n,o,i="",s=Z("tcp"),a=Z("udp"),c=Z("ip4"),l=Z("ip6"),u=Z("dns6"),d=Z("ip6zone");for(let[h,p]of this.stringTuples())h===d.code&&(i=`%${p??""}`),ET.includes(h)&&(t=s.name==="tcp"?"tcp":"udp",o=443,n=`${p??""}${i}`,e=h===u.code?6:4),(h===s.code||h===a.code)&&(t=Z(h).name==="tcp"?"tcp":"udp",o=parseInt(p??"")),(h===c.code||h===l.code)&&(t=Z(h).name==="tcp"?"tcp":"udp",n=`${p??""}${i}`,e=h===l.code?6:4);if(e==null||t==null||n==null||o==null)throw new Error('multiaddr must have a valid format: "/{ip4, ip6, dns4, dns6, dnsaddr}/{address}/{tcp, udp}/{port}".');return{family:e,host:n,transport:t,port:o}}protos(){return this.#t.map(([e])=>Object.assign({},Z(e)))}protoCodes(){return this.#t.map(([e])=>e)}protoNames(){return this.#t.map(([e])=>Z(e).name)}tuples(){return this.#t.map(([e,t])=>t==null?[e]:[e,t])}stringTuples(){return this.#r.map(([e,t])=>t==null?[e]:[e,t])}encapsulate(e){return e=new r(e),new r(this.toString()+e.toString())}decapsulate(e){let t=e.toString(),n=this.toString(),o=n.lastIndexOf(t);if(o<0)throw new Error(`Address ${this.toString()} does not contain subaddress: ${e.toString()}`);return new r(n.slice(0,o))}decapsulateCode(e){let t=this.tuples();for(let n=t.length-1;n>=0;n--)if(t[n][0]===e)return new r(pm(t.slice(0,n)));return this}getPeerId(){try{let e=[];this.stringTuples().forEach(([n,o])=>{n===$s.p2p.code&&e.push([n,o]),n===$s["p2p-circuit"].code&&(e=[])});let t=e.pop();if(t?.[1]!=null){let n=t[1];return n[0]==="Q"||n[0]==="1"?U(ve.decode(`z${n}`),"base58btc"):U(X.parse(n).multihash.bytes,"base58btc")}return null}catch{return null}}getPath(){return this.#o}equals(e){return ne(this.bytes,e.bytes)}async resolve(e){let t=this.protos().find(i=>i.resolvable);if(t==null)return[this];let n=Ks.get(t.name);if(n==null)throw new mm(`no available resolver for ${t.name}`);return(await n(this,e)).map(i=>H(i))}nodeAddress(){let e=this.toOptions();if(e.transport!=="tcp"&&e.transport!=="udp")throw new Error(`multiaddr must have a valid format - no protocol with name: "${e.transport}". Must have a valid transport protocol: "{tcp, udp}"`);return{family:e.family,address:e.host,port:e.port}}isThinWaistAddress(e){let t=(e??this).protos();return!(t.length!==2||t[0].code!==4&&t[0].code!==41||t[1].code!==6&&t[1].code!==273)}[vT](){return`Multiaddr(${this.#e})`}};var Ks=new Map;function Mo(r){return!!r?.[gm]}function H(r){return new Zd(r)}var ST=[Z("tcp").code,Z("dns").code,Z("dnsaddr").code,Z("dns4").code,Z("dns6").code];function S7(r){return T7("sni",r)?.[1]}function A7(r){let e=T7("tcp",r)?.[1];return e==null?"":`:${e}`}function T7(r,e){let t;try{t=Z(r).code}catch{return}for(let[n,o]of e)if(n===t&&o!=null)return[n,o]}function I7(r){return r.some(([e,t])=>e===Z("tls").code)}function on(r,e,t){let n=_7[Z(r).name];if(n==null)throw new Error(`Can't interpret protocol ${Z(r).name}`);let o=n(e,t);return r===Z("ip6").code?`[${o}]`:o}var _7={ip4:(r,e)=>r,ip6:(r,e)=>e.length===0?r:`[${r}]`,tcp:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`tcp://${on(t[0],t[1]??"",e)}:${r}`},udp:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`udp://${on(t[0],t[1]??"",e)}:${r}`},dnsaddr:(r,e)=>r,dns4:(r,e)=>r,dns6:(r,e)=>r,dns:(r,e)=>r,ipfs:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${on(t[0],t[1]??"",e)}`},p2p:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${on(t[0],t[1]??"",e)}`},http:(r,e)=>{let t=I7(e),n=S7(e),o=A7(e);if(t&&n!=null)return`https://${n}${o}`;let i=t?"https://":"http://",s=e.pop();if(s==null)throw new Error("Unexpected end of multiaddr");let a=on(s[0],s[1]??"",e);return a=a.replace("tcp://",""),`${i}${a}`},"http-path":(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=on(t[0],t[1]??"",e),o=decodeURIComponent(r);return`${n}/${o}`},tls:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return on(t[0],t[1]??"",e)},sni:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return on(t[0],t[1]??"",e)},https:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=on(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`https://${n}`},ws:(r,e)=>{let t=I7(e),n=S7(e),o=A7(e);if(t&&n!=null)return`wss://${n}${o}`;let i=t?"wss://":"ws://",s=e.pop();if(s==null)throw new Error("Unexpected end of multiaddr");let a=on(s[0],s[1]??"",e);return a=a.replace("tcp://",""),`${i}${a}`},wss:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=on(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`wss://${n}`}};function Jd(r,e){let n=H(r).stringTuples(),o=n.pop();if(o==null)throw new Error("Unexpected end of multiaddr");let i=Z(o[0]),s=_7[i.name];if(s==null)throw new Error(`No interpreter found for ${i.name}`);let a=s(o[1]??"",n);return e?.assumeHttp!==!1&&ST.includes(o[0])&&(a=a.replace(/^.*:\/\//,""),o[1]==="443"?a=`https://${a}`:a=`http://${a}`),(a.startsWith("http://")||a.startsWith("https://")||a.startsWith("ws://")||a.startsWith("wss://"))&&(a=new URL(a).toString(),a.endsWith("/")&&(a=a.substring(0,a.length-1))),a}var e1=class{url;#e=0;#t=0;#r=0;#o=0;#a=new Map;log;constructor(e,t){this.url=e instanceof URL?e:new URL(e),this.log=t.forComponent(`helia:trustless-gateway-block-broker:${this.url.hostname}`)}#l(e){let t=e.multihash.bytes;return nt.encode(t)}async getRawBlock(e,t){let n=new URL(this.url.toString());if(n.pathname=`/ipfs/${e.toString()}`,n.search="?format=raw",t?.aborted===!0)throw new Error(`Signal to fetch raw block for CID ${e} from gateway ${this.url} was aborted prior to fetch`);let o=this.#l(e),i=new AbortController,s=()=>{i.abort()};t?.addEventListener("abort",s);try{let a=this.#a.get(o);return a==null&&(this.#e++,a=fetch(n.toString(),{signal:i.signal,headers:{Accept:"application/vnd.ipld.raw"},cache:"force-cache"}).then(async c=>{if(this.log("GET %s %d",n,c.status),!c.ok)throw this.#t++,new Error(`unable to fetch raw block for CID ${e} from gateway ${this.url}`);return this.#o++,new Uint8Array(await c.arrayBuffer())}),this.#a.set(o,a)),await a}catch{throw t?.aborted===!0?new Error(`fetching raw block for CID ${e} from gateway ${this.url} was aborted`):(this.#t++,new Error(`unable to fetch raw block for CID ${e}`))}finally{t?.removeEventListener("abort",s),this.#a.delete(o)}}reliability(){return this.#e===0?1:this.#r>0?-1/0:this.#o/(this.#e+this.#t*3)}incrementInvalidBlocks(){this.#r++}getStats(){return{attempts:this.#e,errors:this.#t,invalidBlocks:this.#r,successes:this.#o,pendingResponses:this.#a.size}}};function AT(r,e,t){return r.filter(n=>{if(l7.matches(n)||e&&c7.matches(n))return t||Ic.matches(n)?!0:Gt(n.toOptions().host)===!1;if(!e&&t){let{host:o}=n.toOptions();if(o==="127.0.0.1"||o==="localhost"||o.endsWith(".localhost"))return!0}return!1})}async function*t1(r,e,t,n,o,i){for await(let s of e.findProviders(r,i)){let a=AT(s.multiaddrs,n,o);if(a.length===0)continue;let c=Jd(a[0]);yield new e1(c,t)}}var ym=class extends Ii{routing;allowInsecure;allowLocal;constructor(e,t){super(e,{...t,name:"helia:trustless-gateway:session"}),this.routing=e.routing,this.allowInsecure=t.allowInsecure??r1,this.allowLocal=t.allowLocal??n1}async queryProvider(e,t,n){this.log("fetching BLOCK for %c from %s",e,t.url);let o=await t.getRawBlock(e,n.signal);return this.log.trace("got block for %c from %s",e,t.url),await n.validateFn?.(o),o}async*findNewProviders(e,t={}){yield*t1(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,t)}toEvictionKey(e){return e.url.toString()}equals(e,t){return e.url.toString()===t.url.toString()}};function C7(r,e){return new ym(r,e)}var o1=class{allowInsecure;allowLocal;routing;log;logger;constructor(e,t={}){this.log=e.logger.forComponent("helia:trustless-gateway-block-broker"),this.logger=e.logger,this.routing=e.routing,this.allowInsecure=t.allowInsecure??r1,this.allowLocal=t.allowLocal??n1}async retrieve(e,t={}){let n=[];for await(let o of t1(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,t)){this.log("getting block for %c from %s",e,o.url);try{let i=await o.getRawBlock(e,t.signal);this.log.trace("got block for %c from %s",e,o.url);try{await t.validateFn?.(i)}catch(s){this.log.error("failed to validate block for %c from %s",e,o.url,s);continue}return i}catch(i){if(this.log.error("failed to get block for %c from %s",e,o.url,i),i instanceof Error?n.push(i):n.push(new Error(`Unable to fetch raw block for CID ${e} from gateway ${o.url}`)),t.signal?.aborted===!0){this.log.trace("request aborted while fetching raw block for CID %c from gateway %s",e,o.url);break}}}throw n.length>0?new AggregateError(n,`Unable to fetch raw block for CID ${e} from any gateway`):new Error(`Unable to fetch raw block for CID ${e} from any gateway`)}createSession(e={}){return C7({logger:this.logger,routing:this.routing},{...e,allowLocal:this.allowLocal,allowInsecure:this.allowInsecure})}};var r1=!1,n1=!1;function wm(r={}){return e=>new o1(e,r)}async function*i1(r,e={}){let t=r.getReader();try{for(;;){let n=await t.read();if(n.done)return;yield n.value}}finally{e.preventCancel!==!0&&await t.cancel(),t.releaseLock()}}var PT=Mr(s1(),1);var sn=class extends Error{static name="SignatureVerificationError";constructor(e="Record signature verification failed"){super(e),this.name="SignatureVerificationError"}},a1=class extends Error{static name="RecordExpiredError";constructor(e="Record has expired"){super(e),this.name="RecordExpiredError"}},Hs=class extends Error{static name="UnsupportedValidityError";constructor(e="The validity type is unsupported"){super(e),this.name="UnsupportedValidityError"}},c1=class extends Error{static name="RecordTooLargeError";constructor(e="The record is too large"){super(e),this.name="RecordTooLargeError"}},l1=class extends Error{static name="InvalidValueError";constructor(e="Value must be a valid content path starting with /"){super(e),this.name="InvalidValueError"}},u1=class extends Error{static name="InvalidRecordDataError";constructor(e="Invalid record data"){super(e),this.name="InvalidRecordDataError"}},Pc=class extends Error{static name="InvalidEmbeddedPublicKeyError";constructor(e="Invalid embedded public key"){super(e),this.name="InvalidEmbeddedPublicKeyError"}};var sr;(function(r){let e;(function(o){o.EOL="EOL"})(e=r.ValidityType||(r.ValidityType={}));let t;(function(o){o[o.EOL=0]="EOL"})(t||(t={})),function(o){o.codec=()=>Ke(t)}(e=r.ValidityType||(r.ValidityType={}));let n;r.codec=()=>(n==null&&(n=re((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.value!=null&&(i.uint32(10),i.bytes(o.value)),o.signatureV1!=null&&(i.uint32(18),i.bytes(o.signatureV1)),o.validityType!=null&&(i.uint32(24),r.ValidityType.codec().encode(o.validityType,i)),o.validity!=null&&(i.uint32(34),i.bytes(o.validity)),o.sequence!=null&&(i.uint32(40),i.uint64(o.sequence)),o.ttl!=null&&(i.uint32(48),i.uint64(o.ttl)),o.pubKey!=null&&(i.uint32(58),i.bytes(o.pubKey)),o.signatureV2!=null&&(i.uint32(66),i.bytes(o.signatureV2)),o.data!=null&&(i.uint32(74),i.bytes(o.data)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.value=o.bytes();break}case 2:{a.signatureV1=o.bytes();break}case 3:{a.validityType=r.ValidityType.codec().decode(o);break}case 4:{a.validity=o.bytes();break}case 5:{a.sequence=o.uint64();break}case 6:{a.ttl=o.uint64();break}case 7:{a.pubKey=o.bytes();break}case 8:{a.signatureV2=o.bytes();break}case 9:{a.data=o.bytes();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>te(o,r.codec()),r.decode=(o,i)=>ee(o,r.codec(),i)})(sr||(sr={}));var IT=pr("ipns:utils"),k7=N("/ipns/");var TT=0,_T=18;function P7(r){let e;if(r.pubKey!=null)try{e=tt(r.pubKey)}catch(t){throw IT.error(t),t}if(e!=null)return e}function R7(r){let e=N("ipns-signature:");return Pe([e,r])}function Rc(r){return"signatureV1"in r?sr.encode({value:N(r.value),signatureV1:r.signatureV1,validityType:r.validityType,validity:N(r.validity),sequence:r.sequence,ttl:r.ttl,pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data}):sr.encode({pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data})}function Cn(r){let e=sr.decode(r);if(e.sequence!=null&&(e.sequence=BigInt(e.sequence)),e.ttl!=null&&(e.ttl=BigInt(e.ttl)),e.signatureV2==null||e.data==null)throw new sn("Missing data or signatureV2");let t=D7(e.data),n=CT(t.Value),o=U(t.Validity);if(e.value!=null&&e.signatureV1!=null)return kT(e),{value:n,validityType:sr.ValidityType.EOL,validity:o,sequence:t.Sequence,ttl:t.TTL,pubKey:e.pubKey,signatureV1:e.signatureV1,signatureV2:e.signatureV2,data:e.data};if(e.signatureV2!=null)return{value:n,validityType:sr.ValidityType.EOL,validity:o,sequence:t.Sequence,ttl:t.TTL,pubKey:e.pubKey,signatureV2:e.signatureV2,data:e.data};throw new Error("invalid record: does not include signatureV1 or signatureV2")}function Dc(r){return Pe([k7,r.bytes])}function qs(r){let e=Ae(r.slice(k7.length));if(!d1(e,TT)&&!d1(e,_T))throw new uo("Multihash in IPNS key was not identity or sha2-256");return e}function D7(r){let e=xr(r);if(e.ValidityType===0)e.ValidityType=sr.ValidityType.EOL;else throw new Hs("The validity type is unsupported");return Number.isInteger(e.Sequence)&&(e.Sequence=BigInt(e.Sequence)),Number.isInteger(e.TTL)&&(e.TTL=BigInt(e.TTL)),e}function CT(r){let e=U(r).trim();if(e.startsWith("/"))return e;try{return`/ipfs/${X.decode(r).toV1().toString()}`}catch{}try{return`/ipfs/${X.parse(e).toV1().toString()}`}catch{}throw new l1("Value must be a valid content path starting with /")}function kT(r){if(r.data==null)throw new u1("Record data is missing");let e=D7(r.data);if(!ne(e.Value,r.value??new Uint8Array(0)))throw new sn('Field "value" did not match between protobuf and CBOR');if(!ne(e.Validity,r.validity??new Uint8Array(0)))throw new sn('Field "validity" did not match between protobuf and CBOR');if(e.ValidityType!==r.validityType)throw new sn('Field "validityType" did not match between protobuf and CBOR');if(e.Sequence!==r.sequence)throw new sn('Field "sequence" did not match between protobuf and CBOR');if(e.TTL!==r.ttl)throw new sn('Field "ttl" did not match between protobuf and CBOR')}function d1(r,e){return r.code===e}var pz=pr("ipns"),mz=60*60*1e9,RT="/ipns/",gz=RT.length;var L7=Mr(s1(),1);var f1=pr("ipns:validator"),DT=1024*10,LT=async(r,e)=>{let t=Cn(e),n;try{let o=R7(t.data);n=await r.verify(o,t.signatureV2)}catch{n=!1}if(!n)throw f1.error("record signature verification failed"),new sn("Record signature verification failed");if(t.validityType===sr.ValidityType.EOL){if(L7.default.fromString(t.validity).toDate().getTime()<Date.now())throw f1.error("record has expired"),new a1("record has expired")}else if(t.validityType!=null)throw f1.error("the validity type is unsupported"),new Hs("The validity type is unsupported");f1("ipns record for %s is valid",t.value)};async function h1(r,e){if(e.byteLength>DT)throw new c1("The record is too large");let t=qs(r),n;d1(t,0)&&(n=Yu(t));let o=Cn(e),i=P7(o)??n;if(i==null)throw new Pc("Could not extract public key from IPNS record or routing key");let s=Dc(i.toMultihash());if(!ne(s,r))throw new Pc("Embedded public key did not match routing key");await LT(i,e)}var p1=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MESSAGE_LENGTH"};async function*Lc(r,e={}){let t=/\r?\n/,n=new TextDecoder("utf8"),o="";for await(let i of r){if(typeof i=="string"&&(i=new TextEncoder().encode(i)),os(i)&&(i=i.subarray()),o+=n.decode(i,{stream:!0}),o.length>(e?.maxMessageLength??o.length))throw new p1("Incoming message too long");let s=o.split(t);o=s.pop()??"";for(let a=0;a<s.length;a++)yield JSON.parse(s[a])}o+=n.decode(),o!==""&&(yield JSON.parse(o))}var zs=class extends Error{static name="InvalidRequestError";constructor(e="Invalid request"){super(e),this.name="InvalidRequestError"}},an=class extends Error{static name="BadResponseError";constructor(e="Bad response"){super(e),this.name="BadResponseError"}};function NT(r){return r[Symbol.asyncIterator]!=null}function BT(r){if(NT(r))return(async()=>{for await(let e of r)return e})();for(let e of r)return e}var N7=BT;var B7=N("/ipns/");function O7(r){return ne(r.subarray(0,B7.byteLength),B7)}var m1=class{client;constructor(e){this.client=e}async*findProviders(e,t={}){yield*jt(this.client.getProviders(e,t),n=>({id:n.ID,multiaddrs:n.Addrs??[]}))}async provide(){}async cancelReprovide(){}async put(e,t,n){if(!O7(e))return;let o=qs(e),i=X.createV1(114,o),s=Cn(t);await this.client.putIPNS(i,s,n)}async get(e,t){if(!O7(e))throw new Be("Not found");let n=qs(e),o=X.createV1(114,n);try{let i=await this.client.getIPNS(o,t);return Rc(i)}catch(i){throw i.name==="BadResponseError"?new Be("Not found"):i}}},g1=class{client;constructor(e){this.client=e}async findPeer(e,t={}){let n=await N7(this.client.getPeers(e,t));if(n!=null)return{id:n.ID,multiaddrs:n.Addrs??[]};throw new Be("Not found")}async*getClosestPeers(e,t={}){}};var mt=pr("delegated-routing-v1-http-api-client"),y1={concurrentRequests:4,timeout:3e4,cacheTTL:5*60*1e3,cacheName:"delegated-routing-v1-cache"},w1=class{started;httpQueue;shutDownController;clientUrl;timeout;contentRouting;peerRouting;filterAddrs;filterProtocols;inFlightRequests;cacheName;cache;cacheTTL;constructor(e,t={}){this.started=!1,this.shutDownController=new AbortController,this.shutDownController.signal,this.httpQueue=new Tn({concurrency:t.concurrentRequests??y1.concurrentRequests}),this.inFlightRequests=new Map,this.clientUrl=e instanceof URL?e:new URL(e),this.timeout=t.timeout??y1.timeout,this.filterAddrs=t.filterAddrs,this.filterProtocols=t.filterProtocols,this.contentRouting=new m1(this),this.peerRouting=new g1(this),this.cacheName=t.cacheName??y1.cacheName,this.cacheTTL=t.cacheTTL??y1.cacheTTL}get[pn](){return this.contentRouting}get[mn](){return this.peerRouting}isStarted(){return this.started}async start(){this.started||(this.started=!0,this.cacheTTL>0&&(this.cache=await globalThis.caches?.open(this.cacheName),this.cache!=null&&mt("cache enabled with ttl %d",this.cacheTTL)))}async stop(){this.httpQueue.clear(),this.shutDownController.abort(),await globalThis.caches?.delete(this.cacheName),this.started=!1}async*getProviders(e,t={}){mt("getProviders starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=ce([this.shutDownController.signal,n,t.signal]);let i=J(),s=J();this.httpQueue.add(async()=>(i.resolve(),s.promise));try{await i.promise;let a=new URL(`${this.clientUrl}routing/v1/providers/${e.toString()}`);this.#t(a,t.filterAddrs,t.filterProtocols);let c={headers:{Accept:"application/x-ndjson"},signal:o},l=await this.#r(a.toString(),c);if(l==null)throw new an("No response received");if(!l.ok)throw l.status===404?new Be("No matching records found"):l.status===422?new zs("Request does not conform to schema or semantic constraints"):new an(`Unexpected status code: ${l.status}`);if(l.body==null)throw new an("Routing response had no body");let u=l.headers.get("Content-Type");if(u==null)throw new an("No Content-Type header received");if(u?.startsWith("application/json")){let d=await l.json();for(let f of d.Providers){let h=this.#e(f);h!=null&&(yield h)}}else if(u.includes("application/x-ndjson"))for await(let d of Lc(i1(l.body))){let f=this.#e(d);f!=null&&(yield f)}else throw new an(`Unsupported Content-Type: ${u}`)}catch(a){mt.error("getProviders errored:",a)}finally{o.clear(),s.resolve(),mt("getProviders finished: %c",e)}}async*getPeers(e,t={}){mt("getPeers starts: %c",e);let n=AbortSignal.timeout(this.timeout),o=ce([this.shutDownController.signal,n,t.signal]);let i=J(),s=J();this.httpQueue.add(async()=>(i.resolve(),s.promise));try{await i.promise;let a=new URL(`${this.clientUrl}routing/v1/peers/${e.toCID().toString()}`);this.#t(a,t.filterAddrs,t.filterProtocols);let c={headers:{Accept:"application/x-ndjson"},signal:o},l=await this.#r(a.toString(),c);if(l.status===404)throw new Be("No matching records found");if(l.status===422)throw new zs("Request does not conform to schema or semantic constraints");if(l.body==null)throw new an("Routing response had no body");if(l.headers.get("Content-Type")==="application/json"){let d=await l.json();for(let f of d.Peers){let h=this.#e(f);h!=null&&(yield h)}}else for await(let d of Lc(i1(l.body))){let f=this.#e(d);f!=null&&(yield f)}}catch(a){mt.error("getPeers errored:",a)}finally{o.clear(),s.resolve(),mt("getPeers finished: %c",e)}}async getIPNS(e,t={}){mt("getIPNS starts: %s",e);let n=AbortSignal.timeout(this.timeout),o=ce([this.shutDownController.signal,n,t.signal]);let i=J(),s=J();this.httpQueue.add(async()=>(i.resolve(),s.promise));let a=`${this.clientUrl}routing/v1/ipns/${e}`;try{await i.promise;let c={headers:{Accept:"application/vnd.ipfs.ipns-record"},signal:o},l=await this.#r(a,c);if(mt("getIPNS GET %s %d",a,l.status),l.status===404)throw new Be("No matching records found");if(l.status===422)throw new zs("Request does not conform to schema or semantic constraints");if(l.body==null)throw new an("GET ipns response had no body");let u=await l.arrayBuffer(),d=new Uint8Array(u,0,u.byteLength);return t.validate!==!1&&await h1(Dc(e.multihash),d),Cn(d)}catch(c){throw mt.error("getIPNS GET %s error:",a,c),c}finally{o.clear(),s.resolve(),mt("getIPNS finished: %s",e)}}async putIPNS(e,t,n={}){mt("putIPNS starts: %c",e);let o=AbortSignal.timeout(this.timeout),i=ce([this.shutDownController.signal,o,n.signal]);let s=J(),a=J();this.httpQueue.add(async()=>(s.resolve(),a.promise));let c=`${this.clientUrl}routing/v1/ipns/${e}`;try{await s.promise;let l=Rc(t),u={method:"PUT",headers:{"Content-Type":"application/vnd.ipfs.ipns-record"},body:l,signal:i},d=await this.#r(c,u);if(mt("putIPNS PUT %s %d",c,d.status),d.status!==200)throw new an("PUT ipns response had status other than 200")}catch(l){throw mt.error("putIPNS PUT %s error:",c,l.stack),l}finally{i.clear(),a.resolve(),mt("putIPNS finished: %c",e)}}#e(e){try{let t=[],n=e.Addrs?.map(H)??[];return e.Protocols!=null&&t.push(...e.Protocols),e.Protocol!=null&&(t.push(e.Protocol),delete e.Protocol),{...e,Schema:"peer",ID:Ue(e.ID),Addrs:n,Protocols:t}}catch(t){mt.error("could not conform record to peer schema",t)}}#t(e,t,n){if(t!=null||this.filterAddrs!=null){let o=t?.join(",")??this.filterAddrs?.join(",")??"";o!==""&&e.searchParams.set("filter-addrs",o)}if(n!=null||this.filterProtocols!=null){let o=n?.join(",")??this.filterProtocols?.join(",")??"";o!==""&&e.searchParams.set("filter-protocols",o)}}async#r(e,t){let n=t.method??"GET",o=`${n}-${e}`;if(n==="GET"){let c=await this.cache?.match(e);if(c!=null){if(parseInt(c.headers.get("x-cache-expires")??"0",10)>Date.now())return mt("returning cached response for %s",o),c;await this.cache?.delete(e)}}let i=this.inFlightRequests.get(o);if(i!=null){let c=await i;return mt("deduplicating outgoing request for %s",o),c.clone()}let s=fetch(e,t).then(async c=>{if(this.cache!=null&&c.ok&&n==="GET"){let l=Date.now()+this.cacheTTL,u=new Headers(c.headers);u.set("x-cache-expires",l.toString());let d=new Response(c.clone().body,{status:c.status,statusText:c.statusText,headers:u});await this.cache.put(e,d)}return c}).finally(()=>{this.inFlightRequests.delete(o)});return this.inFlightRequests.set(o,s),await s}};function M7(r,e={}){return new w1(new URL(r),e)}function xm(){return{filterProtocols:["unknown","transport-bitswap","transport-ipfs-gateway-http"],filterAddrs:["https","webtransport","webrtc","webrtc-direct","wss","tls"]}}var U7="[a-fA-F\\d:]",Uo=r=>r&&r.includeBoundaries?`(?:(?<=\\s|^)(?=${U7})|(?<=${U7})(?=\\s|$))`:"",cn="(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}",it="[a-fA-F\\d]{1,4}",b1=`
8
- (?:
9
- (?:${it}:){7}(?:${it}|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8
10
- (?:${it}:){6}(?:${cn}|:${it}|:)| // 1:2:3:4:5:6:: 1:2:3:4:5:6::8 1:2:3:4:5:6::8 1:2:3:4:5:6::1.2.3.4
11
- (?:${it}:){5}(?::${cn}|(?::${it}){1,2}|:)| // 1:2:3:4:5:: 1:2:3:4:5::7:8 1:2:3:4:5::8 1:2:3:4:5::7:1.2.3.4
12
- (?:${it}:){4}(?:(?::${it}){0,1}:${cn}|(?::${it}){1,3}|:)| // 1:2:3:4:: 1:2:3:4::6:7:8 1:2:3:4::8 1:2:3:4::6:7:1.2.3.4
13
- (?:${it}:){3}(?:(?::${it}){0,2}:${cn}|(?::${it}){1,4}|:)| // 1:2:3:: 1:2:3::5:6:7:8 1:2:3::8 1:2:3::5:6:7:1.2.3.4
14
- (?:${it}:){2}(?:(?::${it}){0,3}:${cn}|(?::${it}){1,5}|:)| // 1:2:: 1:2::4:5:6:7:8 1:2::8 1:2::4:5:6:7:1.2.3.4
15
- (?:${it}:){1}(?:(?::${it}){0,4}:${cn}|(?::${it}){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4
16
- (?::(?:(?::${it}){0,5}:${cn}|(?::${it}){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4
17
- )(?:%[0-9a-zA-Z]{1,})? // %eth0 %1
18
- `.replace(/\s*\/\/.*$/gm,"").replace(/\n/g,"").trim(),OT=new RegExp(`(?:^${cn}$)|(?:^${b1}$)`),MT=new RegExp(`^${cn}$`),UT=new RegExp(`^${b1}$`),vm=r=>r&&r.exact?OT:new RegExp(`(?:${Uo(r)}${cn}${Uo(r)})|(?:${Uo(r)}${b1}${Uo(r)})`,"g");vm.v4=r=>r&&r.exact?MT:new RegExp(`${Uo(r)}${cn}${Uo(r)}`,"g");vm.v6=r=>r&&r.exact?UT:new RegExp(`${Uo(r)}${b1}${Uo(r)}`,"g");var Em=vm;function Sm(r){let e=(...t)=>r(...t);return Object.defineProperty(e,"name",{value:`functionTimeout(${r.name||"<anonymous>"})`,configurable:!0}),e}function F7(){return!1}var{toString:FT}=Object.prototype;function Am(r){return FT.call(r)==="[object RegExp]"}var V7={global:"g",ignoreCase:"i",multiline:"m",dotAll:"s",sticky:"y",unicode:"u"};function Im(r,e={}){if(!Am(r))throw new TypeError("Expected a RegExp instance");let t=Object.keys(V7).map(o=>(typeof e[o]=="boolean"?e[o]:r[o])?V7[o]:"").join(""),n=new RegExp(e.source||r.source,t);return n.lastIndex=typeof e.lastIndex=="number"?e.lastIndex:r.lastIndex,n}function Tm(r,e,{timeout:t}={}){try{return Sm(()=>Im(r).test(e),{timeout:t})()}catch(n){if(F7(n))return!1;throw n}}var VT=15,$T=45,$7={timeout:400};function _m(r){return r.length>$T?!1:Tm(Em.v6({exact:!0}),r,$7)}function K7(r){return r.length>VT?!1:Tm(Em.v4({exact:!0}),r,$7)}var H7={http:"80",https:"443",ws:"80",wss:"443"},KT=["http","https","ws","wss"];function q7(r,e){e=e??{};let t=e.defaultDnsType??"dns4",{scheme:n,hostname:o,port:i}=HT(r),a="/"+[qT(o,t),zT(i,n),WT(n)].filter(c=>!!c).reduce((c,l)=>c.concat(l),[]).join("/");return H(a)}function HT(r){let[e]=r.split(":");KT.includes(e)||(r="http"+r.substring(e.length));let{protocol:t,hostname:n,port:o}=new URL(r);if(o==null||o===""){let i=GT(e);i!=null&&(o=i),i==null&&t==="http:"&&(o="80")}return{scheme:e,hostname:n,port:o}}function qT(r,e){if(!(r==null||r==="")){if(K7(r))return["ip4",r];if(_m(r))return["ip6",r];if(r[0]==="["){let t=r.substring(1,r.length-1);if(_m(t))return["ip6",t]}return[e,r]}}function zT(r,e){if(!(r==null||r===""))return e==="udp"?["udp",r]:["tcp",r]}function WT(r){if(r.match(/^tcp$|^udp$/)==null)return[r]}function GT(r){if(!(r==null||r===""||H7[r]==null))return H7[r]}var QT=["https://trustless-gateway.link","https://4everland.io"],YT=2336;function XT(r){return r=r.toString(),{id:In(X.createV1(YT,Jt.digest(N(r)))),multiaddrs:[q7(r)]}}var Cm=class{gateways;constructor(e={}){this.gateways=(e.gateways??QT).map(t=>XT(t))}async*findProviders(e,t){yield*this.gateways.toSorted(()=>Math.random()>.5?1:-1).map(n=>({...n,protocols:["transport-ipfs-gateway-http"]}))}};function km(r={}){return new Cm(r)}var Pm=class{libp2p;constructor(e){this.libp2p=e}async provide(e,t){await this.libp2p.contentRouting.provide(e,t)}async cancelReprovide(e,t){await this.libp2p.contentRouting.cancelReprovide(e,t)}async*findProviders(e,t){yield*this.libp2p.contentRouting.findProviders(e,t)}async put(e,t,n){await this.libp2p.contentRouting.put(e,t,n)}async get(e,t){return this.libp2p.contentRouting.get(e,t)}async findPeer(e,t){return this.libp2p.peerRouting.findPeer(e,t)}async*getClosestPeers(e,t){yield*this.libp2p.peerRouting.getClosestPeers(e,t)}};function Rm(r){return new Pm(r)}var Nc=class extends Jn{data;constructor(){super(),this.data=new Map}put(e,t){return this.data.set(at.encode(e.multihash.bytes),t),e}get(e){let t=this.data.get(at.encode(e.multihash.bytes));if(t==null)throw new Rr;return t}has(e){return this.data.has(at.encode(e.multihash.bytes))}async delete(e){this.data.delete(at.encode(e.multihash.bytes))}async*getAll(){for(let[e,t]of this.data.entries())yield{cid:X.createV1(ri,Ae(at.decode(e))),block:t}}};var eG=pr("blockstore:core:tiered");var G7="SHARDING";function ZT(r){return r[Symbol.asyncIterator]!=null}function JT(r){if(ZT(r))return(async()=>{let t=[];for await(let n of r)t.push(n);return t})();let e=[];for(let t of r)e.push(t);return e}var Li=JT;function e_(r){return r[Symbol.asyncIterator]!=null}function t_(r,e){return e_(r)?async function*(){yield*(await Li(r)).sort(e)}():function*(){yield*Li(r).sort(e)}()}var x1=t_;var ro=class{put(e,t,n){return Promise.reject(new Error(".put is not implemented"))}get(e,t){return Promise.reject(new Error(".get is not implemented"))}has(e,t){return Promise.reject(new Error(".has is not implemented"))}delete(e,t){return Promise.reject(new Error(".delete is not implemented"))}async*putMany(e,t={}){for await(let{key:n,value:o}of e)await this.put(n,o,t),yield n}async*getMany(e,t={}){for await(let n of e)yield{key:n,value:await this.get(n,t)}}async*deleteMany(e,t={}){for await(let n of e)await this.delete(n,t),yield n}batch(){let e=[],t=[];return{put(n,o){e.push({key:n,value:o})},delete(n){t.push(n)},commit:async n=>{await Rt(this.putMany(e,n)),e=[],await Rt(this.deleteMany(t,n)),t=[]}}}async*_all(e,t){throw new Error("._all is not implemented")}async*_allKeys(e,t){throw new Error("._allKeys is not implemented")}query(e,t){let n=this._all(e,t);if(e.prefix!=null){let o=e.prefix;n=rn(n,i=>i.key.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,i)=>rn(o,i),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,i)=>x1(o,i),n)),e.offset!=null){let o=0,i=e.offset;n=rn(n,()=>o++>=i)}return e.limit!=null&&(n=ho(n,e.limit)),n}queryKeys(e,t){let n=this._allKeys(e,t);if(e.prefix!=null){let o=e.prefix;n=rn(n,i=>i.toString().startsWith(o))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((o,i)=>rn(o,i),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((o,i)=>x1(o,i),n)),e.offset!=null){let o=e.offset,i=0;n=rn(n,()=>i++>=o)}return e.limit!=null&&(n=ho(n,e.limit)),n}};var Ni=class extends ro{data;constructor(){super(),this.data=new Map}put(e,t){return this.data.set(e.toString(),t),e}get(e){let t=this.data.get(e.toString());if(t==null)throw new Rr;return t}has(e){return this.data.has(e.toString())}delete(e){this.data.delete(e.toString())}*_all(){for(let[e,t]of this.data.entries())yield{key:new De(e),value:t}}*_allKeys(){for(let e of this.data.keys())yield new De(e)}};var LG=new De(G7);var GG=pr("datastore:core:tiered");var v1=class extends Od{libp2p;constructor(e){super({...e,components:{libp2p:e.libp2p}}),this.libp2p=e.libp2p}async start(){await super.start(),await this.libp2p.start()}async stop(){await super.stop(),await this.libp2p.stop()}};var Dm=class{readNext;haveNext;ended;nextResult;constructor(){this.ended=!1,this.readNext=J(),this.haveNext=J()}[Symbol.asyncIterator](){return this}async next(){if(this.nextResult==null&&await this.haveNext.promise,this.nextResult==null)throw new Error("HaveNext promise resolved but nextResult was undefined");let e=this.nextResult;return this.nextResult=void 0,this.readNext.resolve(),this.readNext=J(),e}async throw(e){return this.ended=!0,e!=null&&(this.haveNext.promise.catch(()=>{}),this.haveNext.reject(e)),{done:!0,value:void 0}}async return(){let e={done:!0,value:void 0};return await this._push(void 0),e}async push(e,t){await this._push(e,t)}async end(e,t){e!=null?await this.throw(e):await this._push(void 0,t)}async _push(e,t){if(e!=null&&this.ended)throw new Error("Cannot push value onto an ended pushable");for(;this.nextResult!=null;)await this.readNext.promise;e!=null?this.nextResult={done:!1,value:e}:(this.ended=!0,this.nextResult={done:!0,value:void 0}),this.haveNext.resolve(),this.haveNext=J(),await st(this.readNext.promise,t?.signal,t)}};function Y7(){return new Dm}var E1=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};var Lm=class extends Error{code;constructor(e,t){super(e),this.code=t}},Nm=class extends Lm{type;constructor(e){super(e,"ABORT_ERR"),this.type="aborted",this.name="AbortError"}};function Bi(r,e){let t=Y7();r.sink(t).catch(async s=>{await t.end(s)}),r.sink=async s=>{for await(let a of s)await t.push(a);await t.end()};let n=r.source;r.source[Symbol.iterator]!=null?n=r.source[Symbol.iterator]():r.source[Symbol.asyncIterator]!=null&&(n=r.source[Symbol.asyncIterator]());let o=new ue;return{read:async(s,a)=>{a?.signal?.throwIfAborted();let c,l=new Promise((u,d)=>{c=()=>{d(new Nm("Read aborted"))},a?.signal?.addEventListener("abort",c)});try{if(s==null){let{done:d,value:f}=await Promise.race([n.next(),l]);return d===!0?new ue:f}for(;o.byteLength<s;){let{value:d,done:f}=await Promise.race([n.next(),l]);if(f===!0)throw new E1("unexpected end of input");o.append(d)}let u=o.sublist(0,s);return o.consume(s),u}finally{c!=null&&a?.signal?.removeEventListener("abort",c)}},write:async(s,a)=>{a?.signal?.throwIfAborted(),s instanceof Uint8Array?await t.push(s,a):await t.push(s.subarray(),a)},unwrap:()=>{if(o.byteLength>0){let s=r.source;r.source=async function*(){e?.yieldBytes===!1?yield o:yield*o,yield*s}()}return r}}}var S1=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},A1=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},I1=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function kn(r,e={}){let t=Bi(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=pe(e.maxDataLength));let n=e?.lengthDecoder??$t,o=e?.lengthEncoder??$e;return{read:async s=>{let a=-1,c=new ue;for(;;){c.append(await t.read(1,s));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(a<0)throw new S1("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new I1("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new A1("message length too long");return t.read(a,s)},write:async(s,a)=>{await t.write(new ue(o(s.byteLength),s),a)},writeV:async(s,a)=>{let c=new ue(...s.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function Bm(){let r=J(),e=!1;return{sink:async t=>{if(e)throw new Error("already piped");e=!0,r.resolve(t)},source:async function*(){yield*await r.promise}()}}function X7(){let r=Bm(),e=Bm();return[{source:r.source,sink:e.sink},{source:e.source,sink:r.sink}]}var Ws=!!globalThis.process?.env?.DUMP_SESSION_KEYS;function T1(r){if(!Number.isSafeInteger(r)||r<0)throw new Error(`positive integer expected, not ${r}`)}function Om(r){if(typeof r!="boolean")throw new Error(`boolean expected, not ${r}`)}function Mm(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function ar(r,...e){if(!Mm(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${r.length}`)}function Um(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function j7(r,e){ar(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var no=r=>new Uint32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4)),Z7=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),r_=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;if(!r_)throw new Error("Non little-endian hardware is not supported");function n_(r){if(typeof r!="string")throw new Error(`string expected, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function _1(r){if(typeof r=="string")r=n_(r);else if(Mm(r))r=C1(r);else throw new Error(`Uint8Array expected, got ${typeof r}`);return r}function J7(r,e){if(e==null||typeof e!="object")throw new Error("options must be defined");return Object.assign(r,e)}function e9(r,e){if(r.length!==e.length)return!1;let t=0;for(let n=0;n<r.length;n++)t|=r[n]^e[n];return t===0}var Fm=(r,e)=>(Object.assign(e,r),e);function Vm(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),i=BigInt(4294967295),s=Number(t>>o&i),a=Number(t&i),c=n?4:0,l=n?0:4;r.setUint32(e+c,s,n),r.setUint32(e+l,a,n)}function C1(r){return Uint8Array.from(r)}function oo(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}var r9=r=>Uint8Array.from(r.split("").map(e=>e.charCodeAt(0))),o_=r9("expand 16-byte k"),i_=r9("expand 32-byte k"),s_=no(o_),n9=no(i_),OQ=n9.slice();function Q(r,e){return r<<e|r>>>32-e}function $m(r){return r.byteOffset%4===0}var k1=64,a_=16,o9=2**32-1,t9=new Uint32Array;function c_(r,e,t,n,o,i,s,a){let c=o.length,l=new Uint8Array(k1),u=no(l),d=$m(o)&&$m(i),f=d?no(o):t9,h=d?no(i):t9;for(let p=0;p<c;s++){if(r(e,t,n,u,s,a),s>=o9)throw new Error("arx: counter overflow");let g=Math.min(k1,c-p);if(d&&g===k1){let m=p/4;if(p%4!==0)throw new Error("arx: invalid block position");for(let y=0,x;y<a_;y++)x=m+y,h[x]=f[x]^u[y];p+=k1;continue}for(let m=0,y;m<g;m++)y=p+m,i[y]=o[y]^l[m];p+=g}}function Km(r,e){let{allowShortKeys:t,extendNonceFn:n,counterLength:o,counterRight:i,rounds:s}=J7({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},e);if(typeof r!="function")throw new Error("core must be a function");return T1(o),T1(s),Om(i),Om(t),(a,c,l,u,d=0)=>{ar(a),ar(c),ar(l);let f=l.length;if(u===void 0&&(u=new Uint8Array(f)),ar(u),T1(d),d<0||d>=o9)throw new Error("arx: counter overflow");if(u.length<f)throw new Error(`arx: output (${u.length}) is shorter than data (${f})`);let h=[],p=a.length,g,m;if(p===32)h.push(g=C1(a)),m=n9;else if(p===16&&t)g=new Uint8Array(32),g.set(a),g.set(a,16),m=s_,h.push(g);else throw new Error(`arx: invalid 32-byte key, got length=${p}`);$m(c)||h.push(c=C1(c));let y=no(g);if(n){if(c.length!==24)throw new Error("arx: extended nonce must be 24 bytes");n(m,y,no(c.subarray(0,16)),y),c=c.subarray(16)}let x=16-o;if(x!==c.length)throw new Error(`arx: nonce must be ${x} or 16 bytes`);if(x!==12){let I=new Uint8Array(12);I.set(c,i?0:12-c.length),c=I,h.push(c)}let w=no(c);return c_(r,m,y,w,l,u,d,s),oo(...h),u}}var vt=(r,e)=>r[e++]&255|(r[e++]&255)<<8,Hm=class{constructor(e){this.blockLen=16,this.outputLen=16,this.buffer=new Uint8Array(16),this.r=new Uint16Array(10),this.h=new Uint16Array(10),this.pad=new Uint16Array(8),this.pos=0,this.finished=!1,e=_1(e),ar(e,32);let t=vt(e,0),n=vt(e,2),o=vt(e,4),i=vt(e,6),s=vt(e,8),a=vt(e,10),c=vt(e,12),l=vt(e,14);this.r[0]=t&8191,this.r[1]=(t>>>13|n<<3)&8191,this.r[2]=(n>>>10|o<<6)&7939,this.r[3]=(o>>>7|i<<9)&8191,this.r[4]=(i>>>4|s<<12)&255,this.r[5]=s>>>1&8190,this.r[6]=(s>>>14|a<<2)&8191,this.r[7]=(a>>>11|c<<5)&8065,this.r[8]=(c>>>8|l<<8)&8191,this.r[9]=l>>>5&127;for(let u=0;u<8;u++)this.pad[u]=vt(e,16+2*u)}process(e,t,n=!1){let o=n?0:2048,{h:i,r:s}=this,a=s[0],c=s[1],l=s[2],u=s[3],d=s[4],f=s[5],h=s[6],p=s[7],g=s[8],m=s[9],y=vt(e,t+0),x=vt(e,t+2),w=vt(e,t+4),I=vt(e,t+6),B=vt(e,t+8),L=vt(e,t+10),P=vt(e,t+12),S=vt(e,t+14),A=i[0]+(y&8191),F=i[1]+((y>>>13|x<<3)&8191),D=i[2]+((x>>>10|w<<6)&8191),O=i[3]+((w>>>7|I<<9)&8191),$=i[4]+((I>>>4|B<<12)&8191),k=i[5]+(B>>>1&8191),R=i[6]+((B>>>14|L<<2)&8191),E=i[7]+((L>>>11|P<<5)&8191),v=i[8]+((P>>>8|S<<8)&8191),C=i[9]+(S>>>5|o),T=0,K=T+A*a+F*(5*m)+D*(5*g)+O*(5*p)+$*(5*h);T=K>>>13,K&=8191,K+=k*(5*f)+R*(5*d)+E*(5*u)+v*(5*l)+C*(5*c),T+=K>>>13,K&=8191;let q=T+A*c+F*a+D*(5*m)+O*(5*g)+$*(5*p);T=q>>>13,q&=8191,q+=k*(5*h)+R*(5*f)+E*(5*d)+v*(5*u)+C*(5*l),T+=q>>>13,q&=8191;let Y=T+A*l+F*c+D*a+O*(5*m)+$*(5*g);T=Y>>>13,Y&=8191,Y+=k*(5*p)+R*(5*h)+E*(5*f)+v*(5*d)+C*(5*u),T+=Y>>>13,Y&=8191;let ae=T+A*u+F*l+D*c+O*a+$*(5*m);T=ae>>>13,ae&=8191,ae+=k*(5*g)+R*(5*p)+E*(5*h)+v*(5*f)+C*(5*d),T+=ae>>>13,ae&=8191;let ie=T+A*d+F*u+D*l+O*c+$*a;T=ie>>>13,ie&=8191,ie+=k*(5*m)+R*(5*g)+E*(5*p)+v*(5*h)+C*(5*f),T+=ie>>>13,ie&=8191;let de=T+A*f+F*d+D*u+O*l+$*c;T=de>>>13,de&=8191,de+=k*a+R*(5*m)+E*(5*g)+v*(5*p)+C*(5*h),T+=de>>>13,de&=8191;let xe=T+A*h+F*f+D*d+O*u+$*l;T=xe>>>13,xe&=8191,xe+=k*c+R*a+E*(5*m)+v*(5*g)+C*(5*p),T+=xe>>>13,xe&=8191;let Le=T+A*p+F*h+D*f+O*d+$*u;T=Le>>>13,Le&=8191,Le+=k*l+R*c+E*a+v*(5*m)+C*(5*g),T+=Le>>>13,Le&=8191;let Ne=T+A*g+F*p+D*h+O*f+$*d;T=Ne>>>13,Ne&=8191,Ne+=k*u+R*l+E*c+v*a+C*(5*m),T+=Ne>>>13,Ne&=8191;let Ve=T+A*m+F*g+D*p+O*h+$*f;T=Ve>>>13,Ve&=8191,Ve+=k*d+R*u+E*l+v*c+C*a,T+=Ve>>>13,Ve&=8191,T=(T<<2)+T|0,T=T+K|0,K=T&8191,T=T>>>13,q+=T,i[0]=K,i[1]=q,i[2]=Y,i[3]=ae,i[4]=ie,i[5]=de,i[6]=xe,i[7]=Le,i[8]=Ne,i[9]=Ve}finalize(){let{h:e,pad:t}=this,n=new Uint16Array(10),o=e[1]>>>13;e[1]&=8191;for(let a=2;a<10;a++)e[a]+=o,o=e[a]>>>13,e[a]&=8191;e[0]+=o*5,o=e[0]>>>13,e[0]&=8191,e[1]+=o,o=e[1]>>>13,e[1]&=8191,e[2]+=o,n[0]=e[0]+5,o=n[0]>>>13,n[0]&=8191;for(let a=1;a<10;a++)n[a]=e[a]+o,o=n[a]>>>13,n[a]&=8191;n[9]-=8192;let i=(o^1)-1;for(let a=0;a<10;a++)n[a]&=i;i=~i;for(let a=0;a<10;a++)e[a]=e[a]&i|n[a];e[0]=(e[0]|e[1]<<13)&65535,e[1]=(e[1]>>>3|e[2]<<10)&65535,e[2]=(e[2]>>>6|e[3]<<7)&65535,e[3]=(e[3]>>>9|e[4]<<4)&65535,e[4]=(e[4]>>>12|e[5]<<1|e[6]<<14)&65535,e[5]=(e[6]>>>2|e[7]<<11)&65535,e[6]=(e[7]>>>5|e[8]<<8)&65535,e[7]=(e[8]>>>8|e[9]<<5)&65535;let s=e[0]+t[0];e[0]=s&65535;for(let a=1;a<8;a++)s=(e[a]+t[a]|0)+(s>>>16)|0,e[a]=s&65535;oo(n)}update(e){Um(this);let{buffer:t,blockLen:n}=this;e=_1(e);let o=e.length;for(let i=0;i<o;){let s=Math.min(n-this.pos,o-i);if(s===n){for(;n<=o-i;i+=n)this.process(e,i);continue}t.set(e.subarray(i,i+s),this.pos),this.pos+=s,i+=s,this.pos===n&&(this.process(t,0,!1),this.pos=0)}return this}destroy(){oo(this.h,this.r,this.buffer,this.pad)}digestInto(e){Um(this),j7(e,this),this.finished=!0;let{buffer:t,h:n}=this,{pos:o}=this;if(o){for(t[o++]=1;o<16;o++)t[o]=0;this.process(t,0,!0)}this.finalize();let i=0;for(let s=0;s<8;s++)e[i++]=n[s]>>>0,e[i++]=n[s]>>>8;return e}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}};function l_(r){let e=(n,o)=>r(o).update(_1(n)).digest(),t=r(new Uint8Array(32));return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=n=>r(n),e}var i9=l_(r=>new Hm(r));function c9(r,e,t,n,o,i=20){let s=r[0],a=r[1],c=r[2],l=r[3],u=e[0],d=e[1],f=e[2],h=e[3],p=e[4],g=e[5],m=e[6],y=e[7],x=o,w=t[0],I=t[1],B=t[2],L=s,P=a,S=c,A=l,F=u,D=d,O=f,$=h,k=p,R=g,E=m,v=y,C=x,T=w,K=I,q=B;for(let ae=0;ae<i;ae+=2)L=L+F|0,C=Q(C^L,16),k=k+C|0,F=Q(F^k,12),L=L+F|0,C=Q(C^L,8),k=k+C|0,F=Q(F^k,7),P=P+D|0,T=Q(T^P,16),R=R+T|0,D=Q(D^R,12),P=P+D|0,T=Q(T^P,8),R=R+T|0,D=Q(D^R,7),S=S+O|0,K=Q(K^S,16),E=E+K|0,O=Q(O^E,12),S=S+O|0,K=Q(K^S,8),E=E+K|0,O=Q(O^E,7),A=A+$|0,q=Q(q^A,16),v=v+q|0,$=Q($^v,12),A=A+$|0,q=Q(q^A,8),v=v+q|0,$=Q($^v,7),L=L+D|0,q=Q(q^L,16),E=E+q|0,D=Q(D^E,12),L=L+D|0,q=Q(q^L,8),E=E+q|0,D=Q(D^E,7),P=P+O|0,C=Q(C^P,16),v=v+C|0,O=Q(O^v,12),P=P+O|0,C=Q(C^P,8),v=v+C|0,O=Q(O^v,7),S=S+$|0,T=Q(T^S,16),k=k+T|0,$=Q($^k,12),S=S+$|0,T=Q(T^S,8),k=k+T|0,$=Q($^k,7),A=A+F|0,K=Q(K^A,16),R=R+K|0,F=Q(F^R,12),A=A+F|0,K=Q(K^A,8),R=R+K|0,F=Q(F^R,7);let Y=0;n[Y++]=s+L|0,n[Y++]=a+P|0,n[Y++]=c+S|0,n[Y++]=l+A|0,n[Y++]=u+F|0,n[Y++]=d+D|0,n[Y++]=f+O|0,n[Y++]=h+$|0,n[Y++]=p+k|0,n[Y++]=g+R|0,n[Y++]=m+E|0,n[Y++]=y+v|0,n[Y++]=x+C|0,n[Y++]=w+T|0,n[Y++]=I+K|0,n[Y++]=B+q|0}function u_(r,e,t,n){let o=r[0],i=r[1],s=r[2],a=r[3],c=e[0],l=e[1],u=e[2],d=e[3],f=e[4],h=e[5],p=e[6],g=e[7],m=t[0],y=t[1],x=t[2],w=t[3];for(let B=0;B<20;B+=2)o=o+c|0,m=Q(m^o,16),f=f+m|0,c=Q(c^f,12),o=o+c|0,m=Q(m^o,8),f=f+m|0,c=Q(c^f,7),i=i+l|0,y=Q(y^i,16),h=h+y|0,l=Q(l^h,12),i=i+l|0,y=Q(y^i,8),h=h+y|0,l=Q(l^h,7),s=s+u|0,x=Q(x^s,16),p=p+x|0,u=Q(u^p,12),s=s+u|0,x=Q(x^s,8),p=p+x|0,u=Q(u^p,7),a=a+d|0,w=Q(w^a,16),g=g+w|0,d=Q(d^g,12),a=a+d|0,w=Q(w^a,8),g=g+w|0,d=Q(d^g,7),o=o+l|0,w=Q(w^o,16),p=p+w|0,l=Q(l^p,12),o=o+l|0,w=Q(w^o,8),p=p+w|0,l=Q(l^p,7),i=i+u|0,m=Q(m^i,16),g=g+m|0,u=Q(u^g,12),i=i+u|0,m=Q(m^i,8),g=g+m|0,u=Q(u^g,7),s=s+d|0,y=Q(y^s,16),f=f+y|0,d=Q(d^f,12),s=s+d|0,y=Q(y^s,8),f=f+y|0,d=Q(d^f,7),a=a+c|0,x=Q(x^a,16),h=h+x|0,c=Q(c^h,12),a=a+c|0,x=Q(x^a,8),h=h+x|0,c=Q(c^h,7);let I=0;n[I++]=o,n[I++]=i,n[I++]=s,n[I++]=a,n[I++]=m,n[I++]=y,n[I++]=x,n[I++]=w}var d_=Km(c9,{counterRight:!1,counterLength:4,allowShortKeys:!1}),f_=Km(c9,{counterRight:!1,counterLength:8,extendNonceFn:u_,allowShortKeys:!1});var h_=new Uint8Array(16),s9=(r,e)=>{r.update(e);let t=e.length%16;t&&r.update(h_.subarray(t))},p_=new Uint8Array(32);function a9(r,e,t,n,o){let i=r(e,t,p_),s=i9.create(i);o&&s9(s,o),s9(s,n);let a=new Uint8Array(16),c=Z7(a);Vm(c,0,BigInt(o?o.length:0),!0),Vm(c,8,BigInt(n.length),!0),s.update(a);let l=s.digest();return oo(i,a),l}var l9=r=>(e,t,n)=>(ar(e,32),ar(t),{encrypt(i,s){let a=i.length,c=a+16;s?ar(s,c):s=new Uint8Array(c),r(e,t,i,s,1);let l=a9(r,e,t,s.subarray(0,-16),n);return s.set(l,a),oo(l),s},decrypt(i,s){let a=i.length,c=a-16;if(a<16)throw new Error("encrypted data must be at least 16 bytes");s?ar(s,c):s=new Uint8Array(c);let l=i.subarray(0,-16),u=i.subarray(-16),d=a9(r,e,t,l,n);if(!e9(u,d))throw new Error("invalid tag");return r(e,t,l,s,1),oo(d),s}}),qm=Fm({blockSize:64,nonceLength:12,tagLength:16},l9(d_)),zQ=Fm({blockSize:64,nonceLength:24,tagLength:16},l9(f_));function d9(r,e,t){return ai(r),t===void 0&&(t=new Uint8Array(r.outputLen)),Co(r,Wr(t),Wr(e))}var zm=new Uint8Array([0]),u9=new Uint8Array;function f9(r,e,t,n=32){if(ai(r),go(n),n>255*r.outputLen)throw new Error("Length should be <= 255*HashLen");let o=Math.ceil(n/r.outputLen);t===void 0&&(t=u9);let i=new Uint8Array(o*r.outputLen),s=Co.create(r,e),a=s._cloneInto(),c=new Uint8Array(s.outputLen);for(let l=0;l<o;l++)zm[0]=l+1,a.update(l===0?u9:c).update(t).update(zm).digestInto(c),i.set(c,r.outputLen*l),s._cloneInto(a);return s.destroy(),a.destroy(),c.fill(0),zm.fill(0),i.slice(0,n)}var Wm={hashSHA256(r){return Ir(r.subarray())},getHKDF(r,e){let t=d9(Ir,e,r),o=f9(Ir,t,void 0,96),i=o.subarray(0,32),s=o.subarray(32,64),a=o.subarray(64,96);return[i,s,a]},generateX25519KeyPair(){let r=Oa.utils.randomPrivateKey();return{publicKey:Oa.getPublicKey(r),privateKey:r}},generateX25519KeyPairFromSeed(r){return{publicKey:Oa.getPublicKey(r),privateKey:r}},generateX25519SharedKey(r,e){return Oa.getSharedSecret(r.subarray(),e.subarray())},chaCha20Poly1305Encrypt(r,e,t,n){return qm(n,e,t).encrypt(r.subarray())},chaCha20Poly1305Decrypt(r,e,t,n,o){return qm(n,e,t).decrypt(r.subarray(),o)}};var h9=Wm;function p9(r){return{generateKeypair:r.generateX25519KeyPair,dh:(e,t)=>r.generateX25519SharedKey(e.privateKey,t).subarray(0,32),encrypt:r.chaCha20Poly1305Encrypt,decrypt:r.chaCha20Poly1305Decrypt,hash:r.hashSHA256,hkdf:r.getHKDF}}var Gs=r=>{let e=We(2);return e[0]=r>>8,e[1]=r,e};Gs.bytes=2;var Bc=r=>{if(r.length<2)throw RangeError("Could not decode int16BE");if(r instanceof Uint8Array){let e=0;return e+=r[0]<<8,e+=r[1],e}return r.getUint16(0)};Bc.bytes=2;function m9(r){return{xxHandshakeSuccesses:r.registerCounter("libp2p_noise_xxhandshake_successes_total",{help:"Total count of noise xxHandshakes successes_"}),xxHandshakeErrors:r.registerCounter("libp2p_noise_xxhandshake_error_total",{help:"Total count of noise xxHandshakes errors"}),encryptedPackets:r.registerCounter("libp2p_noise_encrypted_packets_total",{help:"Total count of noise encrypted packets successfully"}),decryptedPackets:r.registerCounter("libp2p_noise_decrypted_packets_total",{help:"Total count of noise decrypted packets"}),decryptErrors:r.registerCounter("libp2p_noise_decrypt_errors_total",{help:"Total count of noise decrypt errors"})}}function Gm(r,e){!e.enabled||!Ws||(r?(e(`LOCAL_STATIC_PUBLIC_KEY ${U(r.publicKey,"hex")}`),e(`LOCAL_STATIC_PRIVATE_KEY ${U(r.privateKey,"hex")}`)):e("Missing local static keys."))}function Qm(r,e){!e.enabled||!Ws||(r?(e(`LOCAL_PUBLIC_EPHEMERAL_KEY ${U(r.publicKey,"hex")}`),e(`LOCAL_PRIVATE_EPHEMERAL_KEY ${U(r.privateKey,"hex")}`)):e("Missing local ephemeral keys."))}function g9(r,e){!e.enabled||!Ws||e(r?`REMOTE_STATIC_PUBLIC_KEY ${U(r.subarray(),"hex")}`:"Missing remote static public key.")}function Ym(r,e){!e.enabled||!Ws||e(r?`REMOTE_EPHEMERAL_PUBLIC_KEY ${U(r.subarray(),"hex")}`:"Missing remote ephemeral keys.")}function Xm(r,e,t){!t.enabled||!Ws||(t(`CIPHER_STATE_1 ${r.n.getUint64()} ${r.k&&U(r.k,"hex")}`),t(`CIPHER_STATE_2 ${e.n.getUint64()} ${e.k&&U(e.k,"hex")}`))}function cr(r,e){if(r.length!==e.length)throw new Error("Inputs should have the same length");let t=We(r.length);for(let n=0;n<r.length;n++)t[n]=r[n]^e[n];return t}var Qs=class r extends Error{code;constructor(e="Invalid crypto exchange"){super(e),this.code=r.code}static code="ERR_INVALID_CRYPTO_EXCHANGE"};var m_=0,g_=4294967295,y_="Cipherstate has reached maximum n, a new handshake must be performed",P1=class{n;bytes;view;constructor(e=m_){this.n=e,this.bytes=se(12),this.view=new DataView(this.bytes.buffer,this.bytes.byteOffset,this.bytes.byteLength),this.view.setUint32(4,e,!0)}increment(){this.n++,this.view.setUint32(4,this.n,!0)}getBytes(){return this.bytes}getUint64(){return this.n}assertValue(){if(this.n>g_)throw new Error(y_)}};var Oi=se(0),Ys=class{k;n;crypto;constructor(e,t=void 0,n=0){this.crypto=e,this.k=t,this.n=new P1(n)}hasKey(){return!!this.k}encryptWithAd(e,t){if(!this.hasKey())return t;this.n.assertValue();let n=this.crypto.encrypt(t,this.n.getBytes(),e,this.k);return this.n.increment(),n}decryptWithAd(e,t,n){if(!this.hasKey())return t;this.n.assertValue();let o=this.crypto.decrypt(t,this.n.getBytes(),e,this.k,n);return this.n.increment(),o}},jm=class{cs;ck;h;crypto;constructor(e,t){this.crypto=e;let n=N(t,"utf-8");this.h=w_(e,n),this.ck=this.h,this.cs=new Ys(e)}mixKey(e){let[t,n]=this.crypto.hkdf(this.ck,e);this.ck=t,this.cs=new Ys(this.crypto,n)}mixHash(e){this.h=this.crypto.hash(new ue(this.h,e))}encryptAndHash(e){let t=this.cs.encryptWithAd(this.h,e);return this.mixHash(t),t}decryptAndHash(e){let t=this.cs.decryptWithAd(this.h,e);return this.mixHash(e),t}split(){let[e,t]=this.crypto.hkdf(this.ck,Oi);return[new Ys(this.crypto,e),new Ys(this.crypto,t)]}},Zm=class{ss;s;e;rs;re;initiator;crypto;constructor(e){let{crypto:t,protocolName:n,prologue:o,initiator:i,s,e:a,rs:c,re:l}=e;this.crypto=t,this.ss=new jm(t,n),this.ss.mixHash(o),this.initiator=i,this.s=s,this.e=a,this.rs=c,this.re=l}writeE(){if(this.e)throw new Error("ephemeral keypair is already set");let e=this.crypto.generateKeypair();return this.ss.mixHash(e.publicKey),this.e=e,e.publicKey}writeS(){if(!this.s)throw new Error("static keypair is not set");return this.ss.encryptAndHash(this.s.publicKey)}writeEE(){if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.re))}writeES(){if(this.initiator){if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.rs)throw new Error("remote static public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.rs))}else{if(!this.s)throw new Error("static keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.s,this.re))}}writeSE(){if(this.initiator){if(!this.s)throw new Error("static keypair is not set");if(!this.re)throw new Error("remote ephemeral public key is not set");this.ss.mixKey(this.crypto.dh(this.s,this.re))}else{if(!this.e)throw new Error("ephemeral keypair is not set");if(!this.rs)throw new Error("remote static public key is not set");this.ss.mixKey(this.crypto.dh(this.e,this.rs))}}readE(e,t=0){if(this.re)throw new Error("remote ephemeral public key is already set");if(e.byteLength<t+32)throw new Error("message is not long enough");this.re=e.sublist(t,t+32),this.ss.mixHash(this.re)}readS(e,t=0){if(this.rs)throw new Error("remote static public key is already set");let n=32+(this.ss.cs.hasKey()?16:0);if(e.byteLength<t+n)throw new Error("message is not long enough");let o=e.sublist(t,t+n);return this.rs=this.ss.decryptAndHash(o),n}readEE(){this.writeEE()}readES(){this.writeES()}readSE(){this.writeSE()}},Oc=class extends Zm{writeMessageA(e){return new ue(this.writeE(),this.ss.encryptAndHash(e))}writeMessageB(e){let t=this.writeE();this.writeEE();let n=this.writeS();return this.writeES(),new ue(t,n,this.ss.encryptAndHash(e))}writeMessageC(e){let t=this.writeS();return this.writeSE(),new ue(t,this.ss.encryptAndHash(e))}readMessageA(e){try{return this.readE(e),this.ss.decryptAndHash(e.sublist(32))}catch(t){throw new Qs(`handshake stage 0 validation fail: ${t.message}`)}}readMessageB(e){try{this.readE(e),this.readEE();let t=this.readS(e,32);return this.readES(),this.ss.decryptAndHash(e.sublist(32+t))}catch(t){throw new Qs(`handshake stage 1 validation fail: ${t.message}`)}}readMessageC(e){try{let t=this.readS(e);return this.readSE(),this.ss.decryptAndHash(e.sublist(t))}catch(t){throw new Qs(`handshake stage 2 validation fail: ${t.message}`)}}};function w_(r,e){if(e.length<=32){let t=se(32);return t.set(e),t}else return r.hash(e)}var R1;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.webtransportCerthashes!=null)for(let i of t.webtransportCerthashes)n.uint32(10),n.bytes(i);o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={webtransportCerthashes:[]},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let s=t.uint32();switch(s>>>3){case 1:{o.webtransportCerthashes.push(t.bytes());break}default:{t.skipType(s&7);break}}}return o})),e),r.encode=t=>te(t,r.codec()),r.decode=t=>ee(t,r.codec())})(R1||(R1={}));var Mc;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.identityKey!=null&&t.identityKey.byteLength>0&&(n.uint32(10),n.bytes(t.identityKey)),t.identitySig!=null&&t.identitySig.byteLength>0&&(n.uint32(18),n.bytes(t.identitySig)),t.extensions!=null&&(n.uint32(34),R1.codec().encode(t.extensions,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let o={identityKey:se(0),identitySig:se(0)},i=n==null?t.len:t.pos+n;for(;t.pos<i;){let s=t.uint32();switch(s>>>3){case 1:{o.identityKey=t.bytes();break}case 2:{o.identitySig=t.bytes();break}case 4:{o.extensions=R1.codec().decode(t,t.uint32());break}default:{t.skipType(s&7);break}}}return o})),e),r.encode=t=>te(t,r.codec()),r.decode=t=>ee(t,r.codec())})(Mc||(Mc={}));async function Jm(r,e,t){let n=await r.sign(y9(e));return Mc.encode({identityKey:Nt(r.publicKey),identitySig:n,extensions:t})}async function e3(r,e,t){try{let n=Mc.decode(r),o=tt(n.identityKey);if(t?.equals(o)===!1)throw new Error(`Payload identity key ${o} does not match expected remote identity key ${t}`);if(!e)throw new Error("Remote static does not exist");let i=y9(e);if(!await o.verify(i,n.identitySig))throw new Error("Invalid payload signature");return n}catch(n){throw new ml(n.message)}}function y9(r){let e=N("noise-libp2p-static-key:");return r instanceof Uint8Array?Pe([e,r],e.length+r.length):(r.prepend(e),r)}async function w9(r,e){let{log:t,connection:n,crypto:o,privateKey:i,prologue:s,s:a,remoteIdentityKey:c,extensions:l}=r,u=await Jm(i,a.publicKey,l),d=new Oc({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!0,prologue:s,s:a});Gm(d.s,t),t.trace("Stage 0 - Initiator starting to send first message."),await n.write(d.writeMessageA(Oi),e),t.trace("Stage 0 - Initiator finished sending first message."),Qm(d.e,t),t.trace("Stage 1 - Initiator waiting to receive first message from responder...");let f=d.readMessageB(await n.read(e));t.trace("Stage 1 - Initiator received the message."),Ym(d.re,t),g9(d.rs,t),t.trace("Initiator going to check remote's signature...");let h=await e3(f,d.rs,c);t.trace("All good with the signature!"),t.trace("Stage 2 - Initiator sending third handshake message."),await n.write(d.writeMessageC(u),e),t.trace("Stage 2 - Initiator sent message with signed payload.");let[p,g]=d.ss.split();return Xm(p,g,t),{payload:h,encrypt:m=>p.encryptWithAd(Oi,m),decrypt:(m,y)=>g.decryptWithAd(Oi,m,y)}}async function b9(r,e){let{log:t,connection:n,crypto:o,privateKey:i,prologue:s,s:a,remoteIdentityKey:c,extensions:l}=r,u=await Jm(i,a.publicKey,l),d=new Oc({crypto:o,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!1,prologue:s,s:a});Gm(d.s,t),t.trace("Stage 0 - Responder waiting to receive first message."),d.readMessageA(await n.read(e)),t.trace("Stage 0 - Responder received first message."),Ym(d.re,t),t.trace("Stage 1 - Responder sending out first message with signed payload and static key."),await n.write(d.writeMessageB(u),e),t.trace("Stage 1 - Responder sent the second handshake message with signed payload."),Qm(d.e,t),t.trace("Stage 2 - Responder waiting for third handshake message...");let f=d.readMessageC(await n.read(e));t.trace("Stage 2 - Responder received the message, finished handshake.");let h=await e3(f,d.rs,c),[p,g]=d.ss.split();return Xm(p,g,t),{payload:h,encrypt:m=>g.encryptWithAd(Oi,m),decrypt:(m,y)=>p.decryptWithAd(Oi,m,y)}}var v9=16;function E9(r,e){return async function*(t){for await(let n of t)for(let o=0;o<n.length;o+=65519){let i=o+65519;i>n.length&&(i=n.length);let s;n instanceof Uint8Array?s=r.encrypt(n.subarray(o,i)):s=r.encrypt(n.sublist(o,i)),e?.encryptedPackets.increment(),yield new ue(Gs(s.byteLength),s)}}}function S9(r,e){return async function*(t){for await(let n of t)for(let o=0;o<n.length;o+=65535){let i=o+65535;if(i>n.length&&(i=n.length),i-v9<o)throw new Error("Invalid chunk");let s=n.sublist(o,i),a=n.subarray(o,i-v9);try{let c=r.decrypt(s,a);e?.decryptedPackets.increment(),yield c}catch(c){throw e?.decryptErrors.increment(),c}}}}var D1=class{protocol="/noise";crypto;prologue;staticKey;extensions;metrics;components;constructor(e,t={}){let{staticNoiseKey:n,extensions:o,crypto:i,prologueBytes:s}=t,{metrics:a}=e;this.components=e;let c=i??h9;this.crypto=p9(c),this.extensions=o,this.metrics=a?m9(a):void 0,n?this.staticKey=c.generateX25519KeyPairFromSeed(n):this.staticKey=c.generateX25519KeyPair(),this.prologue=s??se(0)}[Symbol.toStringTag]="@chainsafe/libp2p-noise";[Se]=["@libp2p/connection-encryption","@chainsafe/libp2p-noise"];async secureOutbound(e,t){let n=kn(e,{lengthEncoder:Gs,lengthDecoder:Bc,maxDataLength:65535}),o=await this.performHandshakeInitiator(n,this.components.privateKey,t?.remotePeer?.publicKey,t),i=await this.createSecureConnection(n,o);e.source=i.source,e.sink=i.sink;let s=tt(o.payload.identityKey);return{conn:e,remoteExtensions:o.payload.extensions,remotePeer:An(s)}}async secureInbound(e,t){let n=kn(e,{lengthEncoder:Gs,lengthDecoder:Bc,maxDataLength:65535}),o=await this.performHandshakeResponder(n,this.components.privateKey,t?.remotePeer?.publicKey,t),i=await this.createSecureConnection(n,o);e.source=i.source,e.sink=i.sink;let s=tt(o.payload.identityKey);return{conn:e,remoteExtensions:o.payload.extensions,remotePeer:An(s)}}async performHandshakeInitiator(e,t,n,o){let i;try{i=await w9({connection:e,privateKey:t,remoteIdentityKey:n,log:this.components.logger.forComponent("libp2p:noise:xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:this.extensions},o),this.metrics?.xxHandshakeSuccesses.increment()}catch(s){throw this.metrics?.xxHandshakeErrors.increment(),s}return i}async performHandshakeResponder(e,t,n,o){let i;try{i=await b9({connection:e,privateKey:t,remoteIdentityKey:n,log:this.components.logger.forComponent("libp2p:noise:xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:this.extensions},o),this.metrics?.xxHandshakeSuccesses.increment()}catch(s){throw this.metrics?.xxHandshakeErrors.increment(),s}return i}async createSecureConnection(e,t){let[n,o]=X7(),i=e.unwrap();return await dt(n,E9(t,this.metrics),i,s=>Kr(s,{lengthDecoder:Bc}),S9(t,this.metrics),n),o}};function L1(r={}){return e=>new D1(e,r)}function N1(r){if(r!=null){if(typeof r[Symbol.iterator]=="function")return r[Symbol.iterator]();if(typeof r[Symbol.asyncIterator]=="function")return r[Symbol.asyncIterator]();if(typeof r.next=="function")return r}throw new Error("argument is not an iterator or iterable")}var ln=class extends Error{static name="InvalidFrameError";constructor(e="The frame was invalid"){super(e),this.name="InvalidFrameError"}},Xs=class extends Error{static name="UnrequestedPingError";constructor(e="Unrequested ping error"){super(e),this.name="UnrequestedPingError"}},js=class extends Error{static name="NotMatchingPingError";constructor(e="Unrequested ping error"){super(e),this.name="NotMatchingPingError"}},B1=class extends Error{static name="InvalidStateError";constructor(e="Invalid state"){super(e),this.name="InvalidStateError"}},O1=class extends Error{static name="StreamAlreadyExistsError";constructor(e="Strean already exists"){super(e),this.name="StreamAlreadyExistsError"}},M1=class extends Error{static name="DecodeInvalidVersionError";constructor(e="Decode invalid version"){super(e),this.name="DecodeInvalidVersionError"}},U1=class extends Error{static name="BothClientsError";constructor(e="Both clients"){super(e),this.name="BothClientsError"}},Zs=class extends Error{static name="ReceiveWindowExceededError";constructor(e="Receive window exceeded"){super(e),this.name="ReceiveWindowExceededError"}};var A9=new Set([ln.name,Xs.name,js.name,O1.name,M1.name,U1.name,Zs.name]),Fc=256*1024,I9=16*1024*1024;var T9={enableKeepAlive:!0,keepAliveInterval:3e4,maxInboundStreams:1e3,maxOutboundStreams:1e3,initialStreamWindowSize:Fc,maxStreamWindowSize:I9,maxMessageSize:64*1024};function _9(r){if(r.keepAliveInterval<=0)throw new _("keep-alive interval must be positive");if(r.maxInboundStreams<0)throw new _("max inbound streams must be larger or equal 0");if(r.maxOutboundStreams<0)throw new _("max outbound streams must be larger or equal 0");if(r.initialStreamWindowSize<Fc)throw new _("InitialStreamWindowSize must be larger or equal 256 kB");if(r.maxStreamWindowSize<r.initialStreamWindowSize)throw new _("MaxStreamWindowSize must be larger than the InitialStreamWindowSize");if(r.maxStreamWindowSize>2**32-1)throw new _("MaxStreamWindowSize must be less than equal MAX_UINT32");if(r.maxMessageSize<1024)throw new _("MaxMessageSize must be greater than a kilobyte")}var Ze;(function(r){r[r.Data=0]="Data",r[r.WindowUpdate=1]="WindowUpdate",r[r.Ping=2]="Ping",r[r.GoAway=3]="GoAway"})(Ze||(Ze={}));var qe;(function(r){r[r.SYN=1]="SYN",r[r.ACK=2]="ACK",r[r.FIN=4]="FIN",r[r.RST=8]="RST"})(qe||(qe={}));var SX=Object.values(qe).filter(r=>typeof r!="string"),C9=0,Dr;(function(r){r[r.NormalTermination=0]="NormalTermination",r[r.ProtocolError=1]="ProtocolError",r[r.InternalError=2]="InternalError"})(Dr||(Dr={}));var Fo=12;var k9=2**24;function b_(r){if(r[0]!==C9)throw new ln("Invalid frame version");return{type:r[1],flag:(r[2]<<8)+r[3],streamID:r[4]*k9+(r[5]<<16)+(r[6]<<8)+r[7],length:r[8]*k9+(r[9]<<16)+(r[10]<<8)+r[11]}}var F1=class{source;buffer;frameInProgress;constructor(e){this.source=x_(e),this.buffer=new ue,this.frameInProgress=!1}async*emitFrames(){for await(let e of this.source)for(this.buffer.append(e);;){let t=this.readHeader();if(t===void 0)break;let{type:n,length:o}=t;n===Ze.Data?(this.frameInProgress=!0,yield{header:t,readData:this.readBytes.bind(this,o)}):yield{header:t}}}readHeader(){if(this.frameInProgress)throw new B1("decoding frame already in progress");if(this.buffer.length<Fo)return;let e=b_(this.buffer.subarray(0,Fo));return this.buffer.consume(Fo),e}async readBytes(e){if(this.buffer.length<e){for await(let n of this.source)if(this.buffer.append(n),this.buffer.length>=e)break}let t=this.buffer.sublist(0,e);return this.buffer.consume(e),this.frameInProgress=!1,t}};function x_(r){if(r[Symbol.iterator]!==void 0){let e=r[Symbol.iterator]();return e.return=void 0,{[Symbol.iterator](){return e}}}else if(r[Symbol.asyncIterator]!==void 0){let e=r[Symbol.asyncIterator]();return e.return=void 0,{[Symbol.asyncIterator](){return e}}}else throw new Error("a source must be either an iterable or an async iterable")}function t3(r){let e=new Uint8Array(Fo);return e[1]=r.type,e[2]=r.flag>>>8,e[3]=r.flag,e[4]=r.streamID>>>24,e[5]=r.streamID>>>16,e[6]=r.streamID>>>8,e[7]=r.streamID,e[8]=r.length>>>24,e[9]=r.length>>>16,e[10]=r.length>>>8,e[11]=r.length,e}function P9(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function V1(r,e){let t=N1(r).return?.();P9(t)&&t.catch(n=>{e.error("could not cause iterator to return",n)})}var v_=5e3;function r3(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var Vo=class{id;direction;timeline;protocol;metadata;source;status;readStatus;writeStatus;log;sinkController;sinkEnd;closed;endErr;streamSource;onEnd;onCloseRead;onCloseWrite;onReset;onAbort;sendCloseWriteTimeout;sendingData;constructor(e){this.sinkController=new AbortController,this.sinkEnd=J(),this.closed=J(),this.log=e.log,this.status="open",this.readStatus="ready",this.writeStatus="ready",this.id=e.id,this.metadata=e.metadata??{},this.direction=e.direction,this.timeline={open:Date.now()},this.sendCloseWriteTimeout=e.sendCloseWriteTimeout??v_,this.onEnd=e.onEnd,this.onCloseRead=e?.onCloseRead,this.onCloseWrite=e?.onCloseWrite,this.onReset=e?.onReset,this.onAbort=e?.onAbort,this.source=this.streamSource=Pt({onEnd:t=>{t!=null?this.log.trace("source ended with error",t):this.log.trace("source ended"),this.onSourceEnd(t)}}),this.sink=this.sink.bind(this)}async sink(e){if(this.writeStatus!=="ready")throw new Zo(`writable end state is "${this.writeStatus}" not "ready"`);try{this.writeStatus="writing";let t={signal:this.sinkController.signal};if(this.direction==="outbound"){let o=this.sendNewStream(t);r3(o)&&await o}let n=()=>{V1(e,this.log)};try{this.sinkController.signal.addEventListener("abort",n),this.log.trace("sink reading from source");for await(let o of e){o=o instanceof Uint8Array?new ue(o):o;let i=this.sendData(o,t);r3(i)&&(this.sendingData=J(),await i,this.sendingData.resolve(),this.sendingData=void 0)}}finally{this.sinkController.signal.removeEventListener("abort",n)}this.log.trace('sink finished reading from source, write status is "%s"',this.writeStatus),this.writeStatus==="writing"&&(this.writeStatus="closing",this.log.trace("send close write to remote"),await this.sendCloseWrite({signal:AbortSignal.timeout(this.sendCloseWriteTimeout)}),this.writeStatus="closed"),this.onSinkEnd()}catch(t){throw this.log.trace("sink ended with error, calling abort with error",t),this.abort(t),t}finally{this.log.trace("resolve sink end"),this.sinkEnd.resolve()}}onSourceEnd(e){this.timeline.closeRead==null&&(this.timeline.closeRead=Date.now(),this.readStatus="closed",e!=null&&this.endErr==null&&(this.endErr=e),this.onCloseRead?.(),this.timeline.closeWrite!=null?(this.log.trace("source and sink ended"),this.timeline.close=Date.now(),this.status!=="aborted"&&this.status!=="reset"&&(this.status="closed"),this.onEnd!=null&&this.onEnd(this.endErr),this.closed.resolve()):this.log.trace("source ended, waiting for sink to end"))}onSinkEnd(e){this.timeline.closeWrite==null&&(this.timeline.closeWrite=Date.now(),this.writeStatus="closed",e!=null&&this.endErr==null&&(this.endErr=e),this.onCloseWrite?.(),this.timeline.closeRead!=null?(this.log.trace("sink and source ended"),this.timeline.close=Date.now(),this.status!=="aborted"&&this.status!=="reset"&&(this.status="closed"),this.onEnd!=null&&this.onEnd(this.endErr),this.closed.resolve()):this.log.trace("sink ended, waiting for source to end"))}async close(e){this.status==="open"&&(this.log.trace("closing gracefully"),this.status="closing",await st(Promise.all([this.closeWrite(e),this.closeRead(e),this.closed.promise]),e?.signal),this.status="closed",this.log.trace("closed gracefully"))}async closeRead(e={}){if(this.readStatus==="closing"||this.readStatus==="closed")return;this.log.trace('closing readable end of stream with starting read status "%s"',this.readStatus);let t=this.readStatus;this.readStatus="closing",this.status!=="reset"&&this.status!=="aborted"&&this.timeline.closeRead==null&&(this.log.trace("send close read to remote"),await this.sendCloseRead(e)),t==="ready"&&(this.log.trace("ending internal source queue with %d queued bytes",this.streamSource.readableLength),this.streamSource.end()),this.log.trace("closed readable end of stream")}async closeWrite(e={}){this.writeStatus==="closing"||this.writeStatus==="closed"||(this.log.trace('closing writable end of stream with starting write status "%s"',this.writeStatus),this.writeStatus==="ready"&&(this.log.trace("sink was never sunk, sink an empty array"),await st(this.sink([]),e.signal)),this.writeStatus==="writing"&&(this.sendingData!=null&&await st(this.sendingData.promise,e.signal),this.log.trace("aborting source passed to .sink"),this.sinkController.abort(),await st(this.sinkEnd.promise,e.signal)),this.writeStatus="closed",this.log.trace("closed writable end of stream"))}abort(e){if(this.status==="closed"||this.status==="aborted"||this.status==="reset")return;this.log("abort with error",e),this.log("try to send reset to remote");let t=this.sendReset();r3(t)&&t.catch(n=>{this.log.error("error sending reset message",n)}),this.status="aborted",this.timeline.abort=Date.now(),this._closeSinkAndSource(e),this.onAbort?.(e)}reset(){if(this.status==="closed"||this.status==="aborted"||this.status==="reset")return;let e=new yl("stream reset");this.status="reset",this.timeline.reset=Date.now(),this._closeSinkAndSource(e),this.onReset?.()}_closeSinkAndSource(e){this._closeSink(e),this._closeSource(e)}_closeSink(e){this.writeStatus==="writing"&&(this.log.trace("end sink source"),this.sinkController.abort()),this.onSinkEnd(e)}_closeSource(e){this.readStatus!=="closing"&&this.readStatus!=="closed"&&(this.log.trace("ending source with %d bytes to be read by consumer",this.streamSource.readableLength),this.readStatus="closing",this.streamSource.end(e))}remoteCloseWrite(){if(this.readStatus==="closing"||this.readStatus==="closed"){this.log("received remote close write but local source is already closed");return}this.log.trace("remote close write"),this._closeSource()}remoteCloseRead(){if(this.writeStatus==="closing"||this.writeStatus==="closed"){this.log("received remote close read but local sink is already closed");return}this.log.trace("remote close read"),this._closeSink()}destroy(){if(this.status==="closed"||this.status==="aborted"||this.status==="reset"){this.log("received destroy but we are already closed");return}this.log.trace("stream destroyed"),this._closeSinkAndSource()}sourcePush(e){this.streamSource.push(e)}sourceReadableLength(){return this.streamSource.readableLength}};var Lr;(function(r){r[r.Init=0]="Init",r[r.SYNSent=1]="SYNSent",r[r.SYNReceived=2]="SYNReceived",r[r.Established=3]="Established",r[r.Finished=4]="Finished"})(Lr||(Lr={}));var $1=class extends Vo{name;state;config;_id;sendWindowCapacity;sendWindowCapacityUpdate;recvWindow;recvWindowCapacity;epochStart;getRTT;sendFrame;constructor(e){super({...e,onEnd:t=>{this.state=Lr.Finished,e.onEnd?.(t)}}),this.config=e.config,this._id=parseInt(e.id,10),this.name=e.name,this.state=e.state,this.sendWindowCapacity=Fc,this.recvWindow=this.config.initialStreamWindowSize,this.recvWindowCapacity=this.recvWindow,this.epochStart=Date.now(),this.getRTT=e.getRTT,this.sendFrame=e.sendFrame,this.source=Ai(this.source,()=>{this.sendWindowUpdate()})}async sendNewStream(){}async sendData(e,t={}){for(e=e.sublist();e.byteLength!==0;){if(this.sendWindowCapacity===0&&(this.log?.trace("wait for send window capacity, status %s",this.status),await this.waitForSendWindowCapacity(t),this.status==="closed"||this.status==="aborted"||this.status==="reset")){this.log?.trace("%s while waiting for send window capacity",this.status);return}let n=Math.min(this.sendWindowCapacity,this.config.maxMessageSize-Fo,e.length),o=this.getSendFlags();this.sendFrame({type:Ze.Data,flag:o,streamID:this._id,length:n},e.sublist(0,n)),this.sendWindowCapacity-=n,e.consume(n)}}async sendReset(){this.sendFrame({type:Ze.WindowUpdate,flag:qe.RST,streamID:this._id,length:0})}async sendCloseWrite(){let e=this.getSendFlags()|qe.FIN;this.sendFrame({type:Ze.WindowUpdate,flag:e,streamID:this._id,length:0})}async sendCloseRead(){}async waitForSendWindowCapacity(e={}){if(this.sendWindowCapacity>0)return;let t,n,o=()=>{this.status==="open"||this.status==="closing"?n(new Ft("Stream aborted")):t()};e.signal?.addEventListener("abort",o);try{await new Promise((i,s)=>{this.sendWindowCapacityUpdate=()=>{i()},n=s,t=i})}finally{e.signal?.removeEventListener("abort",o)}}handleWindowUpdate(e){this.log?.trace("stream received window update id=%s",this._id),this.processFlags(e.flag);let t=this.sendWindowCapacity;this.sendWindowCapacity+=e.length,t===0&&e.length>0&&this.sendWindowCapacityUpdate?.()}async handleData(e,t){if(this.log?.trace("stream received data id=%s",this._id),this.processFlags(e.flag),this.recvWindowCapacity<e.length)throw new Zs("Receive window exceeded");let n=await t();this.recvWindowCapacity-=e.length,this.sourcePush(n)}processFlags(e){(e&qe.ACK)===qe.ACK&&this.state===Lr.SYNSent&&(this.state=Lr.Established),(e&qe.FIN)===qe.FIN&&this.remoteCloseWrite(),(e&qe.RST)===qe.RST&&this.reset()}getSendFlags(){switch(this.state){case Lr.Init:return this.state=Lr.SYNSent,qe.SYN;case Lr.SYNReceived:return this.state=Lr.Established,qe.ACK;default:return 0}}sendWindowUpdate(){let e=this.getSendFlags(),t=Date.now(),n=this.getRTT();if(e===0&&n>-1&&t-this.epochStart<n*4&&(this.recvWindow=Math.min(this.recvWindow*2,this.config.maxStreamWindowSize)),this.recvWindowCapacity>=this.recvWindow&&e===0)return;let o=this.recvWindow-this.recvWindowCapacity;this.recvWindowCapacity=this.recvWindow,this.epochStart=t,this.sendFrame({type:Ze.WindowUpdate,flag:e,streamID:this._id,length:o})}};var R9="/yamux/1.0.0",E_=500,K1=class{protocol=R9;_components;_init;constructor(e,t={}){this._components=e,this._init=t}[Symbol.toStringTag]="@chainsafe/libp2p-yamux";[Se]=["@libp2p/stream-multiplexing"];createStreamMuxer(e){return new n3(this._components,{...this._init,...e})}},n3=class{protocol=R9;source;sink;config;log;logger;closeController;nextStreamID;_streams;nextPingID;activePing;rtt;client;localGoAway;remoteGoAway;numInboundStreams;numOutboundStreams;onIncomingStream;onStreamEnd;constructor(e,t){this.client=t.direction==="outbound",this.config={...T9,...t},this.logger=e.logger,this.log=this.logger.forComponent("libp2p:yamux"),_9(this.config),this.closeController=new AbortController,this.closeController.signal,this.onIncomingStream=t.onIncomingStream,this.onStreamEnd=t.onStreamEnd,this._streams=new Map,this.source=Pt({onEnd:()=>{this.log?.trace("muxer source ended"),this._streams.forEach(n=>{n.destroy()})}}),this.sink=async n=>{let o=()=>{let a=N1(n);if(a.return!=null){let c=a.return();S_(c)&&c.catch(l=>{this.log?.("could not cause sink source to return",l)})}},i,s;try{let a=new F1(n);try{this.closeController.signal.addEventListener("abort",o);for await(let c of a.emitFrames())await this.handleFrame(c.header,c.readData)}finally{this.closeController.signal.removeEventListener("abort",o)}i=Dr.NormalTermination}catch(a){A9.has(a.name)?(this.log?.error("protocol error in sink",a),i=Dr.ProtocolError):(this.log?.error("internal error in sink",a),i=Dr.InternalError),s=a}this.log?.trace("muxer sink ended"),s!=null?this.abort(s,i):await this.close({reason:i})},this.numInboundStreams=0,this.numOutboundStreams=0,this.nextStreamID=this.client?1:2,this.nextPingID=0,this.rtt=-1,this.log?.trace("muxer created"),this.config.enableKeepAlive&&this.keepAliveLoop().catch(n=>this.log?.error("keepalive error: %s",n)),this.ping().catch(n=>this.log?.error("ping error: %s",n))}get streams(){return Array.from(this._streams.values())}newStream(e){if(this.remoteGoAway!==void 0)throw new gn("Muxer closed remotely");if(this.localGoAway!==void 0)throw new gn("Muxer closed locally");let t=this.nextStreamID;if(this.nextStreamID+=2,this.numOutboundStreams>=this.config.maxOutboundStreams)throw new fo("max outbound streams exceeded");this.log?.trace("new outgoing stream id=%s",t);let n=this._newStream(t,e,Lr.Init,"outbound");return this._streams.set(t,n),this.numOutboundStreams++,n.sendWindowUpdate(),n}async ping(){if(this.remoteGoAway!==void 0)throw new gn("Muxer closed remotely");if(this.localGoAway!==void 0)throw new gn("Muxer closed locally");if(this.activePing===void 0){let e=()=>{};this.activePing={id:this.nextPingID++,promise:new Promise((o,i)=>{let s=()=>{i(new gn("Muxer closed locally"))};this.closeController.signal.addEventListener("abort",s,{once:!0}),e=()=>{this.closeController.signal.removeEventListener("abort",s),o()}}),resolve:e};let t=Date.now();this.sendPing(this.activePing.id);try{await this.activePing.promise}finally{delete this.activePing}let n=Date.now();this.rtt=n-t}else await this.activePing.promise;return this.rtt}getRTT(){return this.rtt}async close(e={}){if(this.closeController.signal.aborted)return;let t=e?.reason??Dr.NormalTermination;if(this.log?.trace("muxer close reason=%s",t),e.signal==null){let n=AbortSignal.timeout(E_);e={...e,signal:n}}try{await Promise.all([...this._streams.values()].map(async n=>n.close(e))),this.sendGoAway(t),this._closeMuxer()}catch(n){this.abort(n)}}abort(e,t){if(!this.closeController.signal.aborted){t=t??Dr.InternalError,this.log?.error("muxer abort reason=%s error=%s",t,e);for(let n of this._streams.values())n.abort(e);this.sendGoAway(t),this._closeMuxer()}}isClosed(){return this.closeController.signal.aborted}_closeMuxer(){this.closeController.abort(),this.source.end()}_newStream(e,t,n,o){if(this._streams.get(e)!=null)throw new _("Stream already exists with that id");let i=new $1({id:e.toString(),name:t,state:n,direction:o,sendFrame:this.sendFrame.bind(this),onEnd:()=>{this.closeStream(e),this.onStreamEnd?.(i)},log:this.logger.forComponent(`libp2p:yamux:${o}:${e}`),config:this.config,getRTT:this.getRTT.bind(this)});return i}closeStream(e){this.client===(e%2===0)?this.numInboundStreams--:this.numOutboundStreams--,this._streams.delete(e)}async keepAliveLoop(){let e=new Promise((t,n)=>{this.closeController.signal.addEventListener("abort",n,{once:!0})});for(this.log?.trace("muxer keepalive enabled interval=%s",this.config.keepAliveInterval);;){let t;try{await Promise.race([e,new Promise(n=>{t=setTimeout(n,this.config.keepAliveInterval)})]),this.ping().catch(n=>this.log?.error("ping error: %s",n))}catch{clearInterval(t);return}}}async handleFrame(e,t){let{streamID:n,type:o,length:i}=e;if(this.log?.trace("received frame %o",e),n===0)switch(o){case Ze.Ping:{this.handlePing(e);return}case Ze.GoAway:{this.handleGoAway(i);return}default:throw new ln("Invalid frame type")}else switch(e.type){case Ze.Data:case Ze.WindowUpdate:{await this.handleStreamMessage(e,t);return}default:throw new ln("Invalid frame type")}}handlePing(e){if(e.flag===qe.SYN)this.log?.trace("received ping request pingId=%s",e.length),this.sendPing(e.length,qe.ACK);else if(e.flag===qe.ACK)this.log?.trace("received ping response pingId=%s",e.length),this.handlePingResponse(e.length);else throw new ln("Invalid frame flag")}handlePingResponse(e){if(this.activePing===void 0)throw new Xs("ping not requested");if(this.activePing.id!==e)throw new js("ping doesn't match our id");this.activePing.resolve()}handleGoAway(e){this.log?.trace("received GoAway reason=%s",Dr[e]??"unknown"),this.remoteGoAway=e;for(let t of this._streams.values())t.reset();this._closeMuxer()}async handleStreamMessage(e,t){let{streamID:n,flag:o,type:i}=e;(o&qe.SYN)===qe.SYN&&this.incomingStream(n);let s=this._streams.get(n);if(s===void 0){if(i===Ze.Data){if(this.log?.("discarding data for stream id=%s",n),t===void 0)throw new Error("unreachable");await t()}else this.log?.trace("frame for missing stream id=%s",n);return}switch(i){case Ze.WindowUpdate:{s.handleWindowUpdate(e);return}case Ze.Data:{if(t===void 0)throw new Error("unreachable");await s.handleData(e,t);return}default:throw new Error("unreachable")}}incomingStream(e){if(this.client!==(e%2===0))throw new _("Both endpoints are clients");if(this._streams.has(e))return;if(this.log?.trace("new incoming stream id=%s",e),this.localGoAway!==void 0){this.sendFrame({type:Ze.WindowUpdate,flag:qe.RST,streamID:e,length:0});return}if(this.numInboundStreams>=this.config.maxInboundStreams){this.log?.("maxIncomingStreams exceeded, forcing stream reset"),this.sendFrame({type:Ze.WindowUpdate,flag:qe.RST,streamID:e,length:0});return}let t=this._newStream(e,void 0,Lr.SYNReceived,"inbound");this.numInboundStreams++,this._streams.set(e,t),this.onIncomingStream?.(t)}sendFrame(e,t){if(this.log?.trace("sending frame %o",e),e.type===Ze.Data){if(t===void 0)throw new ln("Invalid frame");this.source.push(new ue(t3(e),t))}else this.source.push(t3(e))}sendPing(e,t=qe.SYN){t===qe.SYN?this.log?.trace("sending ping request pingId=%s",e):this.log?.trace("sending ping response pingId=%s",e),this.sendFrame({type:Ze.Ping,flag:t,streamID:0,length:e})}sendGoAway(e=Dr.NormalTermination){this.log?.("sending GoAway reason=%s",Dr[e]),this.localGoAway=e,this.sendFrame({type:Ze.GoAway,flag:0,streamID:0,length:e})}};function S_(r){return r!=null&&typeof r.then=="function"}function D9(r={}){return e=>new K1(e,r)}var A_=41;function H1(r){try{let[[e,t]]=r.stringTuples();if(t==null)return!1;if(e===A_)return m7("2000::/3",t)}catch{}return!1}var I_=4,T_=41,__=53,C_=54,k_=55,P_=56;function Nr(r){try{let[[e,t]]=r.stringTuples();if(t==null)return!0;if(e===__||e===C_||e===k_||e===P_)return!1;if(e===I_||e===T_)return Gt(t)??!1}catch{}return!0}function L9(r,e,t){let n,o;function i(){let a={signal:o.signal};if(t?.timeout!=null){let c=ce([o.signal,AbortSignal.timeout(t.timeout)]);a.signal=c}Promise.resolve().then(async()=>{await r(a)}).catch(()=>{}).finally(()=>{o.signal.aborted||(n=setTimeout(i,e))})}let s=!1;return{setInterval:a=>{e=a,n!=null&&(clearTimeout(n),n=setTimeout(i,e))},setTimeout:a=>{t==null&&(t={}),t.timeout=a},start:()=>{s||(s=!0,o=new AbortController,o.signal,t?.runImmediately===!0?queueMicrotask(()=>{i()}):n=setTimeout(i,e))},stop:()=>{clearTimeout(n),o?.abort(),s=!1}}}function ze(r,e){let t=kn(r,e),n={read:async(o,i)=>{let s=await t.read(i);return o.decode(s)},write:async(o,i,s)=>{await t.write(i.encode(o),s)},writeV:async(o,i,s)=>{await t.writeV(o.map(a=>i.encode(a)),s)},pb:o=>({read:async i=>n.read(o,i),write:async(i,s)=>n.write(i,o,s),writeV:async(i,s)=>n.writeV(i,o,s),unwrap:()=>n}),unwrap:()=>t.unwrap()};return n}var N9="libp2p",B9="autonat",O9="1.0.0";var Fe;(function(r){let e;(function(l){l.DIAL="DIAL",l.DIAL_RESPONSE="DIAL_RESPONSE"})(e=r.MessageType||(r.MessageType={}));let t;(function(l){l[l.DIAL=0]="DIAL",l[l.DIAL_RESPONSE=1]="DIAL_RESPONSE"})(t||(t={})),function(l){l.codec=()=>Ke(t)}(e=r.MessageType||(r.MessageType={}));let n;(function(l){l.OK="OK",l.E_DIAL_ERROR="E_DIAL_ERROR",l.E_DIAL_REFUSED="E_DIAL_REFUSED",l.E_BAD_REQUEST="E_BAD_REQUEST",l.E_INTERNAL_ERROR="E_INTERNAL_ERROR"})(n=r.ResponseStatus||(r.ResponseStatus={}));let o;(function(l){l[l.OK=0]="OK",l[l.E_DIAL_ERROR=100]="E_DIAL_ERROR",l[l.E_DIAL_REFUSED=101]="E_DIAL_REFUSED",l[l.E_BAD_REQUEST=200]="E_BAD_REQUEST",l[l.E_INTERNAL_ERROR=300]="E_INTERNAL_ERROR"})(o||(o={})),function(l){l.codec=()=>Ke(o)}(n=r.ResponseStatus||(r.ResponseStatus={}));let i;(function(l){let u;l.codec=()=>(u==null&&(u=re((d,f,h={})=>{if(h.lengthDelimited!==!1&&f.fork(),d.id!=null&&(f.uint32(10),f.bytes(d.id)),d.addrs!=null)for(let p of d.addrs)f.uint32(18),f.bytes(p);h.lengthDelimited!==!1&&f.ldelim()},(d,f,h={})=>{let p={addrs:[]},g=f==null?d.len:d.pos+f;for(;d.pos<g;){let m=d.uint32();switch(m>>>3){case 1:{p.id=d.bytes();break}case 2:{if(h.limits?.addrs!=null&&p.addrs.length===h.limits.addrs)throw new Oe('Decode error - map field "addrs" had too many elements');p.addrs.push(d.bytes());break}default:{d.skipType(m&7);break}}}return p})),u),l.encode=d=>te(d,l.codec()),l.decode=(d,f)=>ee(d,l.codec(),f)})(i=r.PeerInfo||(r.PeerInfo={}));let s;(function(l){let u;l.codec=()=>(u==null&&(u=re((d,f,h={})=>{h.lengthDelimited!==!1&&f.fork(),d.peer!=null&&(f.uint32(10),r.PeerInfo.codec().encode(d.peer,f)),h.lengthDelimited!==!1&&f.ldelim()},(d,f,h={})=>{let p={},g=f==null?d.len:d.pos+f;for(;d.pos<g;){let m=d.uint32();switch(m>>>3){case 1:{p.peer=r.PeerInfo.codec().decode(d,d.uint32(),{limits:h.limits?.peer});break}default:{d.skipType(m&7);break}}}return p})),u),l.encode=d=>te(d,l.codec()),l.decode=(d,f)=>ee(d,l.codec(),f)})(s=r.Dial||(r.Dial={}));let a;(function(l){let u;l.codec=()=>(u==null&&(u=re((d,f,h={})=>{h.lengthDelimited!==!1&&f.fork(),d.status!=null&&(f.uint32(8),r.ResponseStatus.codec().encode(d.status,f)),d.statusText!=null&&(f.uint32(18),f.string(d.statusText)),d.addr!=null&&(f.uint32(26),f.bytes(d.addr)),h.lengthDelimited!==!1&&f.ldelim()},(d,f,h={})=>{let p={},g=f==null?d.len:d.pos+f;for(;d.pos<g;){let m=d.uint32();switch(m>>>3){case 1:{p.status=r.ResponseStatus.codec().decode(d);break}case 2:{p.statusText=d.string();break}case 3:{p.addr=d.bytes();break}default:{d.skipType(m&7);break}}}return p})),u),l.encode=d=>te(d,l.codec()),l.decode=(d,f)=>ee(d,l.codec(),f)})(a=r.DialResponse||(r.DialResponse={}));let c;r.codec=()=>(c==null&&(c=re((l,u,d={})=>{d.lengthDelimited!==!1&&u.fork(),l.type!=null&&(u.uint32(8),r.MessageType.codec().encode(l.type,u)),l.dial!=null&&(u.uint32(18),r.Dial.codec().encode(l.dial,u)),l.dialResponse!=null&&(u.uint32(26),r.DialResponse.codec().encode(l.dialResponse,u)),d.lengthDelimited!==!1&&u.ldelim()},(l,u,d={})=>{let f={},h=u==null?l.len:l.pos+u;for(;l.pos<h;){let p=l.uint32();switch(p>>>3){case 1:{f.type=r.MessageType.codec().decode(l);break}case 2:{f.dial=r.Dial.codec().decode(l,l.uint32(),{limits:d.limits?.dial});break}case 3:{f.dialResponse=r.DialResponse.codec().decode(l,l.uint32(),{limits:d.limits?.dialResponse});break}default:{l.skipType(p&7);break}}}return f})),c),r.encode=l=>te(l,r.codec()),r.decode=(l,u)=>ee(l,r.codec(),u)})(Fe||(Fe={}));var O_=4,M_=8,q1=class{components;protocol;timeout;maxInboundStreams;maxOutboundStreams;maxMessageSize;started;log;topologyId;dialResults;findPeers;addressFilter;connectionThreshold;constructor(e,t){this.components=e,this.log=e.logger.forComponent("libp2p:auto-nat"),this.started=!1,this.protocol=`/${t.protocolPrefix??N9}/${B9}/${O9}`,this.timeout=t.timeout??3e4,this.maxInboundStreams=t.maxInboundStreams??2,this.maxOutboundStreams=t.maxOutboundStreams??20,this.connectionThreshold=t.connectionThreshold??80,this.maxMessageSize=t.maxMessageSize??8192,this.dialResults=new Map,this.findPeers=L9(this.findRandomPeers.bind(this),6e4),this.addressFilter=nr(1024)}[Symbol.toStringTag]="@libp2p/autonat";[Se]=["@libp2p/autonat"];get[dr](){return["@libp2p/identify"]}isStarted(){return this.started}async start(){this.started||(await this.components.registrar.handle(this.protocol,e=>{this.handleIncomingAutonatStream(e).catch(t=>{this.log.error("error handling incoming autonat stream - %e",t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}),this.topologyId=await this.components.registrar.register(this.protocol,{onConnect:(e,t)=>{this.verifyExternalAddresses(t).catch(n=>{this.log.error("could not verify addresses - %e",n)})}}),this.findPeers.start(),this.started=!0)}async stop(){await this.components.registrar.unhandle(this.protocol),this.topologyId!=null&&await this.components.registrar.unhandle(this.topologyId),this.dialResults.clear(),this.findPeers.stop(),this.started=!1}allAddressesAreVerified(){return this.components.addressManager.getAddressesWithMetadata().every(e=>e.expires>Date.now()?!0:e.verified)}async findRandomPeers(e){if(this.allAddressesAreVerified())return;let t=ce([AbortSignal.timeout(1e4),e?.signal]);try{this.log("starting random walk to find peers to run AutoNAT");for await(let n of this.components.randomWalk.walk({signal:t})){if(!await this.components.connectionManager.isDialable(n.multiaddrs)){this.log.trace("random peer %p was not dialable %s",n.id,n.multiaddrs.map(o=>o.toString()).join(", "));continue}try{this.log.trace("dial random peer %p",n.id),await this.components.connectionManager.openConnection(n.multiaddrs,{signal:t})}catch{}if(this.allAddressesAreVerified()){this.log("stopping random walk, all addresses are verified");return}if(!this.hasConnectionCapacity()){this.log("stopping random walk, too close to max connections");return}}}catch{}}async handleIncomingAutonatStream(e){let t=AbortSignal.timeout(this.timeout);let n=ze(e.stream,{maxDataLength:this.maxMessageSize}).pb(Fe);try{let o=await n.read({signal:t}),i=await this.handleAutonatMessage(o,e.connection,{signal:t});await n.write(i,{signal:t}),await n.unwrap().unwrap().close({signal:t})}catch(o){this.log.error("error handling incoming autonat stream - %e",o),e.stream.abort(o)}}async handleAutonatMessage(e,t,n){let o=this.components.addressManager.getAddresses().map(d=>d.toOptions().host),i=e.dial;if(i==null)return this.log.error("dial was missing from message"),{type:Fe.MessageType.DIAL_RESPONSE,dialResponse:{status:Fe.ResponseStatus.E_BAD_REQUEST,statusText:"No Dial message found in message"}};let s,a=i.peer;if(a?.id==null)return this.log.error("PeerId missing from message"),{type:Fe.MessageType.DIAL_RESPONSE,dialResponse:{status:Fe.ResponseStatus.E_BAD_REQUEST,statusText:"missing peer info"}};try{let d=Ae(a.id);s=ot(d)}catch(d){return this.log.error("invalid PeerId - %e",d),{type:Fe.MessageType.DIAL_RESPONSE,dialResponse:{status:Fe.ResponseStatus.E_BAD_REQUEST,statusText:"bad peer id"}}}if(this.log("incoming request from %p",s),!t.remotePeer.equals(s))return this.log("target peer %p did not equal sending peer %p",s,t.remotePeer),{type:Fe.MessageType.DIAL_RESPONSE,dialResponse:{status:Fe.ResponseStatus.E_BAD_REQUEST,statusText:"peer id mismatch"}};let c=a.addrs.map(d=>H(d)).filter(d=>{let f=d.toOptions();return Nr(d)?!1:f.host!==t.remoteAddr.toOptions().host?(this.log.trace("not dialing %a - target host did not match remote host %a",d,t.remoteAddr),!1):o.includes(f.host)?!1:this.components.transportManager.dialTransportForMultiaddr(d)==null?(this.log.trace("not dialing %a - transport unsupported",d),!1):!0}).map(d=>(d.getPeerId()==null&&(d=d.encapsulate(`/p2p/${s.toString()}`)),d));if(c.length===0)return this.log("refused to dial all multiaddrs for %p from message",s),{type:Fe.MessageType.DIAL_RESPONSE,dialResponse:{status:Fe.ResponseStatus.E_DIAL_REFUSED,statusText:"no dialable addresses"}};this.log("dial multiaddrs %s for peer %p",c.map(d=>d.toString()).join(", "),s);let l="",u=c[0];for await(let d of c){let f;u=d;try{if(f=await this.components.connectionManager.openConnection(d,n),!f.remoteAddr.equals(d))throw this.log.error("tried to dial %a but dialed %a",d,f.remoteAddr),new Error("Unexpected remote address");return this.log("successfully dialed %p via %a",s,d),{type:Fe.MessageType.DIAL_RESPONSE,dialResponse:{status:Fe.ResponseStatus.OK,addr:f.remoteAddr.decapsulateCode(Z("p2p").code).bytes}}}catch(h){this.log.error("could not dial %p - %e",s,h),l=h.message}finally{f!=null&&await f.close()}}return{type:Fe.MessageType.DIAL_RESPONSE,dialResponse:{status:Fe.ResponseStatus.E_DIAL_ERROR,statusText:l,addr:u.bytes}}}getFirstUnverifiedMultiaddr(e,t){let n=this.components.addressManager.getAddressesWithMetadata().sort((o,i)=>o.type==="observed"&&i.type!=="observed"?1:i.type==="observed"&&o.type!=="observed"?-1:0).filter(o=>!(!(o.expires<Date.now())||o.multiaddr.toOptions().family===6&&(!t||!H1(o.multiaddr))||Nr(o.multiaddr)));for(let o of n){let i=o.multiaddr.toString(),s=this.dialResults.get(i);if(s!=null){if(s.networkSegments.includes(e)){this.log.trace("%a already has a network segment result from %s",s.multiaddr,e);continue}if(s.queue.size>10){this.log.trace("%a already has enough peers queued",s.multiaddr);continue}}if(s==null){let a=o.expires<Date.now();if(a&&this.addressFilter.remove?.(i),this.addressFilter.has(i))continue;this.addressFilter.add(i),this.log.trace("creating dial result %s %s",a?"to revalidate":"for",i),s={multiaddr:o.multiaddr,success:0,failure:0,networkSegments:[],verifyingPeers:V2(),queue:new yt({concurrency:3,maxSize:50}),type:o.type,lastVerified:o.lastVerified},this.dialResults.set(i,s)}return s}}removeOutdatedMultiaddrResults(){let e=new Set(this.components.addressManager.getAddressesWithMetadata().filter(({expires:t})=>t<Date.now()).map(({multiaddr:t})=>t.toString()));for(let t of this.dialResults.keys())e.has(t)||(this.log.trace("remove results for %a",t),this.dialResults.delete(t))}async verifyExternalAddresses(e){if(!this.isStarted())return;this.removeOutdatedMultiaddrResults();let n=(await this.components.peerStore.get(e.remotePeer)).addresses.some(({multiaddr:s})=>s.toOptions().family===6),o=this.getNetworkSegment(e.remoteAddr),i=this.getFirstUnverifiedMultiaddr(o,n);if(i==null){this.log.trace("no unverified public addresses found for peer %p to verify, not requesting verification",e.remotePeer);return}if(!this.hasConnectionCapacity()){i.lastVerified!=null?(this.log("automatically re-verifying %a because we are too close to the connection limit",i.multiaddr),this.confirmAddress(i)):this.log("skipping verifying %a because we are too close to the connection limit",i.multiaddr);return}i.queue.add(async s=>{await this.askPeerToVerify(e,o,s)},{peerId:e.remotePeer,multiaddr:i.multiaddr}).catch(s=>{i?.result==null&&this.log.error("error from %p verifying address %a - %e",e.remotePeer,i?.multiaddr,s)})}async askPeerToVerify(e,t,n){let o=this.dialResults.get(n.multiaddr.toString());if(o==null){this.log("%a was verified while %p was queued",n.multiaddr,e.remotePeer);return}let i=AbortSignal.timeout(this.timeout);this.log.trace("asking %p to verify multiaddr %s",e.remotePeer,n.multiaddr);let s=await e.newStream(this.protocol,{signal:i});try{let a=ze(s).pb(Fe),[,c]=await Promise.all([a.write({type:Fe.MessageType.DIAL,dial:{peer:{id:this.components.peerId.toMultihash().bytes,addrs:[n.multiaddr.bytes]}}},{signal:i}),a.read({signal:i})]);if(c.type!==Fe.MessageType.DIAL_RESPONSE||c.dialResponse==null){this.log("invalid autonat response from %p - %j",e.remotePeer,c);return}let l=c.dialResponse.status;if(this.log.trace("autonat response from %p for %a is %s",e.remotePeer,n.multiaddr,l),l!==Fe.ResponseStatus.OK&&l!==Fe.ResponseStatus.E_DIAL_ERROR)return;if(o=this.dialResults.get(n.multiaddr.toString()),o==null){this.log.trace("peer reported %a as %s but there is no result object",n.multiaddr,c.dialResponse.status);return}if(o.networkSegments.includes(t)){this.log.trace("%a results included network segment %s",n.multiaddr,t);return}if(o.result!=null){this.log.trace("already resolved result for %a, ignoring response from",n.multiaddr,e.remotePeer);return}if(o.verifyingPeers.has(e.remotePeer)){this.log.trace("peer %p has already verified %a, ignoring response",e.remotePeer,n.multiaddr);return}if(o.verifyingPeers.add(e.remotePeer),o.networkSegments.push(t),l===Fe.ResponseStatus.OK){if(o.success++,o.type!=="observed"){this.confirmAddress(o);return}}else l===Fe.ResponseStatus.E_DIAL_ERROR&&o.failure++;this.log("%a success %d failure %d",o.multiaddr,o.success,o.failure),o.success===O_&&this.confirmAddress(o),o.failure===M_&&this.unconfirmAddress(o)}finally{try{await s.close({signal:i})}catch(a){s.abort(a)}}}hasConnectionCapacity(){let t=this.components.connectionManager.getConnections().length,n=this.components.connectionManager.getMaxConnections();return t/n*100<this.connectionThreshold}confirmAddress(e){this.log("%s address %a is externally dialable",e.type,e.multiaddr),this.components.addressManager.confirmObservedAddr(e.multiaddr),this.dialResults.delete(e.multiaddr.toString()),e.result=!0,e.queue.abort()}unconfirmAddress(e){this.log("%s address %a is not externally dialable",e.type,e.multiaddr),this.components.addressManager.removeObservedAddr(e.multiaddr),this.dialResults.delete(e.multiaddr.toString()),e.result=!1,e.queue.abort()}getNetworkSegment(e){let t=e.toOptions();return t.family===4?t.host.split(".")[0].padStart(3,"0"):t.host.split(":")[0].padStart(4,"0")}};function M9(r={}){return e=>new q1(e,r)}var U_=z("dns4"),F_=z("dns6"),V_=z("dnsaddr"),Ui=rt(z("dns"),V_,U_,F_),G1=rt(z("ip4"),z("ip6")),Js=rt(oe(G1,z("tcp")),oe(Ui,z("tcp"))),Q1=oe(G1,z("udp")),$_=oe(Q1,z("utp")),K_=oe(Q1,z("quic")),H_=oe(Q1,z("quic-v1")),o3=rt(oe(Js,z("ws")),oe(Ui,z("ws"))),z1=rt(oe(o3,z("p2p")),o3),i3=rt(oe(Js,z("wss")),oe(Ui,z("wss")),oe(Js,z("tls"),z("ws")),oe(Ui,z("tls"),z("ws"))),W1=rt(oe(i3,z("p2p")),i3),s3=rt(oe(Js,z("http")),oe(G1,z("http")),oe(Ui,z("http"))),a3=rt(oe(Js,z("https")),oe(G1,z("https")),oe(Ui,z("https"))),U9=oe(Q1,z("webrtc-direct"),z("certhash")),$9=rt(oe(U9,z("p2p")),U9),F9=oe(H_,z("webtransport"),z("certhash"),z("certhash")),K9=rt(oe(F9,z("p2p")),F9),H9=rt(oe(z1,z("p2p-webrtc-star"),z("p2p")),oe(W1,z("p2p-webrtc-star"),z("p2p")),oe(z1,z("p2p-webrtc-star")),oe(W1,z("p2p-webrtc-star"))),Fj=rt(oe(z1,z("p2p-websocket-star"),z("p2p")),oe(W1,z("p2p-websocket-star"),z("p2p")),oe(z1,z("p2p-websocket-star")),oe(W1,z("p2p-websocket-star"))),q9=rt(oe(s3,z("p2p-webrtc-direct"),z("p2p")),oe(a3,z("p2p-webrtc-direct"),z("p2p")),oe(s3,z("p2p-webrtc-direct")),oe(a3,z("p2p-webrtc-direct"))),Fi=rt(o3,i3,s3,a3,H9,q9,Js,$_,K_,Ui,$9,K9),Vj=rt(oe(Fi,z("p2p-stardust"),z("p2p")),oe(Fi,z("p2p-stardust"))),$o=rt(oe(Fi,z("p2p")),H9,q9,$9,K9,z("p2p")),V9=rt(oe($o,z("p2p-circuit"),$o),oe($o,z("p2p-circuit")),oe(z("p2p-circuit"),$o),oe(Fi,z("p2p-circuit")),oe(z("p2p-circuit"),Fi),z("p2p-circuit")),z9=()=>rt(oe(V9,z9),V9),Mi=z9(),W9=rt(oe(Mi,$o,Mi),oe($o,Mi),oe(Mi,$o),Mi,$o);var $j=rt(oe(Mi,z("webrtc"),z("p2p")),oe(Mi,z("webrtc")),oe(Fi,z("webrtc"),z("p2p")),oe(Fi,z("webrtc")),z("webrtc"));function G9(r){function e(t){let n;try{n=H(t)}catch{return!1}let o=r(n.protoNames());return o===null?!1:o===!0||o===!1?o:o.length===0}return e}function oe(...r){function e(t){if(t.length<r.length)return null;let n=t;return r.some(o=>(n=typeof o=="function"?o().partialMatch(t):o.partialMatch(t),Array.isArray(n)&&(t=n),n===null)),n}return{toString:function(){return"{ "+r.join(" ")+" }"},input:r,matches:G9(e),partialMatch:e}}function rt(...r){function e(n){let o=null;return r.some(i=>{let s=typeof i=="function"?i().partialMatch(n):i.partialMatch(n);return s!=null?(o=s,!0):!1}),o}return{toString:function(){return"{ "+r.join(" ")+" }"},input:r,matches:G9(e),partialMatch:e}}function z(r){let e=r;function t(o){let i;try{i=H(o)}catch{return!1}let s=i.protoNames();return s.length===1&&s[0]===e}function n(o){return o.length===0?null:o[0]===e?o.slice(1):null}return{toString:function(){return e},matches:t,partialMatch:n}}var q_="bootstrap",z_=50,W_=1e3,c3=class extends ge{static tag="bootstrap";log;timer;list;timeout;components;_init;constructor(e,t={list:[]}){if(t.list==null||t.list.length===0)throw new Error("Bootstrap requires a list of peer addresses");super(),this.components=e,this.log=e.logger.forComponent("libp2p:bootstrap"),this.timeout=t.timeout??W_,this.list=[];for(let n of t.list){if(!W9.matches(n)){this.log.error("Invalid multiaddr");continue}let o=H(n),i=o.getPeerId();if(i==null){this.log.error("Invalid bootstrap multiaddr without peer id");continue}let s={id:Ue(i),multiaddrs:[o]};this.list.push(s)}this._init=t}[jo]=this;[Symbol.toStringTag]="@libp2p/bootstrap";[Se]=["@libp2p/peer-discovery"];isStarted(){return!!this.timer}start(){this.isStarted()||(this.log("Starting bootstrap node discovery, discovering peers after %s ms",this.timeout),this.timer=setTimeout(()=>{this._discoverBootstrapPeers().catch(e=>{this.log.error(e)})},this.timeout))}async _discoverBootstrapPeers(){if(this.timer!=null)for(let e of this.list){if(await this.components.peerStore.merge(e.id,{tags:{[this._init.tagName??q_]:{value:this._init.tagValue??z_,ttl:this._init.tagTTL}},multiaddrs:e.multiaddrs}),this.timer==null)return;this.safeDispatchEvent("peer",{detail:e}),this.components.connectionManager.openConnection(e.id).catch(t=>{this.log.error("could not dial bootstrap peer %p",e.id,t)})}}stop(){this.timer!=null&&clearTimeout(this.timer),this.timer=void 0}};function Q9(r){return e=>new c3(e,r)}var Vc;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.publicKey!=null&&t.publicKey.byteLength>0&&(n.uint32(10),n.bytes(t.publicKey)),t.payloadType!=null&&t.payloadType.byteLength>0&&(n.uint32(18),n.bytes(t.payloadType)),t.payload!=null&&t.payload.byteLength>0&&(n.uint32(26),n.bytes(t.payload)),t.signature!=null&&t.signature.byteLength>0&&(n.uint32(42),n.bytes(t.signature)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={publicKey:se(0),payloadType:se(0),payload:se(0),signature:se(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.publicKey=t.bytes();break}case 2:{i.payloadType=t.bytes();break}case 3:{i.payload=t.bytes();break}case 5:{i.signature=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(Vc||(Vc={}));var Y1=class extends Error{constructor(e="Invalid signature"){super(e),this.name="InvalidSignatureError"}};var vr=class r{static createFromProtobuf=async e=>{let t=Vc.decode(e),n=tt(t.publicKey);return new r({publicKey:n,payloadType:t.payloadType,payload:t.payload,signature:t.signature})};static seal=async(e,t)=>{if(t==null)throw new Error("Missing private key");let n=e.domain,o=e.codec,i=e.marshal(),s=Y9(n,o,i),a=await t.sign(s.subarray());return new r({publicKey:t.publicKey,payloadType:o,payload:i,signature:a})};static openAndCertify=async(e,t)=>{let n=await r.createFromProtobuf(e);if(!await n.validate(t))throw new Y1("Envelope signature is not valid for the given domain");return n};publicKey;payloadType;payload;signature;marshaled;constructor(e){let{publicKey:t,payloadType:n,payload:o,signature:i}=e;this.publicKey=t,this.payloadType=n,this.payload=o,this.signature=i}marshal(){return this.marshaled==null&&(this.marshaled=Vc.encode({publicKey:Nt(this.publicKey),payloadType:this.payloadType,payload:this.payload.subarray(),signature:this.signature})),this.marshaled}equals(e){return ne(this.marshal(),e.marshal())}async validate(e){let t=Y9(e,this.payloadType,this.payload);return this.publicKey.verify(t.subarray(),this.signature)}},Y9=(r,e,t)=>{let n=N(r),o=$e(n.byteLength),i=$e(e.length),s=$e(t.length);return new ue(o,n,i,e,s,t)};function X9(r,e){let t=(n,o)=>n.toString().localeCompare(o.toString());return r.length!==e.length?!1:(e.sort(t),r.sort(t).every((n,o)=>e[o].equals(n)))}var j9="libp2p-peer-record",Z9=Uint8Array.from([3,1]);var $c;(function(r){let e;(function(n){let o;n.codec=()=>(o==null&&(o=re((i,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),i.multiaddr!=null&&i.multiaddr.byteLength>0&&(s.uint32(10),s.bytes(i.multiaddr)),a.lengthDelimited!==!1&&s.ldelim()},(i,s,a={})=>{let c={multiaddr:se(0)},l=s==null?i.len:i.pos+s;for(;i.pos<l;){let u=i.uint32();switch(u>>>3){case 1:{c.multiaddr=i.bytes();break}default:{i.skipType(u&7);break}}}return c})),o),n.encode=i=>te(i,n.codec()),n.decode=(i,s)=>ee(i,n.codec(),s)})(e=r.AddressInfo||(r.AddressInfo={}));let t;r.codec=()=>(t==null&&(t=re((n,o,i={})=>{if(i.lengthDelimited!==!1&&o.fork(),n.peerId!=null&&n.peerId.byteLength>0&&(o.uint32(10),o.bytes(n.peerId)),n.seq!=null&&n.seq!==0n&&(o.uint32(16),o.uint64(n.seq)),n.addresses!=null)for(let s of n.addresses)o.uint32(26),r.AddressInfo.codec().encode(s,o);i.lengthDelimited!==!1&&o.ldelim()},(n,o,i={})=>{let s={peerId:se(0),seq:0n,addresses:[]},a=o==null?n.len:n.pos+o;for(;n.pos<a;){let c=n.uint32();switch(c>>>3){case 1:{s.peerId=n.bytes();break}case 2:{s.seq=n.uint64();break}case 3:{if(i.limits?.addresses!=null&&s.addresses.length===i.limits.addresses)throw new Oe('Decode error - map field "addresses" had too many elements');s.addresses.push(r.AddressInfo.codec().decode(n,n.uint32(),{limits:i.limits?.addresses$}));break}default:{n.skipType(c&7);break}}}return s})),t),r.encode=n=>te(n,r.codec()),r.decode=(n,o)=>ee(n,r.codec(),o)})($c||($c={}));var Qt=class r{static createFromProtobuf=e=>{let t=$c.decode(e),n=ot(Ae(t.peerId)),o=(t.addresses??[]).map(s=>H(s.multiaddr)),i=t.seq;return new r({peerId:n,multiaddrs:o,seqNumber:i})};static DOMAIN=j9;static CODEC=Z9;peerId;multiaddrs;seqNumber;domain=r.DOMAIN;codec=r.CODEC;marshaled;constructor(e){let{peerId:t,multiaddrs:n,seqNumber:o}=e;this.peerId=t,this.multiaddrs=n??[],this.seqNumber=o??BigInt(Date.now())}marshal(){return this.marshaled==null&&(this.marshaled=$c.encode({peerId:this.peerId.toMultihash().bytes,seq:BigInt(this.seqNumber),addresses:this.multiaddrs.map(e=>({multiaddr:e.bytes}))})),this.marshaled}equals(e){return!(!(e instanceof r)||!this.peerId.equals(e.peerId)||this.seqNumber!==e.seqNumber||!X9(this.multiaddrs,e.multiaddrs))}};var l3=1e3,J9=60*l3,ey=290;var xZ=2*60*J9,ty=1,X1=2e3,ry=100;var Kc=`${so}-circuit-relay`,vZ=`${so}-circuit-relay-source`,EZ=2*J9,SZ=BigInt(1<<17),Vi="/libp2p/circuit/relay/0.2.0/hop",u3="/libp2p/circuit/relay/0.2.0/stop",AZ=30*l3,IZ=30*l3,d3=300,ny=4096,oy=.001;var Ko;(function(r){let e;(function(o){o.RESERVE="RESERVE",o.CONNECT="CONNECT",o.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.RESERVE=0]="RESERVE",o[o.CONNECT=1]="CONNECT",o[o.STATUS=2]="STATUS"})(t||(t={})),function(o){o.codec=()=>Ke(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=re((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.type!=null&&(i.uint32(8),r.Type.codec().encode(o.type,i)),o.peer!=null&&(i.uint32(18),ea.codec().encode(o.peer,i)),o.reservation!=null&&(i.uint32(26),j1.codec().encode(o.reservation,i)),o.limit!=null&&(i.uint32(34),ta.codec().encode(o.limit,i)),o.status!=null&&(i.uint32(40),Et.codec().encode(o.status,i)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{a.peer=ea.codec().decode(o,o.uint32(),{limits:s.limits?.peer});break}case 3:{a.reservation=j1.codec().decode(o,o.uint32(),{limits:s.limits?.reservation});break}case 4:{a.limit=ta.codec().decode(o,o.uint32(),{limits:s.limits?.limit});break}case 5:{a.status=Et.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>te(o,r.codec()),r.decode=(o,i)=>ee(o,r.codec(),i)})(Ko||(Ko={}));var Pn;(function(r){let e;(function(o){o.CONNECT="CONNECT",o.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.CONNECT=0]="CONNECT",o[o.STATUS=1]="STATUS"})(t||(t={})),function(o){o.codec=()=>Ke(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=re((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.type!=null&&(i.uint32(8),r.Type.codec().encode(o.type,i)),o.peer!=null&&(i.uint32(18),ea.codec().encode(o.peer,i)),o.limit!=null&&(i.uint32(26),ta.codec().encode(o.limit,i)),o.status!=null&&(i.uint32(32),Et.codec().encode(o.status,i)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{a.peer=ea.codec().decode(o,o.uint32(),{limits:s.limits?.peer});break}case 3:{a.limit=ta.codec().decode(o,o.uint32(),{limits:s.limits?.limit});break}case 4:{a.status=Et.codec().decode(o);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>te(o,r.codec()),r.decode=(o,i)=>ee(o,r.codec(),i)})(Pn||(Pn={}));var ea;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.id!=null&&t.id.byteLength>0&&(n.uint32(10),n.bytes(t.id)),t.addrs!=null)for(let i of t.addrs)n.uint32(18),n.bytes(i);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={id:se(0),addrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.id=t.bytes();break}case 2:{if(o.limits?.addrs!=null&&i.addrs.length===o.limits.addrs)throw new Oe('Decode error - map field "addrs" had too many elements');i.addrs.push(t.bytes());break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(ea||(ea={}));var j1;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.expire!=null&&t.expire!==0n&&(n.uint32(8),n.uint64(t.expire)),t.addrs!=null)for(let i of t.addrs)n.uint32(18),n.bytes(i);t.voucher!=null&&(n.uint32(26),J1.codec().encode(t.voucher,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={expire:0n,addrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.expire=t.uint64();break}case 2:{if(o.limits?.addrs!=null&&i.addrs.length===o.limits.addrs)throw new Oe('Decode error - map field "addrs" had too many elements');i.addrs.push(t.bytes());break}case 3:{i.voucher=J1.codec().decode(t,t.uint32(),{limits:o.limits?.voucher});break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(j1||(j1={}));var ta;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.duration!=null&&(n.uint32(8),n.uint32(t.duration)),t.data!=null&&(n.uint32(16),n.uint64(t.data)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.duration=t.uint32();break}case 2:{i.data=t.uint64();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(ta||(ta={}));var Et;(function(r){r.UNUSED="UNUSED",r.OK="OK",r.RESERVATION_REFUSED="RESERVATION_REFUSED",r.RESOURCE_LIMIT_EXCEEDED="RESOURCE_LIMIT_EXCEEDED",r.PERMISSION_DENIED="PERMISSION_DENIED",r.CONNECTION_FAILED="CONNECTION_FAILED",r.NO_RESERVATION="NO_RESERVATION",r.MALFORMED_MESSAGE="MALFORMED_MESSAGE",r.UNEXPECTED_MESSAGE="UNEXPECTED_MESSAGE"})(Et||(Et={}));var f3;(function(r){r[r.UNUSED=0]="UNUSED",r[r.OK=100]="OK",r[r.RESERVATION_REFUSED=200]="RESERVATION_REFUSED",r[r.RESOURCE_LIMIT_EXCEEDED=201]="RESOURCE_LIMIT_EXCEEDED",r[r.PERMISSION_DENIED=202]="PERMISSION_DENIED",r[r.CONNECTION_FAILED=203]="CONNECTION_FAILED",r[r.NO_RESERVATION=204]="NO_RESERVATION",r[r.MALFORMED_MESSAGE=400]="MALFORMED_MESSAGE",r[r.UNEXPECTED_MESSAGE=401]="UNEXPECTED_MESSAGE"})(f3||(f3={}));(function(r){r.codec=()=>Ke(f3)})(Et||(Et={}));var Z1;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.relay!=null&&t.relay.byteLength>0&&(n.uint32(10),n.bytes(t.relay)),t.peer!=null&&t.peer.byteLength>0&&(n.uint32(18),n.bytes(t.peer)),t.expiration!=null&&t.expiration!==0n&&(n.uint32(24),n.uint64(t.expiration)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={relay:se(0),peer:se(0),expiration:0n},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.relay=t.bytes();break}case 2:{i.peer=t.bytes();break}case 3:{i.expiration=t.uint64();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(Z1||(Z1={}));var J1;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.publicKey!=null&&t.publicKey.byteLength>0&&(n.uint32(10),n.bytes(t.publicKey)),t.payloadType!=null&&t.payloadType.byteLength>0&&(n.uint32(18),n.bytes(t.payloadType)),t.payload!=null&&(n.uint32(26),Z1.codec().encode(t.payload,n)),t.signature!=null&&t.signature.byteLength>0&&(n.uint32(42),n.bytes(t.signature)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={publicKey:se(0),payloadType:se(0),signature:se(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.publicKey=t.bytes();break}case 2:{i.payloadType=t.bytes();break}case 3:{i.payload=Z1.codec().decode(t,t.uint32(),{limits:o.limits?.payload});break}case 5:{i.signature=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(J1||(J1={}));var Hc=class extends Error{static name="HadEnoughRelaysError";name="HadEnoughRelaysError"},ef=class extends Error{static name="DoubleRelayError";name="DoubleRelayError"},tf=class extends Error{static name="RelayQueueFullError";name="RelayQueueFullError"};function h3(r){let e=r*BigInt(1e3),t=new Date().getTime();return Number(e-BigInt(t))}var qc=class{expires;bytes;constructor(e){e?.duration!=null&&e?.duration!==0&&(this.expires=Date.now()+e.duration*1e3),this.bytes=e?.data,this.bytes===0n&&(this.bytes=void 0),this.onData=this.onData.bind(this)}onData(e){this.bytes!=null&&(this.bytes-=BigInt(e.byteLength),this.bytes<0n&&(this.bytes=0n))}getLimits(){if(this.expires==null&&this.bytes==null)return;let e={};if(this.bytes!=null){let t=this;Object.defineProperty(e,"bytes",{get(){return t.bytes}})}if(this.expires!=null){let t=this;Object.defineProperty(e,"seconds",{get(){return Math.round(((t.expires??0)-Date.now())/1e3)}})}return e}},rf=ke(me(Xd.matchers[0],he("p2p-circuit"))),nf=ke(he("p2p-circuit"));function p3(r){let{stream:e,remoteAddr:t,logger:n,onDataRead:o,onDataWrite:i}=r,s=n.forComponent("libp2p:stream:converter"),a=!1,c=!1,l=e.close.bind(e);e.close=async p=>{await l(p),h(!0)};let u=e.abort.bind(e);e.abort=p=>{u(p),h(!0)};let d=e.sink.bind(e);e.sink=async p=>{try{await d(dt(p,g=>Ai(g,m=>i?.(m))))}catch(g){g.type!=="aborted"&&s.error("%s error in sink",t,g)}finally{c=!0,h()}};let f={log:s,sink:e.sink,source:async function*(){try{for await(let p of e.source)o?.(p),yield p}finally{a=!0,h()}}(),remoteAddr:t,timeline:{open:Date.now(),close:void 0},close:e.close,abort:e.abort};function h(p){p===!0&&(a=!0,c=!0),a&&c&&f.timeline.close==null&&(f.timeline.close=Date.now())}return f}var of=class extends ge{peerStore;registrar;connectionManager;randomWalk;started;running;topologyId;log;discoveryController;filter;queue;constructor(e,t={}){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:discover-relays"),this.started=!1,this.running=!1,this.peerStore=e.peerStore,this.registrar=e.registrar,this.connectionManager=e.connectionManager,this.randomWalk=e.randomWalk,this.filter=t.filter,this.discoveryController=new AbortController,this.discoveryController.signal}isStarted(){return this.started}async start(){this.topologyId=await this.registrar.register(Vi,{filter:this.filter,onConnect:e=>{this.log.trace("discovered relay %p queue (length: %d, active %d)",e,this.queue?.size,this.queue?.running),this.safeDispatchEvent("relay:discover",{detail:e})}}),this.started=!0}stop(){this.topologyId!=null&&this.registrar.unregister(this.topologyId),this.discoveryController?.abort(),this.started=!1}startDiscovery(){this.running||(this.log("start discovery"),this.running=!0,this.discoveryController=new AbortController,this.discoveryController.signal,Promise.resolve().then(async()=>{this.log("searching peer store for relays");let e=await this.peerStore.all({filters:[n=>n.protocols.includes(Vi)],orders:[()=>Math.random()<.5?1:-1,(n,o)=>{let i=iy(n),s=iy(o);return i>s?-1:s>i?1:0}]});for(let n of e)this.log.trace("found relay peer %p in peer store",n.id),this.safeDispatchEvent("relay:discover",{detail:n.id});this.log("found %d relay peers in peer store",e.length);let t=this.queue=new yt({concurrency:5});this.log("start random walk");for await(let n of this.randomWalk.walk({signal:this.discoveryController.signal})){if(this.log.trace("found random peer %p",n.id),t.has(n.id)){this.log.trace("random peer %p was already in queue",n.id);continue}if(this.connectionManager.getConnections(n.id)?.length>0){this.log.trace("random peer %p was already connected",n.id);continue}if(!await this.connectionManager.isDialable(n.multiaddrs)){this.log.trace("random peer %p was not dialable",n.id,n.multiaddrs.map(o=>o.toString()));continue}t.queued>10&&(this.log.trace("wait for space in queue for %p",n.id),await t.onSizeLessThan(10,{signal:this.discoveryController.signal})),this.log("adding random peer %p to dial queue (length: %d, active %d)",n.id,t.size,t.running),t.add(async()=>{let o=ce([this.discoveryController.signal,AbortSignal.timeout(5e3)]);try{await this.connectionManager.openConnection(n.id,{signal:o})}finally{o.clear()}},{peerId:n.id,signal:this.discoveryController.signal}).catch(o=>{this.log.error("error opening connection to random peer %p",n.id,o)})}this.log("stop random walk"),await t.onIdle()}).catch(e=>{this.discoveryController.signal.aborted||this.log.error("failed when finding relays on the network",e)}))}stopDiscovery(){this.log("stop discovery"),this.running=!1,this.discoveryController?.abort()}};function iy(r){let e=r.metadata.get("last-dial-success");return e==null?0:new Date(U(e)).getTime()}var m3=class extends ge{peerId;connectionManager;addressManager;reservationStore;listeningAddrs;log;listenTimeout;reservationId;relay;constructor(e,t={}){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:transport:listener"),this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.addressManager=e.addressManager,this.reservationStore=e.reservationStore,this.listeningAddrs=[],this.listenTimeout=t.listenTimeout??X1,this.reservationStore.addEventListener("relay:removed",this._onRemoveRelayPeer),this.reservationStore.addEventListener("relay:created-reservation",this._onAddRelayPeer)}_onRemoveRelayPeer=e=>{this.log("relay removed %p our relay %p",e.detail.relay,this.relay,this.relay?.equals(e.detail.relay)),this.relay?.equals(e.detail.relay)===!0&&(this.log("relay peer removed %p",e.detail.relay),this.listeningAddrs.forEach(t=>{this.addressManager.removeObservedAddr(t)}),this.listeningAddrs=[],this.safeDispatchEvent("listening"))};_onAddRelayPeer=e=>{let{details:t}=e.detail;t.type!=="configured"&&t.id===this.reservationId&&this.addedRelay(e.detail)};async listen(e){if(this.log("listen on %a",e),nf.exactMatch(e))this.reservationId=this.reservationStore.reserveRelay();else if(rf.exactMatch(e)){let t=AbortSignal.timeout(this.listenTimeout);let n=e.decapsulate("/p2p-circuit"),o=await this.connectionManager.openConnection(n,{signal:t});if(!this.reservationStore.hasReservation(o.remotePeer)){this.log("making reservation on peer %p",o.remotePeer);let i=await this.reservationStore.addRelay(o.remotePeer,"configured");this.addedRelay(i)}}else throw new Jo(`Could not listen on p2p-circuit address "${e}"`)}getAddrs(){return[...this.listeningAddrs.values()].flat()}async close(){this.reservationStore.cancelReservations(),this.listeningAddrs=[],this.reservationStore.removeEventListener("relay:removed",this._onRemoveRelayPeer),queueMicrotask(()=>{this.safeDispatchEvent("close")})}addedRelay(e){this.log("relay peer added %p",e.relay),this.relay=e.relay,this.listeningAddrs=e.details.reservation.addrs.map(t=>H(t).encapsulate("/p2p-circuit")),this.listeningAddrs.forEach(t=>{this.addressManager.confirmObservedAddr(t,{type:"transport"})}),queueMicrotask(()=>{this.safeDispatchEvent("listening")})}};function sy(r){return new m3(r)}var ay="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var cy=(r=21)=>{let e="",t=crypto.getRandomValues(new Uint8Array(r|=0));for(;r--;)e+=ay[t[r]&63];return e};var G_=60*1e3*10,Q_=60*1e3*5,Y_=30*1e3,sf=class extends ge{peerId;connectionManager;peerStore;events;reserveQueue;reservations;pendingReservations;maxReservationQueueLength;reservationCompletionTimeout;started;log;relayFilter;constructor(e,t){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:transport:reservation-store"),this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.peerStore=e.peerStore,this.events=e.events,this.reservations=new ht,this.pendingReservations=[],this.maxReservationQueueLength=t?.maxReservationQueueLength??ry,this.reservationCompletionTimeout=t?.reservationCompletionTimeout??X1,this.started=!1,this.relayFilter=nr(100),this.reserveQueue=new yt({concurrency:t?.reservationConcurrency??ty,metricName:"libp2p_relay_reservation_queue",metrics:e.metrics}),this.events.addEventListener("connection:close",n=>{[...this.reservations.values()].find(i=>i.connection===n.detail.id)!=null&&this.#t(n.detail.remotePeer).catch(i=>{this.log("could not remove relay %p - %e",n.detail,i)})})}isStarted(){return this.started}start(){this.started=!0}afterStart(){Promise.resolve().then(async()=>{let e=await this.peerStore.all({filters:[t=>t.tags.has(Kc)]});this.log("removing tag from %d old relays",e.length),await Promise.all(e.map(async t=>{await this.peerStore.merge(t.id,{tags:{[Kc]:void 0}})})),this.log("redialing %d old relays",e.length),await Promise.all(e.map(async t=>this.addRelay(t.id,"discovered"))),this.#r()}).catch(e=>{this.log.error(e)})}stop(){this.reserveQueue.clear(),this.reservations.forEach(({timeout:e})=>{clearTimeout(e)}),this.reservations.clear(),this.started=!1}reserveRelay(){let e=cy();return this.pendingReservations.push(e),this.#r(),e}async addRelay(e,t){if(this.peerId.equals(e))throw this.log.trace("not trying to use self as relay"),new Jo("Cannot use self as relay");if(this.reserveQueue.size>this.maxReservationQueueLength)throw new tf("The reservation queue is full");let n=this.reserveQueue.find(e);if(n!=null)return this.log.trace("potential relay peer %p is already in the reservation queue",e),n.join();if(this.relayFilter.has(e.toMultihash().bytes))throw new Jo("The relay was previously invalid");return this.log.trace("try to reserve relay slot with %p",e),this.reserveQueue.add(async()=>{let o=Date.now();try{let i=this.reservations.get(e);if(i!=null){let p=this.connectionManager.getConnections(e),g=!1;if(p.length===0&&this.log("already have relay reservation with %p but we are no longer connected",e),p.map(m=>m.id).includes(i.connection)&&(this.log("already have relay reservation with %p and the original connection is still open",e),g=!0),g&&h3(i.reservation.expire)>G_)return this.log("already have relay reservation with %p but we are still connected and it does not expire soon",e),{relay:e,details:i};await this.#t(e)}if(t==="discovered"&&this.pendingReservations.length===0)throw new Hc("Not making reservation on discovered relay because we do not need any more relays");let s=AbortSignal.timeout(this.reservationCompletionTimeout);let a=await this.connectionManager.openConnection(e,{signal:s});if(ir.matches(a.remoteAddr))throw new ef("not creating reservation over relayed connection");let c=await this.#e(a,{signal:s}),l=h3(c.expire);this.log("created reservation on relay peer %p, expiry date is %s",e,new Date(Date.now()+l).toString());let u=Math.min(Math.max(l-Q_,Y_),Math.pow(2,31)-1),d=setTimeout(()=>{this.log("refresh reservation to relay %p",e),this.addRelay(e,t).catch(async p=>{this.log.error("could not refresh reservation to relay %p - %e",e,p),await this.#t(e)}).catch(p=>{this.log.error("could not remove expired reservation to relay %p - %e",e,p)})},u),f;if(t==="discovered"){let p=this.pendingReservations.pop();if(p==null)throw new Hc("Made reservation on relay but did not need any more discovered relays");f={timeout:d,reservation:c,type:t,connection:a.id,id:p}}else f={timeout:d,reservation:c,type:t,connection:a.id};this.reservations.set(e,f),await this.peerStore.merge(e,{tags:{[Kc]:{value:1,ttl:l}}}),this.#r();let h={relay:e,details:f};return this.safeDispatchEvent("relay:created-reservation",{detail:h}),h}catch(i){throw t==="discovered"&&i.name==="HadEnoughRelaysError"||this.log.error("could not reserve slot on %p after %dms - %e",e,Date.now()-o,i),(i.name==="DialError"||i.name==="UnsupportedProtocolError")&&this.relayFilter.add(e.toMultihash().bytes),this.#t(e).catch(s=>{this.log.error("could not remove reservation on %p after reserving slot failed - %e",e,s)}),i}},{peerId:e})}hasReservation(e){return this.reservations.has(e)}getReservation(e){return this.reservations.get(e)?.reservation}reservationCount(e){return e==null?this.reservations.size:[...this.reservations.values()].reduce((t,n)=>(n.type===e&&t++,t),0)}cancelReservations(){[...this.reservations.values()].forEach(e=>{clearTimeout(e.timeout)}),this.reservations.clear()}async#e(e,t){t.signal?.throwIfAborted(),this.log("requesting reservation from %p",e.remotePeer);let n=await e.newStream(Vi,t),i=ze(n).pb(Ko);this.log.trace("send RESERVE to %p",e.remotePeer),await i.write({type:Ko.Type.RESERVE},t);let s;try{this.log.trace("reading response from %p",e.remotePeer),s=await i.read(t)}catch(c){throw n.abort(c),c}finally{n.status!=="closed"&&await n.close(t)}if(this.log.trace("read response %o",s),s.status===Et.OK&&s.reservation!=null){let c=new Set;c.add(e.remoteAddr.toString());for(let l of s.reservation.addrs){let u=H(l);u.getPeerId()==null&&(u=u.encapsulate(`/p2p/${e.remotePeer}`)),u=H(u.toString().replace(`/p2p/${e.remotePeer}/p2p/${e.remotePeer}`,`/p2p/${e.remotePeer}`)),c.add(u.toString())}return s.reservation.addrs=[...c].map(l=>H(l).bytes),s.reservation}let a=`reservation failed with status ${s.status??"undefined"}`;throw this.log.error(a),new Error(a)}async#t(e){let t=this.reservations.get(e);t!=null&&(this.log("removing relay reservation with %p from local store",e),clearTimeout(t.timeout),this.reservations.delete(e),t.type==="discovered"&&this.pendingReservations.push(t.id),await this.peerStore.merge(e,{tags:{[Kc]:void 0}}),this.safeDispatchEvent("relay:removed",{detail:{relay:e,details:t}}),this.#r())}#r(){if(this.pendingReservations.length===0){this.log.trace("have discovered enough relays"),this.reserveQueue.clear(),this.safeDispatchEvent("relay:found-enough-relays");return}this.relayFilter=nr(100),this.log("not discovered enough relays %d/%d",this.reservations.size,this.pendingReservations.length),this.safeDispatchEvent("relay:not-enough-relays")}};var X_=r=>{if(r.peer==null)return!1;try{r.peer.addrs.forEach(H)}catch{return!1}return!0},g3={maxInboundStopStreams:d3,maxOutboundStopStreams:d3,stopTimeout:3e4},af=class{discovery;registrar;peerStore;connectionManager;transportManager;peerId;upgrader;addressManager;connectionGater;reservationStore;logger;maxInboundStopStreams;maxOutboundStopStreams;stopTimeout;started;log;constructor(e,t){this.log=e.logger.forComponent("libp2p:circuit-relay:transport"),this.registrar=e.registrar,this.peerStore=e.peerStore,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.logger=e.logger,this.peerId=e.peerId,this.upgrader=e.upgrader,this.addressManager=e.addressManager,this.connectionGater=e.connectionGater,this.maxInboundStopStreams=t.maxInboundStopStreams??g3.maxInboundStopStreams,this.maxOutboundStopStreams=t.maxOutboundStopStreams??g3.maxOutboundStopStreams,this.stopTimeout=t.stopTimeout??g3.stopTimeout,this.discovery=new of(e,{filter:t.discoveryFilter??z2(ny,oy)}),this.discovery.addEventListener("relay:discover",n=>{this.reservationStore.addRelay(n.detail,"discovered").catch(o=>{o.name!=="HadEnoughRelaysError"&&o.name!=="RelayQueueFullError"&&this.log.error("could not add discovered relay %p",n.detail,o)})}),this.reservationStore=new sf(e,t),this.reservationStore.addEventListener("relay:not-enough-relays",()=>{this.discovery?.startDiscovery()}),this.reservationStore.addEventListener("relay:found-enough-relays",()=>{this.discovery?.stopDiscovery()}),this.started=!1}[Symbol.toStringTag]="@libp2p/circuit-relay-v2-transport";[Se]=["@libp2p/transport","@libp2p/circuit-relay-v2-transport"];get[dr](){return this.discovery!=null?["@libp2p/identify"]:[]}[co]=!0;isStarted(){return this.started}async start(){await this.registrar.handle(u3,e=>{this.onStop(e).catch(t=>{this.log.error("error while handling STOP protocol",t),e.stream.abort(t)})},{maxInboundStreams:this.maxInboundStopStreams,maxOutboundStreams:this.maxOutboundStopStreams,runOnLimitedConnection:!0}),await gt(this.discovery,this.reservationStore),this.started=!0}async stop(){await kt(this.discovery,this.reservationStore),await this.registrar.unhandle(u3),this.started=!1}async dial(e,t){if(e.protoCodes().filter(h=>h===ey).length!==1){let h="Invalid circuit relay address";throw this.log.error(h,e),new Nn(h)}let n=e.toString().split("/p2p-circuit"),o=H(n[0]),i=H(n[n.length-1]),s=o.getPeerId(),a=i.getPeerId();if(s==null||a==null){let h=`ircuit relay dial to ${e.toString()} failed as address did not have both relay and destination PeerIDs`;throw this.log.error(`c${h}`),new Nn(`C${h}`)}let c=Ue(s),l=Ue(a),d=this.connectionManager.getConnections(c)[0];d==null?(await this.peerStore.merge(c,{multiaddrs:[o]}),t.onProgress?.(new W("circuit-relay:open-connection")),d=await this.connectionManager.openConnection(c,t)):t.onProgress?.(new W("circuit-relay:reuse-connection"));let f;try{t.onProgress?.(new W("circuit-relay:open-hop-stream")),f=await d.newStream(Vi,t);let h=ze(f),p=h.pb(Ko);t.onProgress?.(new W("circuit-relay:write-connect-message")),await p.write({type:Ko.Type.CONNECT,peer:{id:l.toMultihash().bytes,addrs:[H(i).bytes]}},t),t.onProgress?.(new W("circuit-relay:read-connect-response"));let g=await p.read(t);if(g.status!==Et.OK)throw new fe(`failed to connect via relay with status ${g?.status?.toString()??"undefined"}`);let m=new qc(g.limit),y=p3({stream:h.unwrap(),remoteAddr:e,localAddr:o.encapsulate(`/p2p-circuit/p2p/${this.peerId.toString()}`),logger:this.logger,onDataRead:m.onData,onDataWrite:m.onData});return this.log("new outbound relayed connection %a",y.remoteAddr),await this.upgrader.upgradeOutbound(y,{...t,limits:m.getLimits()})}catch(h){throw this.log.error("circuit relay dial to destination %p via relay %p failed",l,c,h),f?.abort(h),h}}createListener(e){return sy({peerId:this.peerId,connectionManager:this.connectionManager,addressManager:this.addressManager,reservationStore:this.reservationStore,logger:this.logger})}listenFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>rf.exactMatch(t)||nf.exactMatch(t))}dialFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>ir.exactMatch(t))}async onStop({connection:e,stream:t}){if(!this.reservationStore.hasReservation(e.remotePeer))try{this.log("dialed via relay we did not have a reservation on, start listening on that relay address"),await this.transportManager.listen([e.remoteAddr.encapsulate("/p2p-circuit")])}catch(d){this.log.error("failed to listen on a relay peer we were dialed via but did not have a reservation on",d)}let n=AbortSignal.timeout(this.stopTimeout),o=ze(t).pb(Pn),i=await o.read({signal:n});if(this.log("new circuit relay v2 stop stream from %p with type %s",e.remotePeer,i.type),i?.type===void 0){this.log.error("type was missing from circuit v2 stop protocol request from %s",e.remotePeer),await o.write({type:Pn.Type.STATUS,status:Et.MALFORMED_MESSAGE},{signal:n}),await t.close();return}if(i.type!==Pn.Type.CONNECT){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:Pn.Type.STATUS,status:Et.UNEXPECTED_MESSAGE},{signal:n}),await t.close();return}if(!X_(i)){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await o.write({type:Pn.Type.STATUS,status:Et.MALFORMED_MESSAGE},{signal:n}),await t.close();return}let s=ot(Ae(i.peer.id));if(await this.connectionGater.denyInboundRelayedConnection?.(e.remotePeer,s)===!0){this.log.error("connection gater denied inbound relayed connection from %p",e.remotePeer),await o.write({type:Pn.Type.STATUS,status:Et.PERMISSION_DENIED},{signal:n}),await t.close();return}this.log.trace("sending success response to %p",e.remotePeer),await o.write({type:Pn.Type.STATUS,status:Et.OK},{signal:n});let a=new qc(i.limit),c=e.remoteAddr.encapsulate(`/p2p-circuit/p2p/${s.toString()}`),l=this.addressManager.getAddresses()[0],u=p3({stream:o.unwrap().unwrap(),remoteAddr:c,localAddr:l,logger:this.logger,onDataRead:a.onData,onDataWrite:a.onData});this.log("new inbound relayed connection %a",u.remoteAddr),await this.upgrader.upgradeInbound(u,{limits:a.getLimits()}),this.log("%s connection %a upgraded","inbound",u.remoteAddr)}};function y3(r={}){return e=>new af(e,r)}var ly=()=>{let r=new Error("Delay aborted");return r.name="AbortError",r},j_=new WeakMap;function Z_({clearTimeout:r,setTimeout:e}={}){return(t,{value:n,signal:o}={})=>{if(o?.aborted)return Promise.reject(ly());let i,s,a,c=r??clearTimeout,l=()=>{c(i),a(ly())},u=()=>{o&&o.removeEventListener("abort",l)},d=new Promise((f,h)=>{s=()=>{u(),f(n)},a=h,i=(e??setTimeout)(s,t)});return o&&o.addEventListener("abort",l,{once:!0}),j_.set(d,()=>{c(i),i=null,s()}),d}}var J_=Z_(),cf=J_;var un;(function(r){let e;(function(o){o.UNUSED="UNUSED",o.CONNECT="CONNECT",o.SYNC="SYNC"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.UNUSED=0]="UNUSED",o[o.CONNECT=100]="CONNECT",o[o.SYNC=300]="SYNC"})(t||(t={})),function(o){o.codec=()=>Ke(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=re((o,i,s={})=>{if(s.lengthDelimited!==!1&&i.fork(),o.type!=null&&(i.uint32(8),r.Type.codec().encode(o.type,i)),o.observedAddresses!=null)for(let a of o.observedAddresses)i.uint32(18),i.bytes(a);s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={observedAddresses:[]},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{if(s.limits?.observedAddresses!=null&&a.observedAddresses.length===s.limits.observedAddresses)throw new Oe('Decode error - map field "observedAddresses" had too many elements');a.observedAddresses.push(o.bytes());break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>te(o,r.codec()),r.decode=(o,i)=>ee(o,r.codec(),i)})(un||(un={}));function w3(r,e){return ir.matches(r)||e.dialTransportForMultiaddr(r)==null?!1:Ic.matches(r)?!0:r7.matches(r)?Gt(r.toOptions().host)===!1:!1}var uy=1024*4,dy=100,lf={timeout:5e3,retries:3,maxInboundStreams:1,maxOutboundStreams:1},uf=class{started;timeout;retries;maxInboundStreams;maxOutboundStreams;peerStore;registrar;connectionManager;addressManager;transportManager;topologyId;log;constructor(e,t){this.log=e.logger.forComponent("libp2p:dcutr"),this.started=!1,this.peerStore=e.peerStore,this.registrar=e.registrar,this.addressManager=e.addressManager,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.timeout=t.timeout??lf.timeout,this.retries=t.retries??lf.retries,this.maxInboundStreams=t.maxInboundStreams??lf.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??lf.maxOutboundStreams}[Symbol.toStringTag]="@libp2p/dcutr";[dr]=["@libp2p/identify"];isStarted(){return this.started}async start(){this.started||(this.topologyId=await this.registrar.register(zc,{notifyOnLimitedConnection:!0,onConnect:(e,t)=>{ir.exactMatch(t.remoteAddr)&&t.direction==="inbound"&&this.upgradeInbound(t).catch(n=>{this.log.error("error during outgoing DCUtR attempt",n)})}}),await this.registrar.handle(zc,e=>{this.handleIncomingUpgrade(e.stream,e.connection).catch(t=>{this.log.error("error during incoming DCUtR attempt",t),e.stream.abort(t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:!0}),this.started=!0)}async stop(){await this.registrar.unhandle(zc),this.topologyId!=null&&this.registrar.unregister(this.topologyId),this.started=!1}async upgradeInbound(e){if(await this.attemptUnilateralConnectionUpgrade(e))return;let t;for(let n=0;n<this.retries;n++){let o={signal:AbortSignal.timeout(this.timeout)};try{t=await e.newStream([zc],{signal:o.signal,runOnLimitedConnection:!0});let i=ze(t,{maxDataLength:uy}).pb(un);this.log("B sending connect to %p",e.remotePeer);let s=Date.now();await i.write({type:un.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(d=>d.bytes)},o),this.log("B receiving connect from %p",e.remotePeer);let a=await i.read(o);if(a.type!==un.Type.CONNECT)throw this.log("A sent wrong message type"),new fe("DCUtR message type was incorrect");let c=this.getDialableMultiaddrs(a.observedAddresses);if(c.length===0)throw this.log("A did not have any dialable multiaddrs"),new fe("DCUtR connect message had no multiaddrs");let l=Date.now()-s;this.log("A sending sync, rtt %dms",l),await i.write({type:un.Type.SYNC,observedAddresses:[]},o),this.log("A waiting for half RTT"),await cf(l/2),this.log("B dialing",c);let u=await this.connectionManager.openConnection(c,{signal:o.signal,priority:dy,force:!0,initiator:!1});this.log("DCUtR to %p succeeded to address %a, closing relayed connection",e.remotePeer,u.remoteAddr),await e.close(o);break}catch(i){if(this.log.error("error while attempting DCUtR on attempt %d of %d",n+1,this.retries,i),t?.abort(i),n===this.retries)throw i}finally{t!=null&&await t.close(o)}}}async attemptUnilateralConnectionUpgrade(e){let n=(await this.peerStore.get(e.remotePeer)).addresses.map(o=>{let i=o.multiaddr;return i.getPeerId()==null?i.encapsulate(`/p2p/${e.remotePeer}`):i}).filter(o=>w3(o,this.transportManager));if(n.length>0){let o=AbortSignal.timeout(this.timeout);try{this.log("attempting unilateral connection upgrade to %a",n);let i=await this.connectionManager.openConnection(n,{signal:o,force:!0});if(ir.exactMatch(i.remoteAddr))throw new Error("Could not open a new, non-limited, connection");return this.log("unilateral connection upgrade to %p succeeded via %a, closing relayed connection",e.remotePeer,i.remoteAddr),await e.close({signal:o}),!0}catch(i){this.log.error("unilateral connection upgrade to %p on addresses %a failed",e.remotePeer,n,i)}}else this.log("peer %p has no public addresses, not attempting unilateral connection upgrade",e.remotePeer);return!1}async handleIncomingUpgrade(e,t){let n={signal:AbortSignal.timeout(this.timeout)};try{let o=ze(e,{maxDataLength:uy}).pb(un);this.log("A receiving connect");let i=await o.read(n);if(i.type!==un.Type.CONNECT)throw this.log("B sent wrong message type"),new fe("DCUtR message type was incorrect");if(i.observedAddresses.length===0)throw this.log("B sent no multiaddrs"),new fe("DCUtR connect message had no multiaddrs");let s=this.getDialableMultiaddrs(i.observedAddresses);if(s.length===0)throw this.log("B had no dialable multiaddrs"),new fe("DCUtR connect message had no dialable multiaddrs");if(this.log("A sending connect"),await o.write({type:un.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(l=>l.bytes)}),this.log("A receiving sync"),(await o.read(n)).type!==un.Type.SYNC)throw new fe("DCUtR message type was incorrect");this.log("A dialing",s);let c=await this.connectionManager.openConnection(s,{signal:n.signal,priority:dy,force:!0});this.log("DCUtR to %p succeeded via %a, closing relayed connection",t.remotePeer,c.remoteAddr),await t.close(n)}catch(o){this.log.error("incoming DCUtR from %p failed",t.remotePeer,o),e.abort(o)}finally{await e.close(n)}}getDialableMultiaddrs(e){let t=[];for(let n of e)if(!(n==null||n.length===0))try{let o=H(n);if(!w3(o,this.transportManager))continue;t.push(o)}catch{}return t}};var zc="/libp2p/dcutr";function fy(r={}){return e=>new uf(e,r)}var df=globalThis.CustomEvent??Event;async function*dn(r,e={}){let t=e.concurrency??1/0;t<1&&(t=1/0);let n=e.ordered==null?!1:e.ordered,o=new EventTarget,i=[],s=J(),a=J(),c=!1,l,u=!1;o.addEventListener("task-complete",()=>{a.resolve()}),Promise.resolve().then(async()=>{try{for await(let p of r){if(i.length===t&&(s=J(),await s.promise),u)break;let g={done:!1};i.push(g),p().then(m=>{g.done=!0,g.ok=!0,g.value=m,o.dispatchEvent(new df("task-complete"))},m=>{g.done=!0,g.err=m,o.dispatchEvent(new df("task-complete"))})}c=!0,o.dispatchEvent(new df("task-complete"))}catch(p){l=p,o.dispatchEvent(new df("task-complete"))}});function d(){return n?i[0]?.done:!!i.find(p=>p.done)}function*f(){for(;i.length>0&&i[0].done;){let p=i[0];if(i.shift(),p.ok)yield p.value;else throw u=!0,s.resolve(),p.err;s.resolve()}}function*h(){for(;d();)for(let p=0;p<i.length;p++)if(i[p].done){let g=i[p];if(i.splice(p,1),p--,g.ok)yield g.value;else throw u=!0,s.resolve(),g.err;s.resolve()}}for(;;){if(d()||(a=J(),await a.promise),l!=null)throw l;if(n?yield*f():yield*h(),c&&i.length===0)break}}var hy="0.1.0",py="id",my="id/push",gy="1.0.0",yy="1.0.0";var Ho;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.protocolVersion!=null&&(n.uint32(42),n.string(t.protocolVersion)),t.agentVersion!=null&&(n.uint32(50),n.string(t.agentVersion)),t.publicKey!=null&&(n.uint32(10),n.bytes(t.publicKey)),t.listenAddrs!=null)for(let i of t.listenAddrs)n.uint32(18),n.bytes(i);if(t.observedAddr!=null&&(n.uint32(34),n.bytes(t.observedAddr)),t.protocols!=null)for(let i of t.protocols)n.uint32(26),n.string(i);t.signedPeerRecord!=null&&(n.uint32(66),n.bytes(t.signedPeerRecord)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={listenAddrs:[],protocols:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 5:{i.protocolVersion=t.string();break}case 6:{i.agentVersion=t.string();break}case 1:{i.publicKey=t.bytes();break}case 2:{if(o.limits?.listenAddrs!=null&&i.listenAddrs.length===o.limits.listenAddrs)throw new Oe('Decode error - map field "listenAddrs" had too many elements');i.listenAddrs.push(t.bytes());break}case 4:{i.observedAddr=t.bytes();break}case 3:{if(o.limits?.protocols!=null&&i.protocols.length===o.limits.protocols)throw new Oe('Decode error - map field "protocols" had too many elements');i.protocols.push(t.string());break}case 8:{i.signedPeerRecord=t.bytes();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(Ho||(Ho={}));var lr={protocolPrefix:"ipfs",timeout:5e3,maxInboundStreams:1,maxOutboundStreams:1,maxObservedAddresses:10,maxMessageSize:8192,runOnConnectionOpen:!0,runOnSelfUpdate:!0,runOnLimitedConnection:!0,concurrency:32};function wy(r){if(r!=null&&r.length>0)try{return H(r)}catch{}}function rC(r,e){return e??r.userAgent}async function ff(r,e,t,n,o){if(t("received identify from %p",n.remotePeer),o==null)throw new fe("message was null or undefined");let i={};if(o.listenAddrs.length>0&&(i.addresses=o.listenAddrs.map(c=>({isCertified:!1,multiaddr:H(c)}))),o.protocols.length>0&&(i.protocols=o.protocols),o.publicKey!=null){let c=tt(o.publicKey);if(!An(c).equals(n.remotePeer))throw new fe("public key did not match remote PeerId");i.publicKey=c}let s;if(o.signedPeerRecord!=null){t.trace("received signedPeerRecord from %p",n.remotePeer);let c=o.signedPeerRecord,l=await vr.openAndCertify(c,Qt.DOMAIN),u=Qt.createFromProtobuf(l.payload),d=In(l.publicKey.toCID());if(!u.peerId.equals(d))throw new fe("signing key does not match PeerId in the PeerRecord");if(!n.remotePeer.equals(u.peerId))throw new fe("signing key does not match remote PeerId");let f;try{f=await r.get(u.peerId)}catch(h){if(h.name!=="NotFoundError")throw h}if(f!=null&&(i.metadata=f.metadata,f.peerRecordEnvelope!=null)){let h=await vr.createFromProtobuf(f.peerRecordEnvelope),p=Qt.createFromProtobuf(h.payload);p.seqNumber>=u.seqNumber&&(t("sequence number was lower or equal to existing sequence number - stored: %d received: %d",p.seqNumber,u.seqNumber),u=p,c=f.peerRecordEnvelope)}i.peerRecordEnvelope=c,i.addresses=u.multiaddrs.map(h=>({isCertified:!0,multiaddr:h})),s={seq:u.seqNumber,addresses:u.multiaddrs}}else t("%p did not send a signed peer record",n.remotePeer);if(t.trace("patching %p with",n.remotePeer,i),await r.patch(n.remotePeer,i),o.agentVersion!=null||o.protocolVersion!=null){let c={};o.agentVersion!=null&&(c.AgentVersion=N(o.agentVersion)),o.protocolVersion!=null&&(c.ProtocolVersion=N(o.protocolVersion)),t.trace("merging %p metadata",n.remotePeer,c),await r.merge(n.remotePeer,{metadata:c})}let a={peerId:n.remotePeer,protocolVersion:o.protocolVersion,agentVersion:o.agentVersion,publicKey:o.publicKey,listenAddrs:o.listenAddrs.map(c=>H(c)),observedAddr:o.observedAddr==null?void 0:H(o.observedAddr),protocols:o.protocols,signedPeerRecord:s,connection:n};return e.safeDispatchEvent("peer:identify",{detail:a}),a}var ra=class{host;protocol;started;timeout;peerId;privateKey;peerStore;registrar;addressManager;maxInboundStreams;maxOutboundStreams;maxMessageSize;maxObservedAddresses;events;runOnLimitedConnection;log;constructor(e,t){this.protocol=t.protocol,this.started=!1,this.peerId=e.peerId,this.privateKey=e.privateKey,this.peerStore=e.peerStore,this.registrar=e.registrar,this.addressManager=e.addressManager,this.events=e.events,this.log=t.log,this.timeout=t.timeout??lr.timeout,this.maxInboundStreams=t.maxInboundStreams??lr.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??lr.maxOutboundStreams,this.maxMessageSize=t.maxMessageSize??lr.maxMessageSize,this.maxObservedAddresses=t.maxObservedAddresses??lr.maxObservedAddresses,this.runOnLimitedConnection=t.runOnLimitedConnection??lr.runOnLimitedConnection,this.host={protocolVersion:`${t.protocolPrefix??lr.protocolPrefix}/${hy}`,agentVersion:rC(e.nodeInfo,t.agentVersion)}}isStarted(){return this.started}async start(){this.started||(await this.peerStore.merge(this.peerId,{metadata:{AgentVersion:N(this.host.agentVersion),ProtocolVersion:N(this.host.protocolVersion)}}),await this.registrar.handle(this.protocol,e=>{this.handleProtocol(e).catch(t=>{this.log.error(t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnection}),this.started=!0)}async stop(){await this.registrar.unhandle(this.protocol),this.started=!1}};var hf=class extends ra{connectionManager;concurrency;constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??lr.protocolPrefix}/${my}/${yy}`,log:e.logger.forComponent("libp2p:identify-push")}),this.connectionManager=e.connectionManager,this.concurrency=t.concurrency??lr.concurrency,(t.runOnSelfUpdate??lr.runOnSelfUpdate)&&e.events.addEventListener("self:peer:update",n=>{this.push().catch(o=>{this.log.error(o)})})}[Se]=["@libp2p/identify-push"];async push(){if(!this.isStarted())return;let e=this.addressManager.getAddresses().map(u=>u.decapsulateCode(Z("p2p").code)),t=new Qt({peerId:this.peerId,multiaddrs:e}),n=await vr.seal(t,this.privateKey),o=this.registrar.getProtocols(),i=await this.peerStore.get(this.peerId),s=U(i.metadata.get("AgentVersion")??N(this.host.agentVersion)),a=U(i.metadata.get("ProtocolVersion")??N(this.host.protocolVersion)),c=this;async function*l(){for(let u of c.connectionManager.getConnections())(await c.peerStore.get(u.remotePeer)).protocols.includes(c.protocol)&&(yield async()=>{let f,h=AbortSignal.timeout(c.timeout);try{f=await u.newStream(c.protocol,{signal:h,runOnLimitedConnection:c.runOnLimitedConnection}),await ze(f,{maxDataLength:c.maxMessageSize}).pb(Ho).write({listenAddrs:e.map(g=>g.bytes),signedPeerRecord:n.marshal(),protocols:o,agentVersion:s,protocolVersion:a},{signal:h}),await f.close({signal:h})}catch(p){c.log.error("could not push identify update to peer",p),f?.abort(p)}})}await Rt(dn(l(),{concurrency:this.concurrency}))}async handleProtocol(e){let{connection:t,stream:n}=e;try{if(this.peerId.equals(t.remotePeer))throw new Error("received push from ourselves?");let o={signal:AbortSignal.timeout(this.timeout)},s=await ze(n,{maxDataLength:this.maxMessageSize}).pb(Ho).read(o);await n.close(o),await ff(this.peerStore,this.events,this.log,t,s)}catch(o){this.log.error("received invalid message",o),n.abort(o);return}this.log.trace("handled push from %p",t.remotePeer)}};var nC=41,pf=class extends ra{constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??lr.protocolPrefix}/${py}/${gy}`,log:e.logger.forComponent("libp2p:identify")}),(t.runOnConnectionOpen??lr.runOnConnectionOpen)&&e.events.addEventListener("connection:open",n=>{let o=n.detail;this.identify(o).catch(i=>{i.name!==Ln.name&&this.log.error("error during identify trigged by connection:open",i)})})}[Se]=["@libp2p/identify"];async _identify(e,t={}){let n;if(t.signal==null){let o=AbortSignal.timeout(this.timeout);t={...t,signal:o}}try{n=await e.newStream(this.protocol,{...t,runOnLimitedConnection:this.runOnLimitedConnection});let i=await ze(n,{maxDataLength:this.maxMessageSize}).pb(Ho).read(t);return await n.close(t),i}catch(o){throw n?.abort(o),o}}async identify(e,t={}){let n=await this._identify(e,t),{publicKey:o,protocols:i,observedAddr:s}=n;if(o==null)throw new fe("public key was missing from identify message");let a=tt(o),c=In(a.toCID());if(!e.remotePeer.equals(c))throw new fe("identified peer does not match the expected peer");if(this.peerId.equals(c))throw new fe("identified peer is our own peer id?");return this.maybeAddObservedAddress(s),this.log("identify completed for peer %p and protocols %o",c,i),ff(this.peerStore,this.events,this.log,e,n)}maybeAddObservedAddress(e){let t=wy(e);if(t==null)return;if(this.log.trace("our observed address was %a",t),Nr(t)){this.log.trace("our observed address was private");return}if(t.stringTuples()[0][0]===nC&&!H1(t)){this.log.trace("our observed address was IPv6 but not a global unicast address");return}Ci.exactMatch(t)||(this.log.trace("storing the observed address"),this.addressManager.addObservedAddr(t))}async handleProtocol(e){let{connection:t,stream:n}=e,o=AbortSignal.timeout(this.timeout);try{let i=await this.peerStore.get(this.peerId),s=this.addressManager.getAddresses().map(u=>u.decapsulateCode(Z("p2p").code)),a=i.peerRecordEnvelope;if(s.length>0&&a==null){let u=new Qt({peerId:this.peerId,multiaddrs:s});a=(await vr.seal(u,this.privateKey)).marshal().subarray()}let c=t.remoteAddr.bytes;t7.matches(t.remoteAddr)||(c=void 0),await ze(n).pb(Ho).write({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:Nt(this.privateKey.publicKey),listenAddrs:s.map(u=>u.bytes),signedPeerRecord:a,observedAddr:c,protocols:i.protocols},{signal:o}),await n.close({signal:o})}catch(i){this.log.error("could not respond to identify request",i),n.abort(i)}}};function by(r={}){return e=>new pf(e,r)}function xy(r={}){return e=>new hf(e,r)}var na=1e3,b3=60*na,mf=60*b3,vy=36*mf,Ey="/ipfs/kad/1.0.0",Sy=48*mf;var Ay=24*mf,Iy=10,Ty=16384,_y=mf,Uee=10*na;var gf=20,oa=3,Cy=5*b3,ky=na,Py=5*na,Ry=5*b3,Dy=30*na,Ly=180*na,x3=`${so}-kad-dht`;var Wc;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.key!=null&&t.key.byteLength>0&&(n.uint32(10),n.bytes(t.key)),t.value!=null&&t.value.byteLength>0&&(n.uint32(18),n.bytes(t.value)),t.timeReceived!=null&&t.timeReceived!==""&&(n.uint32(42),n.string(t.timeReceived)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={key:se(0),value:se(0),timeReceived:""},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.key=t.bytes();break}case 2:{i.value=t.bytes();break}case 5:{i.timeReceived=t.string();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(Wc||(Wc={}));function Ny(r){let e=r.getUTCFullYear(),t=String(r.getUTCMonth()+1).padStart(2,"0"),n=String(r.getUTCDate()).padStart(2,"0"),o=String(r.getUTCHours()).padStart(2,"0"),i=String(r.getUTCMinutes()).padStart(2,"0"),s=String(r.getUTCSeconds()).padStart(2,"0"),a=r.getUTCMilliseconds(),c=String(a*1e3*1e3).padStart(9,"0");return`${e}-${t}-${n}T${o}:${i}:${s}.${c}Z`}function By(r){let e=new RegExp("(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})\\.(\\d+)Z"),t=String(r).trim().match(e);if(t==null)throw new Error("Invalid format");let n=parseInt(t[1],10),o=parseInt(t[2],10)-1,i=parseInt(t[3],10),s=parseInt(t[4],10),a=parseInt(t[5],10),c=parseInt(t[6],10),l=parseInt(t[7].slice(0,-6),10);return new Date(Date.UTC(n,o,i,s,a,c,l))}var St=class r{key;value;timeReceived;constructor(e,t,n){if(!(e instanceof Uint8Array))throw new Error("key must be a Uint8Array");if(!(t instanceof Uint8Array))throw new Error("value must be a Uint8Array");this.key=e,this.value=t,this.timeReceived=n}serialize(){return Wc.encode(this.prepareSerialize())}prepareSerialize(){return{key:this.key,value:this.value,timeReceived:Ny(this.timeReceived)}}static deserialize(e){let t=Wc.decode(e);return new r(t.key,t.value,new Date(t.timeReceived))}static fromDeserialized(e){let t=By(e.timeReceived);if(e.key==null)throw new Error("key missing from deserialized object");if(e.value==null)throw new Error("value missing from deserialized object");return new r(e.key,e.value,t)}};var qo=class extends Error{constructor(e="Query error"){super(e),this.name="QueryError"}},yf=class extends Error{constructor(e="Query aborted"){super(e),this.name="QueryAbortedError"}},wf=class extends Error{constructor(e="Invalid record"){super(e),this.name="InvalidRecordError"}},bf=class extends Error{constructor(e="No selector function configured for prefix"){super(e),this.name="MissingSelectorError"}};var Oy;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.key!=null&&(n.uint32(10),n.bytes(t.key)),t.value!=null&&(n.uint32(18),n.bytes(t.value)),t.author!=null&&(n.uint32(26),n.bytes(t.author)),t.signature!=null&&(n.uint32(34),n.bytes(t.signature)),t.timeReceived!=null&&(n.uint32(42),n.string(t.timeReceived)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.key=t.bytes();break}case 2:{i.value=t.bytes();break}case 3:{i.author=t.bytes();break}case 4:{i.signature=t.bytes();break}case 5:{i.timeReceived=t.string();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(Oy||(Oy={}));var be;(function(r){r.PUT_VALUE="PUT_VALUE",r.GET_VALUE="GET_VALUE",r.ADD_PROVIDER="ADD_PROVIDER",r.GET_PROVIDERS="GET_PROVIDERS",r.FIND_NODE="FIND_NODE",r.PING="PING"})(be||(be={}));var xf;(function(r){r[r.PUT_VALUE=0]="PUT_VALUE",r[r.GET_VALUE=1]="GET_VALUE",r[r.ADD_PROVIDER=2]="ADD_PROVIDER",r[r.GET_PROVIDERS=3]="GET_PROVIDERS",r[r.FIND_NODE=4]="FIND_NODE",r[r.PING=5]="PING"})(xf||(xf={}));(function(r){r.codec=()=>Ke(xf)})(be||(be={}));var sa;(function(r){r.NOT_CONNECTED="NOT_CONNECTED",r.CONNECTED="CONNECTED",r.CAN_CONNECT="CAN_CONNECT",r.CANNOT_CONNECT="CANNOT_CONNECT"})(sa||(sa={}));var v3;(function(r){r[r.NOT_CONNECTED=0]="NOT_CONNECTED",r[r.CONNECTED=1]="CONNECTED",r[r.CAN_CONNECT=2]="CAN_CONNECT",r[r.CANNOT_CONNECT=3]="CANNOT_CONNECT"})(v3||(v3={}));(function(r){r.codec=()=>Ke(v3)})(sa||(sa={}));var ia;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.id!=null&&t.id.byteLength>0&&(n.uint32(10),n.bytes(t.id)),t.multiaddrs!=null)for(let i of t.multiaddrs)n.uint32(18),n.bytes(i);t.connection!=null&&(n.uint32(24),sa.codec().encode(t.connection,n)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={id:se(0),multiaddrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.id=t.bytes();break}case 2:{if(o.limits?.multiaddrs!=null&&i.multiaddrs.length===o.limits.multiaddrs)throw new Oe('Decode error - map field "multiaddrs" had too many elements');i.multiaddrs.push(t.bytes());break}case 3:{i.connection=sa.codec().decode(t);break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(ia||(ia={}));var io;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{if(o.lengthDelimited!==!1&&n.fork(),t.type!=null&&xf[t.type]!==0&&(n.uint32(8),be.codec().encode(t.type,n)),t.clusterLevel!=null&&(n.uint32(80),n.int32(t.clusterLevel)),t.key!=null&&(n.uint32(18),n.bytes(t.key)),t.record!=null&&(n.uint32(26),n.bytes(t.record)),t.closer!=null)for(let i of t.closer)n.uint32(66),ia.codec().encode(i,n);if(t.providers!=null)for(let i of t.providers)n.uint32(74),ia.codec().encode(i,n);o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={type:be.PUT_VALUE,closer:[],providers:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.type=be.codec().decode(t);break}case 10:{i.clusterLevel=t.int32();break}case 2:{i.key=t.bytes();break}case 3:{i.record=t.bytes();break}case 8:{if(o.limits?.closer!=null&&i.closer.length===o.limits.closer)throw new Oe('Decode error - map field "closer" had too many elements');i.closer.push(ia.codec().decode(t,t.uint32(),{limits:o.limits?.closer$}));break}case 9:{if(o.limits?.providers!=null&&i.providers.length===o.limits.providers)throw new Oe('Decode error - map field "providers" had too many elements');i.providers.push(ia.codec().decode(t,t.uint32(),{limits:o.limits?.providers$}));break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(io||(io={}));function E3(r,e={}){let t={...r,name:"SEND_QUERY",type:0,messageName:r.type,messageType:r.type};return e.onProgress?.(new CustomEvent("kad-dht:query:send-query",{detail:t})),t}function Gc(r,e={}){let t={...r,name:"PEER_RESPONSE",type:1,messageName:r.messageType,closer:r.closer??[],providers:r.providers??[]};return e.onProgress?.(new CustomEvent("kad-dht:query:peer-response",{detail:t})),t}function vf(r,e={}){let t={...r,name:"FINAL_PEER",type:2};return e.onProgress?.(new CustomEvent("kad-dht:query:final-peer",{detail:t})),t}function Er(r,e={}){let t={...r,name:"QUERY_ERROR",type:3};return e.onProgress?.(new CustomEvent("kad-dht:query:query-error",{detail:t})),t}function S3(r,e={}){let t={...r,name:"PROVIDER",type:4};return e.onProgress?.(new CustomEvent("kad-dht:query:provider",{detail:t})),t}function Qc(r,e={}){let t={...r,name:"VALUE",type:5};return e.onProgress?.(new CustomEvent("kad-dht:query:value",{detail:t})),t}function A3(r,e={}){let t={...r,name:"DIAL_PEER",type:7};return e.onProgress?.(new CustomEvent("kad-dht:query:dial-peer",{detail:t})),t}function My(r,e,t){if(t.length===0)throw new _("No records given");let o=U(e).split("/");if(o.length<3)throw new _("Record key does not have a selector function");let i=r[o[1].toString()];if(i==null)throw new bf(`No selector function configured for key type "${o[1]}"`);return t.length===1?0:i(e,t)}function iC(r,e){return 0}var Uy={pk:iC};async function aa(r,e){let t=e.key,o=U(t).split("/");if(o.length<3)return;let i=r[o[1].toString()];if(i==null)throw new _(`No validator available for key type "${o[1]}"`);await i(t,e.value)}var sC=async(r,e)=>{if(!(r instanceof Uint8Array))throw new _('"key" must be a Uint8Array');if(r.byteLength<5)throw new _("Invalid public key record");if(U(r.subarray(0,4))!=="/pk/")throw new _("key was not prefixed with /pk/");let n=tt(e),o=r.slice(4);if(!ne(o,n.toMultihash().bytes))throw new _("public key does not match passed in key")},Fy={pk:sC};var aC=N("/pk/");function Vy(r){return{...r,multiaddrs:r.multiaddrs.filter(e=>{let[[t,n]]=e.stringTuples();if(t===53||t===54||t===55)return n!=="localhost";if(t!==4&&t!==6||n==null)return!1;let o=Gt(n);return o==null?!0:!o})}}async function zo(r){return(await ct.digest(r)).digest}async function At(r){return zo(r.toMultihash().bytes)}function Wo(r,e){return new De(`${r}/${U(e,"base32")}`,!1)}function $y(r){return Pe([aC,r.toMultihash().bytes])}function Ky(r){return U(r.subarray(0,4))==="/pk/"}function Hy(r){let e=Ae(r.subarray(4));return ot(e)}function I3(r,e){let t=new Date;return new St(r,e,t).serialize()}var cC=290,lC=54,uC=55,dC=56,fC=4,hC=41;function qy(r){let e=r.stringTuples();for(let t of e)if(t[0]===cC)return!1;if(e[0][0]===lC||e[0][0]===uC||e[0][0]===dC)return!0;if(e[0][0]===fC||e[0][0]===hC){let t=Gt(`${e[0][1]}`);return t==null||!t}return!1}function Ef(r){let e=r.toString().split("/"),t=e.pop(),n=e.pop();if(t==null||n==null)throw new Error(`incorrectly formatted provider entry key in datastore: ${r.toString()}`);return{cid:X.createV1(ri,Ae(N(n,"base32"))),peerId:Ue(t)}}function Sf(r,e,t){let n=typeof e=="string"?e:U(e.multihash.bytes,"base32"),o=[r,n];return t!=null&&o.push(t.toString()),new De(o.join("/"))}function Af(r){return new Date($t(r))}function $i(r,e,t){return async function*(...n){let o=e.queryTime?.timer(t),i=e.errorTime?.timer(t),s=!1;try{e.queries?.increment({[t]:!0}),yield*r(...n)}catch(a){throw s=!0,i?.(),e.errors?.increment({[t]:!0}),a}finally{e.queries?.decrement({[t]:!0}),s||o?.()}}}function If(r,e,t){return async function(...n){let o=e?.queryTime?.timer(t),i=e?.errorTime?.timer(t),s=!1;try{return e.queries?.increment({[t]:!0}),await r(...n)}catch(a){throw s=!0,i?.(),e.errors?.increment({[t]:!0}),a}finally{e.queries?.decrement({[t]:!0}),s||o?.()}}}var Tf=class{log;components;validators;selectors;peerRouting;queryManager;network;datastorePrefix;constructor(e,t){let{validators:n,selectors:o,peerRouting:i,queryManager:s,network:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-fetching`),this.datastorePrefix=`${t.datastorePrefix}/record`,this.validators=n,this.selectors=o,this.peerRouting=i,this.queryManager=s,this.network=a,this.get=e.metrics?.traceFunction("libp2p.kadDHT.get",this.get.bind(this),{optionsIndex:1})??this.get,this.put=e.metrics?.traceFunction("libp2p.kadDHT.put",this.put.bind(this),{optionsIndex:2})??this.put}async getLocal(e){this.log("getLocal %b",e);let t=Wo(this.datastorePrefix,e);this.log("fetching record for key %k",t);let n=await this.components.datastore.get(t);this.log("found %k in local datastore",t);let o=St.deserialize(n);return await aa(this.validators,o),o}async*sendCorrectionRecord(e,t,n,o={}){this.log("sendCorrection for %b",e);let i=I3(e,n);for(let{value:s,from:a}of t){if(ne(s,n)){this.log("record was ok");continue}if(this.components.peerId.equals(a)){try{let u=Wo(this.datastorePrefix,e);this.log(`Storing corrected record for key ${u.toString()}`),await this.components.datastore.put(u,i.subarray())}catch(u){this.log.error("Failed error correcting self",u)}continue}let c=!1,l={type:be.PUT_VALUE,key:e,record:i};for await(let u of this.network.sendRequest(a,l,o))u.name==="PEER_RESPONSE"&&u.record!=null&&ne(u.record.value,St.deserialize(i).value)&&(c=!0),yield u;c||(yield Er({from:a,error:new qo("Value not put correctly")},o)),this.log.error("Failed error correcting entry")}}async*put(e,t,n={}){this.log("put key %b value %b",e,t);let o=I3(e,t),i=Wo(this.datastorePrefix,e);this.log(`storing record for key ${i.toString()}`),await this.components.datastore.put(i,o.subarray()),yield*dt(this.peerRouting.getClosestPeers(e,{...n,signal:n.signal}),s=>jt(s,a=>async()=>{if(a.name!=="FINAL_PEER")return[a];let c=[],l={type:be.PUT_VALUE,key:e,record:o};this.log("send put to %p",a.peer.id);for await(let u of this.network.sendRequest(a.peer.id,l,n))c.push(u),u.name==="PEER_RESPONSE"&&(u.record!=null&&ne(u.record.value,St.deserialize(o).value)||c.push(Er({from:a.peer.id,error:new qo("Value not put correctly")},n)));return c}),s=>dn(s,{ordered:!1,concurrency:oa}),async function*(s){for await(let a of s)yield*a})}async*get(e,t={}){this.log("get %b",e);let n=[];for await(let a of this.getMany(e,t))a.name==="VALUE"&&n.push(a),yield a;if(n.length===0)return;let o=n.map(a=>a.value),i=0;try{i=My(this.selectors,e,o)}catch(a){if(a.name!=="InvalidParametersError")throw a}let s=o[i];if(this.log("GetValue %b %b",e,s),s==null)throw new Be("Best value was not found");yield*this.sendCorrectionRecord(e,n,s,t),yield n[i]}async*getMany(e,t={}){this.log("getMany values for %b",e);try{let i=await this.getLocal(e);yield Qc({value:i.value,from:this.components.peerId},t)}catch(i){this.log("error getting local value for %b",e,i)}let n=this,o=async function*({peer:i,signal:s}){for await(let a of n.peerRouting.getValueOrPeers(i,e,{...t,signal:s}))yield a,a.name==="PEER_RESPONSE"&&a.record!=null&&(yield Qc({from:i,value:a.record.value},t))};yield*this.queryManager.run(e,o,t)}};function zy(r,e){return{id:r.id.toMultihash().bytes,multiaddrs:(r.multiaddrs??[]).map(n=>n.bytes),connection:e}}function Yc(r){if(r.id==null)throw new Error("Invalid peer in message");let e=Ae(r.id);return{id:ot(e),multiaddrs:(r.multiaddrs??[]).map(t=>H(t))}}var _f=class{log;components;network;peerRouting;queryManager;routingTable;providers;constructor(e,t){let{network:n,peerRouting:o,queryManager:i,routingTable:s,providers:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-routing`),this.network=n,this.peerRouting=o,this.queryManager=i,this.routingTable=s,this.providers=a,this.findProviders=e.metrics?.traceFunction("libp2p.kadDHT.findProviders",this.findProviders.bind(this),{optionsIndex:1,getAttributesFromYieldedValue:(l,u)=>(l.name==="PROVIDER"&&(u.providers??=[],u.providers.push(...l.providers.map(d=>d.id.toString()))),u)})??this.findProviders,this.provide=e.metrics?.traceFunction("libp2p.kadDHT.provide",this.provide.bind(this),{optionsIndex:1,getAttributesFromYieldedValue:(l,u)=>(l.name==="PEER_RESPONSE"&&l.messageName==="ADD_PROVIDER"&&(u.providers??=[],u.providers.push(l.from.toString())),u)})??this.provide}async*provide(e,t,n={}){this.log("provide %s",e);let o=e.multihash.bytes;await this.providers.addProvider(e,this.components.peerId);let i={type:be.ADD_PROVIDER,key:o,providers:[zy({id:this.components.peerId,multiaddrs:t})]},s=0,a=c=>async()=>{if(c.name!=="FINAL_PEER")return[c];let l=[];this.log("putProvider %s to %p",e,c.peer.id);try{this.log("sending provider record for %s to %p",e,c.peer.id);for await(let u of this.network.sendMessage(c.peer.id,i,n))u.name==="PEER_RESPONSE"&&(this.log("sent provider record for %s to %p",e,c.peer.id),s++),l.push(u)}catch(u){this.log.error("error sending provide record to peer %p",c.peer.id,u),l.push(Er({from:c.peer.id,error:u},n))}return l};yield*dt(this.peerRouting.getClosestPeers(o,n),c=>jt(c,l=>a(l)),c=>dn(c,{ordered:!1,concurrency:oa}),async function*(c){for await(let l of c)yield*l}),this.log("sent provider records to %d peers",s)}async*findProviders(e,t){let n=this.routingTable.kBucketSize,o=0,i=e.multihash.bytes,s=this;this.log("findProviders %c",e);let a=await this.providers.getProviders(e);if(a.length>0){let u=[];for(let d of a.slice(0,n))try{let f=await this.components.peerStore.get(d);u.push({id:d,multiaddrs:f.addresses.map(({multiaddr:h})=>h)})}catch(f){if(f.name!=="NotFoundError")throw f;this.log("no peer store entry for %p",d)}if(yield Gc({from:this.components.peerId,messageType:be.GET_PROVIDERS,providers:u},t),yield S3({from:this.components.peerId,providers:u},t),o+=u.length,o>=n)return}let c=async function*({peer:u,signal:d}){let f={type:be.GET_PROVIDERS,key:i};yield*s.network.sendRequest(u,f,{...t,signal:d})},l=new zt(a);for await(let u of this.queryManager.run(i,c,t))if(yield u,u.name==="PEER_RESPONSE"){this.log("Found %d provider entries for %c and %d closer peers",u.providers.length,e,u.closer.length);let d=[];for(let f of u.providers)l.has(f.id)||(l.add(f.id),d.push(f));if(d.length>0&&(yield S3({from:u.from,providers:d},t),o+=d.length,o>=n))return}}};var ca=class{movingAverage;variance;deviation;forecast;timespan;previousTime;constructor(e){this.timespan=e,this.movingAverage=0,this.variance=0,this.deviation=0,this.forecast=0}alpha(e,t){return 1-Math.exp(-(e-t)/this.timespan)}push(e,t=Date.now()){if(this.previousTime!=null){let n=this.alpha(t,this.previousTime),o=e-this.movingAverage,i=n*o;this.movingAverage=n*e+(1-n)*this.movingAverage,this.variance=(1-n)*(this.variance+o*i),this.deviation=Math.sqrt(this.variance),this.forecast=this.movingAverage+n*o}else this.movingAverage=e;this.previousTime=t}};var mC=1.2,gC=2,yC=2e3,fn=class{success;failure;next;metric;timeoutMultiplier;failureMultiplier;minTimeout;constructor(e={}){this.success=new ca(e.interval??5e3),this.failure=new ca(e.interval??5e3),this.next=new ca(e.interval??5e3),this.failureMultiplier=e.failureMultiplier??gC,this.timeoutMultiplier=e.timeoutMultiplier??mC,this.minTimeout=e.minTimeout??yC,e.metricName!=null&&(this.metric=e.metrics?.registerMetricGroup(e.metricName))}getTimeoutSignal(e={}){let t=Math.max(Math.round(this.next.movingAverage*(e.timeoutFactor??this.timeoutMultiplier)),this.minTimeout),n=AbortSignal.timeout(t),o=ce([e.signal,n]);return o.start=Date.now(),o.timeout=t,o}cleanUp(e){let t=Date.now()-e.start;e.aborted?(this.failure.push(t),this.next.push(t*this.failureMultiplier),this.metric?.update({failureMovingAverage:this.failure.movingAverage,failureDeviation:this.failure.deviation,failureForecast:this.failure.forecast,failureVariance:this.failure.variance,failure:t})):(this.success.push(t),this.next.push(t),this.metric?.update({successMovingAverage:this.success.movingAverage,successDeviation:this.success.deviation,successForecast:this.success.forecast,successVariance:this.success.variance,success:t}))}};var Cf=class extends ge{log;protocol;running;components;timeout;metrics;constructor(e,t){super(),this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:network`),this.running=!1,this.protocol=t.protocol,this.timeout=new fn({...t.timeout??{},metrics:e.metrics,metricName:`${t.metricsPrefix}_network_message_send_times_milliseconds`}),this.metrics={operations:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_outbound_rpc_requests_total`),errors:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_outbound_rpc_errors_total`)},this.sendRequest=e.metrics?.traceFunction("libp2p.kadDHT.sendRequest",this.sendRequest.bind(this),{optionsIndex:2,getAttributesFromArgs([n,o],i){return{...i,to:n.toString(),"message type":`${o.type}`}},getAttributesFromYieldedValue:(n,o)=>(n.name==="PEER_RESPONSE"&&(n.providers.length>0&&n.providers.forEach((i,s)=>{o[`providers-${s}`]=i.id.toString()}),n.closer.length>0&&n.closer.forEach((i,s)=>{o[`closer-${s}`]=i.id.toString()})),o)})??this.sendRequest,this.sendMessage=e.metrics?.traceFunction("libp2p.kadDHT.sendMessage",this.sendMessage.bind(this),{optionsIndex:2,getAttributesFromArgs([n,o],i){return{...i,to:n.toString(),"message type":`${o.type}`}},getAttributesFromYieldedValue:(n,o)=>(n.name==="PEER_RESPONSE"&&(n.providers.length>0&&n.providers.forEach((i,s)=>{o[`providers-${s}`]=i.id.toString()}),n.closer.length>0&&n.closer.forEach((i,s)=>{o[`closer-${s}`]=i.id.toString()})),o)})??this.sendMessage}async start(){this.running||(this.running=!0)}async stop(){this.running=!1}isStarted(){return this.running}async*sendRequest(e,t,n={}){if(!this.running)return;let o=t.type;if(o==null)throw new _("Message type was missing");this.log("sending %s to %p",t.type,e),yield A3({peer:e},n),yield E3({to:e,type:o},n);let i,s=this.timeout.getTimeoutSignal(n);n={...n,signal:s};try{this.metrics.operations?.increment({[o]:!0}),i=await(await this.components.connectionManager.openConnection(e,n)).newStream(this.protocol,n);let c=await this._writeReadMessage(i,t,n);i.close(n).catch(l=>{this.log.error("error closing stream to %p",e,l),i?.abort(l)}),yield Gc({from:e,messageType:c.type,closer:c.closer.map(Yc),providers:c.providers.map(Yc),record:c.record==null?void 0:St.deserialize(c.record)},n)}catch(a){this.metrics.errors?.increment({[o]:!0}),i?.abort(a),n.signal?.aborted!==!0&&this.log.error("could not send %s to %p - %e",t.type,e,a),yield Er({from:e,error:a},n)}finally{this.timeout.cleanUp(s)}}async*sendMessage(e,t,n={}){if(!this.running)return;let o=t.type;if(o==null)throw new _("Message type was missing");this.log("sending %s to %p",t.type,e),yield A3({peer:e},n),yield E3({to:e,type:o},n);let i,s=this.timeout.getTimeoutSignal(n);n={...n,signal:s};try{this.metrics.operations?.increment({[o]:!0}),i=await(await this.components.connectionManager.openConnection(e,n)).newStream(this.protocol,n),await this._writeMessage(i,t,n),i.close(n).catch(c=>{this.log.error("error closing stream to %p",e,c),i?.abort(c)}),yield Gc({from:e,messageType:o},n)}catch(a){this.metrics.errors?.increment({[o]:!0}),i?.abort(a),yield Er({from:e,error:a},n)}finally{this.timeout.cleanUp(s)}}async _writeMessage(e,t,n){await ze(e).write(t,io,n)}async _writeReadMessage(e,t,n){let o=ze(e);await o.write(t,io,n);let i=await o.read(io,n);return i.closer.forEach(s=>{this.safeDispatchEvent("peer",{detail:Yc(s)})}),i.providers.forEach(s=>{this.safeDispatchEvent("peer",{detail:Yc(s)})}),i}};function Go(r,e){if(r.byteLength!==e.byteLength)throw new Error("Inputs should have the same length");for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return r[t]<e[t]?-1:1;return 0}var Qo=class{originDhtKey;capacity;peerDistances;constructor(e,t){this.originDhtKey=e,this.capacity=t,this.peerDistances=[]}get length(){return this.peerDistances.length}get peers(){return this.peerDistances.map(e=>e.peer)}async add(e){let t=await At(e.id);this.addWitKadId(e,t)}addWitKadId(e,t){if(this.peerDistances.find(o=>o.peer.id.equals(e.id))!=null)return;let n={peer:e,distance:cr(this.originDhtKey,t)};this.peerDistances.push(n),this.peerDistances.sort((o,i)=>Go(o.distance,i.distance)),this.peerDistances=this.peerDistances.slice(0,this.capacity)}async isCloser(e){if(this.length===0)return!0;let t=await At(e),n=cr(t,this.originDhtKey),o=this.peerDistances[this.peerDistances.length-1].distance;return Go(n,o)===-1}async anyCloser(e){return e.length===0?!1:Promise.any(e.map(async t=>this.isCloser(t)))}};var kf=class{log;routingTable;network;validators;queryManager;peerStore;peerId;constructor(e,t){this.routingTable=t.routingTable,this.network=t.network,this.validators=t.validators,this.queryManager=t.queryManager,this.peerStore=e.peerStore,this.peerId=e.peerId,this.log=e.logger.forComponent(`${t.logPrefix}:peer-routing`),this.findPeer=e.metrics?.traceFunction("libp2p.kadDHT.findPeer",this.findPeer.bind(this),{optionsIndex:1})??this.findPeer,this.getClosestPeers=e.metrics?.traceFunction("libp2p.kadDHT.getClosestPeers",this.getClosestPeers.bind(this),{optionsIndex:1})??this.getClosestPeers}async findPeerLocal(e){let t,n=await this.routingTable.find(e);if(n!=null){this.log("findPeerLocal found %p in routing table",e);try{t=await this.peerStore.get(n)}catch(o){if(o.name!=="NotFoundError")throw o}}if(t==null)try{t=await this.peerStore.get(e)}catch(o){if(o.name!=="NotFoundError")throw o}if(t!=null)return this.log("findPeerLocal found %p in peer store",e),{id:t.id,multiaddrs:t.addresses.map(o=>o.multiaddr)}}async*_getValueSingle(e,t,n={}){let o={type:be.GET_VALUE,key:t};yield*this.network.sendRequest(e,o,n)}async*getPublicKeyFromNode(e,t={}){let n=$y(e);for await(let o of this._getValueSingle(e,n,t))if(yield o,o.name==="PEER_RESPONSE"&&o.record!=null){let i=tt(o.record.value),s=An(i);if(!s.equals(e))throw new Dn("public key does not match id");if(s.publicKey==null)throw new Dn("public key missing");yield Qc({from:e,value:o.record.value},t)}throw new qo(`Node not responding with its public key: ${e.toString()}`)}async*findPeer(e,t={}){if(this.log("findPeer %p",e),t.useCache!==!1){let o=await this.findPeerLocal(e);if(o!=null){this.log("found local"),yield vf({from:this.peerId,peer:o},t);return}}let n=!1;if(t.useNetwork!==!1){let o=this,i=async function*({peer:s,signal:a}){let c={type:be.FIND_NODE,key:e.toMultihash().bytes};for await(let l of o.network.sendRequest(s,c,{...t,signal:a}))if(yield l,l.name==="PEER_RESPONSE"){let u=l.closer.find(d=>d.id.equals(e));u!=null&&(yield vf({from:l.from,peer:u},t))}};for await(let s of this.queryManager.run(e.toMultihash().bytes,i,t))s.name==="FINAL_PEER"&&(n=!0),yield s}n||(yield Er({from:this.peerId,error:new Be("Not found")},t))}async*getClosestPeers(e,t={}){this.log("getClosestPeers to %b",e);let n=await zo(e),o=this.routingTable.closestPeers(n),i=this,s=new Qo(n,this.routingTable.kBucketSize);await Promise.all(o.map(async c=>{await s.add({id:c,multiaddrs:[]})}));let a=async function*({peer:c,signal:l}){i.log("closerPeersSingle %s from %p",U(e,"base32"),c);let u={type:be.FIND_NODE,key:e};yield*i.network.sendRequest(c,u,{...t,signal:l})};for await(let c of this.queryManager.run(e,a,t))c.name==="PEER_RESPONSE"&&await Promise.all(c.closer.map(async l=>{await s.add(l)})),yield c;this.log("found %d peers close to %b",s.length,e);for(let c of s.peers)yield vf({from:this.peerId,peer:c},t)}async*getValueOrPeers(e,t,n={}){for await(let o of this._getValueSingle(e,t,n)){if(o.name==="PEER_RESPONSE"&&o.record!=null)try{await this._verifyRecordOnline(o.record)}catch{let s="invalid record received, discarded";this.log(s),yield Er({from:o.from,error:new qo(s)},n);continue}yield o}}async _verifyRecordOnline(e){if(e.timeReceived==null)throw new wf("invalid record received");await aa(this.validators,new St(e.key,e.value,e.timeReceived))}async getCloserPeersOffline(e,t){let n=[];try{let c=Ae(e),l=ot(c),u=await this.peerStore.get(l);n.push({id:u.id,multiaddrs:u.addresses.map(({multiaddr:d})=>d)})}catch{}let o=await zo(e),i=this.routingTable.closestPeers(o),s=await At(t),a=cr(s,o);for(let c of i){let l=await At(c),u=cr(l,o);if(Go(u,a)===-1)try{let d=await this.peerStore.get(c);n.push({id:c,multiaddrs:d.addresses.map(({multiaddr:f})=>f)})}catch(d){if(d.name!=="NotFoundError")throw d}}return n.length>0?this.log("getCloserPeersOffline found %d peer(s) closer to %b than %p",n.length,e,t):this.log("getCloserPeersOffline could not find peer closer to %b than %p with %d peers in the routing table",e,t,this.routingTable.size),n}};var Pf=class{log;datastore;datastorePrefix;lock;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:providers`),this.datastorePrefix=`${t.datastorePrefix}/provider`,this.datastore=e.datastore,this.lock=t.lock}async addProvider(e,t){let n=await this.lock.readLock();try{this.log("%p provides %s",t,e),await this.writeProviderEntry(e,t)}finally{n()}}async removeProvider(e,t){let n=await this.lock.writeLock();try{let o=Sf(this.datastorePrefix,e,t);this.log("%p no longer provides %s",t,e),await this.datastore.delete(o)}finally{n()}}async getProviders(e){let t=await this.lock.readLock();try{this.log("get providers for %c",e);let n=await this.loadProviders(e);return this.log("got %d providers for %c",n.size,e),[...n.keys()]}finally{t()}}async writeProviderEntry(e,t,n=new Date){let o=Sf(this.datastorePrefix,e,t),i=$e(n.getTime());await this.datastore.put(o,i)}async loadProviders(e){let t=new ht,n=Sf(this.datastorePrefix,e);for await(let o of this.datastore.query({prefix:n.toString()})){let{peerId:i}=Ef(o.key);t.set(i,Af(o.value))}return t}};async function*Wy(r){let{key:e,startingPeer:t,ourPeerId:n,signal:o,query:i,alpha:s,pathIndex:a,numPaths:c,queryFuncTimeout:l,log:u,peersSeen:d,connectionManager:f}=r,h=new Vt({concurrency:s,sort:(m,y)=>Go(m.options.distance,y.options.distance)}),p=await zo(e);function g(m,y){if(m==null)return;d.add(m);let x=cr(y,p);h.add(async()=>{let w=[o];l!=null&&w.push(AbortSignal.timeout(l));let I=ce(w);try{for await(let B of i({...r,key:e,peer:m,signal:I,pathIndex:a,numPaths:c})){if(I.aborted)return;if(B.name==="PEER_RESPONSE")for(let L of B.closer){if(d.has(L.id)){u.trace("already seen %p in query",L.id);continue}if(n.equals(L.id)){u("not querying ourselves");continue}if(!await f.isDialable(L.multiaddrs)){u("not querying undialable peer");continue}let P=await At(L.id),S=cr(P,p);if(Go(S,x)!==-1){u.trace("skipping %p as they are not closer to %b than %p",L.id,e,m);continue}u.trace("querying closer peer %p",L.id),g(L.id,P)}h.safeDispatchEvent("completed",{detail:B})}}catch(B){if(!o.aborted)return Er({from:m,error:B},r)}finally{I.clear()}},{distance:x}).catch(w=>{u.error(w)})}g(t,await At(t));try{for await(let m of h.toGenerator({signal:o}))m!=null&&(yield m)}catch(m){throw o.aborted?new yf("Query aborted"):m}}var Rf=class{disjointPaths;alpha;shutDownController;running;logger;peerId;connectionManager;routingTable;initialQuerySelfHasRun;logPrefix;constructor(e,t){this.logPrefix=t.logPrefix,this.disjointPaths=t.disjointPaths??gf,this.alpha=t.alpha??oa,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.routingTable=t.routingTable,this.logger=e.logger,this.peerId=e.peerId,this.connectionManager=e.connectionManager,this.shutDownController=new AbortController,this.shutDownController.signal,this.running=!1}isStarted(){return this.running}async start(){this.running||(this.running=!0,this.shutDownController=new AbortController,this.shutDownController.signal,void 0)}async stop(){this.running=!1,this.shutDownController.abort()}async*run(e,t,n={}){if(!this.running)throw new Error("QueryManager not started");if(n.signal==null){let c=AbortSignal.timeout(Ly);n={...n,signal:c}}let o=new AbortController,i=ce([this.shutDownController.signal,o.signal,n.signal]);o.signal;let s=this.logger.forComponent(`${this.logPrefix}:query:`+U(e,"base58btc")),a=!1;try{n.isSelfQuery!==!0&&this.initialQuerySelfHasRun!=null&&(s("waiting for initial query-self query before continuing"),await st(this.initialQuerySelfHasRun.promise,i),this.initialQuerySelfHasRun=void 0),s("query:start");let c=await zo(e),l=this.routingTable.closestPeers(c),u=l.slice(0,Math.min(this.disjointPaths,l.length));if(l.length===0){s.error("Running query with no peers");return}let d=new zt,f=u.map((h,p)=>Wy({...n,key:e,startingPeer:h,ourPeerId:this.peerId,signal:i,query:t,pathIndex:p,numPaths:u.length,alpha:this.alpha,queryFuncTimeout:n.queryFuncTimeout,log:s,peersSeen:d,onProgress:n.onProgress,connectionManager:this.connectionManager}));for await(let h of Kt(...f)){if(h.name==="QUERY_ERROR"&&s.error("query error",h.error),h.name==="PEER_RESPONSE")for(let p of[...h.closer,...h.providers])await this.connectionManager.isDialable(p.multiaddrs)&&await this.routingTable.add(p.id);yield h}a=!0}catch(c){if(!(!this.running&&c.name==="QueryAbortedError"))throw c}finally{a||(s("query exited early"),o.abort()),i.clear(),s("query:done")}}};function wC(r){return r[Symbol.asyncIterator]!=null}function bC(r){if(wC(r))return(async()=>{let e=0;for await(let t of r)e++;return e})();{let e=0;for(let t of r)e++;return e}}var Df=bC;var xC=r=>{let e=r.addEventListener||r.on||r.addListener,t=r.removeEventListener||r.off||r.removeListener;if(!e||!t)throw new TypeError("Emitter is not compatible");return{addListener:e.bind(r),removeListener:t.bind(r)}};function vC(r,e,t){let n,o=new Promise((i,s)=>{if(t={rejectionEvents:["error"],multiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:u}=xC(r),d=(...h)=>{let p=t.multiArgs?h:h[0];t.filter&&!t.filter(p)||(c.push(p),t.count===c.length&&(n(),i(c)))},f=h=>{n(),s(h)};n=()=>{for(let h of a)u(h,d);for(let h of t.rejectionEvents)u(h,f)};for(let h of a)l(h,d);for(let h of t.rejectionEvents)l(h,f);t.signal&&t.signal.addEventListener("abort",()=>{f(t.signal.reason)},{once:!0}),t.resolveImmediately&&i(c)});if(o.cancel=n,typeof t.timeout=="number"){let i=Zr(o,{milliseconds:t.timeout});return i.cancel=n,i}return o}function Xc(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=vC(r,e,t),o=n.then(i=>i[0]);return o.cancel=n.cancel,o}var Lf=class{log;peerId;peerRouting;routingTable;count;interval;initialInterval;queryTimeout;running;timeoutId;controller;initialQuerySelfHasRun;querySelfPromise;constructor(e,t){this.peerId=e.peerId,this.log=e.logger.forComponent(`${t.logPrefix}:query-self`),this.running=!1,this.peerRouting=t.peerRouting,this.routingTable=t.routingTable,this.count=t.count??gf,this.interval=t.interval??Cy,this.initialInterval=t.initialInterval??ky,this.queryTimeout=t.queryTimeout??Py,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.querySelf=If(this.querySelf.bind(this),t.operationMetrics,"SELF_QUERY")}isStarted(){return this.running}start(){this.running||(this.running=!0,clearTimeout(this.timeoutId),this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query",e)})},this.initialInterval))}stop(){this.running=!1,this.timeoutId!=null&&clearTimeout(this.timeoutId),this.controller!=null&&this.controller.abort()}async querySelf(){if(!this.running){this.log("skip self-query because we are not started");return}if(this.querySelfPromise!=null)return this.log("joining existing self query"),this.querySelfPromise.promise;if(this.querySelfPromise=J(),this.running){this.controller=new AbortController;let e=[this.controller.signal];if(this.initialQuerySelfHasRun==null){let n=AbortSignal.timeout(this.queryTimeout);e.push(n)}let t=ce(e);this.controller.signal;try{this.routingTable.size===0&&(this.log("routing table was empty, waiting for some peers before running query"),await Xc(this.routingTable,"peer:add",{signal:t,filter:i=>!this.peerId.equals(i.detail)}),this.log("routing table has peers, continuing with query")),this.log("run self-query, look for %d peers timing out after %dms",this.count,this.queryTimeout);let n=Date.now(),o=await dt(this.peerRouting.getClosestPeers(this.peerId.toMultihash().bytes,{signal:t,isSelfQuery:!0}),i=>ho(i,this.count),async i=>Df(i));this.log("self-query found %d peers in %dms",o,Date.now()-n)}catch(n){this.log.error("self-query error",n)}finally{t.clear(),this.initialQuerySelfHasRun!=null&&(this.initialQuerySelfHasRun.resolve(),this.initialQuerySelfHasRun=void 0)}}this.querySelfPromise.resolve(),this.querySelfPromise=void 0,this.running&&(this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query",e)})},this.interval))}};var Nf=class extends ge{log;reprovideQueue;maxQueueSize;datastore;timeout;reprovideTimeout;running;shutdownController;reprovideThreshold;contentRouting;datastorePrefix;addressManager;validity;interval;lock;peerId;constructor(e,t){super(),this.log=e.logger.forComponent(`${t.logPrefix}:reprovider`),this.peerId=e.peerId,this.reprovideQueue=new Vt({concurrency:t.concurrency??Iy,metrics:e.metrics,metricName:`${t.metricsPrefix}_reprovide_queue`}),this.reprovideTimeout=new fn({...t.timeout??{},metrics:e.metrics,metricName:`${t.metricsPrefix}_reprovide_timeout_milliseconds`}),this.datastore=e.datastore,this.addressManager=e.addressManager,this.datastorePrefix=`${t.datastorePrefix}/provider`,this.reprovideThreshold=t.threshold??Ay,this.maxQueueSize=t.maxQueueSize??Ty,this.validity=t.validity??Sy,this.interval=t.interval??_y,this.contentRouting=t.contentRouting,this.lock=t.lock,this.running=!1,this.reprovide=If(this.reprovide.bind(this),t.operationMetrics,"PROVIDE")}start(){this.running||(this.running=!0,this.shutdownController=new AbortController,this.shutdownController.signal,this.timeout=setTimeout(()=>{this.cleanUp().catch(e=>{this.log.error("error running reprovide/cleanup - %e",e)})},this.interval))}stop(){this.running=!1,this.reprovideQueue.clear(),clearTimeout(this.timeout),this.shutdownController?.abort()}async cleanUp(){let e=await this.lock.writeLock();try{this.safeDispatchEvent("reprovide:start");for await(let t of this.datastore.query({prefix:this.datastorePrefix}))try{let{cid:n,peerId:o}=Ef(t.key),i=Af(t.value).getTime(),s=i+this.validity,a=Date.now(),c=a>s;this.log.trace("comparing: %d < %d = %s %s",i,a-this.validity,c,c?"(expired)":""),c&&await this.datastore.delete(t.key),this.peerId.equals(o)&&a-s<this.reprovideThreshold&&this.queueReprovide(n).catch(l=>{this.log.error("could not reprovide %c - %e",n,l)})}catch(n){this.log.error("error processing datastore key %s - %e",t.key,n.message)}this.log("reprovide/cleanup successful")}finally{e(),this.safeDispatchEvent("reprovide:end"),this.running&&(this.timeout=setTimeout(()=>{this.cleanUp().catch(t=>{this.log.error("error running re-provide - %e",t)})},this.interval))}}async queueReprovide(e){if(!this.running)return;this.log.trace("waiting for queue capacity before adding %c to re-provide queue",e),await this.reprovideQueue.onSizeLessThan(this.maxQueueSize);let t=this.reprovideQueue.queue.find(n=>n.options.cid.equals(e));if(t!=null)return this.log.trace("not adding %c to re-provide queue - already in queue",e),t.join();this.log.trace("adding %c to re-provide queue",e),this.reprovideQueue.add(async n=>{if(n.signal?.throwIfAborted(),!this.running)return;this.log.trace("re-providing %c",e);let o=this.reprovideTimeout.getTimeoutSignal(n);try{await this.reprovide(n.cid,n)}finally{this.reprovideTimeout.cleanUp(o)}this.log.trace("re-provided %c",e)},{signal:this.shutdownController?.signal,cid:e}).catch(n=>{this.log.error("could not re-provide key %c - %e",e,n)})}async reprovide(e,t){await Rt(this.contentRouting.provide(e,this.addressManager.getAddresses(),t))}};var EC=20,SC=5e3,AC="kad-close",IC=50,Bf=class{routingTable;components;closestPeers;newPeers;refreshInterval;peerSetSize;timeout;closeTagName;closeTagValue;log;running;constructor(e,t){this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:routing-table`),this.routingTable=t.routingTable,this.refreshInterval=t.refreshInterval??SC,this.peerSetSize=t.peerSetSize??EC,this.closeTagName=t.closeTagName??AC,this.closeTagValue=t.closeTagValue??IC,this.closestPeers=new zt,this.onPeerPing=this.onPeerPing.bind(this),this.running=!1}async start(){if(this.running)return;this.running=!0;let e=await At(this.components.peerId);this.newPeers=new Qo(e,this.peerSetSize),this.routingTable.addEventListener("peer:ping",this.onPeerPing),this.timeout=setInterval(()=>{this.updatePeerTags().catch(t=>{this.log.error("error updating peer tags - %e",t)})},this.refreshInterval)}stop(){this.running=!1,this.routingTable.removeEventListener("peer:ping",this.onPeerPing),clearTimeout(this.timeout)}onPeerPing(e){this.newPeers?.add({id:e.detail,multiaddrs:[]}).catch(t=>{this.log.error("error adding peer to distance list - %e",t)})}async updatePeerTags(){let e=new zt(this.newPeers?.peers.map(o=>o.id)),t=e.difference(this.closestPeers),n=this.closestPeers.difference(e);this.closestPeers=e,await Promise.all([...[...t].map(async o=>{await this.components.peerStore.merge(o,{tags:{[this.closeTagName]:{value:this.closeTagValue},[x3]:{value:1}}})}),...[...n].map(async o=>{await this.components.peerStore.merge(o,{tags:{[this.closeTagName]:void 0,[x3]:void 0}})})])}};function jc(r){return Array.isArray(r?.peers)}var Of=class{root;localPeer;prefixLength;splitThreshold;kBucketSize;numberOfNodesToPing;lastPingThreshold;ping;verify;onAdd;onRemove;onMove;addingPeerMap;constructor(e){this.prefixLength=e.prefixLength??Gy,this.kBucketSize=e.kBucketSize??T3,this.splitThreshold=e.splitThreshold??this.kBucketSize,this.numberOfNodesToPing=e.numberOfOldContactsToPing??Qy,this.lastPingThreshold=e.lastPingThreshold??Yy,this.ping=e.ping,this.verify=e.verify,this.onAdd=e.onAdd,this.onRemove=e.onRemove,this.addingPeerMap=new ht,this.root={prefix:"",depth:0,peers:[]}}async addSelfPeer(e){this.localPeer={peerId:e,kadId:await At(e),lastPing:Date.now()}}async add(e,t){let n={peerId:e,kadId:await At(e),lastPing:0},o=this.addingPeerMap.get(e);if(o!=null)return o;try{let i=this._add(n,t);this.addingPeerMap.set(e,i),await i}finally{this.addingPeerMap.delete(e)}}async _add(e,t){let n=this._determineBucket(e.kadId);if(this._indexOf(n,e.kadId)>-1)return;if(n.peers.length===this.splitThreshold&&n.depth<this.prefixLength){await this._split(n),await this._add(e,t);return}if(n.peers.length<this.kBucketSize){if(!_C(e,this.lastPingThreshold)){n.peers.push(e),await this.onAdd?.(e,n);return}await this.verify(e,t)&&(e.lastPing=Date.now(),await this._add(e,t));return}let o=n.peers.filter(s=>!(s.peerId.equals(this.localPeer?.peerId)||s.lastPing>Date.now()-this.lastPingThreshold)).sort((s,a)=>s.lastPing<a.lastPing?-1:s.lastPing>a.lastPing?1:0).slice(0,this.numberOfNodesToPing),i=!1;for await(let s of this.ping(o,t))i=!0,await this.remove(s.kadId);i&&await this._add(e,t)}*closest(e,t=this.kBucketSize){let n=new Qo(e,t);for(let o of this.toIterable())n.addWitKadId({id:o.peerId,multiaddrs:[]},o.kadId);yield*jt(n.peers,o=>o.id)}count(){function e(t){if(jc(t))return t.peers.length;let n=0;return t.left!=null&&(n+=e(t.left)),t.right!=null&&(n+=e(t.right)),n}return e(this.root)}get(e){let t=this._determineBucket(e),n=this._indexOf(t,e);return t.peers[n]}async remove(e){let t=this._determineBucket(e),n=this._indexOf(t,e);if(n>-1){let o=t.peers.splice(n,1)[0];await this.onRemove?.(o,t)}}*toIterable(){function*e(t){if(jc(t)){yield*t.peers;return}yield*e(t.left),yield*e(t.right)}yield*e(this.root)}distance(e,t){return BigInt("0x"+U(cr(e,t),"base16"))}_determineBucket(e){let t=U(e,"base2");function n(o,i=0){return jc(o)?o:t[i]==="0"?n(o.left,i+1):n(o.right,i+1)}return n(this.root)}_indexOf(e,t){return e.peers.findIndex(n=>ne(n.kadId,t))}async _split(e){let t={prefix:"0",depth:e.depth+1,peers:[]},n={prefix:"1",depth:e.depth+1,peers:[]};for(let o of e.peers)U(o.kadId,"base2")[e.depth]==="0"?(t.peers.push(o),await this.onMove?.(o,e,t)):(n.peers.push(o),await this.onMove?.(o,e,n));TC(e,t,n)}};function TC(r,e,t){return delete r.peers,r.left=e,r.right=t,r.prefix===""&&(delete r.depth,delete r.prefix),!0}function _C(r,e){return r.lastPing<Date.now()-e}var T3=20,Gy=8;var CC=20,kC=100,Qy=3;var PC=20,RC=100,Xy="kad-peer",DC=1,Yy=6e5,LC=!0,NC=1e3,Mf=class extends ge{kBucketSize;kb;network;closestPeerTagger;log;components;running;pingNewContactTimeout;pingNewContactQueue;pingOldContactTimeout;pingOldContactQueue;populateFromDatastoreOnStart;populateFromDatastoreLimit;protocol;peerTagName;peerTagValue;metrics;constructor(e,t){super(),this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:routing-table`),this.kBucketSize=t.kBucketSize??T3,this.running=!1,this.protocol=t.protocol,this.network=t.network,this.peerTagName=t.peerTagName??Xy,this.peerTagValue=t.peerTagValue??DC,this.pingOldContacts=this.pingOldContacts.bind(this),this.verifyNewContact=this.verifyNewContact.bind(this),this.peerAdded=this.peerAdded.bind(this),this.peerRemoved=this.peerRemoved.bind(this),this.populateFromDatastoreOnStart=t.populateFromDatastoreOnStart??LC,this.populateFromDatastoreLimit=t.populateFromDatastoreLimit??NC,this.pingOldContactQueue=new yt({concurrency:t.pingOldContactConcurrency??PC,metricName:`${t.metricsPrefix}_ping_old_contact_queue`,metrics:this.components.metrics,maxSize:t.pingOldContactMaxQueueSize??RC}),this.pingOldContactTimeout=new fn({...t.pingOldContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_old_contact_time_milliseconds`}),this.pingNewContactQueue=new yt({concurrency:t.pingNewContactConcurrency??CC,metricName:`${t.metricsPrefix}_ping_new_contact_queue`,metrics:this.components.metrics,maxSize:t.pingNewContactMaxQueueSize??kC}),this.pingNewContactTimeout=new fn({...t.pingNewContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_new_contact_time_milliseconds`}),this.kb=new Of({kBucketSize:t.kBucketSize,prefixLength:t.prefixLength,splitThreshold:t.splitThreshold,numberOfOldContactsToPing:t.numberOfOldContactsToPing,lastPingThreshold:t.lastPingThreshold,ping:this.pingOldContacts,verify:this.verifyNewContact,onAdd:this.peerAdded,onRemove:this.peerRemoved}),this.closestPeerTagger=new Bf(this.components,{logPrefix:t.logPrefix,routingTable:this,peerSetSize:t.closestPeerSetSize,refreshInterval:t.closestPeerSetRefreshInterval,closeTagName:t.closeTagName,closeTagValue:t.closeTagValue}),this.components.metrics!=null&&(this.metrics={routingTableSize:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_size`),routingTableKadBucketTotal:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_total`),routingTableKadBucketAverageOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_average_occupancy`),routingTableKadBucketMinOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_min_occupancy`),routingTableKadBucketMaxOccupancy:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_max_occupancy`),routingTableKadBucketMaxDepth:this.components.metrics.registerMetric(`${t.metricsPrefix}_routing_table_kad_bucket_max_depth`),kadBucketEvents:this.components.metrics.registerCounterGroup(`${t.metricsPrefix}_kad_bucket_events_total`)})}isStarted(){return this.running}async start(){this.running||(this.running=!0,await gt(this.closestPeerTagger),await this.kb.addSelfPeer(this.components.peerId))}async afterStart(){Promise.resolve().then(async()=>{if(!this.populateFromDatastoreOnStart)return;let e=0;for(let t of await this.components.peerStore.all({filters:[n=>n.protocols.includes(this.protocol)&&n.tags.has(Xy)],limit:this.populateFromDatastoreLimit})){if(!this.running)return;try{await this.add(t.id),e++}catch{this.log("failed to add peer %p to routing table, removing kad-dht peer tags - %e"),await this.components.peerStore.merge(t.id,{tags:{[this.peerTagName]:void 0}})}}this.log("added %d peer store peers to the routing table",e)}).catch(e=>{this.log.error("error adding peer store peers to the routing table %e",e)})}async stop(){this.running=!1,await kt(this.closestPeerTagger),this.pingOldContactQueue.abort(),this.pingNewContactQueue.abort()}async peerAdded(e,t){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:{value:this.peerTagValue}}}),this.updateMetrics(),this.metrics?.kadBucketEvents.increment({peer_added:!0}),this.safeDispatchEvent("peer:add",{detail:e.peerId})}async peerRemoved(e,t){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:void 0}}),this.updateMetrics(),this.metrics?.kadBucketEvents.increment({peer_removed:!0}),this.safeDispatchEvent("peer:remove",{detail:e.peerId})}async*pingOldContacts(e,t){if(!this.running)return;let n=[];for(let o of e){if(this.kb.get(o.kadId)==null){this.log("asked to ping contact %p that was not in routing table",o.peerId);continue}this.metrics?.kadBucketEvents.increment({ping_old_contact:!0}),n.push(async()=>{let i=this.pingOldContactQueue.find(o.peerId);if(i!=null)return this.log("asked to ping contact %p was already being pinged",o.peerId),await i.join(t)?void 0:o;if(!await this.pingOldContactQueue.add(async a=>{let c=this.pingOldContactTimeout.getTimeoutSignal(),l=ce([c,a?.signal]);try{return await this.pingContact(o,a)}catch{return this.metrics?.kadBucketEvents.increment({ping_old_contact_error:!0}),!0}finally{this.pingOldContactTimeout.cleanUp(c),l.clear()}},{peerId:o.peerId,signal:t?.signal}))return o})}for await(let o of dn(n))o!=null&&(yield o)}async verifyNewContact(e,t){let n=this.pingNewContactTimeout.getTimeoutSignal(),o=ce([n,t?.signal]);try{let i=this.pingNewContactQueue.find(e.peerId);return i!=null?(this.log("joining existing ping to add new peer %p to routing table",e.peerId),await i.join({signal:o})):await this.pingNewContactQueue.add(async s=>(this.metrics?.kadBucketEvents.increment({ping_new_contact:!0}),this.log("pinging new peer %p before adding to routing table",e.peerId),this.pingContact(e,s)),{peerId:e.peerId,signal:o})}catch{return this.log.trace("tried to add peer %p but they were not online",e.peerId),this.metrics?.kadBucketEvents.increment({ping_new_contact_error:!0}),!1}finally{this.pingNewContactTimeout.cleanUp(n),o.clear()}}async pingContact(e,t){let n;try{this.log("pinging contact %p",e.peerId);for await(let o of this.network.sendRequest(e.peerId,{type:be.PING},t))if(o.type===Uf.PEER_RESPONSE)return o.messageType===be.PING?(this.log("contact %p ping ok",e.peerId),this.safeDispatchEvent("peer:ping",{detail:e.peerId}),!0):!1;return!1}catch(o){return this.log("error pinging old contact %p - %e",e.peerId,o),n?.abort(o),!1}}get size(){return this.kb==null?0:this.kb.count()}async find(e){let t=await At(e);return this.kb.get(t)?.peerId}closestPeer(e){let t=this.closestPeers(e,1);if(t.length>0)return t[0]}closestPeers(e,t=this.kBucketSize){return this.kb==null?[]:[...this.kb.closest(e,t)]}async add(e,t){if(this.kb==null)throw new Error("RoutingTable is not started");await this.kb.add(e,t)}async remove(e){if(this.kb==null)throw new Error("RoutingTable is not started");let t=await At(e);await this.kb.remove(t)}updateMetrics(){if(this.metrics==null||this.kb==null)return;let e=0,t=0,n=0,o=20,i=0;function s(a){if(jc(a)){a.depth>n&&(n=a.depth),t++,e+=a.peers.length,a.peers.length<o&&(o=a.peers.length),a.peers.length>i&&(i=a.peers.length);return}s(a.left),s(a.right)}s(this.kb.root),this.metrics.routingTableSize.update(e),this.metrics.routingTableKadBucketTotal.update(t),this.metrics.routingTableKadBucketAverageOccupancy.update(Math.round(e/t)),this.metrics.routingTableKadBucketMinOccupancy.update(o),this.metrics.routingTableKadBucketMaxOccupancy.update(i),this.metrics.routingTableKadBucketMaxDepth.update(n)}};var jy=[77591,22417,43971,28421,740,29829,71467,228973,196661,78537,27689,36431,44415,14362,19456,106025,96308,2882,49509,21149,87173,131409,75844,23676,121838,30291,17492,2953,7564,110620,129477,127283,53113,72417,165166,109690,21200,102125,24049,71504,90342,25307,72039,26812,26715,32264,133800,71161,88956,171987,51779,24425,16671,30251,186294,247761,14202,2121,8465,35024,4876,85917,169730,3638,256836,96184,943,18678,6583,52907,35807,112254,214097,18796,11595,9243,23554,887,268203,382004,24590,111335,11625,16619,29039,102425,69006,97976,92362,32552,63717,41433,128974,137630,59943,10019,13986,35430,33665,108037,43799,43280,38195,29078,58629,18265,14425,46832,235538,40830,77881,110717,58937,3463,325358,51300,47623,117252,19007,10170,20540,91237,294813,4951,79841,56232,36270,128547,69209,66275,100156,32063,73531,34439,80937,28892,44466,88595,216307,32583,49620,16605,82127,45807,21630,78726,20235,40163,111007,96926,5567,72083,21665,58844,39419,179767,48328,42662,51550,5251,37811,49608,81056,50854,55513,20922,18891,197409,164656,32593,71449,220474,58919,85682,67854,13758,35066,3565,61905,214793,119572,141419,21504,10302,27354,67003,46131,32668,15165,64871,34450,17821,2757,11452,34189,5160,12257,85523,560,53385,65887,119549,135620,312353,115979,122356,10867,193231,124537,54783,90675,120791,4715,142253,50943,17271,43358,25331,4917,120566,34580,12878,33786,160528,32523,4869,301307,104817,81491,23276,8832,97911,31265,52065,7998,49622,9715,43998,34091,84587,20664,69041,29419,53205,10838,58288,116145,6185,5154,141795,35924,21307,144738,43730,12085,8279,10002,119,133779,199668,72938,31768,39176,67875,38453,9700,44144,4121,116048,41733,12868,82669,92308,128,34262,11332,7712,90764,36141,13553,71312,77470,117314,96549,49135,23602,54468,28605,6327,62308,17171,67531,21319,14105,894,107722,46157,8503,51069,100472,45138,15246,14577,35609,191464,1757,13364,161349,32067,91705,81144,52339,5408,91066,21983,14157,100545,4372,26630,129112,1423,29676,213626,4397,88436,99190,6877,49958,26122,114348,60661,29818,293118,50042,179738,16400,163423,89627,31040,43973,36638,45952,5153,1894,109322,1898,134021,12402,112077,68309,190269,69866,31938,107383,11522,105232,11248,14868,39852,71707,186525,16530,38162,106212,11700,5130,16608,26998,59586,108399,230033,43683,48135,82179,2073,5015,196684,189293,16378,23452,8301,35640,11632,214551,29240,57644,33137,91949,55157,52384,117313,5090,17717,89668,49363,82238,241035,66216,29066,184088,97206,62820,26595,4241,135635,173672,8202,459,71355,146294,29587,3008,135385,141203,14803,6634,45094,69362,50925,546,51884,62011,83296,234584,44515,56050,89476,87751,19373,12691,149923,19794,13833,35846,87557,58339,2884,19145,25647,12224,11024,77338,64608,122297,53025,7205,36189,36294,170779,21750,7739,173883,75192,35664,224240,113121,30181,26267,27036,117827,92015,106516,55628,203549,67949,60462,60844,35911,20457,1820,920,19773,8738,73173,181993,38521,98254,76257,46008,92796,5384,26868,151566,22124,2411,15919,186872,180021,28099,152961,78811,80237,62352,102653,74259,184890,16792,123702,224945,29940,19512,75283,14059,112691,92811,233329,20411,138569,53341,109802,50600,134528,66747,5529,166531,31578,64732,67189,1596,126357,967,167999,206598,109752,119431,207825,78791,91938,10301,27311,24233,252343,28831,32812,66002,112267,90895,8786,8095,16824,22866,21813,60507,174833,19549,130985,117051,52110,6938,81923,123864,38061,919,18680,53534,46739,112893,161529,85429,26761,11900,81121,91968,15390,217947,56524,1713,6654,37089,85630,138866,61850,16491,75577,16884,98296,73523,6140,44645,6062,36366,29844,57946,37932,42472,5266,20834,19309,33753,127182,134259,35810,41805,45878,312001,14881,47757,49251,120050,44252,3708,25856,107864,120347,1228,36550,41682,34496,47025,8393,173365,246526,12894,161607,35670,90785,126572,2095,124731,157033,58694,554,12786,9642,4817,16136,47864,174698,66992,4639,69284,10625,40710,27763,51738,30404,264105,137904,109882,52487,42824,57514,2740,10479,146799,107390,16586,88038,174951,9410,16185,44158,5568,40658,46108,12763,97385,26175,108859,664,230732,67470,46663,14395,50750,141320,93140,15361,47997,55784,6791,307840,118569,107326,18056,58281,260415,54691,8790,73332,45633,7511,45674,143373,14031,11799,94491,35646,96544,14560,26049,32983,25791,83814,42094,231370,63955,139212,2359,169908,3108,183486,105867,28197,32941,124968,26402,88267,149768,23053,3078,19091,52924,25383,19209,111548,97361,3959,24880,235061,9099,24921,161254,151405,20508,7159,34381,20133,11434,74036,19974,34769,36585,1076,22454,17354,38727,235160,111547,96454,117448,156940,91330,37299,7310,26915,117060,51369,22620,61861,322264,106850,111694,15091,2624,40345,300446,177064,1707,27389,54792,327783,132669,183543,59003,17744,20603,151134,106923,53084,71803,279424,319816,11579,21946,16728,38274,72711,5085,83391,88646,40159,25027,34680,10752,12988,54126,30365,18338,100445,230674,44874,84974,143877,123253,139372,28082,91477,144002,13096,219729,46016,50029,42377,14601,6660,58244,58978,23918,88206,113611,64452,17541,41032,10942,12021,49189,10978,40175,37156,10947,71709,106894,112538,57007,137486,150608,152719,40615,7746,279716,13101,19524,28708,40578,72320,1096,182051,94527,51275,22833,45164,81917,77519,48508,5421,140302,37845,149830,5587,27579,5357,428725,248187,6326,206760,39814,32585,89923,44341,288753,284443,96368,31201,94189,119504,20359,52073,103216,179,27934,32801,96035,34111,34309,101326,18198,20704,210266,37643,27880,141873,106e3,19414,56614,167714,66483,107885,86602,4379,20796,75467,4987,5017,118857,26003,34308,114428,29198,6686,29697,73632,3739,69795,16798,41504,7207,30722,21436,36735,28067,28545,3239,11221,36031,41889,100010,19247,317673,29495,174554,6424,129725,53845,94986,7955,59676,2604,191497,19735,102214,62954,23844,11872,179525,261436,34492,428,78404,142035,16747,17246,27578,37021,33672,57944,26056,135760,2369,61674,122066,31327,19374,157065,40553,130982,69619,71290,38855,72100,92903,95940,51422,165999,65713,57873,50726,7288,20272,2081,42326,22624,81120,57914,79352,19447,1684,72302,11774,302559,161481,96396,13692,414988,3721,79066,56627,46883,21150,11747,12184,5856,113458,176117,84416,52079,27933,3354,59765,141359,2212,216309,2555,23458,196722,142463,45701,44548,28798,19418,215,29916,9396,10574,114226,84475,13520,18694,34056,4524,90302,62930,13539,19407,77209,7728,38088,9535,2263,23875,183945,17750,26274,67172,10585,28042,22199,7478,51331,66030,26774,192929,31434,25850,50197,52926,178158,4679,181256,70184,229600,9959,105594,72158,73974,2726,35085,78087,23284,35568,51713,155676,5401,27254,11966,17569,223253,71993,103357,111477,55722,30504,26034,46774,35392,36285,214814,41143,163465,1051,16094,81044,6636,76489,179102,20712,39178,35683,125177,54219,30617,52994,25324,50123,2543,87529,58995,10688,125199,12388,60158,125481,131646,7642,133350,65874,3438,97277,101450,10075,56344,116821,50778,60547,98016,106135,13859,14255,16300,77373,173521,8285,45932,37426,4054,114295,55947,7703,39114,52,51119,128135,19714,60715,9554,50492,88180,2823,118271,52993,122625,97919,23859,37895,25040,33614,32102,20431,3577,9275,15686,43031,157741,110358,1884,40291,125391,13736,5008,64881,87336,77381,70711,43032,49155,118587,70494,4318,10168,30126,12580,10524,280104,104001,145413,2862,84140,6603,106005,13566,12780,11251,42830,571,179910,82443,13146,469,42714,32591,265217,424024,92553,54721,134100,6007,15242,114681,59030,16718,85465,200214,85982,55174,165013,23493,56964,82529,109150,32706,27568,82442,5350,14976,13165,44890,60021,21343,33978,17264,4655,22328,27819,75730,16567,55483,14510,17926,45827,150609,3704,7385,272531,161543,76904,122163,52405,2039,19165,41623,14423,228354,3369,176360,85491,7122,35789,303724,4465,13628,2233,55311,118771,20713,10006,221519,45115,71021,35650,29775,7337,10864,20665,21142,1746,15080,1624,32449,10905,105743,229797,7701,3940,22997,178467,57208,389057,39683,59403,63344,63125,54847,69691,18336,56448,3362,37202,18282,29648,138224,35867,10495,5911,28814,26653,31514,176702,26550,45621,11734,4525,40543,73944,121080,27858,155561,14887,44670,30742,8796,107455,113472,56369,75581,183777,240095,133699,153299,8768,160464,26058,49078,103971,21875,71486,44888,17156,9678,89541,123019,102337,3972,83930,21245,87852,109660,287918,183019,686,10100,39177,283941,11274,24736,26793,26214,25995,77011,141580,4070,23742,46285,46632,30700,26669,19056,35951,115575,174034,56097,35463,87425,24575,44245,38701,82317,85922,281616,100333,147697,61503,7730,84330,8530,59917,61597,17173,9092,32658,90288,193136,39023,20381,56654,31132,7779,1919,1375,117128,30819,11169,40938,23935,115201,101155,151034,4835,11231,74550,89388,59951,91704,107312,167882,115062,12732,72738,88703,464019,158267,57995,60496,737,14371,123867,4174,243339,159946,7568,16025,134556,110916,38103,191,80226,88794,29688,27230,10454,76308,57647,77409,113483,66864,14745,19808,12023,46583,84805,16015,17102,2231,20611,3547,95740,250131,34559,108894,8498,15853,159169,148920,20942,2813,93160,45188,210613,45531,52587,149062,39782,28194,57849,60965,84954,89766,84453,100927,16501,27658,165311,103841,54192,207341,19558,20084,319622,5672,205467,98462,61849,36279,13609,147177,24726,165015,209489,59591,31157,6551,117580,75060,141146,277310,21072,22023,106474,63041,137443,122965,68371,5383,42146,98961,113467,30863,23794,4843,99630,30392,82679,13699,241612,33601,93146,24319,18643,32155,95669,40440,15333,34089,67799,142144,58245,38633,114531,117400,77861,188726,5507,2568,8853,10987,107222,2663,2421,11530,13345,30075,41785,118661,104786,17459,12490,16281,71936,193555,17431,5944,71758,26485,77317,20803,367167,158,7362,93430,11735,172445,46002,11532,54482,930,62911,2235,23004,179236,4764,101859,208113,22477,55163,95579,14098,67320,162556,90709,156949,3826,57492,4025,34092,87442,104565,6718,186015,28214,14209,10039,107186,233912,58877,81637,55265,39828,6194,145813,50831,105849,4974,88319,122296,10272,197216,95714,51540,72418,23324,91555,8743,140452,250249,51666,34124,7229,38592,129641,78169,174242,22464,149964,51450,14034,10026,95376,26190,120062,14401,8700,265,31386,143573,7203,229889,61567,4227,140981,2466,72052,10787,10062,30958,6099,38471,30103,23202,208101,70847,467,58934,32271,32984,36637,24107,30771,17109,73353,13650,2098,157040,67366,66904,106018,265380,107238,18535,44025,32681,144983,62505,91295,56120,3082,77508,10322,63023,36700,81885,224127,16721,45023,239261,111272,13852,7866,149243,204199,32309,22084,42029,38316,126644,104973,14406,43454,67322,61310,15789,40285,24026,181047,6301,70927,23319,115823,27248,66693,115875,278566,63007,146844,56841,59007,87368,180001,22370,42114,80605,12022,10374,308,25079,14689,12618,63368,7936,264973,212291,136713,95999,105801,18965,32075,48700,52230,35119,96912,32992,8586,16606,101333,101812,14969,39930,759,193090,27387,42914,12937,5058,62646,64528,38624,25743,37502,3716,4435,30352,178687,26461,132611,42002,138442,35833,59582,16345,8048,60319,49349,309,47800,49739,90482,26405,34470,63786,32479,85028,39866,47846,11649,23934,29466,2816,42864,31828,7410,74885,49632,47629,111801,90749,19536,18767,105764,59606,21223,10746,76298,22220,39408,7190,79654,64856,11602,82156,272765,17079,70089,245473,51813,184407,384678,1576,122249,5064,27481,6188,25790,74361,27541,318284,45430,31488,620,93579,45723,192118,22670,51913,4162,70244,35966,26397,16199,50899,209613,121702,287507,2993,36101,132229,67345,33062,76295,118628,78705,52316,34375,107083,107454,44863,127561,33964,3073,154010,190914,55967,39074,6272,31047,5550,41123,26154,98638,47110,19998,148091,50229,31329,59900,195442,19106,61347,73497,70015,682,45850,25776,38022,148951,6288,37411,232526,109277,27286,32342,9262,5220,16651,23175,46740,129438,78614,121925,66914,88710,127952,5563,21500,34521,10739,14863,191006,62956,17359,16749,67027,56284,69134,43301,35039,58883,54466,60823,404451,75743,59856,86979,7923,34273,83785,32142,7693,268986,197428,282681,17049,22346,22990,92245,107180,3357,37104,96724,49153,7683,31197,43267,82231,164276,23696,20848,188364,22309,24821,158707,1018,22514,70922,27792,45589,59709,10765,736,35218,63479,51987,24275,63588,55361,92929,81964,4658,20122,12330,44058,13065,311456,72224,8337,211229,38979,22590,138478,52757,32595,133600,8838,31549,94412,43391,90056,1585,94802,127271,6223,31889,137038,132910,2165,57616,230152,6080,10748,36737,74579,134062,50525,180532,119270,34556,76155,82394,52595,29258,31435,87820,67996,26943,183878,38007,2410,13526,180297,69856,3503,187396,167700,7838,16701,9199,56267,3661,37407,65994,23767,5708,62508,221700,67088,86978,46776,84434,32088,5612,9149,88244,21685,95151,46750,189612,2979,506311,2594,3628,40074,105039,78243,28523,6651,38058,71999,30992,12764,68261,108991,6165,26450,61961,13400,22426,7490,60890,109623,2070,12958,50355,67979,257096,7213,42578,52121,35716,65461,7516,124758,39268,302,64712,14977,1467,219452,2840,34229,11121,21602,19270,63574,8024,1532,17331,79839,78885,52029,180767,57957,6069,91265,61380,55767,8927,32881,287603,22149,35029,68876,6428,199567,46926,13412,104132,21434,366616,45060,110046,81924,128910,45886,52821,130416,29416,77342,21762,67329,121432,79924,11724,38625,81006,102033,28338,13326,3250,82056,82526,38212,21112,12382,111495,3263,7414,86274,93490,40844,30224,45212,24019,48411,71367,24941,76729,57776,3769,38114,202019,197745,31953,237533,33270,201580,255648,100798,44741,32241,98468,106931,10085,15090,170358,33154,66787,18819,69760,25061,234005,82660,6295,131975,16874,9076,4094,25005,17740,40908,19533,220019,44330,99792,50040,19619,13950,55228,24423,31253,95308,103177,184795,28590,82285,5059,3210,75525,49894,70007,56178,10580,36051,139681,21617,98736,3555,106306,164189,37352,63915,47824,24883,145530,61904,28444,11483,19837,145446,30420,112972,85939,11835,191233,2262,20705,58630,1753,148334,1197,144714,6887,11223,107667,60879,77914,4151,57417,81594,96681,169430,1784,20444,95138,254041,27038,596,7117,72808,13759,3353,126776,21074,55322,27081,36942,39547,139830,179275,4453,713,8722,71399,19204,25785,22794,23923,104114,11291,25458,102309,88396,75288,230440,206396,104551,58447,130857,37247,94734,31548,176529,226077,65159,20104,10096,66881,94191,237909,27109,37404,1520,27421,25220,113003,23423,24884,50585,6286,231877,150800,11789,3226,90004,60642,5053,202400,61442,132531,175329,57138,30116,103847,9973,75367,16452,32360,59119,21246,10191,164804,23305,61051,37348,154530,13214,5468,50403,66754,130976,50559,80515,14436,155492,84017,5472,43107,41240,2890,90431,70188,382,76234,48040,50211,281038,237007,32115,142178,1536,22761,96429,1811,31243,1679,49143,55209,17402,235054,61494,7462,77030,34925,87609,78002,9499,9027,73289,201078,101379,63544,27666,5469,10642,30029,49816,132979,95620,58086,351930,116300,2110,2043,30845,6154,11279,16727,4122,2277,27281,4971,3650,39060,61970,65951,39674,75686,38151,11370,130809,177895,32665,63725,122267,7857,39618,118483,44792,157755,178624,136994,24260,41308,22471,12404,21707,12486,30473,52781,50246,20247,39065,909,56825,103158,128603,31542,1089,41935,32744,12428,37963,84420,33134,72921,208449,42622,168151,127335,147107,46699,38216,12591,94342,85814,31423,24944,2605,87542,67473,192551,4496,56321,91819,17630,6300,256183,114569,202090,33209,35289,34897,24967,40520,43470,5344,10199,34810,14283,10381,10017,62923,49924,23233,64539,13051,35686,19698,11570,135555,120868,44924,87065,52318,52335,47586,140906,245885,109834,78668,9065,46990,25258,72022,61243,40838,4545,146387,10537,11557,17470,36930,68104,46711,24264,79401,81043,18225,120488,24746,84338,81652,28266,13776,21878,46973,1047,230465,73357,95777,24973,210160,62210,58404,110633,169651,6937,41870,9909,26822,191062,76553,27519,96256,239070,2478,205678,67955,58532,20601,50120,19148,78501,195724,110740,8249,109665,27446,30568,57631,31425,49752,32820,65504,50079,3663,102256,219898,23849,211315,14645,4359,91767,9528,12449,49366,7941,49763,107848,8930,27086,50686,9744,10447,81935,39513,46514,1670,29229,6172,22312,137280,97759,9806,14445,22976,56458,73391,34983,93760,174219,52573,33149,59747,2429,136277,75123,165263,91040,7446,57632,48633,97140,246081,84766,151684,79918,93268,120346,54059,54875,77858,32996,103590,45276,11968,19600,25849,17159,132907,42828,16817,4913,99462,103303,27395,5737,74184,20749,21160,14377,77062,131403,158735,10999,27799,77785,9320,34366,51593,61070,33746,47048,29268,36675,30262,53297,9832,82e3,20188,122292,39917,7331,18160,68301,185935,134830,15031,4935,10004,165845,185534,46923,30109,44134,122631,18874,22903,112790,26561,18549,348902,82871,140345,255565,135390,63556,103747,145055,179600,145662,296111,61661,211987,23952,52342,126343,48450,32919,44277,82185,9591,62139,205363,376969,394874,108461,18040,120885,14798,39863,16571,16794,58271,81025,55206,14640,118656,6361,44092,85970,6262,153863,108244,180200,72264,79947,38044,10050,5735,61221,80712,5471,115689,11391,11661,184257,20010,60116,30320,19327,134598,45455,27542,18004,125092,452272,1549,91523,46567,180063,156026,2608,11174,58848,37788,65907,80194,30490,5786,40775,119519,106241,11323,156297,8425,61495,2617,29675,2425,59886,112582,49142,59618,4863,50597,86710,50650,168632,27693,85641,83643,18993,25768,84284,28090,93592,36627,312804,43381,9887,9402,100931,97165,3311,173330,66805,28935,4963,184460,3201,78102,19126,21607,37496,24938,22615,16153,32862,134792,153318,61120,6067,2812,12826,12792,23825,37559,64662,202250,102694,155488,85881,149193,46233,65383,15521,106982,11358,176786,25752,39717,34208,24510,32464,77742,39371,72028,138229,60688,71386,102834,132477,2208,11548,63670,271279,28351,30338,38620,32491,99845,143885,152266,13252,2825,178663,108097,1775,78201,14897,113573,163346,62292,171129,22183,96598,38733,64971,166776,117445,9968,146393,44677,74867,20908,97328,12761,25656,26785,9148,112344,26115,99176,110121,22437,49547,6180,79320,5835,31392,43328,33377,75870,119860,69497,80273,7325,155219,43167,111173,28347,20222,3763,71752,55041,47252,14618,28088,15012,97805,194698,54636,2036,41349,6173,96604,61530,51859,43782,13361,24334,22668,24792,7070,23441,16789,3209,36211,208475,26242,32880,122181,182407,21444,31060,88459,29929,77907,12716,10934,97005,20599,31690,8403,58445,30303,22700,10336,86731,103115,337709,72556,46788,112566,47684,67089,53548,36874,56487,41387,125985,26893,40071,106683,73712,18787,40105,72992,67246,137276,50802,36790,70328,138827,22466,39263,183295,29858,50975,9322,57397,10654,24364,30383,55799,41600,23584,127295,296610,129078,143558,244131,86397,36049,1085,80677,3820,108139,5476,34767,24683,7758,13060,7239,131671,250593,59556,103392,29810,4188,252323,39404,116877,7651,43600,40338,13554,157253,39196,25978,144387,61211,234,50104,6129,10449,93777,9240,356378,274148,4439,72970,3724,147770,78680,62570,115877,40027,40547,36817,224392,64609,34795,165027,67440,2477,37206,23431,50754,164797,46018,94995,170982,27051,7957,22767,3674,27900,56419,18930,60701,41302,2692,84749,339721,61996,111094,80221,50129,1045,8153,62945,19202,8250,37208,37418,32560,79477,41106,88569,33963,36693,5892,30570,1581,66471,49647,11922,160717,29442,5643,114865,82962,95982,132098,22633,22838,94726,54556,28566,205039,162340,33216,16849,35847,221339,94851,26533,71469,1805,3804,12935,45483,71020,36310,65381,192960,34240,35165,59773,1248,46954,155332,96864,4246,388800,16129,57133,74592,44807,442014,38203,42574,80818,91592,26377,36424,65760,977,77387,22628,147610,28018,30561,98454,6969,119628,63648,18170,36854,26601,64018,22027,37279,51395,152934,21153,9430,58760,194742,5330,55115,34158,28917,174111,13171,122326,1526,43896,66094,25325,4234,148354,11450,275,18999,112191,44365,22723,68409,8733,57746,96565,75007,14196,108844,29475,88599,177563,100792,106156,86323,93726,14248,135341,194131,40126,47099,14779,8272,39597,95983,171398,65882,28052,10393,47213,40689,22120,72212,106829,34964,109146,753,648,21660,30047,17527,181025,5619,145357,4085,216883,9359,186951,24779,53931,24545,36197,223296,62628,168101,4243,107313,30321,26642,13049,51059,31027,107912,807,73550,26551,84369,122422,165872,49754,74213,234264,33151,52014,33100,87183,22365,52500,40013,23302,5652,72723,21404,26107,48434,587,94049,168493,96418,32871,70860,31709,25128,443,71597,166253,15670,70994,26341,133675,28280,75491,54756,47955,56028,26182,11952,113272,472197,64640,110753,17919,337,50642,22576,142,87371,53391,93210,126694,15285,19642,85667,14148,1506,42092,52962,33243,11970,20734,135843,57044,58880,13002,219134,22876,64754,232519,4257,43120,321573,24799,64526,124728,52579,81472,70831,276848,17403,74359,23021,182101,74597,23744,148267,12055,7976,5349,11772,67540,167347,65318,18720,127832,108238,22828,90233,9987,259080,118185,73209,79270,13775,90100,137742,90799,70569,15699,19961,9087,67475,57872,39731,8810,134897,131868,146849,19898,3334,2281,167061,91073,60356,467742,74712,188,53179,137679,92769,29241,9537,132595,80119,1041,88962,5976,40171,44911,102859,139059,104558,98987,47761,19272,71472,113864,175377,73338,10857,23402,23758,1591,139864,5644,4076,118760,16427,134198,18853,20291,100849,37423,22038,36677,19071,195521,57445,11069,31869,55718,66882,148490,44,41296,75242,49704,166810,9906,20943,122258,49112,105667,15969,10344,6408,187694,21399,72742,58970,14867,14376,81889,41856,23225,15042,56993,16074,131389,74276,72407,53875,383108,53597,37363,68993,44854,122548,430927,198279,38430,80409,12245,2981,628,2818,17760,37437,238229,7968,46892,2200,3730,34190,65983,37959,112291,87850,70827,6522,20750,73913,111621,41652,19587,2780,58668,25916,85259,18200,168962,95781,42445,102050,7776,57662,103313,47742,96358,41964,66174,100396,29069,204735,19679,27978,7479,40264,22534,61183,36081,107436,58223,14680,23002,101311,24716,124108,12908,5646,31750,40380,14215,232799,102772,14122,96775,61398,50917,12096,149880,67833,598749,124194,155871,49216,790,14677,65319,56917,7440,145744,95701,12206,49405,129269,76199,45732,9767,11058,9047,210885,11051,7392,26307,2130,8132,147526,20802,232698,115660,50060,59789,57344,107623,80343,112676,23291,9866,160971,34032,118291,15719,59730,164911,28975,2659,58046,78480,21854,66209,53863,109085,116045,29021,46481,107552,22130,18764,70254,31272,11300,52460,43933,84738,20721,53869,190840,79673,105300,7561,321817,66924,13940,33281,101046,183181,32176,71878,5678,62924,79535,56646,40303,19559,27703,93042,73368,42187,3670,37376,46440,7023,36816,109628,20680,5940,276440,275233,170848,112093,136996,14984,20226,111441,77693,112960,48577,39370,55707,50314,123404,26570,54281,61372,123391,4857,35928,246740,132507,106646,44241,7196,92258,9825,37688,51197,303141,5590,15476,132986,10955,85782,34486,26696,7991,28813,18858,39546,11703,11365,38185,5716,93555,11925,40121,60002,6985,10976,171384,3887,43394,13337,56346,6381,252336,39573,75042,53711,1028,31781,44295,95925,131713,7214,68125,43571,70954,213234,1628,8760,13391,65485,17320,56038,1710,25248,60803,57399,19839,3870,326,281556,50945,72400,21460,316244,75619,56246,98775,481,13513,55765,50427,7388,123519,32929,57908,27124,61316,101097,57467,30228,48792,10788,20402,37318,50526,155730,34456,158065,145305,17832,43733,64052,4506,35072,205355,177028,184004,187081,68616,35938,83703,10367,36892,93186,260137,51934,89970,4985,23445,26755,21558,7948,78741,23376,124405,85594,68596,57536,49351,12619,56593,132668,99924,109728,71844,71935,196018,65464,17617,14987,89701,143773,33997,8687,22701,33258,2914,4436,72108,85610,9671,49067,2327,82988,1361,1672,44033,35777,30269,24057,10605,82236,616,15793,13919,47249,112086,116698,9484,80207,90574,33304,68624,93127,56101,42210,160929,4827,38995,38095,4701,125119,5027,33680,9236,231236,14135,87837,23318,70261,78893,30151,81482,14332,1084,74256,27532,46644,79185,3148,62615,6981,55672,31668,36825,1849,14536,37446,14738,23779,43058,162749,72199,1168,21346,5592,85932,85302,9668,18351,57135,150360,2080,228015,77953,34670,119302,151751,31009,106725,84265,45214,59289,74178,113071,263206,111009,4021,44449,188119,192629,123592,392506,292847,114487,12831,205858,9852,20780,79648,75767,357014,97721,18166,21005,67950,33226,204009,16536,2987,11335,66717,144910,47950,17262,55060,15063,2934,51038,26775,178497,66008,3427,49433,128592,20036,157553,63861,3089,23015,51210,28696,35933,49942,71135,231518,99620,17248,21835,176536,20676,16944,38700,165831,233253,295625,36723,13023,52745,10907,19423,67972,125868,95473,82875,1183,108455,52685,33417,64095,21433,52438,33191,127809,44505,211823,7810,2752,95548,162031,7185,91196,47563,61721,33359,17897,23682,42806,178101,22874,49707,199897,75419,82456,8618,11171,79712,116847,18783,44190,46564,5346,59046,95032,7893,14916,3214,26800,24172,121453,34362,10250,17408,18888,4840,68696,22831,13162,36005,32512,14800,62357,41723,45046,27247,37486,5372,2564,34261,298500,66509,133920,89138,31305,117697,19097,108304,81386,84106,23802,46411,63304,946,51417,41777,41041,19501,115864,60743,294354,37955,94165,18116,1156,17937,20645,57114,90804,58042,48643,92288,9861,2557,88546,61333,101008,12853,5148,87856,4152,144503,73841,18718,9789,147565,10846,42085,12789,30223,8993,56352,67203,2448,28215,6052,23540,126319,75933,36689,80235,23231,23561,21383,38800,77548,102798,21234,31468,158608,46188,63960,191679,8051,67014,11185,170078,42186,28827,34777,41930,212079,12421,34750,24111,110344,73918,45171,70826,141949,40063,23979,24254,37309,26724,27179,24718,83648,54938,14591,17425,29525,102675,48975,48654,12316,8929,60640,41709,50168,63264,89812,50716,48632,38755,138583,160123,55579,71829,24230,233277,46322,39650,166388,34718,24108,98252,7031,106695,62498,18258,35062,217827,78731,34824,33354,19520,60852,2432,60224,8587,2836,62955,702,20227,42285,40560,95592,62486,11094,53035,143291,18842,46177,77994,1770,9657,107422,172915,32655,128716,25886,25164,156740,119928,165875,85817,11007,89110,33956,12652,65156,180266,8494,36889,19958,20955,96,1264,118288,135769,44754,86671,5632,19026,168220,289120,33569,93821,66144,70635,7687,5642,2714,55445,56636,71545,184182,93133,7332,37389,12643,52315,22729,11014,158742,17050,152889,50178,34601,41945,52136,9948,26914,63548,95721,115951,40759,8960,158258,38938,49232,48325,42234,81523,253019,66128,40978,20048,238048,38760,62928,122560,118532,43687,137472,163689,26680,9878,17448,51035,16211,60834,36749,29178,14241,59868,150086,2305,26477,42422,34342,165341,83279,33894,14257,29928,12743,13957,125571,89134,66712,10952,16507,147839,30146,7249,16565,45399,39874,114565,215780,31990,230881,171477,102,196546,44538,10880,84948,281705,86651,10617,31395,2342,453658,43569,60561,132901,21845,17727,58556,258242,22262,58728,4008,77997,11806,37431,30599,81375,109137,185787,114085,217292,97453,169085,30593,60212,11544,102056,65580,2384,91655,4855,95725,7295,157994,16228,20669,53276,141590,105246,17334,25440,76067,17967,39321,38911,11362,28559,63807,21627,26468,85816,40120,1025,15234,58319,69516,66512,124548,75845,78873,22137,46681,51242,85683,32909,76747,35555,43396,101465,1765,73094,1077,2962,39028,66777,57831,42048,15828,13962,36041,63657,52412,5242,58846,2141,5506,219012,134451,3936,182230,17558,17153,152237,22621,49377,170216,35257,68233,65374,6510,11126,212151,7184,2480,22517,3437,33073,30156,16557,3768,55067,86829,91e3,12350,148650,66017,79424,70885,49066,28250,21369,51213,34533,11510,3258,18176,18465,84413,6315,36411,163765,4346,356,107618,598,13727,285026,162695,8749,14583,7132,63521,184253,32378,25991,5604,30961,53675,4874,84693,5086,34811,26978,56564,7904,33519,51221,113942,69253,6664,125563,22055,220680,102008,742,51930,19494,176108,44424,35123,13025,75685,11759,74335,22250,181453,131147,16984,132115,154311,11991,76452,52609,85351,196,30969,9198,74919,2529,56838,71779,29187,116304,3504,62330,41190,86153,28393,254926,104228,105189,13264,84359,3574,12415,8534,57147,10175,188174,59504,60932,66318,16407,107921,17638,99103,49278,28403,39786,145865,8462,3558,43406,142271,29139,21989,36552,93955,72365,7176,13556,106185,37957,321774,17782,129017,51154,27938,24952,1935,39366,2791,33489,41582,56078,24558,9311,5449,218786,27808,190429,68013,36020,86003,29735,3404,87348,119357,115714,2324,86796,81973,40992,43376,93621,28784,16808,36367,2517,2909,191926,24978,55303,53308,205724,60068,3098,21375,64784,23949,26579,63121,12319,80145,39967,97861,6757,70143,67642,37082,34698,69140,122883,46151,62187,80934,429,19437,135071,137885,222647,13331,154065,327,61778,74257,40116,37493,14855,85079,237641,42342,102164,199965,71204,4662,29368,5042,113914,122214,8955,13149,102503,43173,5659,163787,69003,307084,63392,171080,21390,81918,86666,36622,24126,28887,5736,28054,207170,163428,79891,346467,95363,38980,111806,80828,9200,19288,294896,114468,87405,111715,141705,7015,72754,68463,48738,243147,33397,101210,37051,98801,82847,20397,4940,185559,18716,54718,83491,11725,40803,1128,12128,23060,5174,7745,67007,46701,1571,27807,180186,256996,18975,16837,7877,212758,250379,15440,87954,57755,24719,124057,83461,258,50864,8874,29038,71289,31627,15429,9005,4061,113851,107716,82819,13651,79656,117851,17539,111446,12938,39724,190787,4352,15402,21070,62708,8539,23777,73853,13552,38810,86117,16285,56400,1718,75342,142863,29033,378,110113,180321,32586,23606,26393,160984,207987,23783,8406,16904,24596,47274,11693,46539,60524,78595,48423,31718,20170,9009,146268,15183,191060,172765,1349,138436,37365,10970,40509,225817,20021,70394,152138,21541,66559,66544,89352,2725,17258,91345,7313,3815,115868,8660,40362,4071,103524,39388,118275,21950,6549,38226,32754,209574,29201,43495,18028,20296,40597,18370,47520,202450,24134,2219,8195,69545,38041,136934,46374,19041,159811,84865,58620,846,98749,13569,30714,97246,32186,4479,27355,92973,35214,151491,75963,37631,1561,27200,238083,23182,60756,12291,25766,39355,102333,87362,65741,59906,19538,201575,48772,102938,24438,292580,39964,66366,9004,61379,50548,37622,38732,28379,68180,76622,17488,69849,5963,7219,48143,43413,55358,540,58691,29506,19245,52193,48621,5518,13048,118625,44755,191081,42061,89197,2259,60665,66994,71210,51232,3585,142096,55024,7892,8345,58653,463307,65658,64319,137941,136323,53499,12746,43492,6978,95163,29925,60175,5128,7352,41463,184756,121146,20473,18426,4598,5309,54580,14277,121151,10691,56711,43880,63409,76682,11830,172218,264898,32632,66536,81062,31649,25788,92774,60222,11100,63159,9432,224657,25240,53613,152,138620,163829,2397,85345,12501,37507,64932,38575,43522,65789,80198,78796,35226,3851,108891,73311,3060,28391,93671,39663,46142,30982,66041,37281,68157,26553,71872,81142,211527,39747,118119,22695,2859,11066,20232,168911,7933,197005,17066,111071,44434,133994,120798,12766,227798,45756,132852,29917,36076,55352,65281,129800,41958,18944,84678,18580,168093,132621,39997,54092,27740,32354,3770,114118,103242,43918,15899,18574,145944,3190,123469,219903,24169,100571,62403,16776,92779,14535,17168,16475,14304,37231,1712,28218,242754,61688,28980,1318,51359,222657,99200,67989,31772,23932,35351,201251,49041,27306,19128,40135,3986,77333,19649,120683,151927,21081,7076,78375,77501,101599,8011,89585,96715,58179,5378,102138,106793,26051,217276,4197,16297,27014,46721,13322,22806,5278,29629,70632,9647,71519,58818,40603,128530,8903,36770,56900,31483,26935,43845,34265,34920,87658,6114,84767,64250,47318,50720,19264,162514,33357,13117,6705,46696,75032,71054,87004,42035,69138,11903,99854,102328,19611,34525,69312,6431,49842,101600,133178,108751,41829,89939,225664,48916,99556,9195,130387,5960,36857,116724,53518,94002,39077,53996,6945,22261,64291,8314,152785,57588,16522,9091,5048,87671,35441,39509,1945,12423,158923,178413,37549,14095,1475,73188,62878,4819,24012,68534,42606,4010,120809,57497,59564,101758,103718,32701,80116,12345,95834,46918,21468,53213,15665,31200,3867,5140,96013,250744,21016,10069,13968,35449,180829,27683,39704,59956,22893,3115,26293,32785,75934,62445,141162,62720,2018,83638,19949,114012,95006,3330,99829,130935,309272,9565,55874,121727,37017,23586,319858,40970,27602,8625,112329,61060,100088,118525,25922,16232,1907,60671,51583,44553,80993,5262,94679,8676,940,20736,11823,3020,16476,12340,152600,97416,3703,25744,66826,16245,16876,46446,84798,74227,176020,45192,61955,75496,23946,23626,40372,26036,6149,11822,30582,16541,41914,82385,232823,40921,80773,14930,3631,7517,39619,4348,36180,126106,138939,62611,1477,113512,47321,25052,14546,118881,29060,23589,128322,36795,18401,137921,104699,267929,36194,172791,18113,4766,188215,30083,332586,94089,5805,77909,22194,68234,154976,43220,40660,70001,184893,138095,11128,103010,22663,5108,212615,8485,5565,49222,54614,26530,42639,16319,55062,152662,105595,21114,22216,10294,68158,10436,86950,7206,62115,3977,3657,59874,456,118617,18156,106663,112229,80992,17442,8217,55551,5133,34344,251927,51153,39364,201321,7816,66803,23057,156724,145664,14276,95705,979,2796,6875,13429,212525,50602,26276,28284,3424,19465,52397,46963,31420,51399,206476,92317,48851,637,100820,83349,10317,60227,21972,6908,282439,32857,224767,95629,83882,42106,87338,69757,29840,68709,37665,45244,114577,49188,175943,54009,186746,106158,70168,3358,234002,50555,9221,129338,9562,20118,32923,78479,118280,65752,4977,10474,102174,60947,129006,10570,83451,8598,8078,159367,123785,80438,16742,5905,5281,181513,42402,6977,163136,93179,42191,14968,50421,112401,105440,33456,57347,121611,4221,94954,36517,24046,27796,6255,33394,72990,135408,116627,1233,57874,25654,95419,68156,401399,313338,55208,45573,93124,119251,47200,38196,11909,130667,45391,73904,64964,167846,4137,115606,52036,62214,7969,160925,7187,1132,134835,40309,73195,64494,80472,444841,61111,26500,45323,40743,53625,52797,22659,15631,29739,36706,28841,39147,102836,26794,10536,14845,87305,45874,12241,127587,83833,57183,79722,30844,41304,84655,20825,92500,3722,25655,27811,10157,81634,31362,34088,92487,70123,22190,185100,72658,139035,192523,88241,2078,230490,44528,85638,100198,22088,29982,291233,241062,13865,4445,137791,37835,107218,31726,19718,38234,72528,23046,19177,66695,5109,17251,28077,5617,21554,47839,72425,133825,1486,73065,181275,141508,21768,62971,63082,2512,34200,9904,120309,6392,91243,68416,268253,41199,116757,138551,185526,41246,28986,4093,19057,17295,4148,245766,122360,35356,112075,20301,75441,10998,7977,19769,62922,937,63547,100196,26427,157820,20983,236696,22935,8140,90315,156004,47204,140973,7726,45097,52725,22636,23436,257282,105247,522,88389,216031,202204,46812,211666,19693,68828,81691,45925,11256,30292,372,5236,167826,88328,232776,151611,5360,82104,18841,80393,25465,18285,20320,72377,31730,33160,45803,38715,27705,37379,24163,18360,103586,4015,32305,269494,91252,20080,36567,54650,7797,57073,12650,31164,42209,6375,261663,105528,81661,106002,2800,5375,17247,43151,4442,15727,194619,100855,144898,62320,78465,39929,16454,1967,28311,61363,17219,9395,8745,121445,76939,80385,162380,22009,54191,44248,16299,122830,48151,74429,78291,64755,14238,44966,2511,17712,67954,93583,829,105899,49935,84750,11591,33185,85447,42717,27409,208542,28965,62052,52525,5597,25694,65594,16343,63224,276188,12475,9331,127507,38522,57287,24128,133161,79723,105548,133695,48917,27558,43278,46520,13778,141954,110785,83366,17715,46317,105763,66298,147013,41086,94180,16478,220447,44611,730,19722,78975,117889,125643,26254,16574,18480,65006,15806,38549,246418,46052,36056,8440,34984,30170,3163,59800,4458,115442,4283,41970,33507,104078,1653,22,121158,276486,3655,6338,24048,133421,23641,2161,24422,36006,8086,10675,181474,12307,29514,59143,14729,52509,87128,122470,19446,80852,33314,24573,119864,14237,9652,57779,6612,51851,15284,98871,90581,124466,156831,21190,22015,71380,161906,87247,69201,18392,17908,108470,72962,40719,14338,17911,95260,43339,20610,78916,20710,72451,11315,31448,17263,58853,178878,48111,116002,45497,80506,82605,85880,36300,121755,25215,36118,301929,88728,405223,276136,553,34704,212438,49970,78329,922,20711,25036,257130,38295,145369,18128,15385,30829,55656,48345,8012,3561,28004,122041,192900,58338,112508,41085,29976,87040,47117,23905,4336,92061,138880,97407,42083,172121,6256,25192,172671,5,93568,1420,12677,31605,56743,40620,6015,78415,231077,31298,80026,13902,19048,24924,170586,32955,176119,87859,36731,6773,27711,24658,26475,115216,133207,93250,95820,88522,8317,5714,124047,55219,86860,19677,23961,22928,162209,8904,225992,359835,56084,96201,29392,96558,86071,93643,55114,13347,8183,95129,82012,2017,123336,34219,115554,157159,47747,101684,41008,18735,193781,104151,226906,7552,179874,124113,31159,21162,44010,14771,51268,166128,31382,73124,77438,92830,205709,12113,1292,38937,13114,1334,2118,15597,69581,14449,21934,76618,48728,67038,14967,51495,24243,87736,147249,26720,11119,46063,43749,5843,44147,152629,133428,65703,14269,45604,57982,28672,55616,45957,8438,95433,37698,220862,132034,39456,61870,4161,26501,73560,56418,9845,4654,20916,10456,88920,119358,9015,65931,96507,48029,38534,21676,109081,43078,34943,25089,6131,28766,23665,5477,10255,16695,67,45778,42443,42770,29534,23733,100513,62617,42630,48746,14191,43753,50295,26007,8792,57243,43119,54725,164253,58250,112304,131796,25165,4651,3188,24831,47748,3705,19540,13211,102095,5593,18699,23666,32005,117571,33541,60584,74573,86311,99443,25172,27222,168938,7143,11853,53560,18834,19960,86522,28217,53266,117700,72989,34323,18721,66450,34346,74056,47217,202002,46269,9429,68582,75458,37823,82843,96652,32549,145144,27958,19820,158086,31955,201406,135379,31207,192545,12950,51704,9094,248263,76147,64028,110009,79407,89345,99284,223492,47966,26848,15359,201137,2861,110507,71231,72297,31851,118777,71039,151051,240855,16333,50766,14727,7939,4149,80908,418780,88378,59276,1327,7284,38576,79814,65820,42199,84860,49574,62596,12396,70598,40117,8648,7994,16836,7630,14047,359699,106878,525,29037,28064,13380,11675,50669,74216,103539,180314,27449,56299,172344,19274,7301,246099,32043,19422,36506,129317,6806,30140,4614,46639,66926,932,86600,6322,27847,233103,10541,39025,34887,3517,12972,26220,2031,66561,115015,48658,47596,12714,33845,3893,16165,35237,89983,14769,11962,147224,47018,29977,27979,5552,82338,86023,131368,1218,24853,237840,132193,15455,40873,3668,65351,53388,15229,59889,272245,47934,11858,34347,18038,90853,86981,300602,19343,114181,29362,84921,6095,106059,79472,38015,1206,48741,6208,8e4,21916,17423,6002,108083,24479,34931,56661,9511,26995,100694,163853,35997,81254,58321,18919,171890,86877,91341,74503,70477,53412,7027,59281,39892,131302,5864,15947,61301,67466,162369,47956,27874,35624,282324,21270,111847,102548,41482,30955,116737,28264,8592,55458,22301,75090,29821,30697,51709,3041,19208,8038,24634,30467,87509,126428,19389,18814,152686,20701,83474,45832,80891,105808,11378,153223,120770,98186,150633,49838,9141,12755,30962,5260,74490,21256,31678,65062,33326,289838,187831,20595,89768,2805,58535,10844,70085,12090,2451,138068,98544,24461,4511,6754,41684,28203,3383,65355,82833,30161,83924,234361,128424,28921,222594,33975,125491,34069,11508,67464,144226,41850,98703,34371,7901,21254,38398,65651,23549,53883,213340,123269,12028,71764,177701,28758,2623,68395,11549,15232,68603,9660,63116,36079,57093,31198,20475,48467,89984,35619,186847,107469,31389,43631,73867,41949,68841,114250,1605,30564,63403,17588,27680,99533,12641,70325,50428,73426,78379,11855,91651,72081,91720,60198,15743,12065,83398,140046,6761,46598,45900,5068,886,62448,148968,37347,19405,9680,15819,43496,63370,75667,163700,37639,3633,22774,34341,183131,134335,37200,23915,7054,14194,12970,26438,13350,285521,25594,8219,104410,91039,168804,138480,149734,15907,33818,61132,60082,4622,110187,56736,13551,73571,3945,73463,65498,17758,263266,17593,2710,27585,54469,38200,45367,63754,28881,3473,12791,98287,31895,65787,4463,94536,24951,36332,59901,28803,52130,86403,7668,181822,74831,18977,9850,177206,145485,109798,7292,31421,26280,77211,58511,12507,127004,11113,147,8729,56208,43066,79926,129937,31345,83947,39915,46146,98763,42566,1337,13192,18323,105163,80570,117753,16555,72883,11077,159438,40764,70933,83329,26066,12276,72059,21655,173836,126713,69454,153482,91585,70644,102558,110483,6764,127864,190133,3961,101798,20945,71138,82402,90884,69669,44753,923,16939,59700,164258,25969,27082,31399,43846,6306,246093,51342,6153,151581,202801,182731,56475,162188,89426,141356,14355,121815,27536,28023,65257,77523,106668,127314,24947,12790,38796,169698,23555,10725,44573,183083,42088,62716,43265,105958,32050,44067,50118,1668,3874,6243,318411,16599,1691,94999,52378,28671,216728,123258,2059,34969,69225,5913,136280,171443,141515,91662,22175,135282,80020,92270,1663,4808,4482,3495,34691,5226,109830,108512,17342,107488,11606,123190,100247,29666,146527,113014,15794,30894,13224,39585,243192,22351,9903,7836,47699,11078,25468,122291,48821,26780,122679,75521,81450,630,4895,92900,55074,74293,17441,3563,111657,103102,51613,12318,52370,36191,68245,34269,40445,41354,122901,168604,182500,62012,42557,11259,24428,115113,86345,12362,3909,78430,86852,134602,20459,47853,93879,22577,7659,3688,38555,13349,17381,56715,91639,12493,10895,92438,3142,37057,28928,2004,36427,32268,34222,209974,10432,67436,41989,173518,107930,27079,62729,30908,55558,5828,45031,14902,53546,8204,144263,60255,14520,88212,86582,109589,69356,8064,47449,8505,66558,16886,4844,52817,111260,215129,12941,91118,650,20770,6273,73089,40618,62790,2873,35002,14023,97208,19386,102646,36993,143736,135457,35385,113601,17893,32627,84439,100619,56016,6581,57264,172160,45452,111710,203627,70131,24100,322787,1996,35665,70078,22358,90922,83658,4097,63200,58499,14542,99153,52159,6615,12414,63415,31986,16823,1579,65405,137809,8841,16898,48082,259,33014,42375,12260,179850,73667,91389,98882,29532,17311,326251,41092,5928,20742,44964,48019,43505,9317,49265,6643,192712,48424,163487,19861,20113,70848,31928,105333,23685,78563,14638,54755,7158,24142,44018,20774,125255,20331,24280,10163,1285,2336,39851,4299,117269,46714,63816,87779,159624,11731,9971,990,137317,108831,50994,74554,162680,23640,131597,146962,170620,34829,91205,21184,1913,63616,18427,93136,156592,17519,67565,115882,138220,78622,88535,18115,2711,33554,109492,54298,971,24914,25863,36363,45715,27099,194995,14299,178181,111488,72395,322385,157719,130787,11897,81843,83999,11369,49280,118604,40922,61332,110343,53407,75639,40582,300440,54722,25637,13694,48248,48278,194521,56203,52779,48783,72627,10953,376,16733,280238,26351,230789,15132,25168,137270,3588,63704,73376,94031,74284,19443,159557,9697,39901,13351,119050,15406,146455,3460,29556,75195,37673,102524,92329,47289,98413,15311,100684,56345,7116,95480,11590,7200,167,23610,58426,17730,136656,27944,53151,2701,8824,103124,3017,90744,113588,53216,79736,65940,26931,498,29568,80540,143543,21292,1740,59268,16561,180816,42323,50174,40890,52866,10703,57169,4700,17191,4424,93511,49698,166650,26972,48631,165169,82879,69326,202970,4007,2376,231325,139592,22119,62851,37504,68816,58345,67398,186643,43331,277416,53749,15746,23102,17432,4793,151138,48822,54265,48203,198688,14305,54287,2291,18018,113378,123260,7180,97549,87027,120085,2920,76080,8190,102005,5641,64580,14955,59802,54028,58884,19367,81779,412567,85957,97053,103637,78871,29364,27637,141728,4767,30686,112738,130146,42745,12730,105040,14844,232,210944,36581,152317,135543,29744,3129,55647,58149,46319,27265,17499,28005,59948,7170,34138,5702,293047,110892,408,91760,218674,18469,46095,81403,14389,4610,35672,73060,11006,74848,104820,118143,190357,20043,105358,141735,5115,27093,45924,123073,52599,29433,9616,238350,78610,24851,58858,26769,31969,24613,18294,4982,32735,39639,143563,112073,202205,12567,4873,88601,44897,81503,101648,81362,34662,85277,17574,48173,21435,221188,40215,39576,80786,26544,64668,81841,10731,37733,247986,149188,127703,495,18382,54388,72446,43071,30974,198723,89608,41360,190,33045,8386,31658,19992,237838,119015,137622,50890,100913,6460,116233,267230,26621,104129,65114,14190,41542,14888,85962,23342,23041,26453,43725,71809,45186,4770,46452,53894,56616,221286,18973,9038,109299,55365,19366,26863,18808,60909,69353,41738,83463,12100,68561,72860,3980,13796,49340,12332,31311,27418,4255,53430,18976,45523,510,14224,30477,26581,4530,3651,101663,139840,22709,150861,31996,63923,120623,262522,3076,10528,2929,14672,130238,18087,9816,121894,100308,25085,55111,14565,18952,53293,2042,369988,23674,61789,133529,28783,108293,35477,47119,36448,71049,40015,33055,78598,198442,1833,159937,40654,77444,189245,113153,8621,18599,38553,35223,166072,2375,11659,21786,89523,6032,12116,63046,159398,18454,3678,32521,47626,11411,103527,38896,42946,15696,26370,10185,8413,37080,165583,4331,63555,14907,72220,50056,6623,62236,36565,49783,10049,17503,100581,55951,146244,24724,9626,17969,25524,109300,173965,99994,101056,46459,43647,53737,277968,8347,123521,74858,33829,44762,77574,877,81377,222525,123532,30602,43881,53145,2973,16284,81940,61281,127044,63620,9875,14756,114829,19032,9202,52759,119141,23928,120551,19607,3599,33401,76821,73233,117430,39968,36539,7071,5446,121735,194059,15206,45283,6706,15603,65615,1207,165723,92275,34773,104447,8396,32353,205240,164323,13600,60555,79205,25532,22907,33410,57480,107111,69630,32137,47832,70913,33161,20321,2371,117348,10714,86246,1625,11763,17900,268,78457,99175,97940,101092,86660,32221,14041,128504,125080,53744,124263,31017,13897,403,31859,21964,5633,111630,5547,77329,17961,18241,84995,25984,12983,67491,62168,47262,5241,297,51191,7351,8967,147212,82060,16821,782,11033,82431,62957,5026,43459,77963,203477,53528,6247,191852,87774,74164,215654,13467,1522,219964,28589,244104,16242,117821,67725,72570,156792,17186,15979,26990,44128,193014,35276,57125,16212,166451,68017,6905,77608,16364,53777,75921,76426,37975,26203,269296,64099,84122,12077,38533,830,4407,20139,963,43028,38902,42911,37503,83343,85045,16979,1165,60835,137387,58380,86990,110066,134540,56331,193845,81238,17922,163093,38744,110641,12502,56404,34862,26865,125964,12965,111648,25547,7771,27196,136980,9555,29551,107158,57885,18831,37705,35505,101742,13970,102109,62548,124657,23328,11124,89592,146376,248050,6241,22033,18337,80685,29898,11908,216623,67721,106162,146610,21377,15085,91552,42041,62560,122532,125336,102365,121537,142559,29693,223919,11515,110495,18776,22494,5895,185059,103592,229351,51220,100102,37027,257855,29359,54123,36066,106493,12244,79258,32002,432,56205,94836,90182,6726,14762,29391,48938,26864,38083,60364,3310,60192,14766,205567,57504,110760,22649,24666,46333,21517,3430,13135,28873,27052,158809,11597,20529,6695,23138,22960,37137,45574,6545,305877,43423,26153,24769,59844,14501,10430,134352,56169,13213,103432,49523,35181,13435,12408,129475,64620,230854,77390,51990,15653,83248,33466,44571,117828,51481,2187,10559,68019,18021,54895,48247,18354,33737,4554,108595,37288,39767,116707,9175,3726,108877,21616,83684,49862,1938,8543,276466,20134,108498,48770,102254,31914,131520,185291,100559,51890,209,19526,76471,50544,71814,99351,8172,198526,28816,20419,9109,98389,136777,76479,75596,30635,165417,48216,120220,25955,211071,39314,24308,32164,2559,146280,43403,9233,17947,90585,1786,86920,125662,2457,64741,32152,32918,122882,78538,44001,31723,56426,23375,103172,88177,145697,52506,49319,68016,31664,41488,18486,110400,7030,28241,986,109199,19900,42147,56864,65287,49183,7858,24e3,30453,840,16673,25907,68916,89927,6309,158335,36407,199737,130464,13137,59603,201778,195292,21015,42466,179062,172561,89492,11075,180407,31868,72493,20998,60217,9865,19530,39274,130266,54539,21623,12535,13505,40641,73375,4087,85633,2153,3117,70680,55788,92096,47509,98493,37490,271936,151475,3032,16171,96642,34106,78425,125761,19591,3366,19316,54508,24183,50786,194248,91528,33253,34622,108355,41741,705,3814,3883,108929,13203,67831,10142,59754,68208,29128,84820,56880,38794,24972,48571,40821,40476,18137,164254,24064,236309,79181,11282,395,39169,2013,51587,28551,9645,701,109513,115899,113566,12762,62045,58322,103726,41343,40866,244102,143816,2490,70346,40973,52618,15412,30720,104315,38917,42027,93676,17513,107418,20706,123890,13399,97727,24044,87962,65606,44250,98044,65276,74790,101473,19350,91570,1326,87790,172042,7577,100813,86896,85891,41512,108130,27794,14875,71431,12835,156250,58135,3759,22476,42176,115873,34686,56523,73643,108505,51491,20838,12721,32863,45700,29496,13700,34294,55360,29206,155942,123812,7706,163234,203,132720,49358,144431,8130,175788,35818,3270,76832,25710,54095,97274,28779,94621,74396,19092,128242,58067,20885,14670,93255,15107,63291,23654,126900,129421,59294,262659,9798,3251,67344,28600,44629,50672,29072,26999,31526,23183,49175,165843,175455,17282,175411,32022,45989,30298,90690,78118,83156,23749,35636,31317,7069,80381,94561,133756,14960,97404,6138,41065,78041,32843,16601,34123,9559,146529,123377,96395,54441,42012,84257,123541,10745,22139,106459,11720,150883,172651,154996,110538,4728,53447,25704,2009,71152,119354,21166,66604,1429,216162,8637,122250,63520,27180,29172,36124,276428,107787,77184,4680,14952,104903,24418,14793,51561,52931,8371,26342,48526,7118,92066,67280,40653,8847,34597,105438,14198,50163,61188,146286,50315,41205,170829,161496,585,197359,95056,1687,365794,91349,48507,5804,49263,5146,104902,96365,117343,132222,46084,96919,16875,8073,262381,79982,52663,13928,16056,153908,15145,109256,132308,18763,24904,167644,13618,40750,18686,147124,114709,150038,52849,2938,12568,48617,8778,5459,44202,44591,74914,17183,248689,13878,7822,80060,23116,194037,18487,2067,7798,43077,33678,244028,31320,74273,2794,19466,8218,36280,183997,48124,19416,29656,19280,98734,7715,18311,30701,133602,150307,126956,7378,2933,79903,13178,12593,86571,26604,92446,13574,44205,65699,427599,21118,8245,14407,27877,47936,33542,7916,26460,117762,21596,37818,2249,127359,209394,60044,47677,308089,36791,154971,31417,6998,150042,174360,12255,43009,29335,48739,3912,101398,53340,2580,146939,151295,45360,125275,15273,45383,27456,48761,23314,8750,60801,85823,104759,27894,123685,66968,39480,26917,55290,83305,2696,98390,57569,145853,340733,4919,20024,52268,30884,7413,203685,70989,112855,4129,50536,349518,68205,332641,159581,135361,236026,37563,176404,64899,6578,122033,63871,1850,85234,82089,66124,74145,121098,107351,12687,36881,117334,13136,14698,85933,93866,18047,32620,310,15094,46e3,88451,23632,36645,27940,87618,80520,58892,20976,27702,140090,96075,67841,103292,238964,87778,107338,17019,83427,67522,7302,8261,47570,116787,8730,80484,61772,174422,56005,131193,52875,14588,28471,59817,9586,15720,158155,51307,109734,15196,11025,59331,3884,52626,102602,84797,25158,27314,4437,20488,76214,189248,35023,114952,157376,2827,62439,102878,129749,36405,10329,109339,108633,36662,1254,13267,5470,87105,58004,15397,10434,159667,21864,52022,179464,3013,32147,31496,116832,18494,105502,129227,107267,50033,13481,9954,24267,22141,16257,116154,36185,950,115685,11305,176708,2048,178671,112573,287867,162328,497663,95170,50979,193861,50987,30368,136257,31830,46549,15119,169876,23788,17462,249887,57377,1949,35448,14791,43769,210091,3783,34612,282103,88380,245190,5457,20491,98908,11402,86899,117916,16028,162584,60644,320177,156096,31065,55876,22e3,77655,9992,23397,13757,317623,63978,215255,2443,17648,93231,27388,104529,93807,55505,140477,12046,112040,70887,40152,94365,112353,25063,114679,266061,71248,119555,15589,2244,617,14129,211431,70110,100652,7777,4383,85911,89221,21010,120615,58357,86405,37554,41647,18,15143,69662,60491,14714,186134,148344,42347,5410,168175,44535,42449,343894,129417,99682,20659,27272,140483,63455,222159,17536,13722,42637,62324,11976,114691,148109,2283,32057,182393,4295,147364,33705,2075,44303,30274,28331,63740,69740,29148,10346,44862,33716,73937,153333,12930,38784,247159,2515,41053,20256,83368,256189,54639,115240,5096,24661,175419,153552,26516,141,138176,63885,34115,47222,55709,2765,28479,38875,236608,12229,22921,77291,54426,45388,2860,57787,114579,295139,105782,17826,71066,19119,54364,69385,16568,12323,28057,33346,34919,124763,155533,101386,31644,8627,49001,303600,29868,63213,9103,77280,71333,9696,138789,37059,24823,5057,21352,32368,114208,56803,19424,10445,58514,8661,209508,26187,171838,10460,63454,14016,122504,41328,21329,46618,32493,38225,7855,31763,7945,29876,8734,6438,24205,97490,139977,130740,47323,33195,85390,57194,13813,60600,21313,96251,7699,27584,170521,139271,1363,4402,336738,129223,84983,69150,13147,3590,163929,207225,155260,55916,20288,4503,8398,98490,11773,27512,37113,84976,86558,28365,11756,116005,182148,13733,115313,47644,67208,85069,9347,14995,226141,14704,101835,41159,35314,13113,63526,214039,29978,50446,83339,17440,129441,72522,118641,97816,24907,73844,15717,118884,167255,96509,162793,30847,36849,51297,78974,77793,10427,1873,2972,9999,35074,28190,64297,146836,46298,60038,163007,108919,61219,2403,75022,127339,4233,110389,69022,9833,128097,88016,79390,222936,22570,94657,28462,56956,38803,81536,30474,152794,19566,16481,147408,74574,81895,20731,1918,1366,76367,187321,54494,24366,21690,61696,33283,107477,77499,31112,414383,74362,18463,218441,120929,59848,258629,201924,69269,454,19989,13054,59894,3623,58908,20681,35723,78523,102680,38988,184112,108087,50944,132704,52966,21699,18860,96349,201411,82697,85395,95658,5093,6427,177894,44191,32755,26961,155739,6249,31310,81030,26574,84311,120155,86730,113535,7424,48888,13516,45747,98098,20077,183995,81945,43210,26704,40420,75831,45648,11180,6855,57927,65528,124096,34851,2598,156633,107572,127352,38169,123845,60142,62722,105584,232364,23211,68120,1601,22169,89299,747,258039,80572,7258,152249,11862,101204,8834,121434,33761,19175,133142,46343,40178,48723,3589,41977,30210,38868,62257,10087,82658,87827,90646,16415,47552,351723,28298,72225,91146,272760,1701,11295,1652,109651,300747,51863,198800,29446,11794,32345,37538,22356,33102,37590,113544,37970,11478,179743,25454,103417,59905,221970,105196,145604,7817,164809,102360,16974,75840,255333,56902,6659,1954,645,59400,67769,7689,18675,5215,13793,20536,27852,3387,29523,259718,16860,94625,43143,29245,15848,233581,22685,63631,78557,22836,133302,84513,1348,51826,47129,98836,58284,1830,1749,94642,10933,6145,12506,10975,13879,103781,144434,10268,28409,32346,52968,121567,107374,77268,23686,35097,10501,155275,15303,47136,21102,168741,55332,90385,15996,84817,681,137803,25054,142275,6163,38175,8056,124296,240642,65621,4934,178205,16101,62803,60964,18230,100622,76465,44689,14545,9543,47514,16852,93380,28048,12047,107106,37575,101485,77047,57326,34819,96137,76916,6469,46264,115983,75768,87668,69942,13027,165,8373,114231,26434,52844,42799,182044,23580,146254,38081,43236,33883,146220,382894,14606,46035,36481,166621,35417,95382,2957,59384,60428,36358,66343,75378,22267,22950,83528,17577,56474,25285,4619,179691,75355,95836,53295,34588,171410,4487,14679,84208,44015,18562,109133,54101,11531,86052,174479,303157,28095,9953,35642,14564,39802,16145,77606,117406,53038,121117,53624,22062,1212,7632,127157,237292,189087,10478,127345,102515,181997,86752,87623,10966,121602,68783,68681,83042,114380,138349,191305,67176,50085,39016,1427,42384,1412,67118,122616,72389,25260,2237,13576,137346,19938,20304,2191,68759,5373,61364,238507,75814,23931,69565,38993,131741,38364,12528,87762,5679,129853,5310,186831,32653,90338,260176,389531,108118,26843,43985,50175,30563,25106,56965,18130,140428,4542,165503,117991,24219,229605,1819,129663,1240,3797,76093,18398,71339,51919,93043,27175,47060,216257,6483,35051,1217,16512,80798,129064,13225,69339,8548,237079,72298,2575,34280,51379,117910,55671,53345,247552,29486,39328,140821,34681,57045,60177,5004,90269,78522,2479,322607,48474,61296,13057,31558,4678,59271,6699,27044,31988,35944,12503,83480,4389,136508,3781,114121,70279,4488,155829,42214,2898,68191,75695,305850,45041,74344,106509,30087,17429,93292,12477,290,23080,114802,35714,18751,26554,105424,17775,2144,2412,100610,65192,113975,52975,180272,135050,129815,76238,106483,21440,63186,4260,46189,9711,28249,4169,23429,23390,8324,141585,63809,67668,38457,38063,39226,59972,1189,203916,62368,14403,16949,61767,85801,1739,40147,35049,76757,33124,62102,15780,103593,103009,53484,22952,67973,114645,6566,5245,50462,7601,8288,3513,194571,80276,1908,54592,5124,58571,2513,6800,273997,193904,1119,17991,117245,2508,129156,82366,26278,71465,63341,56943,39662,106116,94966,156875,9736,2204,122308,94418,27134,1280,24539,49022,45314,3764,50904,46424,30699,28087,293839,9400,33646,40165,822,147499,50263,116179,29085,11863,31314,5578,17797,5104,12454,1604,15342,219206,10232,67800,94261,25872,13565,90339,78971,75377,26649,41184,47695,11514,35369,20767,14227,41953,309396,148270,147938,33074,14453,27499,109019,39018,25738,240196,158931,52820,8612,95853,21524,137010,84901,70869,70021,116794,48404,38771,6732,1070,70990,187297,49140,5238,576,3564,253975,16027,16483,2811,37775,19034,25259,4053,2e3,70083,95774,19713,33431,92703,91314,42381,288770,48194,95985,3991,77418,13406,241328,245086,56533,35275,62725,9246,51924,70181,95331,16163,31410,79016,39312,120878,119371,275987,80124,27712,9186,220,23598,146167,85209,68238,282190,57048,31273,30555,80913,17594,75779,59160,135002,101219,189377,29225,96735,60126,62522,104e3,27620,86814,17240,147533,11001,5425,43682,410,49460,87270,69480,46315,59448,1816,76201,9431,11788,87960,29063,65539,47347,11678,33846,7008,196704,9895,6753,8633,120892,59970,572824,115934,6646,202559,892,48351,37611,251282,57823,67263,57750,26527,34485,90747,7685,88370,6144,64182,1709,41969,21458,62327,181657,49247,225330,122600,114574,107124,85361,111833,63243,71420,15655,191178,72430,18063,51425,54002,12364,53225,86557,18193,97580,41232,138398,67821,128724,8944,233212,101353,52099,42127,14006,120107,32789,32132,3498,18123,33758,56058,5779,128760,59888,98869,18445,84702,51911,13234,218379,20093,39031,8074,70195,20708,23462,24355,131384,60189,26390,10403,41060,7140,10781,49410,42261,87202,82566,41663,43105,60276,2768,5733,74176,28329,2297,145430,131632,83615,122915,105441,655,224102,5284,136426,67763,16294,188511,32538,61049,27893,3394,13951,159099,28542,17930,145360,9492,190122,32285,78855,26440,13570,58648,73908,4239,124561,2444,74172,53131,11468,10794,73566,11623,35343,64710,30481,4163,10328,38309,29901,10538,154377,76132,92405,24839,11679,3465,13449,11637,7824,2337,57754,1260,14458,41118,19878,38661,13416,159180,37074,163164,54137,28627,52134,184900,8520,40385,29546,30502,22386,66527,107458,6850,24022,47983,30603,35083,8934,304066,39500,9,28261,33026,77251,9374,44833,116312,34990,29236,63563,125639,135405,165398,159055,55690,88141,69643,236964,31983,25572,20436,36746,60896,31850,16179,11828,5888,3043,66368,9750,31167,7915,53111,36430,1333,64344,93659,20061,60596,180191,51630,6792,30244,43509,101058,22409,420,44210,109783,43223,27030,72477,72831,32679,29235,7675,47556,12258,39907,149412,84926,118247,24692,71717,105038,86009,45941,41189,89453,29856,52543,30627,226798,67303,59230,67415,34408,1367,99685,16867,128419,52147,4111,125381,117881,16173,44093,102224,31575,23234,24870,83790,127407,239098,3200,994,1255,100903,242275,117266,55116,38205,16140,29662,11307,40414,208793,123355,56470,4862,75600,30119,58218,70828,24075,26974,7802,192353,4851,5475,78720,66596,3409,28573,64396,30381,30690,59859,88256,5406,99945,103064,34463,37727,24238,86643,60088,4057,23741,5967,162904,38240,28356,93858,25510,122879,6897,3278,7057,11971,4400,35461,211413,21395,59615,39471,87233,55795,128426,3051,22470,41950,14705,3974,180108,80476,78442,204996,91987,15634,67610,139015,142373,35611,51134,10387,4353,153456,57749,181039,14183,68447,151532,21107,36452,20551,3186,46247,46383,129666,88736,140662,146243,2066,8360,7978,64818,106963,17896,47801,10723,114821,223295,74192,3293,3393,16987,74064,11277,91622,4270,29828,27951,387869,103235,1374,61988,120083,477,145892,128378,11779,211263,61354,18221,17869,46530,83061,108538,157981,90608,67199,95080,49064,195814,12302,66307,10348,231346,160732,112859,63633,146558,21271,31037,198802,47622,12862,95710,3910,77850,73961,85585,34752,61e3,4082,24595,103679,71107,8208,79568,150019,16615,24961,139857,32664,197366,4559,54735,32696,4126,162019,75698,13916,70108,159638,19834,9349,24675,175560,49643,18206,52459,27992,10809,88865,401975,133172,29e3,34558,30915,3658,25834,42430,36562,125265,18182,10155,40149,97082,208980,19575,60853,90529,66545,9600,789,46420,2317,88593,55595,98980,115302,5742,169155,1073,177901,3472,11189,63711,78643,65472,50459,127979,93,42202,67053,21720,157650,11145,141378,42033,22824,85705,79114,35584,15974,1510,54172,28562,12451,104226,19190,97151,73024,20948,5151,81741,21499,29006,84183,198074,54003,45120,170125,26240,35177,28389,64863,79974,60778,176915,232183,45342,2038,80253,41564,40703,32689,5430,100689,5366,23007,134279,14266,26712,73993,24934,64242,52113,102887,61801,46415,201049,54251,62133,122757,164883,30815,139966,2319,30842,766,13362,10287,134518,86111,81665,82440,28333,43019,18963,8804,161944,23439,102144,101145,80029,39052,248708,30350,117340,11878,128467,974,138625,63961,5237,74778,61834,67040,43814,13690,65947,33809,232476,115258,181745,28824,94013,9510,10246,93722,81976,7217,114383,3493,16014,69045,72692,12145,80981,9507,6692,1620,60820,330444,35474,33962,4797,7053,295463,46445,27026,12491,77988,49524,35675,90947,29114,166705,101385,133782,32704,6186,84595,176031,185623,45966,151302,63069,1699,107491,947,15458,74452,196212,6046,10498,12163,10239,35191,243951,9277,9090,29539,54460,22820,26514,112549,60372,51753,48756,21812,70861,260326,41,44222,10441,16961,48148,138771,216194,5914,52153,53400,212036,56519,26245,10117,45888,15294,138019,90913,26368,43842,42111,23348,6082,194845,161089,156206,51546,11647,30759,302912,262094,8635,78876,26535,35283,54183,31183,85484,147873,12989,5197,6356,72894,65347,20150,27370,73787,1493,45918,12366,190217,20724,13858,10981,67449,81213,7553,14115,72242,271517,11842,48310,88743,143726,22177,3290,243231,58452,62937,12592,1654,40066,33477,13751,9921,128442,15868,7106,75236,83773,10775,36938,10482,170465,17368,17469,161508,32752,98340,800,19824,264456,3901,87319,2867,26782,9630,113102,185815,24197,44584,86366,40224,3636,140916,31731,267731,9567,53678,72984,29389,27963,17106,50282,284911,60170,8322,12608,23374,89652,5268,39044,229766,8869,151350,31436,177342,12269,183212,120418,116270,2843,78888,69192,7865,184099,1086,129897,18383,70508,20242,18508,229924,124569,35749,50589,55626,9884,83115,40971,30671,18135,14452,38861,17844,201826,5549,26413,17189,13561,38539,10679,143331,3314,36785,171194,49685,187713,67506,4618,104039,17060,195080,50648,33159,19238,67559,134840,28599,157523,17130,38064,117398,94355,31918,13575,34538,40326,13997,3494,348283,62481,26862,3603,104426,244363,153709,112487,304612,199674,41239,35545,54869,293005,28223,26277,26899,4533,18518,15492,38587,80488,70485,160395,263,60162,11382,222152,4696,250751,51921,182609,10707,48463,46243,1227,49111,111564,46502,33342,56846,68541,63559,858,139927,16654,229375,76759,26478,33205,95828,23399,92945,2637,35630,28470,143992,50214,14174,21456,166191,65665,1711,21594,78019,97599,111701,36,147151,110246,189022,43021,30397,40757,131935,42065,73335,48039,26596,28984,15102,2361,7421,202167,69744,43766,52826,3642,83304,33873,75140,63169,192389,36551,92748,13039,123959,233220,21738,84447,77230,20228,187852,19095,25799,92136,108774,29237,53947,2299,118106,2687,8830,42331,202924,33667,2023,73763,30704,19363,19779,16737,35629,48081,24068,101013,162338,291912,13749,24745,328289,167679,70086,48299,23306,16732,17801,43322,54589,3586,63653,43624,53474,925,109177,251316,43805,13082,19511,86565,142182,92461,17117,101033,103319,64589,4022,4351,235897,5352,82705,107142,46391,156084,5860,61365,10558,13045,7717,18357,33922,12590,33065,6928,46993,783,46937,67846,8952,26295,6107,119656,18799,17458,50747,4229,179559,112727,118080,20683,41464,125468,51560,49749,44231,7359,35339,62988,136487,67015,5208,29150,24956,105186,48858,6143,18097,6972,16404,73489,58742,97196,36357,164616,5834,32267,13746,147733,15113,132091,34127,106298,39729,106426,22294,9780,15602,36213,71502,42808,66802,599,60755,5851,39120,67363,108623,126368,72770,91263,32486,30596,151717,7951,52002,43103,11768,68942,40901,39344,24037,127500,116890,48403,16926,86750,17745,48648,159545,34460,58419,5634,114317,67865,31462,23352,24010,98185,125708,69686,68337,13610,26271,70691,2980,4768,27225,102402,75453,28106,8104,6931,1176,6274,6475,112635,22498,6176,238686,26832,28893,90319,14441,15682,15087,39517,45270,109134,104440,45965,47645,81772,7876,52683,87720,12898,4505,185665,2769,113401,15664,57592,105229,137381,97059,119268,6876,43309,33886,128363,35476,144249,67013,143587,83367,25703,91436,59347,53236,2289,16519,19844,46309,58558,99834,23313,218816,231303,36388,51333,183535,109792,139277,54306,90139,18235,8275,32710,37677,82464,86025,92204,88842,117723,37570,128723,234242,76350,73795,34896,148247,58424,11105,11744,45746,63372,17118,49772,199520,81902,38004,22911,33752,3125,1995,53792,4689,26909,108150,146062,69674,41811,161444,84855,8999,28561,16731,93937,3189,21967,24890,22943,1356,145300,51569,28802,517,118679,31703,40607,48098,108854,25003,10233,73969,177495,5248,24516,215347,146192,48712,60626,69188,40735,5866,586,101541,6509,47590,52129,5969,222045,110933,25733,24223,65339,62812,2414,155418,35819,16022,78423,43138,20995,128255,240673,46745,236093,72176,57085,97841,61248,107,36068,193177,105427,55726,215229,20446,47228,100420,87091,14429,121708,23605,21157,187721,21880,2997,203976,99166,95068,25877,7724,98925,83401,4829,13182,18229,13718,239662,38653,116505,153497,30589,89029,38962,181302,43853,78872,180301,4786,248240,7401,106136,112590,77745,19731,60880,77789,125748,135487,5975,48627,34084,12419,215770,47557,254582,10364,106495,21856,67539,88981,38805,21428,48732,42316,12149,16078,52808,25327,51322,33850,51147,12253,122354,46077,56483,254553,115417,81834,150991,94662,86668,7381,12841,100650,18218,15741,22372,68294,50705,15535,84660,61887,22553,72299,31361,24824,17743,46820,64288,31582,77006,111674,116384,30760,80920,86149,77192,51979,79691,60342,122805,103800,240873,160744,233114,78962,54920,8608,3484,316104,72548,24337,5088,230040,21926,10172,36838,26,86221,83458,102176,12062,17571,41929,41170,28428,68239,41750,103930,2634,18313,53019,34825,97837,63115,24606,73157,152474,14715,91439,37033,109806,140259,30668,174760,380,135597,95673,136073,65073,134249,13829,17279,122305,4420,46444,10237,64848,203623,70728,10349,182885,65075,24519,25783,40318,34139,22222,63394,55266,102764,41422,20126,65100,90408,53640,35128,48932,11192,38935,96839,34782,39492,19396,41332,6250,5511,19492,51304,25936,104466,54099,73771,86115,5080,7669,30891,111700,13931,25276,72289,135447,14820,258641,25265,31005,281179,75286,393,95359,14623,13584,6680,101227,80173,44933,76666,54542,13244,39348,458,25379,109451,134348,81143,6959,65554,12027,51311,8716,57589,140731,28467,23316,17272,30458,25980,55229,77197,83798,28302,114784,7428,34548,26241,14712,39336,103304,18928,54080,12870,334,87722,15208,16895,142098,114262,39820,83913,57817,28682,7721,14900,108672,11250,62246,42849,415188,1724,26555,24549,25505,26443,107450,145899,61035,43528,6901,60726,65906,267741,21338,147590,42079,18924,73017,135236,15393,5206,4026,84185,1531,5988,113890,82647,303391,7386,69844,71611,189865,76523,31877,13315,19314,198575,32821,1928,67641,25913,104475,103489,3297,70391,18406,15446,113347,19295,93790,27856,1792,167471,116449,8541,4408,41757,63233,25765,86680,64501,27034,24816,34975,6079,4486,49693,36229,16917,21581,62426,27862,11612,54284,35702,194034,355,24277,48262,87411,70504,310164,118018,12516,47559,43502,57433,107139,9290,66533,80863,14634,34312,91725,28606,21342,67241,72355,43244,375789,37402,174015,105070,8342,44167,67494,1890,16365,11723,271002,1865,47918,8350,45564,27742,25110,125803,8553,49504,81925,62211,4534,15491,19011,80373,206920,667,102405,128623,245524,5553,113309,192739,65766,19567,22832,261958,29679,21293,71134,20962,105123,24721,860,21752,33448,18372,157167,94822,35770,173224,232737,75729,28937,46828,28062,25453,5207,140366,36665,30652,6169,67920,150458,92040,23186,184604,92330,20891,176492,49427,27828,38305,42495,143982,49560,25503,90043,29747,65328,47830,12932,11068,77721,9003,25213,94205,140426,46090,89945,138173,192691,33329,112232,129905,35709,27514,1841,19957,31411,127476,53572,17497,173549,55063,175135,19841,69314,5192,237921,117660,150697,4060,273045,50414,98940,65348,153665,164423,58804,156695,48994,213928,86036,28608,8355,39574,34540,16927,135680,18374,151587,10830,53805,16878,16623,4282,48030,8537,14986,46102,13062,72897,72,33050,108227,39451,45935,651,113320,40535,95176,57450,48843,5003,19019,10407,211163,3848,1068,4988,32091,30095,41692,15099,43602,107434,50744,7627,171349,16313,150832,352665,207750,33937,38256,51091,156e3,87889,90663,84175,24908,114900,50365,31494,83829,5398,169342,47521,54818,18935,8356,43094,41212,174536,10082,92550,6678,60614,23355,69721,14796,34149,128830,58187,3179,208,40325,28399,225029,401412,51150,31580,207268,6657,10993,69818,64282,289845,23308,12961,38447,6681,52944,31855,2572,47646,120728,179148,37240,45196,218274,4816,3695,21961,50084,35209,18073,51452,27004,6100,33941,1377,84831,171214,85,141510,9078,99227,32610,6417,11718,49868,65579,87902,73018,49062,46280,61742,21512,40862,107733,15941,29168,157765,144919,14487,5767,158014,140070,7241,573,71584,16921,223566,40331,179473,35081,47926,140885,41508,52104,59180,42310,32811,29048,123517,102413,80208,10104,14746,12649,153641,126022,37965,113017,4171,83,142592,2809,6362,50416,71323,116894,260776,16204,1524,5760,30351,12658,20703,54403,36083,45408,74772,4946,14485,50759,111222,10890,2195,167147,92962,130534,16283,177256,35016,15472,210156,151187,73922,117691,43250,52051,37392,24811,24358,30830,5775,818,21969,1476,127322,151783,58392,31021,106913,65215,89407,90802,28531,11690,20234,95249,44602,37256,18707,11928,5161,4410,26571,51903,49768,22008,25252,65780,209499,68769,203726,13249,137363,48845,86823,6658,5674,31881,1083,1823,108676,34518,166752,13791,14287,91576,91429,8665,11529,26401,16191,91972,30964,5254,28486,54697,79613,66520,18447,22870,45203,194466,22822,51703,12278,76716,44595,73455,33546,12235,144843,36154,51247,11116,33040,3180,225753,60864,1972,28469,12891,28879,10338,144157,56294,353058,38302,41447,87532,110616,27065,168438,6557,1213,50804,144643,24817,2390,136531,38174,247513,16190,4059,122791,131994,137430,39506,57650,16305,5188,54309,106128,20628,88071,67394,395446,250285,66176,91254,1399,114196,43915,60230,44853,27206,106353,43013,18733,345105,226453,51202,16607,57106,117175,35492,10476,89598,127439,15187,39624,13688,61570,10615,31111,59370,6238,175252,32143,224492,41388,95408,34384,148238,78307,38959,9340,160091,61443,15737,11216,41244,170,38299,102443,113097,26382,14027,33707,3957,76300,66160,19431,18900,6952,1717,108656,82206,188021,257335,27295,43999,41210,31777,46956,57457,12657,11489,15697,48060,204748,53583,82422,284790,30503,137341,8120,19615,220311,15991,10217,63424,9808,67431,70976,98221,4491,15177,28535,144789,751,13230,2394,1504,33977,132104,30316,22230,931,97193,185240,24826,22687,174322,15307,22988,1390,188745,180325,29580,59068,74903,18994,29195,79,15436,7622,38462,11566,138710,44828,45774,37768,99236,68137,84083,19282,22698,17134,74807,126662,173497,46248,16938,119735,3212,28292,213652,49013,9975,32180,45660,86250,4801,68788,95490,77482,113751,11994,44624,94452,46839,128497,100316,5798,58588,73184,202987,65417,37790,88524,1606,43156,97964,105717,34947,11203,100060,37742,130074,93653,107799,94311,196106,41347,8035,10780,16390,27883,118236,167395,1979,25006,19375,31628,18916,144723,78502,114047,103107,86492,107686,5844,20934,206963,23556,22591,16562,146333,20167,10471,117434,33085,2863,9740,36669,41849,37271,22790,18209,28979,8231,12952,54408,21731,25130,45208,55748,138120,75826,414,29593,9925,292865,25999,683,123149,7036,92159,86055,61827,103680,23176,54918,58466,57578,13305,5709,86479,16697,31064,17660,200919,10770,49793,33423,32370,52047,16488,62555,6459,8426,83493,7763,59725,82812,18628,67760,79405,68557,9612,7673,28102,56517,69620,171797,32458,29541,15870,81109,32080,207644,71495,21202,11039,91036,61230,2810,130800,32260,4613,60590,37112,75214,33979,126402,155062,30642,63875,12810,194463,82799,47664,16725,36685,43367,61099,449,172150,102867,21691,301838,36745,7130,18671,57316,34852,38034,54182,35578,65900,99486,19771,3456,2658,16914,99866,28390,28109,8262,21147,34353,20006,4228,137085,1675,203023,283196,198286,214375,163329,290603,152574,40471,83506,30068,14730,23177,131539,34759,27668,32178,71896,104799,116305,85430,119262,42860,25160,8911,23428,49437,105322,6519,16203,6349,74711,1230,38045,8540,75165,44736,25909,51026,317034,4984,32281,91312,27060,44431,17817,45363,155937,239085,35697,59784,91993,29531,126740,213757,76560,167776,285273,24262,8237,65030,41160,74437,48804,118916,13159,37842,1031,75349,1478,11655,108777,23435,277425,101734,67469,70231,124711,43532,28514,65526,54956,1e3,21882,17728,25302,40952,52214,149632,1999,2111,3259,63362,89961,220561,39777,26335,9063,10572,12416,34551,34623,38604,24723,5947,15588,69927,66252,119177,69173,46629,28714,70715,212408,20521,406913,74380,11716,50659,50862,37009,88460,130101,7210,53853,538,65120,151950,55806,163748,52837,13153,21100,16674,64536,6091,138201,44837,58547,3723,163,2177,32288,85454,34033,8497,14282,25742,10535,10741,79559,117493,243787,49337,100718,79495,40139,42956,7551,55433,15421,31509,23034,45081,547,61176,53434,328001,8470,36263,30145,4519,74173,53935,11845,73774,60211,78025,3,4102,73782,109293,315332,48412,26683,13714,6865,20128,18490,104141,325,39470,171970,115860,15707,7268,73301,74336,31370,2368,111827,107757,136231,142844,97138,96638,84053,38691,23801,1588,10573,122098,77039,240,186135,146101,11996,18143,112963,46171,155836,348769,47795,121213,116266,132515,3344,144804,31286,99187,255838,129694,35894,48779,55235,148582,71967,65282,15174,13920,47080,6147,108242,157593,125025,7136,1286,28957,127956,28402,98813,20805,7532,109417,40610,5041,32958,15142,18408,108596,33543,50517,27748,80114,233434,91447,487,37094,100048,30541,43477,10639,89862,155868,37667,8726,60684,237903,73408,99589,12190,38739,97348,3914,13594,2680,149016,13907,30171,28343,23530,115225,61104,35821,147679,14337,4297,244282,24085,326976,56428,7851,21303,131620,71446,83253,68692,111870,5224,15813,38197,49026,45057,13660,3306,76345,40671,27905,91072,996,68527,62085,91351,122634,55109,168209,2024,27560,112707,17352,8306,167115,169921,166958,5031,46020,11844,67284,19130,76185,6920,32849,5450,14610,22451,21002,17392,31872,66682,84796,13709,40210,59898,12029,8719,53564,21462,91884,21647,88379,194428,12754,37797,132826,160016,22567,54383,53186,77611,31107,8339,4694,19185,90355,23597,17222,140675,28442,23668,55977,9128,61555,28774,155229,17658,9390,24379,69357,15752,127381,239631,62460,93181,55913,45133,140155,18676,25249,33164,29581,82837,67223,22362,29975,7317,52813,1943,29613,20012,207130,49617,49651,5636,15334,36313,29226,28084,95247,72072,19e3,224932,15811,114,32127,38097,37508,88507,37225,27359,91626,12193,69279,20608,11055,88156,92808,2152,57259,55275,72789,24475,104414,1708,9882,3818,48661,66897,1631,34806,227930,85815,87753,18321,250664,72733,25107,206797,50891,8082,196411,92596,96764,152823,65514,22819,387277,62176,51225,40329,15563,189,3659,73670,64357,51793,275136,33482,86653,74615,67058,11318,125720,15388,22388,8267,1730,102663,170910,40784,7144,85373,13040,7088,94309,583,44224,140424,77439,18496,164026,36578,4722,9151,5824,63365,26510,35199,40500,79277,32495,44614,35233,9566,203293,152144,7097,2330,183480,98629,13423,330887,44130,68600,30939,97829,31012,345465,56747,94879,4939,160027,149761,99423,46099,32251,15332,8761,96094,128555,5763,235318,222223,55729,30241,55420,201746,3987,81382,8259,49325,23287,7719,24633,251100,92311,18591,110533,64759,170260,393860,7175,21144,132887,3593,75346,101277,91109,16387,259187,11627,57459,173829,44694,55780,49797,89192,120443,62622,3904,14814,23887,1027,112258,64955,99800,11132,66353,36202,48624,18158,88481,96882,43059,11040,2455,7077,21651,181159,99126,100434,61388,68186,19161,110468,120052,8819,55324,41494,7014,37689,3618,87729,92615,207943,9823,128657,12587,15857,6379,67628,51216,71775,157617,63244,1503,3864,218754,110864,5769,21492,7243,1192,87921,85529,31512,18537,42698,35350,73510,84474,34301,8991,21013,35034,566,38832,19838,35586,37216,39413,55006,12178,59742,856,84563,6900,25632,17437,49786,30723,13847,70845,4044,7843,23944,235976,55530,48942,6518,20939,73769,192653,52936,95207,23895,132542,142982,22632,87452,48042,54018,178468,10728,26230,23559,363,81269,142012,5718,346258,31456,84333,246476,51018,66692,101804,120570,39962,30373,70593,2864,60541,19425,54209,104092,7201,31545,48018,25865,15442,46257,40443,8328,6451,111782,47527,97754,33046,470,245116,31095,39,91934,87208,73470,36708,36521,12801,70624,36272,8892,79768,12427,55454,103756,5908,52390,62962,22720,141138,94634,41689,128402,126390,6628,106394,35527,134394,82727,254651,194502,148064,89549,3202,28359,957,21954,27906,49840,142747,8307,24206,48978,1186,71728,133038,71474,91306,6333,110959,74600,70387,18983,62609,56057,22970,1147,135850,1321,28834,3578,59715,102227,32827,81415,99952,55636,257598,390,22702,35701,85872,402916,39216,189795,14929,19467,10112,144422,61514,5279,63421,134686,41436,8424,51925,10598,132295,124416,4604,194739,210929,57866,31829,51626,50007,9976,91878,61906,56168,81906,60918,61859,40017,23059,16887,40927,62064,12785,32893,32913,21782,93965,20169,44387,79084,38463,11457,93950,27127,157050,2697,337088,5116,54128,48255,33279,8821,27352,25515,124022,65710,28906,38557,33390,1722,104435,72215,38551,12094,30978,25113,6671,37355,175109,42862,98024,65406,221276,59624,118012,64637,78760,86697,21426,1639,40350,12584,67193,84144,31396,7863,143011,69629,63112,9454,28666,65798,46372,134721,6314,51402,30837,151922,2847,38676,38008,92823,136245,17540,5504,109295,205242,37606,5211,214892,1586,20670,208711,137743,19328,40652,16995,20023,14657,154919,34422,12996,13918,38221,47690,16398,2959,37680,89122,6721,198469,91876,172043,83898,101992,26084,94570,3635,76958,22853,76497,38266,176590,168403,44464,142840,79180,184594,1984,41806,83147,11985,6546,366068,59732,24533,271505,8736,39084,222992,93429,28962,58985,86665,8432,30028,14548,32439,54424,165029,55175,27458,69046,121277,46168,33732,20661,24581,135574,123110,37556,79260,72611,16957,12939,46162,58238,44907,72936,253758,41324,32518,96480,11949,124438,65280,43256,34107,53533,43531,37037,28366,45970,32741,173438,6121,194202,62969,26355,30314,58370,28455,1848,50519,82830,90393,21761,295490,10936,256940,133568,44050,20269,4089,27457,21610,219460,36743,14821,101388,52005,13124,30979,140816,167362,26054,18458,60789,34917,40447,26606,33422,9066,3452,83614,5761,20263,137238,25038,91310,101,52322,74548,42572,38084,214054,186568,31802,17665,30620,141936,37730,14420,4265,187218,49640,188208,51441,55388,96452,66659,40869,42039,60967,221027,19234,178581,29105,96050,9165,196118,157335,3738,40354,117436,2965,34136,59659,15570,50843,230035,31444,71260,43886,18316,5387,38500,168508,17406,32174,8828,103373,143806,90367,3560,18719,122310,16508,26719,2541,105429,6645,37998,73190,10591,235916,49737,87112,233941,53188,32193,79154,4544,52905,126477,7580,63501,57314,3216,31337,6541,103083,60846,49,9756,15481,1355,43840,14319,13743,27486,10222,73114,230718,418644,16706,6674,279748,23058,45273,295831,86306,2743,5535,88773,21829,35253,120938,31153,3169,16839,42847,8751,80974,33942,36867,35514,16485,26474,77775,56877,5391,48346,3882,108713,31403,27804,55248,26235,43821,136104,40118,175507,28034,203908,18732,1788,34030,106427,36958,54359,7251,44936,15356,69139,455,157915,22173,140291,50348,43275,82066,49621,54952,15216,36226,96695,66855,6936,1987,8227,196087,4631,68827,99004,47541,110265,17953,147605,110242,58520,31312,38724,329975,642,3155,34497,75937,6207,73843,6120,17249,51429,117746,3218,910,68961,319671,14938,29555,34700,1649,66673,72268,9655,76800,153087,6941,210168,27130,35398,1780,73242,3135,56689,19556,165307,8765,35967,121458,13333,70453,17350,117253,22265,13340,44265,39869,441,3742,135025,23581,33309,16543,17731,13291,157637,283005,21408,101360,63887,52312,83873,5338,233779,23759,186949,34531,177320,38069,156465,91004,19353,59852,68160,14891,1338,1072,29823,1950,28901,81407,313445,73038,84807,162348,240257,37162,138934,16111,58013,41253,102951,16457,96056,19541,56402,67217,41638,94381,89674,29481,37456,80815,151579,13937,13683,132537,19699,134545,67020,29816,222341,141235,427578,48868,129557,233342,23077,87871,16213,18728,16184,9469,37913,19680,2798,171356,178328,13216,50049,72690,71904,124644,55455,7504,29052,41036,266546,19899,30391,188755,8659,59469,16,104298,112943,53865,76203,138226,68857,139953,14125,107625,119795,173133,4398,50273,48808,54390,16466,122086,31835,67035,50971,48859,7508,46427,66477,73021,84615,39985,83076,46779,201569,53336,36443,60865,168164,143810,51393,25548,169307,32896,24485,38424,21837,29087,275813,51674,6714,64883,46169,187369,55186,76192,12852,12018,62134,31067,118303,16542,12125,10579,4928,26291,43854,7091,10946,253716,109062,39283,17261,113012,258512,47764,125126,32646,55892,80279,201623,149872,3192,385,1208,48750,5376,58738,22335,5427,82416,47811,32435,143086,38930,94128,59975,156037,37977,38224,62485,7698,50405,71027,16462,21559,136153,34131,107506,162069,63703,3101,215029,40407,4178,3774,9187,80019,17880,97926,67579,2600,18405,8351,47924,86638,70820,92206,86453,29610,42241,119200,3198,15466,67813,57863,35454,4779,99518,4649,104641,144269,33730,38073,65864,6838,109456,193298,154007,5623,45741,30846,182578,25573,157224,1543,58575,138703,146140,44971,49356,18275,59064,20300,13122,11848,24453,11973,9797,86843,2919,25530,49210,1130,161220,76788,75373,85604,34926,36014,17777,17255,51533,11676,92226,51845,119859,21525,5936,18507,28050,1140,31418,14857,34207,47859,10750,36382,32079,106909,59426,87757,38393,110042,15965,97104,33757,35344,97993,53979,33651,45407,41884,82515,173089,7177,58371,35365,47543,51927,35587,10670,23544,29306,84233,39976,76076,62097,9007,8668,28119,78281,120790,19835,143020,54968,18670,64959,20649,34469,42570,33001,136570,87796,120044,1106,58700,63951,127623,12805,83057,40212,31773,49850,7361,54336,347524,101314,23751,19569,48791,29174,49369,20467,7465,75842,38281,623,112457,60210,28849,51003,94720,6426,90047,85560,43761,3579,85105,34607,90410,118528,7224,42907,111163,18168,6960,161135,191298,5247,100584,127552,171568,20121,91173,12636,54615,20199,63730,98105,2396,40387,14438,125012,4765,33235,12865,45299,37728,82098,77872,114037,59253,19675,24838,398016,102561,11446,17069,57508,178277,65836,99941,26114,2585,271882,136866,50126,11027,155648,118367,14585,8910,123015,335383,40434,41016,53021,14439,87098,176860,201543,121888,2358,9286,5739,22666,54270,37884,169381,33984,93859,16124,89364,72207,51639,76366,99029,65812,2198,12147,174891,194289,6986,30252,88822,21284,11445,288337,160821,33034,100869,43852,25761,52882,1144,103809,1924,84458,86079,43411,13542,139276,18141,34978,41298,7276,26481,173800,33210,17951,142652,33616,33677,2210,19941,98568,2486,192414,80136,12058,235883,50963,249638,29572,27221,47034,6124,72107,63346,97620,158513,299699,40388,23235,37176,224244,198386,121323,67992,23827,63170,17838,106622,158590,26807,5345,23489,91891,55474,74834,37981,13058,5977,72552,34706,26828,145172,19904,21367,34043,960,77092,91381,4733,47446,7680,41697,5170,16960,14741,46101,13656,473,51842,37433,11103,11551,121951,13191,97536,165932,50397,51628,129028,9069,44885,6590,59195,47045,32940,225472,90345,21833,13303,29407,96615,141951,5198,6028,18395,7181,3861,14966,156358,167182,36529,55253,25942,173153,30959,27261,50691,150176,162201,38467,48462,80602,42163,118482,168,108756,26011,17166,54149,456538,22512,91374,13816,90358,131615,18132,226707,1824,28139,26860,42253,93877,77351,65575,8980,80574,22020,27948,40422,91324,76376,13528,39281,91685,82215,122541,144066,1983,193851,17283,26320,2739,194978,4790,26845,42627,61300,65815,174612,55133,4200,191130,79771,158321,52280,166796,221620,62461,11278,4067,88152,83409,31717,121367,13522,47325,37945,10406,174348,249321,154101,64912,29938,51775,17220,15776,166138,78890,84425,54121,42861,16368,24572,291647,10197,32073,22651,11677,97509,26952,35787,18424,41910,71614,94977,72318,41594,70024,275419,37702,60199,7335,39107,61315,18271,18394,33768,87884,104277,123724,7277,56288,71981,189803,49320,3352,6798,14240,8954,69220,94433,57372,28620,68863,193727,85575,42309,41667,67689,42081,22543,44824,12719,28540,114236,101553,27638,27296,4300,5353,4663,19379,94098,3758,95888,95144,80344,87320,28447,259518,12718,71391,152731,37063,24132,31911,104896,15672,103782,1521,4945,72541,23717,122632,15619,87175,206120,29428,189780,61416,28350,44457,972,1175,47233,198738,95789,41907,21953,97034,59341,22864,53713,16873,32971,20693,20954,31336,21477,16169,38370,16412,9019,3841,24599,21938,17085,6484,81198,76413,5849,72514,12320,65247,276175,37234,59796,52642,16312,57349,198507,94148,46134,18958,125552,1747,18725,151873,14901,5490,68287,29470,3689,64794,40814,26018,25692,54450,2703,88278,124886,173087,174e3,24159,179477,24276,46004,201876,209202,445,52876,31948,30206,157610,39180,18439,44124,50469,5774,96278,222758,200216,50290,45486,20435,46986,46276,140133,142326,15569,13363,47522,92583,2182,7135,16853,22998,30272,4952,63263,35623,39096,53789,44864,20053,110392,124213,4630,16087,28221,127787,25839,77481,44693,13464,113146,6983,27069,55717,50102,4760,7107,26186,66507,59145,36032,104182,71328,29425,64317,50781,47465,94298,69706,74899,22754,120756,25108,93077,56834,73286,39928,16218,41699,176763,7555,70819,50083,26895,23315,26014,16773,123079,41712,5719,31516,90427,158540,85051,183128,40864,27505,55392,9058,45224,96857,30901,136622,96557,56304,120061,11501,151448,5773,89743,7769,86069,2935,18471,41628,10114,33660,110170,49479,26745,92846,33221,26731,18795,87076,8550,2100,29972,120289,3077,72490,33784,2630,208722,50861,63483,79029,6419,39467,14302,45286,64207,9686,67513,44170,1050,77246,59266,17055,53801,7150,11111,42432,4278,94579,362117,36175,42902,41933,39002,98489,22913,74161,84773,57036,17556,162288,74485,178760,93867,73635,128860,50362,261,67455,80001,46080,35662,4368,25247,19230,74393,22588,1822,27682,235324,13798,85998,13194,235067,23514,71669,147632,23191,134748,214683,105101,1518,25489,247114,7380,54842,26922,3971,26361,20844,68642,170517,77339,123255,8963,77818,150998,48466,36806,2732,23261,11741,236162,18243,126216,28690,50546,16385,92760,197383,246558,201295,88255,67588,71687,176076,172653,169058,33906,63747,24835,157621,43338,30050,46152,132741,2770,51371,94835,6614,15112,11749,56936,1250,19027,399017,58036,100215,23388,55815,308768,124152,94803,9521,64186,8971,28,30427,62163,7616,103838,35079,29203,131235,7743,17389,10882,37420,61460,228512,85363,41581,131077,62822,119647,10130,54445,26925,19968,29016,24446,74028,24176,61448,67185,9254,8563,119129,9771,99184,37716,39514,10532,221512,258753,218630,55980,23394,32141,61924,66749,32411,3741,36475,26678,77010,44946,91203,128749,116953,20476,49625,53116,13735,102335,29376,51946,83407,67892,59212,34685,21083,1546,112982,32972,74397,1078,190545,16082,86140,58591,89611,101531,10061,105104,76319,20035,17551,52611,169061,190842,100780,23907,90413,115619,9675,34710,193435,49443,129734,11183,258877,16318,136182,126808,44635,27304,192375,2599,125648,47051,12091,23814,721,58800,40137,66726,97930,60877,74487,7942,54326,9841,41428,13762,8211,85383,6950,99177,79806,201786,296464,124087,13144,29741,41721,47634,55088,254286,106408,17041,99064,12942,64086,45233,14005,2612,55827,255,7984,13980,38574,12776,46654,73499,249951,2101,26676,25996,132326,116415,119062,50449,31033,23038,11589,179252,20007,14860,129270,21143,17796,144715,60106,70758,69842,34674,282133,44014,16774,57268,38528,24053,46373,201667,28327,471023,51889,102667,21193,114909,84132,69317,96723,67969,16134,68145,15058,28765,32035,2524,101089,98664,25045,76571,14957,86040,118506,262428,154764,81573,39681,283900,73287,127825,544,80448,52347,38512,175971,15180,45467,33086,46552,48894,81107,43213,36672,54025,76703,8053,7608,13299,56619,20752,238099,54164,105133,1444,32942,953,37564,8e3,66316,119463,106817,404,13667,149108,128597,31267,10269,49836,106150,1484,52330,76965,160486,171648,38456,31263,22424,37738,66245,67467,143369,60471,75610,20895,115528,86070,60854,40796,49347,18989,15030,11371,37578,15779,79867,10187,86462,46402,155626,93200,40229,7090,57547,108053,99598,11088,47505,41218,206017,2173,20988,30219,22919,80563,57566,42369,93141,41675,2407,182519,120495,27154,16702,29456,14349,7958,16688,117177,140375,42467,261919,74916,153569,10836,34742,49526,7621,105997,12212,2270,392377,7755,17959,25086,232152,138791,33847,13860,35316,5811,1344,71259,50452,207539,92635,50359,5821,33674,30255,2086,2587,96264,17543,42,6029,9580,43007,139248,82831,12917,29607,25786,51467,42137,85161,100698,31561,88989,121990,278500,3602,109344,37982,15279,116442,28936,30880,87894,58079,128661,126731,67392,28051,146885,4861,16216,97344,42827,147561,153948,22684,21335,47685,1853,43349,15185,59642,10229,25520,187921,108972,5579,98037,24945,6697,19193,63734,137934,75056,89740,19767,224268,56138,63643,151661,39313,70618,84031,89723,84074,13703,85626,35460,8867,64845,3439,57906,99776,63968,49270,81130,34356,16210,23547,36446,34090,140028,72439,2221,22163,57058,363492,113754,18913,95451,48663,54464,54037,176097,68425,3023,34906,29482,117389,341780,80431,58330,16753,92616,60907,94846,147486,4498,48646,7773,46801,7778,18946,464978,47558,33223,177444,7328,15626,63337,94700,11743,9351,255024,39098,16447,42647,96230,39769,58840,10068,63439,35800,65843,58823,413844,9156,51258,7434,61791,85018,6872,3692,28096,7121,33024,6009,75532,31997,192535,9661,3304,9547,14753,31987,25314,55689,15896,20430,39472,31340,99744,25398,115569,54883,28719,205423,23071,57855,64638,149867,25671,82403,37616,20668,39989,77996,74948,140555,175248,64810,36515,46595,4958,248773,24045,28728,136673,168704,20804,114833,100325,27135,21205,96151,153134,45992,7093,13992,76047,1980,19432,145001,75159,87462,17710,1013,45556,34297,144882,20648,26061,11319,129567,108555,18872,464580,33386,22717,65948,167189,5603,135042,79542,8801,202632,18114,91882,5973,5239,67315,4431,60916,47819,71693,32597,32606,18183,45072,80329,76385,24749,51305,40314,156514,14693,130345,13168,66214,18029,12858,34801,27628,14544,10823,40522,40185,33739,148694,23548,9923,61012,28859,17933,19442,34364,99849,164107,141167,30629,21054,6744,36491,8096,42474,41706,155060,30650,10600,163442,1143,96655,61390,52359,7559,51568,64256,203854,4467,22453,14504,436398,7878,6980,8293,63610,293747,16167,35763,19627,147603,15419,18032,110744,51346,33681,54571,40472,48615,39073,21604,13754,173027,92560,11083,47299,63062,11813,52007,29883,9734,139722,15953,1550,20651,13616,49306,16113,90089,92326,7584,30712,72424,164858,6831,152871,55746,197721,34167,196442,6022,112107,55215,7538,123381,4920,43539,77165,8939,50392,34192,20225,79762,22505,58667,40770,29788,97180,82835,4568,8579,13273,363569,35898,49983,436,36598,3237,131691,62418,35591,8101,4073,379438,65218,76072,33887,2968,27573,212619,288680,68278,72851,150504,217896,6913,121339,22017,35340,51072,43616,75043,31437,10833,81487,4364,22968,41454,106687,85446,19863,109625,149241,524,141850,214404,54376,657,237023,9401,108137,53800,32474,49712,53334,126876,27337,45552,177696,8269,15036,12097,42240,2328,125374,119295,99715,2500,19624,39441,27220,102691,60957,94543,39101,18566,67362,13975,78230,25017,34017,239007,90027,39351,41681,35354,43822,1043,916,58587,141983,94818,38799,75459,41114,67432,16195,36606,59568,22272,126769,31424,68659,12287,134302,257977,5756,207285,95637,47248,117689,19583,77451,22373,12200,54993,117118,34244,29386,34562,53819,71267,64172,77665,49368,7716,59301,25749,45426,194789,17297,2650,1766,32501,45198,20403,20984,6600,14171,94604,19037,5402,29896,9938,59935,109708,88081,145182,44844,39167,352626,164173,35374,45982,6122,154,73419,220487,53834,53601,17992,8609,229321,5610,68098,66815,71012,95069,140968,27396,8957,134489,24656,86659,56598,134852,17316,123838,255436,6613,41610,138033,81452,32023,32396,123687,63398,8693,29712,30407,19296,121188,3551,36099,20032,111948,56624,16547,27453,35916,15378,52039,56849,13489,22214,73177,53097,277349,2157,14029,187886,10260,141743,246460,91880,50869,3788,49486,133566,54950,33120,129337,53768,18333,9525,26902,312251,10297,9020,70759,16647,112432,59260,84609,9818,82766,73569,468,46001,75780,55028,52106,11498,43645,108069,17150,17753,29417,16705,31799,9606,289,122254,115975,8620,6133,255357,56908,14456,133464,43554,79224,11247,29630,160,12756,25464,65960,350428,62521,321796,100359,67358,35169,46172,113128,48988,88868,31094,33266,6847,60887,98188,49659,69117,92977,220228,13947,80181,35103,62170,97351,13475,2440,199768,19498,36597,46971,25234,67806,62881,84717,73648,181966,10488,94149,21550,26655,63436,48375,14405,165650,9621,24439,28043,42735,4490,29963,56674,45373,1934,262446,50855,67098,26898,5261,52696,40644,33900,9440,180286,87162,22940,19704,26936,69769,10254,101759,27406,12243,48e3,73926,113215,54935,5726,192787,4312,106216,9366,11550,52949,23457,212271,277152,133895,108374,6191,96477,29980,218916,58024,54696,40853,91124,65894,91170,65908,252552,6793,29212,15389,44516,122515,52617,35058,9017,103536,39510,49136,19242,130652,662077,74699,47024,31422,8517,73351,24399,13867,128360,4810,4434,61779,111983,61036,17798,110240,59722,102960,39688,10001,23803,23039,176498,56659,44814,134295,17188,77577,74466,226175,102472,154333,63900,111747,18062,41171,79669,32773,408933,42562,28931,30907,107388,43487,2946,240310,23938,24354,319,184983,7927,6488,1422,10790,68809,68209,64775,4361,202,17123,59634,51200,44391,18188,17843,2619,74278,3230,9540,47187,21702,36274,56894,43907,16310,34790,16866,6150,5561,13587,107545,108873,126867,86986,28640,33427,19017,5762,80637,17430,46903,2047,131055,25958,13558,5444,47152,13900,44563,122857,45348,70863,39593,54332,38068,33637,318,40310,143467,18502,24520,11377,62013,28942,27246,28269,83545,17999,59015,90707,30065,15161,34720,1263,37008,2012,6060,98575,92933,5721,299,199555,24578,29223,2985,743,115825,109523,136657,47454,26378,53586,3733,174945,93340,244456,5693,37386,28782,89767,27545,23573,18798,136425,34320,84778,20041,48453,38215,7477,71958,40621,8773,5874,187927,105965,51100,43533,18083,8443,10180,43597,2003,183999,69689,12216,129696,146188,62389,34044,68410,12765,43273,26949,266807,3345,34477,79197,5688,47539,213110,21634,22257,50092,32222,42346,39530,63668,98,134978,74022,5152,59088,174145,37220,9934,9545,118937,5724,87240,19875,15784,40143,23263,87513,181654,285152,37881,263241,4966,43934,10433,186657,6470,74416,225854,25908,142677,246262,32280,6192,75890,45546,143264,135305,29742,47013,77787,11732,126658,8763,37950,21806,57557,113464,89465,108995,164574,23894,22996,23169,15369,23117,17642,130607,40503,36239,280990,44666,9981,40427,147487,26869,168452,32886,32991,46798,240839,15111,70502,65697,88548,44145,28701,48767,31139,206777,35659,181164,166262,14554,171445,31786,66523,76607,17956,6507,31279,90476,116611,167918,6560,1243,115324,80128,41867,55897,187323,37069,32596,189444,145931,13390,105530,65709,26805,6999,55714,41300,22915,68951,22138,21120,22264,10058,19945,33635,56123,99085,10032,5818,6016,46649,57476,35264,94413,112522,262288,93686,83038,14341,23204,28807,66084,77987,6101,126673,7133,38126,5923,122091,170240,97772,46874,215746,43948,41622,3272,55596,8332,146411,251315,13533,8561,81521,115449,48616,175175,2063,186556,3036,134537,75772,29728,82360,22973,186559,86348,89100,38388,82297,45610,2613,87082,9986,177812,57884,23591,47485,42543,33582,44713,74439,257444,252451,31825,35631,38540,33066,5147,13973,4343,51830,70378,22827,26448,95560,36896,241741,48067,203953,298860,61620,20450,3220,67272,6586,107662,100160,108684,6929,57226,4762,7457,1320,40404,77204,99309,62750,208653,59977,44e3,74315,34332,5819,172217,64904,114077,18147,84012,1791,98456,90930,21446,116669,103938,7422,85140,59713,5768,326211,16239,75411,13229,29398,10758,236107,1539,112472,95979,152154,151294,306,21196,38146,10700,6891,84282,109646,56492,40539,6589,119491,51354,30685,140209,136906,29622,73617,49553,70525,51671,166869,139616,74395,37439,49595,45678,11959,33211,86560,52434,9282,62690,112155,130810,5243,108261,99970,265613,72551,80049,6391,33365,90721,66737,69872,87011,1860,9032,112544,60905,37371,89015,140351,19076,850,373531,2802,36725,218795,72062,28990,16550,24614,7815,6187,26336,33373,32162,42791,73555,32062,23386,10244,56392,49442,27076,136262,12412,14883,1134,33675,97153,199281,15608,100152,74072,47942,254301,36451,16026,10687,65067,56708,254030,30290,50490,13864,57941,259331,35588,23485,43486,24869,21620,92971,22072,88645,1048,182050,13343,32452,14825,19509,3325,216938,45740,99716,189082,53740,78245,25609,24311,176777,47340,308354,40669,66085,14102,125339,9225,128709,97207,1271,200933,78439,113451,88975,18324,46521,11819,18570,141756,72512,170020,52754,63550,118515,103073,93330,32736,50499,14722,31600,68452,398867,29316,172786,18417,104924,2606,5670,84818,16288,67106,59580,82929,607401,291,85829,359,15897,35830,50696,65630,52672,22115,356968,29895,40837,231192,34024,38957,26722,406,23335,124952,72068,68804,13268,147101,164740,276569,162596,66943,11569,26654,66358,4777,23229,102127,5848,978,2921,59666,5371,28212,90108,42938,39320,2499,4271,108792,33510,125072,71653,65239,38250,66357,38577,13964,86251,35708,50755,36010,29448,12209,3844,38222,206337,100876,67827,137088,14167,252225,84163,195270,1306,5703,54198,779,46802,22028,51124,86759,70560,113164,35685,162145,45471,34561,422,2611,6464,47486,19223,38246,9191,18331,89942,243642,212364,15893,17518,22617,6409,30046,126182,59716,36560,104428,18846,26592,19458,50793,147333,30826,1388,27647,10922,14495,33545,19269,135828,39727,41601,46931,233379,49169,131130,182112,16276,82381,118209,142445,128310,19672,28740,82907,33436,3118,102206,28723,24819,41937,38854,5157,3881,111491,1142,9776,421673,152241,29309,14961,87854,6054,15424,3796,82656,54996,2108,55367,239450,154525,9643,118103,106041,64601,68549,48707,30266,25772,18740,9462,229669,91798,112152,191327,14493,72828,8175,66636,236474,25817,87351,129027,76653,20422,22983,71240,27846,44661,12399,46158,77704,53101,35032,11072,17300,109294,33638,24408,1895,11241,760,17584,82479,125877,63150,141075,34259,23274,81698,15732,43577,48340,91584,14688,16379,24481,150280,96420,262050,48635,43727,61819,56268,72003,88178,17281,79912,13218,122519,125295,166396,11811,2171,118930,67746,17636,178278,174656,95661,173039,83845,79689,17473,98555,127696,203415,54730,22925,232239,9309,12136,175026,20740,180188,10747,39816,314017,266131,10040,175732,112550,220651,31974,37393,888,23008,86799,4303,64905,148467,75337,251,3284,370102,50264,9835,5438,23655,4481,29851,329,12855,7162,64931,78141,12804,42372,296771,83547,18624,34874,86271,3360,48665,77735,88767,11463,63527,28889,22258,29140,194315,113924,25499,6406,31334,1845,4802,49184,43455,35469,127594,92970,61038,115005,38840,87761,106838,8811,20572,55637,11162,96721,132425,108925,2948,125457,36356,3502,75270,27622,127192,2561,123095,49394,61155,16897,110064,9699,89448,53356,19628,220310,21622,83036,9885,112214,6087,26713,17901,161912,91492,3440,68594,9266,92238,8087,6866,150194,72175,80701,13459,31836,43243,239700,95846,44749,50647,21945,230538,120612,132371,244604,5193,105637,34661,41341,68775,85393,1874,8771,33718,49672,77403,595452,99507,6490,58895,128742,7704,39239,73217,43816,62824,37804,199976,22361,80005,87514,94832,14089,4574,139975,59142,75523,100268,43906,53442,15152,2547,186002,17011,19513,204282,3343,60568,128318,119250,4298,51871,41336,71759,21921,45074,98169,145889,99427,11350,1237,5520,28799,7803,53702,21026,136352,38293,128690,12158,90132,44600,10184,26957,39459,126025,78904,82999,59373,39301,150198,120529,153042,20177,50089,14764,271571,30530,123161,38975,101562,22941,5648,124654,109243,69817,71675,49162,106884,21241,107795,30258,16572,188262,141456,7688,60718,8271,11044,32440,104608,103419,236109,93156,43293,128929,42107,67180,25201,115254,185488,130954,72813,167547,20537,39969,38432,22582,184022,1139,27199,5655,17767,97412,122606,209377,27070,35871,326617,188954,42680,73512,80911,22629,3011,95021,315242,157737,383,41821,41808,19335,27950,15674,25677,110950,35375,76835,59108,57370,35262,16569,160415,37706,78086,32041,49691,137143,9782,172080,50148,77917,6323,10110,69172,17711,21795,59511,76184,135114,31046,132319,59105,157578,20549,80778,57649,158421,65143,4575,72235,21899,10797,92745,34035,106079,80159,4508,78304,25350,75457,46458,32937,25623,47,8531,104751,84953,8138,36508,187199,66310,115274,13253,32461,38536,1916,42007,187160,35055,26325,84394,35963,94216,45590,97782];var Ff=15,Vf=class{log;peerRouting;routingTable;refreshInterval;refreshQueryTimeout;commonPrefixLengthRefreshedAt;refreshTimeoutId;constructor(e,t){let{peerRouting:n,routingTable:o,refreshInterval:i,refreshQueryTimeout:s,logPrefix:a}=t;this.log=e.logger.forComponent(`${a}:routing-table:refresh`),this.peerRouting=n,this.routingTable=o,this.refreshInterval=i??Ry,this.refreshQueryTimeout=s??Dy,this.commonPrefixLengthRefreshedAt=[],this.refreshTable=this.refreshTable.bind(this)}async afterStart(){this.log(`refreshing routing table every ${this.refreshInterval}ms`),this.refreshTable(!0)}async stop(){this.refreshTimeoutId!=null&&clearTimeout(this.refreshTimeoutId)}refreshTable(e=!1){this.log("refreshing routing table");let t=this._maxCommonPrefix(),n=this._getTrackedCommonPrefixLengthsForRefresh(t);this.log(`max common prefix length ${t}`),this.log(`tracked CPLs [ ${n.map(o=>o.toISOString()).join(", ")} ]`),Promise.all(n.map(async(o,i)=>{try{if(await this._refreshCommonPrefixLength(i,o,e),this._numPeersForCpl(t)===0){let s=Math.min(2*(i+1),n.length-1);for(let a=i+1;a<s+1;a++)try{await this._refreshCommonPrefixLength(a,o,e)}catch(c){this.log.error(c)}}}catch(s){this.log.error(s)}})).catch(o=>{this.log.error(o)}).then(()=>{this.refreshTimeoutId=setTimeout(this.refreshTable,this.refreshInterval),this.refreshTimeoutId.unref!=null&&this.refreshTimeoutId.unref()}).catch(o=>{this.log.error(o)})}async _refreshCommonPrefixLength(e,t,n){if(!n&&t.getTime()>Date.now()-this.refreshInterval){this.log("not running refresh for cpl %s as time since last refresh not above interval",e);return}let o=await this._generateRandomPeerId(e);this.log("starting refreshing cpl %s with key %p (routing table size was %s)",e,o,this.routingTable.size);let i=AbortSignal.timeout(this.refreshQueryTimeout);let s=await Df(this.peerRouting.getClosestPeers(o.toMultihash().bytes,{signal:i}));this.log(`found ${s} peers that were close to imaginary peer %p`,o),this.log("finished refreshing cpl %s with key %p (routing table size is now %s)",e,o,this.routingTable.size)}_getTrackedCommonPrefixLengthsForRefresh(e){e>Ff&&(e=Ff);let t=[];for(let n=0;n<=e;n++)t[n]=this.commonPrefixLengthRefreshedAt[n]??new Date;return t}async _generateRandomPeerId(e){if(this.routingTable.kb==null)throw new Error("Routing table not started");if(this.routingTable.kb.localPeer==null)throw new Error("Local peer not set");let t=qt(2),n=(t[1]<<8)+t[0],o=await this._makePeerId(this.routingTable.kb.localPeer.kadId,n,e),i=Ae(o);return ot(i)}async _makePeerId(e,t,n){if(n>Ff)throw new Error(`Cannot generate peer ID for common prefix length greater than ${Ff}`);let s=new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(0,!1)^32768>>n,a=65535<<16-(n+1),c=s&a|t&~a,l=jy[c],u=new ArrayBuffer(34),d=new DataView(u,0,u.byteLength);return d.setUint8(0,ct.code),d.setUint8(1,32),d.setUint32(2,l,!1),new Uint8Array(d.buffer,d.byteOffset,d.byteLength)}_maxCommonPrefix(){let e=0;for(let t of this._prefixLengths())t>e&&(e=t);return e}_numPeersForCpl(e){let t=0;for(let n of this._prefixLengths())n===e&&t++;return t}*_prefixLengths(){if(this.routingTable.kb?.localPeer!=null)for(let{kadId:e}of this.routingTable.kb.toIterable()){let t=cr(this.routingTable.kb.localPeer.kadId,e),n=0;for(let o of t)if(o===0)n++;else break;yield n}}};var $f=class{peerId;providers;peerStore;log;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:add-provider`),this.peerId=e.peerId,this.providers=t.providers,this.peerStore=e.peerStore}async handle(e,t){if(t.key==null||t.key.length===0)throw new fe("Missing key");let n;try{n=X.decode(t.key)}catch{throw new fe("Invalid CID")}(t.providers==null||t.providers.length===0)&&this.log.error("no providers found in message"),this.log("%p asked us, %p to store provider record for for %c",e,this.peerId,n),await Promise.all(t.providers.map(async o=>{let i=Ae(o.id),s=ot(i),a=o.multiaddrs.map(c=>H(c));if(!e.equals(s)){this.log("invalid provider peer %p from %p",o.id,e);return}if(o.multiaddrs.length<1){this.log("no valid addresses for provider %p. Ignore",e);return}this.log.trace("received provider %p for %s (addrs %s)",e,n,a),await this.providers.addProvider(n,s),await this.peerStore.merge(s,{multiaddrs:a})}))}};var Kf=class{peerRouting;peerInfoMapper;peerId;addressManager;log;constructor(e,t){let{peerRouting:n,logPrefix:o}=t;this.log=e.logger.forComponent(`${o}:rpc:handlers:find-node`),this.peerId=e.peerId,this.addressManager=e.addressManager,this.peerRouting=n,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){if(this.log("incoming request from %p for peers closer to %b",e,t.key),t.key==null)throw new fe("Invalid FIND_NODE message received - key was missing");let n=await this.peerRouting.getCloserPeersOffline(t.key,e);ne(this.peerId.toMultihash().bytes,t.key)&&n.push({id:this.peerId,multiaddrs:this.addressManager.getAddresses().map(i=>i.decapsulateCode(Z("p2p").code))});let o={type:be.FIND_NODE,clusterLevel:t.clusterLevel,closer:n.map(this.peerInfoMapper).filter(({multiaddrs:i})=>i.length).map(i=>({id:i.id.toMultihash().bytes,multiaddrs:i.multiaddrs.map(s=>s.bytes)})),providers:[]};return o.closer.length===0&&this.log("could not find any peers closer to %b than %p",t.key,e),o}};var Hf=class{peerId;peerRouting;providers;peerStore;peerInfoMapper;log;constructor(e,t){let{peerRouting:n,providers:o,logPrefix:i}=t;this.log=e.logger.forComponent(`${i}:rpc:handlers:get-providers`),this.peerId=e.peerId,this.peerStore=e.peerStore,this.peerRouting=n,this.providers=o,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){if(t.key==null)throw new fe("Invalid GET_PROVIDERS message received - key was missing");let n;try{n=X.decode(t.key)}catch{throw new fe("Invalid CID")}this.log("%p asking for providers for %s",e,n);let[o,i]=await Promise.all([Li(jt(await this.providers.getProviders(n),async a=>{let c=await this.peerStore.get(a);return{id:c.id,multiaddrs:c.addresses.map(({multiaddr:u})=>u)}})),this.peerRouting.getCloserPeersOffline(t.key,this.peerId)]),s={type:be.GET_PROVIDERS,key:t.key,clusterLevel:t.clusterLevel,closer:i.map(this.peerInfoMapper).filter(({id:a,multiaddrs:c})=>c.length>0).map(a=>({id:a.id.toMultihash().bytes,multiaddrs:a.multiaddrs.map(c=>c.bytes)})),providers:o.map(this.peerInfoMapper).filter(({id:a,multiaddrs:c})=>c.length>0).map(a=>({id:a.id.toMultihash().bytes,multiaddrs:a.multiaddrs.map(c=>c.bytes)}))};return this.log("got %s providers %s closerPeers",s.providers.length,s.closer.length),s}async _getAddresses(e){return[]}};var qf=class{peerStore;datastore;peerRouting;log;datastorePrefix;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:get-value`),this.datastorePrefix=`${t.datastorePrefix}/record`,this.peerStore=e.peerStore,this.datastore=e.datastore,this.peerRouting=t.peerRouting}async handle(e,t){let n=t.key;if(this.log("%p asked for key %b",e,n),n==null||n.length===0)throw new fe("Invalid key");let o={type:be.GET_VALUE,key:n,clusterLevel:t.clusterLevel,closer:[],providers:[]};if(Ky(n)){this.log("is public key");let a=Hy(n),c;try{let l=await this.peerStore.get(a);if(l.id.publicKey==null)throw new Be("No public key found in key book");c=Nt(l.id.publicKey)}catch(l){if(l.name!=="NotFoundError")throw l}if(c!=null)return this.log("returning found public key"),o.record=new St(n,c,new Date).serialize(),o}let[i,s]=await Promise.all([this._checkLocalDatastore(n),this.peerRouting.getCloserPeersOffline(n,e)]);return i!=null&&(this.log("had record for %b in local datastore",n),o.record=i.serialize()),s.length>0&&(this.log("had %s closer peers in routing table",s.length),o.closer=s.map(a=>({id:a.id.toMultihash().bytes,multiaddrs:a.multiaddrs.map(c=>c.bytes)}))),o}async _checkLocalDatastore(e){this.log("checkLocalDatastore looking for %b",e);let t=Wo(this.datastorePrefix,e),n;try{n=await this.datastore.get(t)}catch(i){if(i.name==="NotFoundError")return;throw i}let o=St.deserialize(n);if(o.timeReceived==null||Date.now()-o.timeReceived.getTime()>vy){await this.datastore.delete(t);return}return o}};var zf=class{log;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:ping`)}async handle(e,t){return this.log("ping from %p",e),t}};var Wf=class{components;validators;log;datastorePrefix;constructor(e,t){let{validators:n}=t;this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:rpc:handlers:put-value`),this.datastorePrefix=`${t.datastorePrefix}/record`,this.validators=n}async handle(e,t){let n=t.key;if(this.log("%p asked us to store value for key %b",e,n),t.record==null){let o=`Empty record from: ${e.toString()}`;throw this.log.error(o),new fe(o)}try{let o=St.deserialize(t.record);await aa(this.validators,o),o.timeReceived=new Date;let i=Wo(this.datastorePrefix,o.key);await this.components.datastore.put(i,o.serialize().subarray()),this.log("put record for %b into datastore under key %k",n,i)}catch(o){this.log("did not put record for key %b into datastore %o",n,o)}return t}};var Gf=class{handlers;routingTable;log;metrics;constructor(e,t){this.metrics={operations:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_inbound_rpc_requests_total`),errors:e.metrics?.registerCounterGroup(`${t.metricsPrefix}_inbound_rpc_errors_total`)},this.log=e.logger.forComponent(`${t.logPrefix}:rpc`),this.routingTable=t.routingTable,this.handlers={[be.GET_VALUE.toString()]:new qf(e,t),[be.PUT_VALUE.toString()]:new Wf(e,t),[be.FIND_NODE.toString()]:new Kf(e,t),[be.ADD_PROVIDER.toString()]:new $f(e,t),[be.GET_PROVIDERS.toString()]:new Hf(e,t),[be.PING.toString()]:new zf(e,t)}}async handleMessage(e,t){let n=this.handlers[t.type];if(n==null){this.log.error(`no handler found for message type: ${t.type}`);return}try{return this.metrics.operations?.increment({[t.type]:!0}),await n.handle(e,t)}catch{this.metrics.errors?.increment({[t.type]:!0})}}onIncomingStream(e){let t="unknown";Promise.resolve().then(async()=>{let{stream:n,connection:o}=e,i=o.remotePeer,s=this;await dt(n,a=>Kr(a),async function*(a){for await(let c of a){let l=io.decode(c);t=l.type,s.log("incoming %s from %p",l.type,i);let u=await s.handleMessage(i,l);u!=null&&(yield io.encode(u))}},a=>$r(a),n)}).catch(n=>{this.log.error("error handling %s RPC message from %p - %e",t,e.connection.remotePeer,n)})}};var Qf=class extends ge{log;components;protocol;running;registrarId;constructor(e,t){super();let{protocol:n,logPrefix:o}=t;this.components=e,this.log=e.logger.forComponent(`${o}:topology-listener`),this.running=!1,this.protocol=n}isStarted(){return this.running}async start(){this.running||(this.running=!0,this.registrarId=await this.components.registrar.register(this.protocol,{onConnect:e=>{this.log("observed peer %p with protocol %s",e,this.protocol),this.dispatchEvent(new CustomEvent("peer",{detail:e}))}}))}async stop(){this.running=!1,this.registrarId!=null&&(this.components.registrar.unregister(this.registrarId),this.registrarId=void 0)}};var _3=class{dht;constructor(e){this.dht=e}async provide(e,t={}){await Rt(this.dht.provide(e,t))}async cancelReprovide(e){await this.dht.cancelReprovide(e)}async*findProviders(e,t={}){for await(let n of this.dht.findProviders(e,t))n.name==="PROVIDER"&&(yield*n.providers)}async put(e,t,n){await Rt(this.dht.put(e,t,n))}async get(e,t){for await(let n of this.dht.get(e,t))if(n.name==="VALUE")return n.value;throw new Be("Could not find value for key")}},C3=class{dht;constructor(e){this.dht=e}async findPeer(e,t={}){for await(let n of this.dht.findPeer(e,t))if(n.name==="FINAL_PEER")return n.peer;throw new Be("Peer not found")}async*getClosestPeers(e,t={}){for await(let n of this.dht.getClosestPeers(e,t))n.name==="FINAL_PEER"&&(yield n.peer)}},BC=32,OC=64,Yf=class extends ge{protocol;routingTable;providers;network;peerRouting;components;log;running;kBucketSize;clientMode;validators;selectors;queryManager;contentFetching;contentRouting;routingTableRefresh;rpc;topologyListener;querySelf;maxInboundStreams;maxOutboundStreams;dhtContentRouting;dhtPeerRouting;peerInfoMapper;reprovider;constructor(e,t={}){super();let n=t.logPrefix??"libp2p:kad-dht",o=t.datastorePrefix??"/dht",i=t.metricsPrefix??"libp2p_kad_dht",s={queries:e.metrics?.registerMetricGroup(`${i}_operations_total`,{label:"operation"}),errors:e.metrics?.registerCounterGroup(`${i}_operation_errors_total`,{label:"operation"}),queryTime:e.metrics?.registerMetricGroup(`${i}_operation_time_seconds`,{label:"operation"}),errorTime:e.metrics?.registerMetricGroup(`${i}_operation_error_time_seconds`,{label:"operation"})};this.running=!1,this.components=e,this.log=e.logger.forComponent(n),this.protocol=t.protocol??Ey,this.kBucketSize=t.kBucketSize??20,this.clientMode=t.clientMode??!0,this.maxInboundStreams=t.maxInboundStreams??BC,this.maxOutboundStreams=t.maxOutboundStreams??OC,this.peerInfoMapper=t.peerInfoMapper??Vy;let a=Si();this.providers=new Pf(e,{...t.providers,logPrefix:n,datastorePrefix:o,lock:a}),this.validators={...Fy,...t.validators},this.selectors={...Uy,...t.selectors},this.network=new Cf(e,{protocol:this.protocol,logPrefix:n,metricsPrefix:i}),this.routingTable=new Mf(e,{kBucketSize:t.kBucketSize,pingOldContactTimeout:t.pingOldContactTimeout,pingOldContactConcurrency:t.pingOldContactConcurrency,pingOldContactMaxQueueSize:t.pingOldContactMaxQueueSize,pingNewContactTimeout:t.pingNewContactTimeout,pingNewContactConcurrency:t.pingNewContactConcurrency,pingNewContactMaxQueueSize:t.pingNewContactMaxQueueSize,protocol:this.protocol,logPrefix:n,metricsPrefix:i,prefixLength:t.prefixLength,splitThreshold:t.kBucketSplitThreshold,network:this.network});let c=J();t.allowQueryWithZeroPeers===!0&&c.resolve(),this.queryManager=new Rf(e,{disjointPaths:Math.ceil(this.kBucketSize/2),logPrefix:n,metricsPrefix:i,initialQuerySelfHasRun:c,routingTable:this.routingTable}),this.peerRouting=new kf(e,{routingTable:this.routingTable,network:this.network,validators:this.validators,queryManager:this.queryManager,logPrefix:n}),this.contentFetching=new Tf(e,{validators:this.validators,selectors:this.selectors,peerRouting:this.peerRouting,queryManager:this.queryManager,network:this.network,logPrefix:n,datastorePrefix:o}),this.contentRouting=new _f(e,{network:this.network,peerRouting:this.peerRouting,queryManager:this.queryManager,routingTable:this.routingTable,providers:this.providers,logPrefix:n}),this.routingTableRefresh=new Vf(e,{peerRouting:this.peerRouting,routingTable:this.routingTable,logPrefix:n}),this.rpc=new Gf(e,{routingTable:this.routingTable,providers:this.providers,peerRouting:this.peerRouting,validators:this.validators,logPrefix:n,metricsPrefix:i,datastorePrefix:o,peerInfoMapper:this.peerInfoMapper}),this.topologyListener=new Qf(e,{protocol:this.protocol,logPrefix:n}),this.querySelf=new Lf(e,{peerRouting:this.peerRouting,interval:t.querySelfInterval,initialInterval:t.initialQuerySelfInterval,logPrefix:n,initialQuerySelfHasRun:c,routingTable:this.routingTable,operationMetrics:s}),this.reprovider=new Nf(e,{...t.reprovide,logPrefix:n,metricsPrefix:i,datastorePrefix:o,contentRouting:this.contentRouting,lock:a,operationMetrics:s}),this.network.addEventListener("peer",l=>{let u=l.detail;this.onPeerConnect(u).catch(d=>{this.log.error("could not add %p to routing table",u.id,d)}),this.dispatchEvent(new CustomEvent("peer",{detail:u}))}),this.topologyListener.addEventListener("peer",l=>{let u=l.detail;Promise.resolve().then(async()=>{let d=await this.components.peerStore.get(u),f={id:u,multiaddrs:d.addresses.map(({multiaddr:h})=>h),protocols:d.protocols};await this.onPeerConnect(f)}).catch(d=>{this.log.error("could not add %p to routing table - %e",u,d)})}),this.dhtPeerRouting=new C3(this),this.dhtContentRouting=new _3(this),t.clientMode==null&&e.events.addEventListener("self:peer:update",l=>{this.log("received update of self-peer info"),Promise.resolve().then(async()=>{let u=l.detail.peer.addresses.some(({multiaddr:f})=>qy(f)),d=this.getMode();u&&d==="client"?await this.setMode("server"):d==="server"&&!u&&await this.setMode("client")}).catch(u=>{this.log.error("error setting dht server mode",u)})}),this.get=$i(this.get.bind(this),s,"GET_VALUE"),this.findProviders=$i(this.findProviders.bind(this),s,"FIND_PROVIDERS"),this.findPeer=$i(this.findPeer.bind(this),s,"FIND_PEER"),this.getClosestPeers=$i(this.getClosestPeers.bind(this),s,"GET_CLOSEST_PEERS"),this.provide=$i(this.provide.bind(this),s,"PROVIDE"),this.put=$i(this.put.bind(this),s,"PUT_VALUE")}[Symbol.toStringTag]="@libp2p/kad-dht";[Se]=["@libp2p/content-routing","@libp2p/peer-routing","@libp2p/peer-discovery"];[dr]=["@libp2p/identify"];get[pn](){return this.dhtContentRouting}get[mn](){return this.dhtPeerRouting}get[jo](){return this}async onPeerConnect(e){if(this.log.trace("peer %p connected",e.id),e=this.peerInfoMapper(e),e.multiaddrs.length===0){this.log.trace("ignoring %p as there were no valid addresses in %s after filtering",e.id,e.multiaddrs.map(t=>t.toString()));return}try{await this.routingTable.add(e.id)}catch(t){this.log.error("could not add %p to routing table",e.id,t)}}isStarted(){return this.running}getMode(){return this.clientMode?"client":"server"}async setMode(e,t=!1){if(e===this.getMode()&&!t){this.log("already in %s mode",e);return}if(await this.components.registrar.unhandle(this.protocol),e===this.getMode()&&!t){this.log("already in %s mode",e);return}e==="client"?(this.log("enabling client mode while in %s mode",this.getMode()),this.clientMode=!0):(this.log("enabling server mode while in %s mode",this.getMode()),this.clientMode=!1,await this.components.registrar.handle(this.protocol,this.rpc.onIncomingStream.bind(this.rpc),{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}))}async start(){this.running||(this.running=!0,await this.setMode(this.clientMode?"client":"server",!0),await gt(this.routingTable,this.queryManager,this.network,this.topologyListener,this.routingTableRefresh,this.reprovider),await gt(this.querySelf))}async stop(){this.running=!1,await kt(this.querySelf,this.queryManager,this.network,this.routingTable,this.routingTableRefresh,this.topologyListener,this.reprovider)}async*put(e,t,n={}){yield*this.contentFetching.put(e,t,n)}async*get(e,t={}){yield*this.contentFetching.get(e,t)}async*provide(e,t={}){yield*this.contentRouting.provide(e,this.components.addressManager.getAddresses(),t)}async cancelReprovide(e){await this.providers.removeProvider(e,this.components.peerId)}async*findProviders(e,t={}){yield*this.contentRouting.findProviders(e,t)}async*findPeer(e,t={}){yield*this.peerRouting.findPeer(e,t)}async*getClosestPeers(e,t={}){yield*this.peerRouting.getClosestPeers(e,t)}async refreshRoutingTable(){this.routingTableRefresh.refreshTable(!0)}};var Uf;(function(r){r[r.SEND_QUERY=0]="SEND_QUERY",r[r.PEER_RESPONSE=1]="PEER_RESPONSE",r[r.FINAL_PEER=2]="FINAL_PEER",r[r.QUERY_ERROR=3]="QUERY_ERROR",r[r.PROVIDER=4]="PROVIDER",r[r.VALUE=5]="VALUE",r[r.ADD_PEER=6]="ADD_PEER",r[r.DIAL_PEER=7]="DIAL_PEER"})(Uf||(Uf={}));function Zy(r={}){return e=>new Yf(e,r)}var aw=Mr(sw(),1),da=aw.default;var xw=Mr(gw(),1);var fa={};Qe(fa,{create:()=>ek,derivedEmptyPasswordKey:()=>Zf});var Zf={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function ek(r){let e=r?.algorithm??"AES-GCM",t=r?.keyLength??16,n=r?.nonceLength??12,o=r?.digest??"SHA-256",i=r?.saltLength??16,s=r?.iterations??32767,a=rr.get();t*=8;async function c(d,f){let h=a.getRandomValues(new Uint8Array(i)),p=a.getRandomValues(new Uint8Array(n)),g={name:e,iv:p};typeof f=="string"&&(f=N(f));let m;if(f.length===0){m=await a.subtle.importKey("jwk",Zf,{name:"AES-GCM"},!0,["encrypt"]);try{let x={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},w=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);m=await a.subtle.deriveKey(x,w,{name:e,length:t},!0,["encrypt"])}catch{m=await a.subtle.importKey("jwk",Zf,{name:"AES-GCM"},!0,["encrypt"])}}else{let x={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},w=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);m=await a.subtle.deriveKey(x,w,{name:e,length:t},!0,["encrypt"])}let y=await a.subtle.encrypt(g,m,d);return Pe([h,g.iv,new Uint8Array(y)])}async function l(d,f){let h=d.subarray(0,i),p=d.subarray(i,i+n),g=d.subarray(i+n),m={name:e,iv:p};typeof f=="string"&&(f=N(f));let y;if(f.length===0)try{let w={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},I=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(w,I,{name:e,length:t},!0,["decrypt"])}catch{y=await a.subtle.importKey("jwk",Zf,{name:"AES-GCM"},!0,["decrypt"])}else{let w={name:"PBKDF2",salt:h,iterations:s,hash:{name:o}},I=await a.subtle.importKey("raw",f,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(w,I,{name:e,length:t},!0,["decrypt"])}let x=await a.subtle.decrypt(m,y,g);return new Uint8Array(x)}return{encrypt:c,decrypt:l}}async function P3(r,e){let n=await fa.create().encrypt(r,e);return nt.encode(n)}async function R3(r,e,t){if(r.type==="RSA")return nk(r,e,t);if(r.type==="Ed25519")return tk(r,e,t);if(r.type==="secp256k1")return rk(r,e,t);throw new Vr}async function tk(r,e,t="libp2p-key"){if(t==="libp2p-key")return P3(_s(r),e);throw new _(`export format '${t}' is not supported`)}async function rk(r,e,t="libp2p-key"){if(t==="libp2p-key")return P3(_s(r),e);throw new _("Export format is not supported")}async function nk(r,e,t="pkcs-8"){if(t==="pkcs-8")return ok(r,e);if(t==="libp2p-key")return P3(_s(r),e);throw new _("Export format is not supported")}async function ok(r,e){let t=rr.get(),o=new ut({value:[new et({value:0}),new ut({value:[new _r({value:"1.2.840.113549.1.1.1"}),new Kn]}),new Hn({valueHex:r.raw})]}).toBER(),i=new Uint8Array(o,0,o.byteLength),s=qt(16),a=await ju(xo,e,s,{c:1e4,dkLen:32}),c=qt(16),l=await t.subtle.importKey("raw",a,"AES-CBC",!1,["encrypt"]),u=await t.subtle.encrypt({name:"AES-CBC",iv:c},l,i),d=new ut({value:[new Hn({valueHex:s}),new et({value:1e4}),new et({value:32}),new ut({value:[new _r({value:"1.2.840.113549.2.11"}),new Kn]})]}),f=new ut({value:[new _r({value:"1.2.840.113549.1.5.13"}),new ut({value:[new ut({value:[new _r({value:"1.2.840.113549.1.5.12"}),d]}),new ut({value:[new _r({value:"2.16.840.1.101.3.4.1.42"}),new Hn({valueHex:c})]})]})]}),p=new ut({value:[f,new Hn({valueHex:u})]}).toBER(),g=new Uint8Array(p,0,p.byteLength);return["-----BEGIN ENCRYPTED PRIVATE KEY-----",...U(g,"base64pad").split(/(.{64})/).filter(Boolean),"-----END ENCRYPTED PRIVATE KEY-----"].join(`
19
- `)}async function D3(r,e){try{let t=await ik(r,e);return Hg(t)}catch{}if(!r.includes("BEGIN"))throw new _("Encrypted key was not a libp2p-key or a PEM file");return sk(r,e)}async function ik(r,e){let t=nt.decode(r);return fa.create().decrypt(t,e)}async function sk(r,e){let t=rr.get(),n;if(r.includes("-----BEGIN ENCRYPTED PRIVATE KEY-----")){let i=N(r.replace("-----BEGIN ENCRYPTED PRIVATE KEY-----","").replace("-----END ENCRYPTED PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=gi(i),{iv:a,salt:c,iterations:l,keySize:u,cipherText:d}=ak(s),f=await ju(xo,e,c,{c:l,dkLen:u}),h=await t.subtle.importKey("raw",f,"AES-CBC",!1,["decrypt"]),p=Zc(await t.subtle.decrypt({name:"AES-CBC",iv:a},h,d)),{result:g}=gi(p);n=bw(g)}else if(r.includes("-----BEGIN PRIVATE KEY-----")){let i=N(r.replace("-----BEGIN PRIVATE KEY-----","").replace("-----END PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=gi(i);n=bw(s)}else throw new _("Could not parse private key from PEM data");let o=qg(n);if(o.type!=="RSA")throw new _("Could not parse RSA private key from PEM data");return o}function ak(r){let e=r.valueBlock.value[0];if(e.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.13")throw new _("Only pkcs5PBES2 encrypted private keys are supported");let n=e.valueBlock.value[1].valueBlock.value[0];if(n.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.12")throw new _("Only pkcs5PBKDF2 key derivation functions are supported");let i=n.valueBlock.value[1],s=Zc(i.valueBlock.value[0].getValue()),a=1e4,c=32;if(i.valueBlock.value.length===3)a=Number(i.valueBlock.value[1].toBigInt()),c=Number(i.valueBlock.value[2].toBigInt());else if(i.valueBlock.value.length===2)throw new _("Could not derive key size and iterations from PEM file - please use @libp2p/rsa to re-import your key");let l=e.valueBlock.value[1].valueBlock.value[1],u=l.valueBlock.value[0].toString();if(u!=="OBJECT IDENTIFIER : 1.2.840.113549.3.7"){if(u!=="OBJECT IDENTIFIER : 1.3.14.3.2.7"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.2"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.22"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.42")throw new _("Only AES-CBC encryption schemes are supported")}}}}let d=Zc(l.valueBlock.value[1].getValue());return{cipherText:Zc(r.valueBlock.value[1].getValue()),salt:s,iterations:a,keySize:c,iv:d}}function bw(r){return Zc(r.valueBlock.value[2].getValue())}function Zc(r){return new Uint8Array(r,0,r.byteLength)}var ck="/pkcs8/",N3="/info/",Jc=new WeakMap,Ki={minKeyLength:112/8,minSaltLength:128/8,minIterationCount:1e3},L3={dek:{keyLength:512/8,iterationCount:1e4,salt:"you should override this value with a crypto secure random number",hash:"sha2-512"}};function ha(r){return r==null||typeof r!="string"?!1:r===(0,xw.default)(r.trim())&&r.length>0}async function It(){let t=Math.random()*800+200;await new Promise(n=>setTimeout(n,t))}function Hi(r){return new De(ck+r)}function pa(r){return new De(N3+r)}async function lk(r){let e=_s(r),t=await ct.digest(e);return ve.encode(t.bytes).substring(1)}var Jf=class{components;init;log;constructor(e,t){if(this.components=e,this.log=e.logger.forComponent("libp2p:keychain"),this.init=da(L3,t),this.init.pass!=null&&this.init.pass?.length<20)throw new Error("pass must be least 20 characters");if(this.init.dek?.keyLength!=null&&this.init.dek.keyLength<Ki.minKeyLength)throw new Error(`dek.keyLength must be least ${Ki.minKeyLength} bytes`);if(this.init.dek?.salt?.length!=null&&this.init.dek.salt.length<Ki.minSaltLength)throw new Error(`dek.saltLength must be least ${Ki.minSaltLength} bytes`);if(this.init.dek?.iterationCount!=null&&this.init.dek.iterationCount<Ki.minIterationCount)throw new Error(`dek.iterationCount must be least ${Ki.minIterationCount}`);let n=this.init.pass!=null&&this.init.dek?.salt!=null?ic(this.init.pass,this.init.dek?.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";Jc.set(this,{dek:n})}[Symbol.toStringTag]="@libp2p/keychain";[Se]=["@libp2p/keychain"];static generateOptions(){let e=Object.assign({},L3),t=Math.ceil(Ki.minSaltLength/3)*3;return e.dek.salt=U(qt(t),"base64"),e}static get options(){return L3}async findKeyByName(e){if(!ha(e))throw await It(),new _(`Invalid key name '${e}'`);let t=pa(e);try{let n=await this.components.datastore.get(t);return JSON.parse(U(n))}catch(n){throw await It(),this.log.error(n),new Be(`Key '${e}' does not exist.`)}}async findKeyById(e){try{let t={prefix:N3};for await(let n of this.components.datastore.query(t)){let o=JSON.parse(U(n.value));if(o.id===e)return o}throw new _(`Key with id '${e}' does not exist.`)}catch(t){throw await It(),t}}async importKey(e,t){if(!ha(e))throw await It(),new _(`Invalid key name '${e}'`);if(t==null)throw await It(),new _("Key is required");let n=Hi(e);if(await this.components.datastore.has(n))throw await It(),new _(`Key '${e}' already exists`);let i,s;try{i=await lk(t);let l=Jc.get(this);if(l==null)throw new _("dek missing");let u=l.dek;s=await R3(t,u,t.type==="RSA"?"pkcs-8":"libp2p-key")}catch(l){throw await It(),l}let a={name:e,id:i},c=this.components.datastore.batch();return c.put(n,N(s)),c.put(pa(e),N(JSON.stringify(a))),await c.commit(),a}async exportKey(e){if(!ha(e))throw await It(),new _(`Invalid key name '${e}'`);let t=Hi(e);try{let n=await this.components.datastore.get(t),o=U(n),i=Jc.get(this);if(i==null)throw new _("dek missing");let s=i.dek;return await D3(o,s)}catch(n){throw await It(),n}}async removeKey(e){if(!ha(e)||e==="self")throw await It(),new _(`Invalid key name '${e}'`);let t=Hi(e),n=await this.findKeyByName(e),o=this.components.datastore.batch();return o.delete(t),o.delete(pa(e)),await o.commit(),n}async listKeys(){let e={prefix:N3},t=[];for await(let n of this.components.datastore.query(e))t.push(JSON.parse(U(n.value)));return t}async renameKey(e,t){if(!ha(e)||e==="self")throw await It(),new _(`Invalid old key name '${e}'`);if(!ha(t)||t==="self")throw await It(),new _(`Invalid new key name '${t}'`);let n=Hi(e),o=Hi(t),i=pa(e),s=pa(t);if(await this.components.datastore.has(o))throw await It(),new _(`Key '${t}' already exists`);try{let c=await this.components.datastore.get(n),l=await this.components.datastore.get(i),u=JSON.parse(U(l));u.name=t;let d=this.components.datastore.batch();return d.put(o,c),d.put(s,N(JSON.stringify(u))),d.delete(n),d.delete(i),await d.commit(),u}catch(c){throw await It(),c}}async rotateKeychainPass(e,t){if(typeof e!="string")throw await It(),new _(`Invalid old pass type '${typeof e}'`);if(typeof t!="string")throw await It(),new _(`Invalid new pass type '${typeof t}'`);if(t.length<20)throw await It(),new _(`Invalid pass length ${t.length}`);this.log("recreating keychain");let n=Jc.get(this);if(n==null)throw new _("dek missing");let o=n.dek;this.init.pass=t;let i=t!=null&&this.init.dek?.salt!=null?ic(t,this.init.dek.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";Jc.set(this,{dek:i});let s=await this.listKeys();for(let a of s){let c=await this.components.datastore.get(Hi(a.name)),l=U(c),u=await D3(l,o),d=i.toString(),f=await R3(u,d,u.type==="RSA"?"pkcs-8":"libp2p-key"),h=this.components.datastore.batch(),p={name:a.name,id:a.id};h.put(Hi(a.name),N(f)),h.put(pa(a.name),N(JSON.stringify(p))),await h.commit()}this.log("keychain reconstructed")}};function eh(r={}){return e=>new Jf(e,r)}var ma=class{memoryStorage;points;duration;blockDuration;execEvenly;execEvenlyMinDelayMs;keyPrefix;constructor(e={}){this.points=e.points??4,this.duration=e.duration??1,this.blockDuration=e.blockDuration??0,this.execEvenly=e.execEvenly??!1,this.execEvenlyMinDelayMs=e.execEvenlyMinDelayMs??this.duration*1e3/this.points,this.keyPrefix=e.keyPrefix??"rlflx",this.memoryStorage=new B3}async consume(e,t=1,n={}){let o=this.getKey(e),i=this._getKeySecDuration(n),s=this.memoryStorage.incrby(o,t,i);if(s.remainingPoints=Math.max(this.points-s.consumedPoints,0),s.consumedPoints>this.points)throw this.blockDuration>0&&s.consumedPoints<=this.points+t&&(s=this.memoryStorage.set(o,s.consumedPoints,this.blockDuration)),new Sl("Rate limit exceeded",s);if(this.execEvenly&&s.msBeforeNext>0&&!s.isFirstInDuration){let a=Math.ceil(s.msBeforeNext/(s.remainingPoints+2));a<this.execEvenlyMinDelayMs&&(a=s.consumedPoints*this.execEvenlyMinDelayMs),await cf(a)}return s}penalty(e,t=1,n={}){let o=this.getKey(e),i=this._getKeySecDuration(n),s=this.memoryStorage.incrby(o,t,i);return s.remainingPoints=Math.max(this.points-s.consumedPoints,0),s}reward(e,t=1,n={}){let o=this.getKey(e),i=this._getKeySecDuration(n),s=this.memoryStorage.incrby(o,-t,i);return s.remainingPoints=Math.max(this.points-s.consumedPoints,0),s}block(e,t){let n=t*1e3,o=this.points+1;return this.memoryStorage.set(this.getKey(e),o,t),{remainingPoints:0,msBeforeNext:n===0?-1:n,consumedPoints:o,isFirstInDuration:!1}}set(e,t,n=0){let o=(n>=0?n:this.duration)*1e3;return this.memoryStorage.set(this.getKey(e),t,n),{remainingPoints:0,msBeforeNext:o===0?-1:o,consumedPoints:t,isFirstInDuration:!1}}get(e){let t=this.memoryStorage.get(this.getKey(e));return t!=null&&(t.remainingPoints=Math.max(this.points-t.consumedPoints,0)),t}delete(e){this.memoryStorage.delete(this.getKey(e))}_getKeySecDuration(e){return e?.customDuration!=null&&e.customDuration>=0?e.customDuration:this.duration}getKey(e){return this.keyPrefix.length>0?`${this.keyPrefix}:${e}`:e}parseKey(e){return e.substring(this.keyPrefix.length)}},B3=class{storage;constructor(){this.storage=new Map}incrby(e,t,n){let o=this.storage.get(e);if(o!=null){let i=o.expiresAt!=null?o.expiresAt.getTime()-new Date().getTime():-1;return o.expiresAt==null||i>0?(o.value+=t,{remainingPoints:0,msBeforeNext:i,consumedPoints:o.value,isFirstInDuration:!1}):this.set(e,t,n)}return this.set(e,t,n)}set(e,t,n){let o=n*1e3,i=this.storage.get(e);i!=null&&clearTimeout(i.timeoutId);let s={value:t,expiresAt:o>0?new Date(Date.now()+o):void 0};return this.storage.set(e,s),o>0&&(s.timeoutId=setTimeout(()=>{this.storage.delete(e)},o),s.timeoutId.unref!=null&&s.timeoutId.unref()),{remainingPoints:0,msBeforeNext:o===0?-1:o,consumedPoints:s.value,isFirstInDuration:!0}}get(e){let t=this.storage.get(e);if(t!=null)return{remainingPoints:0,msBeforeNext:t.expiresAt!=null?t.expiresAt.getTime()-new Date().getTime():-1,consumedPoints:t.value,isFirstInDuration:!1}}delete(e){let t=this.storage.get(e);return t!=null?(t.timeoutId!=null&&clearTimeout(t.timeoutId),this.storage.delete(e),!0):!1}};var we;(function(r){r[r.NEW_STREAM=0]="NEW_STREAM",r[r.MESSAGE_RECEIVER=1]="MESSAGE_RECEIVER",r[r.MESSAGE_INITIATOR=2]="MESSAGE_INITIATOR",r[r.CLOSE_RECEIVER=3]="CLOSE_RECEIVER",r[r.CLOSE_INITIATOR=4]="CLOSE_INITIATOR",r[r.RESET_RECEIVER=5]="RESET_RECEIVER",r[r.RESET_INITIATOR=6]="RESET_INITIATOR"})(we||(we={}));var el=Object.freeze({0:"NEW_STREAM",1:"MESSAGE_RECEIVER",2:"MESSAGE_INITIATOR",3:"CLOSE_RECEIVER",4:"CLOSE_INITIATOR",5:"RESET_RECEIVER",6:"RESET_INITIATOR"}),O3=Object.freeze({NEW_STREAM:we.NEW_STREAM,MESSAGE:we.MESSAGE_INITIATOR,CLOSE:we.CLOSE_INITIATOR,RESET:we.RESET_INITIATOR}),vw=Object.freeze({MESSAGE:we.MESSAGE_RECEIVER,CLOSE:we.CLOSE_RECEIVER,RESET:we.RESET_RECEIVER});var M3=1<<20,uk=4<<20,th=class{_buffer;_headerInfo;_maxMessageSize;_maxUnprocessedMessageQueueSize;constructor(e=M3,t=uk){this._buffer=new ue,this._headerInfo=null,this._maxMessageSize=e,this._maxUnprocessedMessageQueueSize=t}write(e){if(e==null||e.length===0)return[];if(this._buffer.append(e),this._buffer.byteLength>this._maxUnprocessedMessageQueueSize)throw new fe("Unprocessed message queue size too large!");let t=[];for(;this._buffer.length!==0;){if(this._headerInfo==null)try{this._headerInfo=this._decodeHeader(this._buffer)}catch(l){if(l.name==="InvalidMessageError")throw l;break}let{id:n,type:o,length:i,offset:s}=this._headerInfo;if(this._buffer.length-s<i)break;let c={id:n,type:o};(o===we.NEW_STREAM||o===we.MESSAGE_INITIATOR||o===we.MESSAGE_RECEIVER)&&(c.data=this._buffer.sublist(s,s+i)),t.push(c),this._buffer.consume(s+i),this._headerInfo=null}return t}_decodeHeader(e){let{value:t,offset:n}=Sw(e),{value:o,offset:i}=Sw(e,n),s=t&7;if(el[s]==null)throw new Error(`Invalid type received: ${s}`);if(o>this._maxMessageSize)throw new fe("Message size too large");return{id:t>>3,type:s,offset:n+i,length:o}}},dk=128,Ew=127;function Sw(r,e=0){let t=0,n=0,o=e,i,s=r.length;do{if(o>=s||n>49)throw e=0,new RangeError("Could not decode varint");i=r.get(o++),t+=n<28?(i&Ew)<<n:(i&Ew)*Math.pow(2,n),n+=7}while(i>=dk);return e=o-e,{value:t,offset:e}}var U3=10*1024,F3=class{_pool;_poolOffset;constructor(){this._pool=We(U3),this._poolOffset=0}write(e,t){let n=this._pool,o=this._poolOffset;$e(e.id<<3|e.type,n,o),o+=pe(e.id<<3|e.type),(e.type===we.NEW_STREAM||e.type===we.MESSAGE_INITIATOR||e.type===we.MESSAGE_RECEIVER)&&e.data!=null?($e(e.data.length,n,o),o+=pe(e.data.length)):($e(0,n,o),o+=pe(0));let i=n.subarray(this._poolOffset,o);U3-o<100?(this._pool=We(U3),this._poolOffset=0):this._poolOffset=o,t.append(i),(e.type===we.NEW_STREAM||e.type===we.MESSAGE_INITIATOR||e.type===we.MESSAGE_RECEIVER)&&e.data!=null&&t.append(e.data)}},fk=new F3;async function*Aw(r){for await(let e of r){let t=new ue;fk.write(e,t),yield t}}var rh=class extends Error{constructor(e="Stream input buffer error"){super(e),this.name="StreamInputBufferError"}};var V3=class extends Vo{name;streamId;send;types;maxDataSize;constructor(e){super(e),this.types=e.direction==="outbound"?O3:vw,this.send=e.send,this.name=e.name,this.streamId=e.streamId,this.maxDataSize=e.maxDataSize}async sendNewStream(){await this.send({id:this.streamId,type:O3.NEW_STREAM,data:new ue(N(this.name))})}async sendData(e){for(e=e.sublist();e.byteLength>0;){let t=Math.min(e.byteLength,this.maxDataSize);await this.send({id:this.streamId,type:this.types.MESSAGE,data:e.sublist(0,t)}),e.consume(t)}}async sendReset(){await this.send({id:this.streamId,type:this.types.RESET})}async sendCloseWrite(){await this.send({id:this.streamId,type:this.types.CLOSE})}async sendCloseRead(){}};function Iw(r){let{id:e,name:t,send:n,onEnd:o,type:i="initiator",maxMsgSize:s=M3}=r;return new V3({id:i==="initiator"?`i${e}`:`r${e}`,streamId:e,name:`${t??e}`,direction:i==="initiator"?"outbound":"inbound",maxDataSize:s,onEnd:o,send:n,log:r.logger.forComponent(`libp2p:mplex:stream:${i}:${e}`)})}var hk=1024,pk=1024,mk=1024*1024*4,gk=5,yk=500;function Tw(r){let e={...r,type:`${el[r.type]} (${r.type})`};return r.type===we.NEW_STREAM&&(e.data=U(r.data instanceof Uint8Array?r.data:r.data.subarray())),(r.type===we.MESSAGE_INITIATOR||r.type===we.MESSAGE_RECEIVER)&&(e.data=U(r.data instanceof Uint8Array?r.data:r.data.subarray(),"base16")),e}var nh=class{protocol="/mplex/6.7.0";sink;source;log;_streamId;_streams;_init;_source;closeController;rateLimiter;closeTimeout;logger;constructor(e,t){t=t??{},this.log=e.logger.forComponent("libp2p:mplex"),this.logger=e.logger,this._streamId=0,this._streams={initiators:new Map,receivers:new Map},this._init=t,this.closeTimeout=t.closeTimeout??yk,this.sink=this._createSink(),this._source=Pt({objectMode:!0,onEnd:()=>{for(let n of this._streams.initiators.values())n.destroy();for(let n of this._streams.receivers.values())n.destroy()}}),this.source=dt(this._source,n=>Aw(n)),this.closeController=new AbortController,this.rateLimiter=new ma({points:t.disconnectThreshold??gk,duration:1})}get streams(){let e=[];for(let t of this._streams.initiators.values())e.push(t);for(let t of this._streams.receivers.values())e.push(t);return e}newStream(e){if(this.closeController.signal.aborted)throw new gn("Muxer already closed");let t=this._streamId++;e=e==null?t.toString():e.toString();let n=this._streams.initiators;return this._newStream({id:t,name:e,type:"initiator",registry:n})}async close(e){if(this.closeController.signal.aborted)return;let t=e?.signal??AbortSignal.timeout(this.closeTimeout);try{await Promise.all(this.streams.map(async n=>n.close({signal:t}))),this._source.end(),await this._source.onEmpty({signal:t}),this.closeController.abort()}catch(n){this.abort(n)}}abort(e){this.closeController.signal.aborted||(this.streams.forEach(t=>{t.abort(e)}),this.closeController.abort(e))}_newReceiverStream(e){let{id:t,name:n}=e,o=this._streams.receivers;return this._newStream({id:t,name:n,type:"receiver",registry:o})}_newStream(e){let{id:t,name:n,type:o,registry:i}=e;if(this.log("new %s stream %s",o,t),o==="initiator"&&this._streams.initiators.size===(this._init.maxOutboundStreams??pk))throw new fo("Too many outbound streams open");if(i.has(t))throw new Error(`${o} stream ${t} already exists!`);let c=Iw({id:t,name:n,send:async l=>{this.log.enabled&&this.log.trace("%s stream %s send",o,t,Tw(l)),this._source.push(l)},type:o,onEnd:()=>{this.log("%s stream with id %s and protocol %s ended",o,t,c.protocol),i.delete(t),this._init.onStreamEnd!=null&&this._init.onStreamEnd(c)},maxMsgSize:this._init.maxMsgSize,logger:this.logger});return i.set(t,c),c}_createSink(){return async t=>{let n=()=>{V1(t,this.log)};this.closeController.signal.addEventListener("abort",n);try{let o=new th(this._init.maxMsgSize,this._init.maxUnprocessedMessageQueueSize);for await(let i of t)for(let s of o.write(i))await this._handleIncoming(s);this._source.end()}catch(o){this.log("error in sink",o),this._source.end(o)}finally{this.closeController.signal.removeEventListener("abort",n)}}}async _handleIncoming(e){let{id:t,type:n}=e;if(this.log.enabled&&this.log.trace("incoming message",Tw(e)),e.type===we.NEW_STREAM){if(this._streams.receivers.size===(this._init.maxInboundStreams??hk)){this.log("too many inbound streams open"),this._source.push({id:t,type:we.RESET_RECEIVER});try{await this.rateLimiter.consume("new-stream",1)}catch{this.log("rate limit hit when opening too many new streams over the inbound stream limit - closing remote connection"),this.abort(new Error("Too many open streams"));return}return}let a=this._newReceiverStream({id:t,name:U(e.data instanceof Uint8Array?e.data:e.data.subarray())});this._init.onIncomingStream!=null&&this._init.onIncomingStream(a);return}let i=((n&1)===1?this._streams.initiators:this._streams.receivers).get(t);if(i==null){this.log("missing stream %s for message type %s",t,el[n]);try{await this.rateLimiter.consume("missing-stream",1)}catch{this.log("rate limit hit when receiving messages for streams that do not exist - closing remote connection"),this.abort(new Error("Too many messages for missing streams"));return}return}let s=this._init.maxStreamBufferSize??mk;try{switch(n){case we.MESSAGE_INITIATOR:case we.MESSAGE_RECEIVER:if(i.sourceReadableLength()>s)throw this._source.push({id:e.id,type:n===we.MESSAGE_INITIATOR?we.RESET_RECEIVER:we.RESET_INITIATOR}),new rh("Input buffer full - increase Mplex maxBufferSize to accommodate slow consumers");i.sourcePush(e.data);break;case we.CLOSE_INITIATOR:case we.CLOSE_RECEIVER:i.remoteCloseWrite();break;case we.RESET_INITIATOR:case we.RESET_RECEIVER:i.reset();break;default:this.log("unknown message type %s",n)}}catch(a){this.log.error("error while processing message",a),i.abort(a)}}};var $3=class{protocol="/mplex/6.7.0";_init;components;constructor(e,t={}){this.components=e,this._init=t}[Symbol.toStringTag]="@libp2p/mplex";[Se]=["@libp2p/stream-multiplexing"];createStreamMuxer(e={}){return new nh(this.components,{...e,...this._init})}};function _w(r={}){return e=>new $3(e,r)}var Cw="1.0.0",kw="ping",Pw="ipfs";var oh=class{protocol;components;started;timeout;maxInboundStreams;maxOutboundStreams;runOnLimitedConnection;log;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:ping"),this.started=!1,this.protocol=`/${t.protocolPrefix??Pw}/${kw}/${Cw}`,this.timeout=t.timeout??1e4,this.maxInboundStreams=t.maxInboundStreams??2,this.maxOutboundStreams=t.maxOutboundStreams??1,this.runOnLimitedConnection=t.runOnLimitedConnection??!0,this.handleMessage=this.handleMessage.bind(this)}[Symbol.toStringTag]="@libp2p/ping";async start(){await this.components.registrar.handle(this.protocol,this.handleMessage,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnection}),this.started=!0}async stop(){await this.components.registrar.unhandle(this.protocol),this.started=!1}isStarted(){return this.started}handleMessage(e){this.log("incoming ping from %p",e.connection.remotePeer);let{stream:t}=e,n=Date.now(),o=Bi(t),i=!1;Promise.resolve().then(async()=>{for(;;){let s=AbortSignal.timeout(this.timeout);s.addEventListener("abort",()=>{t?.abort(new Ur("ping timeout"))});let a=await o.read(32,{signal:s});await o.write(a,{signal:s}),i=!0}}).catch(s=>{i&&s.name==="UnexpectedEOFError"&&t.readStatus!=="ready"||(this.log.error("incoming ping from %p failed with error - %e",e.connection.remotePeer,s),t?.abort(s))}).finally(()=>{let s=Date.now()-n;this.log("incoming ping from %p complete in %dms",e.connection.remotePeer,s);let a=AbortSignal.timeout(this.timeout);t.close({signal:a}).catch(c=>{this.log.error("error closing ping stream from %p - %e",e.connection.remotePeer,c),t?.abort(c)})})}async ping(e,t={}){this.log("pinging %p",e);let n=Date.now(),o=qt(32),i=await this.components.connectionManager.openConnection(e,t),s;if(t.signal==null){let a=AbortSignal.timeout(this.timeout);t={...t,signal:a}}try{s=await i.newStream(this.protocol,{...t,runOnLimitedConnection:this.runOnLimitedConnection});let a=Bi(s),[,c]=await Promise.all([a.write(o,t),a.read(32,t)]),l=Date.now()-n;if(!ne(o,c.subarray()))throw new bl(`Received wrong ping ack after ${l}ms`);return this.log("ping %p complete in %dms",i.remotePeer,l),l}catch(a){throw this.log.error("error while pinging %p",i.remotePeer,a),s?.abort(a),a}finally{s!=null&&await s.close(t)}}};function Rw(r={}){return e=>new oh(e,r)}var Dw=function(r,e,t){if(t||arguments.length===2)for(var n=0,o=e.length,i;n<o;n++)(i||!(n in e))&&(i||(i=Array.prototype.slice.call(e,0,n)),i[n]=e[n]);return r.concat(i||Array.prototype.slice.call(e))},vk=function(){function r(e,t,n){this.name=e,this.version=t,this.os=n,this.type="browser"}return r}();var Ek=function(){function r(e){this.version=e,this.type="node",this.name="node",this.os=process.platform}return r}();var Sk=function(){function r(e,t,n,o){this.name=e,this.version=t,this.os=n,this.bot=o,this.type="bot-device"}return r}();var Ak=function(){function r(){this.type="bot",this.bot=!0,this.name="bot",this.version=null,this.os=null}return r}();var Ik=function(){function r(){this.type="react-native",this.name="react-native",this.version=null,this.os=null}return r}();var Tk=/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/,_k=/(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/,Lw=3,Ck=[["aol",/AOLShield\/([0-9\._]+)/],["edge",/Edge\/([0-9\._]+)/],["edge-ios",/EdgiOS\/([0-9\._]+)/],["yandexbrowser",/YaBrowser\/([0-9\._]+)/],["kakaotalk",/KAKAOTALK\s([0-9\.]+)/],["samsung",/SamsungBrowser\/([0-9\.]+)/],["silk",/\bSilk\/([0-9._-]+)\b/],["miui",/MiuiBrowser\/([0-9\.]+)$/],["beaker",/BeakerBrowser\/([0-9\.]+)/],["edge-chromium",/EdgA?\/([0-9\.]+)/],["chromium-webview",/(?!Chrom.*OPR)wv\).*Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["chrome",/(?!Chrom.*OPR)Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["phantomjs",/PhantomJS\/([0-9\.]+)(:?\s|$)/],["crios",/CriOS\/([0-9\.]+)(:?\s|$)/],["firefox",/Firefox\/([0-9\.]+)(?:\s|$)/],["fxios",/FxiOS\/([0-9\.]+)/],["opera-mini",/Opera Mini.*Version\/([0-9\.]+)/],["opera",/Opera\/([0-9\.]+)(?:\s|$)/],["opera",/OPR\/([0-9\.]+)(:?\s|$)/],["pie",/^Microsoft Pocket Internet Explorer\/(\d+\.\d+)$/],["pie",/^Mozilla\/\d\.\d+\s\(compatible;\s(?:MSP?IE|MSInternet Explorer) (\d+\.\d+);.*Windows CE.*\)$/],["netfront",/^Mozilla\/\d\.\d+.*NetFront\/(\d.\d)/],["ie",/Trident\/7\.0.*rv\:([0-9\.]+).*\).*Gecko$/],["ie",/MSIE\s([0-9\.]+);.*Trident\/[4-7].0/],["ie",/MSIE\s(7\.0)/],["bb10",/BB10;\sTouch.*Version\/([0-9\.]+)/],["android",/Android\s([0-9\.]+)/],["ios",/Version\/([0-9\._]+).*Mobile.*Safari.*/],["safari",/Version\/([0-9\._]+).*Safari/],["facebook",/FB[AS]V\/([0-9\.]+)/],["instagram",/Instagram\s([0-9\.]+)/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Mobile/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Gecko\)$/],["curl",/^curl\/([0-9\.]+)$/],["searchbot",Tk]],Nw=[["iOS",/iP(hone|od|ad)/],["Android OS",/Android/],["BlackBerry OS",/BlackBerry|BB10/],["Windows Mobile",/IEMobile/],["Amazon OS",/Kindle/],["Windows 3.11",/Win16/],["Windows 95",/(Windows 95)|(Win95)|(Windows_95)/],["Windows 98",/(Windows 98)|(Win98)/],["Windows 2000",/(Windows NT 5.0)|(Windows 2000)/],["Windows XP",/(Windows NT 5.1)|(Windows XP)/],["Windows Server 2003",/(Windows NT 5.2)/],["Windows Vista",/(Windows NT 6.0)/],["Windows 7",/(Windows NT 6.1)/],["Windows 8",/(Windows NT 6.2)/],["Windows 8.1",/(Windows NT 6.3)/],["Windows 10",/(Windows NT 10.0)/],["Windows ME",/Windows ME/],["Windows CE",/Windows CE|WinCE|Microsoft Pocket Internet Explorer/],["Open BSD",/OpenBSD/],["Sun OS",/SunOS/],["Chrome OS",/CrOS/],["Linux",/(Linux)|(X11)/],["Mac OS",/(Mac_PowerPC)|(Macintosh)/],["QNX",/QNX/],["BeOS",/BeOS/],["OS/2",/OS\/2/]];function Ow(r){return r?Bw(r):typeof document>"u"&&typeof navigator<"u"&&navigator.product==="ReactNative"?new Ik:typeof navigator<"u"?Bw(navigator.userAgent):Rk()}function kk(r){return r!==""&&Ck.reduce(function(e,t){var n=t[0],o=t[1];if(e)return e;var i=o.exec(r);return!!i&&[n,i]},!1)}function Bw(r){var e=kk(r);if(!e)return null;var t=e[0],n=e[1];if(t==="searchbot")return new Ak;var o=n[1]&&n[1].split(".").join("_").split("_").slice(0,3);o?o.length<Lw&&(o=Dw(Dw([],o,!0),Dk(Lw-o.length),!0)):o=[];var i=o.join("."),s=Pk(r),a=_k.exec(r);return a&&a[1]?new Sk(t,i,s,a[1]):new vk(t,i,s)}function Pk(r){for(var e=0,t=Nw.length;e<t;e++){var n=Nw[e],o=n[0],i=n[1],s=i.exec(r);if(s)return o}return null}function Rk(){var r=typeof process<"u"&&process.version;return r?new Ek(process.version.slice(1)):null}function Dk(r){for(var e=[],t=0;t<r;t++)e.push("0");return e}var Mw=["stun:stun.l.google.com:19302","stun:global.stun.twilio.com:3478","stun:stun.cloudflare.com:3478","stun:stun.services.mozilla.com:3478"];var Uw=Ow(),tl=Uw!=null&&Uw.name==="firefox",ih=async function*(){},sh=async r=>{},Lk=30*1e3;function Fw(r,e,t=Lk,n){r.readyState==="open"&&Promise.resolve().then(async()=>{if(r.bufferedAmount>0){n.log("%s drain channel with %d buffered bytes",e,r.bufferedAmount);let o=J(),i=!1;r.bufferedAmountLowThreshold=0;let s=()=>{i||(n.log("%s drain channel closed before drain",e),o.resolve())};r.addEventListener("close",s,{once:!0}),r.addEventListener("bufferedamountlow",()=>{i=!0,r.removeEventListener("close",s),o.resolve()}),await Zr(o.promise,{milliseconds:t})}}).then(async()=>{r.readyState==="open"&&r.close()}).catch(o=>{n.log.error("error closing outbound stream",o)})}async function rl(r){return r=r??{},typeof r=="function"&&(r=await r()),r.iceServers=r.iceServers??Mw.map(e=>({urls:[e]})),r}var qi=class{log;peerConnection;remoteAddr;timeline;metrics;source=ih();sink=sh;constructor(e,t){this.log=e.logger.forComponent("libp2p:webrtc:maconn"),this.remoteAddr=t.remoteAddr,this.timeline=t.timeline,this.peerConnection=t.peerConnection;let n=this.peerConnection.connectionState;this.peerConnection.onconnectionstatechange=()=>{this.log.trace("peer connection state change",this.peerConnection.connectionState,"initial state",n),(this.peerConnection.connectionState==="disconnected"||this.peerConnection.connectionState==="failed"||this.peerConnection.connectionState==="closed")&&(this.timeline.close=Date.now())}}async close(e){this.log.trace("closing connection"),this.peerConnection.close(),this.timeline.close=Date.now(),this.metrics?.increment({close:!0})}abort(e){this.log.error("closing connection due to error",e),this.peerConnection.close(),this.timeline.close=Date.now(),this.metrics?.increment({abort:!0})}};var Yt;(function(r){let e;(function(o){o.FIN="FIN",o.STOP_SENDING="STOP_SENDING",o.RESET="RESET",o.FIN_ACK="FIN_ACK"})(e=r.Flag||(r.Flag={}));let t;(function(o){o[o.FIN=0]="FIN",o[o.STOP_SENDING=1]="STOP_SENDING",o[o.RESET=2]="RESET",o[o.FIN_ACK=3]="FIN_ACK"})(t||(t={})),function(o){o.codec=()=>Ke(t)}(e=r.Flag||(r.Flag={}));let n;r.codec=()=>(n==null&&(n=re((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.flag!=null&&(i.uint32(8),r.Flag.codec().encode(o.flag,i)),o.message!=null&&(i.uint32(18),i.bytes(o.message)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.flag=r.Flag.codec().decode(o);break}case 2:{a.message=o.bytes();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>te(o,r.codec()),r.decode=(o,i)=>ee(o,r.codec(),i)})(Yt||(Yt={}));var Nk=2*1024*1024,Bk=30*1e3,ah=16*1024;function Ok(r=ah){let e=pe(r-pe(r)),t=1+pe(Object.keys(Yt.Flag).length-1),n=1,o=r-e-t-n,i=pe(o);return e+t+n+i}var Mk=Ok(),Uk=5e3,Fk=5e3,H3=class extends Vo{channel;incomingData;maxBufferedAmount;bufferedAmountLowEventTimeout;maxMessageSize;receiveFinAck;finAckTimeout;openTimeout;constructor(e){let t=e.onEnd;switch(e.onEnd=o=>{this.log.trace("readable and writeable ends closed",this.status),Promise.resolve(async()=>{if(!(this.timeline.abort!=null||this.timeline.reset!==null))try{await Zr(this.receiveFinAck.promise,{milliseconds:this.finAckTimeout})}catch(i){this.log.error("error receiving FIN_ACK",i)}}).then(()=>{this.incomingData.end(),t?.(o)}).catch(i=>{this.log.error("error ending stream",i)})},super(e),this.channel=e.channel,this.channel.binaryType="arraybuffer",this.incomingData=Pt(),this.bufferedAmountLowEventTimeout=e.bufferedAmountLowEventTimeout??Bk,this.maxBufferedAmount=e.maxBufferedAmount??Nk,this.maxMessageSize=(e.maxMessageSize??ah)-Mk,this.receiveFinAck=J(),this.finAckTimeout=e.closeTimeout??Uk,this.openTimeout=e.openTimeout??Fk,this.channel.readyState){case"open":this.timeline.open=new Date().getTime();break;case"closed":case"closing":(this.timeline.close===void 0||this.timeline.close===0)&&(this.timeline.close=Date.now());break;case"connecting":break;default:throw this.log.error("unknown datachannel state %s",this.channel.readyState),new Zo("Unknown datachannel state")}this.channel.onopen=o=>{this.timeline.open=new Date().getTime()},this.channel.onclose=o=>{this.receiveFinAck.resolve(),this.close().catch(i=>{this.log.error("error closing stream after channel closed",i)})},this.channel.onerror=o=>{let i=o.error;this.abort(i)},this.channel.onmessage=async o=>{let{data:i}=o;i===null||i.byteLength===0||this.incomingData.push(new Uint8Array(i,0,i.byteLength))};let n=this;Promise.resolve().then(async()=>{for await(let o of Kr(this.incomingData)){let i=n.processIncomingProtobuf(o);i!=null&&n.sourcePush(new ue(i))}}).catch(o=>{this.log.error("error processing incoming data channel messages",o)})}sendNewStream(){}async _sendMessage(e,t=!0){if(t&&this.channel.bufferedAmount>this.maxBufferedAmount)try{this.log('channel buffer is %d, wait for "bufferedamountlow" event',this.channel.bufferedAmount),await Xc(this.channel,"bufferedamountlow",{timeout:this.bufferedAmountLowEventTimeout})}catch(n){throw n instanceof Ur?new Ur(`Timed out waiting for DataChannel buffer to clear after ${this.bufferedAmountLowEventTimeout}ms`):n}if(this.channel.readyState==="closed"||this.channel.readyState==="closing")throw new Zo(`Invalid datachannel state - ${this.channel.readyState}`);this.channel.readyState!=="open"&&(this.log('channel state is "%s" and not "open", waiting for "open" event before sending data',this.channel.readyState),await Xc(this.channel,"open",{timeout:this.openTimeout}),this.log('channel state is now "%s", sending data',this.channel.readyState)),this.channel.send(e.subarray())}async sendData(e){for(e=e.sublist();e.byteLength>0;){let t=Math.min(e.byteLength,this.maxMessageSize),n=e.subarray(0,t),o=Yt.encode({message:n}),i=$r.single(o);await this._sendMessage(i),e.consume(t)}}async sendReset(){try{await this._sendFlag(Yt.Flag.RESET)}catch(e){this.log.error("failed to send reset - %e",e)}}async sendCloseWrite(e){if(await this._sendFlag(Yt.Flag.FIN)){this.log.trace("awaiting FIN_ACK");try{await st(this.receiveFinAck.promise,e?.signal,{errorMessage:"sending close-write was aborted before FIN_ACK was received",errorName:"FinAckNotReceivedError"})}catch(n){this.log.error("failed to await FIN_ACK",n)}}else this.log.trace("sending FIN failed, not awaiting FIN_ACK");this.receiveFinAck.resolve()}async sendCloseRead(){await this._sendFlag(Yt.Flag.STOP_SENDING)}processIncomingProtobuf(e){let t=Yt.decode(e);if(t.flag!==void 0&&(this.log.trace('incoming flag %s, write status "%s", read status "%s"',t.flag,this.writeStatus,this.readStatus),t.flag===Yt.Flag.FIN&&(this.remoteCloseWrite(),this.log.trace("sending FIN_ACK"),this._sendFlag(Yt.Flag.FIN_ACK).catch(n=>{this.log.error("error sending FIN_ACK immediately",n)})),t.flag===Yt.Flag.RESET&&this.reset(),t.flag===Yt.Flag.STOP_SENDING&&this.remoteCloseRead(),t.flag===Yt.Flag.FIN_ACK&&(this.log.trace("received FIN_ACK"),this.receiveFinAck.resolve())),this.readStatus==="ready")return t.message}async _sendFlag(e){if(this.channel.readyState!=="open")return this.log.trace('not sending flag %s because channel is "%s" and not "open"',this.channel.readyState,e.toString()),!1;this.log.trace("sending flag %s",e.toString());let t=Yt.encode({flag:e}),n=$r.single(t);try{return await this._sendMessage(n,!1),!0}catch(o){this.log.error("could not send flag %s - %e",e.toString(),o)}return!1}};function ga(r){let{channel:e,direction:t}=r;return new H3({id:t==="inbound"?`i${e.id}`:`r${e.id}`,log:r.logger.forComponent(`libp2p:webrtc:stream:${t}:${e.id}`),...r})}var Vw="/webrtc",Yo=class{protocol;peerConnection;bufferedStreams=[];metrics;dataChannelOptions;components;log;constructor(e,t){this.components=e,this.peerConnection=t.peerConnection,this.metrics=t.metrics,this.protocol=t.protocol??Vw,this.dataChannelOptions=t.dataChannelOptions??{},this.log=e.logger.forComponent("libp2p:webrtc:datachannelmuxerfactory"),this.peerConnection.ondatachannel=({channel:n})=>{if(this.log.trace('incoming early datachannel with channel id %d and label "%s"',n.id),n.label==="init"){this.log.trace("closing early init channel"),n.close();return}let o={},i=ga({channel:n,direction:"inbound",onEnd:s=>{o.onEnd(s)},logger:e.logger,...this.dataChannelOptions});o.stream=i,o.channel=n,o.onEnd=()=>{this.bufferedStreams=this.bufferedStreams.filter(s=>s.stream.id!==i.id)},this.bufferedStreams.push(o)}}createStreamMuxer(e){return new q3(this.components,{...e,peerConnection:this.peerConnection,dataChannelOptions:this.dataChannelOptions,metrics:this.metrics,streams:this.bufferedStreams,protocol:this.protocol})}},q3=class{init;streams;protocol;log;peerConnection;dataChannelOptions;metrics;logger;constructor(e,t){this.init=t,this.log=e.logger.forComponent("libp2p:webrtc:muxer"),this.logger=e.logger,this.streams=t.streams.map(n=>n.stream),this.peerConnection=t.peerConnection,this.protocol=t.protocol??Vw,this.metrics=t.metrics,this.dataChannelOptions=t.dataChannelOptions??{},this.peerConnection.ondatachannel=({channel:n})=>{if(this.log.trace("incoming datachannel with channel id %d",n.id),n.label==="init"){this.log.trace("closing init channel"),n.close();return}let o=n.id,i=ga({channel:n,direction:"inbound",onEnd:()=>{this.#e(i,n),this.log("incoming channel %s ended",o)},logger:this.logger,...this.dataChannelOptions});this.streams.push(i),this.metrics?.increment({incoming_stream:!0}),t?.onIncomingStream?.(i)},this.init.streams.length>0&&queueMicrotask(()=>{this.init.streams.forEach(n=>{n.onEnd=()=>{this.log("incoming early channel %s ended with state %s",n.channel.id,n.channel.readyState),this.#e(n.stream,n.channel)},this.metrics?.increment({incoming_stream:!0}),this.init?.onIncomingStream?.(n.stream)})})}#e(e,t){this.log.trace("stream %s %s %s onEnd",e.direction,e.id,e.protocol),Fw(t,`${e.direction} ${e.id} ${e.protocol}`,this.dataChannelOptions.drainTimeout,{log:this.log}),this.streams=this.streams.filter(n=>n.id!==e.id),this.metrics?.increment({stream_end:!0}),this.init?.onStreamEnd?.(e)}async close(e){try{await Promise.all(this.streams.map(async t=>t.close(e)))}catch(t){this.abort(t)}}abort(e){for(let t of this.streams)t.abort(e)}source=ih();sink=sh;newStream(){let e=this.peerConnection.createDataChannel(""),t=e.id;this.log.trace("opened outgoing datachannel with channel id %s",t);let n=ga({channel:e,direction:"outbound",onEnd:()=>{this.#e(n,e),this.log("outgoing channel %s ended",t)},logger:this.logger,...this.dataChannelOptions});return this.streams.push(n),this.metrics?.increment({outgoing_stream:!0}),n}};var zi=globalThis.RTCPeerConnection,ch=globalThis.RTCSessionDescription,$w=globalThis.RTCIceCandidate;var Wi=class extends Error{constructor(e){super(`WebRTC transport error: ${e}`),this.name="WebRTCTransportError"}},Br=class extends Wi{constructor(e="SDP handshake failed"){super(e),this.name="SDPHandshakeFailedError"}};var nl=class extends Wi{constructor(e,t){super(`[stream: ${e}] data channel error: ${t}`),this.name="WebRTC/DataChannelError"}};var ol=class extends Wi{constructor(e,t){super(`Invalid fingerprint "${e}" within ${t}`),this.name="WebRTC/InvalidFingerprintError"}};var lh=class extends Wi{constructor(e){super(`A method (${e}) was called though it has been intentionally left unimplemented.`),this.name="WebRTC/UnimplementedError"}},uh=class extends Wi{constructor(e){super(`unsupported hash algorithm code: ${e} please see the codes at https://github.com/multiformats/multicodec/blob/master/table.csv `),this.name="WebRTC/UnsupportedHashAlgorithmError"}};var ur;(function(r){let e;(function(o){o.SDP_OFFER="SDP_OFFER",o.SDP_ANSWER="SDP_ANSWER",o.ICE_CANDIDATE="ICE_CANDIDATE"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.SDP_OFFER=0]="SDP_OFFER",o[o.SDP_ANSWER=1]="SDP_ANSWER",o[o.ICE_CANDIDATE=2]="ICE_CANDIDATE"})(t||(t={})),function(o){o.codec=()=>Ke(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=re((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.type!=null&&(i.uint32(8),r.Type.codec().encode(o.type,i)),o.data!=null&&(i.uint32(18),i.string(o.data)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{a.data=o.string();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>te(o,r.codec()),r.decode=(o,i)=>ee(o,r.codec(),i)})(ur||(ur={}));var dh=async(r,e,t)=>{try{let n=J();for(Vk(r,n);;){let o=await Promise.race([n.promise,e.read({signal:t.signal}).catch(()=>{})]);if(o==null){t.signal?.throwIfAborted();break}if(o.type!==ur.Type.ICE_CANDIDATE)throw new fe("ICE candidate message expected");let i=JSON.parse(o.data??"null");if(i===""||i===null){t.onProgress?.(new W("webrtc:end-of-ice-candidates")),t.log.trace("end-of-candidates received");continue}let s=new $w(i);t.log.trace("%s received new ICE candidate %o",t.direction,i);try{t.onProgress?.(new W("webrtc:add-ice-candidate",s.candidate)),await r.addIceCandidate(s)}catch(a){t.log.error("%s bad candidate received",t.direction,i,a)}}}catch(n){if(t.log.error("%s error parsing ICE candidate",t.direction,n),t.signal?.aborted===!0&&fh(r)!=="connected")throw n}};function fh(r){return tl?r.iceConnectionState:r.connectionState}function Vk(r,e){r[tl?"oniceconnectionstatechange":"onconnectionstatechange"]=t=>{switch(fh(r)){case"connected":e.resolve();break;case"failed":case"disconnected":case"closed":e.reject(new es("RTCPeerConnection was closed"));break;default:break}}}async function Kw({rtcConfiguration:r,dataChannel:e,signal:t,metrics:n,multiaddr:o,connectionManager:i,transportManager:s,log:a,logger:c,onProgress:l}){let{baseAddr:u}=Hw(o);n?.dialerEvents.increment({open:!0}),a.trace("dialing base address: %a",u);let d=u.getPeerId();if(d==null)throw new _("Relay peer was missing");let f=i.getConnections(Ue(d)),h,p=!1;f.length===0?(l?.(new W("webrtc:dial-relay")),h=await s.dial(u,{signal:t,onProgress:l}),p=!0):(l?.(new W("webrtc:reuse-relay-connection")),h=f[0]);try{l?.(new W("webrtc:open-signaling-stream"));let g=await h.newStream(hh,{signal:t,runOnLimitedConnection:!0}),m=ze(g).pb(ur),y=new zi(r),x=new Yo({logger:c},{peerConnection:y,dataChannelOptions:e});try{let w=y.createDataChannel("init");y.onicecandidate=({candidate:P})=>{let S=JSON.stringify(P?.toJSON()??null);a.trace("initiator sending ICE candidate %o",P),m.write({type:ur.Type.ICE_CANDIDATE,data:S},{signal:t}).catch(A=>{a.error("error sending ICE candidate",A)})},y.onicecandidateerror=P=>{a.error("initiator ICE candidate error",P)};let I=await y.createOffer().catch(P=>{throw a.error("could not execute createOffer",P),new Br("Failed to set createOffer")});a.trace("initiator send SDP offer %s",I.sdp),l?.(new W("webrtc:send-sdp-offer")),await m.write({type:ur.Type.SDP_OFFER,data:I.sdp},{signal:t}),await y.setLocalDescription(I).catch(P=>{throw a.error("could not execute setLocalDescription",P),new Br("Failed to set localDescription")}),l?.(new W("webrtc:read-sdp-answer")),a.trace("initiator read SDP answer");let B=await m.read({signal:t});if(B.type!==ur.Type.SDP_ANSWER)throw new Br("Remote should send an SDP answer");a.trace("initiator received SDP answer %s",B.data);let L=new ch({type:"answer",sdp:B.data});return await y.setRemoteDescription(L).catch(P=>{throw a.error("could not execute setRemoteDescription",P),new Br("Failed to set remoteDescription")}),a.trace("initiator read candidates until connected"),l?.(new W("webrtc:read-ice-candidates")),await dh(y,m,{direction:"initiator",signal:t,log:a,onProgress:l}),a.trace("initiator connected, closing init channel"),w.close(),l?.(new W("webrtc:close-signaling-stream")),a.trace("closing signaling channel"),await g.close({signal:t}),a.trace("initiator connected to remote address %s",o),{remoteAddress:o,peerConnection:y,muxerFactory:x}}catch(w){throw a.error("outgoing signaling error",w),y.close(),g.abort(w),w}finally{y.onicecandidate=null,y.onicecandidateerror=null}}finally{if(p)try{await h.close({signal:t})}catch(g){h.abort(g)}}}var $k=ke(Xd.matchers[0],he("p2p-circuit")),ph=class extends ge{transportManager;shutdownController;constructor(e,t){super(),this.transportManager=e.transportManager,this.shutdownController=t.shutdownController}async listen(){queueMicrotask(()=>{this.safeDispatchEvent("listening")})}getAddrs(){return this.transportManager.getListeners().filter(e=>e!==this).map(e=>e.getAddrs().filter(t=>$k.exactMatch(t)).map(t=>t.encapsulate("/webrtc"))).flat()}async close(){this.shutdownController.abort(),queueMicrotask(()=>{this.safeDispatchEvent("close")})}};async function qw({peerConnection:r,stream:e,signal:t,connection:n,log:o}){o.trace("new inbound signaling stream");let i=ze(e).pb(ur);try{r.onicecandidate=({candidate:u})=>{let d=JSON.stringify(u?.toJSON()??null);o.trace("recipient sending ICE candidate %s",d),i.write({type:ur.Type.ICE_CANDIDATE,data:d},{signal:t}).catch(f=>{o.error("error sending ICE candidate",f)})},o.trace("recipient read SDP offer");let a=await i.read({signal:t});if(a.type!==ur.Type.SDP_OFFER)throw new Br(`expected message type SDP_OFFER, received: ${a.type??"undefined"} `);o.trace("recipient received SDP offer %s",a.data);let c=new ch({type:"offer",sdp:a.data});await r.setRemoteDescription(c).catch(u=>{throw o.error("could not execute setRemoteDescription",u),new Br("Failed to set remoteDescription")});let l=await r.createAnswer().catch(u=>{throw o.error("could not execute createAnswer",u),new Br("Failed to create answer")});o.trace("recipient send SDP answer %s",l.sdp),await i.write({type:ur.Type.SDP_ANSWER,data:l.sdp},{signal:t}),await r.setLocalDescription(l).catch(u=>{throw o.error("could not execute setLocalDescription",u),new Br("Failed to set localDescription")}),o.trace("recipient read candidates until connected"),await dh(r,i,{direction:"recipient",signal:t,log:o})}catch(a){if(fh(r)!=="connected")throw o.error("error while handling signaling stream from peer %a",n.remoteAddr,a),r.close(),a;o("error while handling signaling stream from peer %a, ignoring as the RTCPeerConnection is already connected",n.remoteAddr,a)}let s=H(`/webrtc/p2p/${n.remoteAddr.getPeerId()}`);return o.trace("recipient connected to remote address %s",s),{remoteAddress:s}}var Kk="/webrtc",Hk="/p2p-circuit",hh="/webrtc-signaling/0.0.1",qk=30*1e3,mh=class{components;init;log;_started=!1;metrics;shutdownController;constructor(e,t={}){this.components=e,this.init=t,this.log=e.logger.forComponent("libp2p:webrtc"),this.shutdownController=new AbortController,this.shutdownController.signal,e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webrtc_dialer_events_total",{label:"event",help:"Total count of WebRTC dialer events by type"}),listenerEvents:e.metrics.registerCounterGroup("libp2p_webrtc_listener_events_total",{label:"event",help:"Total count of WebRTC listener events by type"})})}[co]=!0;[Symbol.toStringTag]="@libp2p/webrtc";[Se]=["@libp2p/transport"];[dr]=["@libp2p/identify","@libp2p/circuit-relay-v2-transport"];isStarted(){return this._started}async start(){await this.components.registrar.handle(hh,e=>{this._onProtocol(e).catch(t=>{this.log.error("failed to handle incoming connect from %p",e.connection.remotePeer,t)})},{runOnLimitedConnection:!0}),this._started=!0}async stop(){await this.components.registrar.unhandle(hh),this._started=!1}createListener(e){return new ph(this.components,{shutdownController:this.shutdownController})}listenFilter(e){return e.filter(Cc.exactMatch)}dialFilter(e){return this.listenFilter(e)}async dial(e,t){this.log.trace("dialing address: %a",e);let{remoteAddress:n,peerConnection:o,muxerFactory:i}=await Kw({rtcConfiguration:await rl(this.init.rtcConfiguration),dataChannel:this.init.dataChannel,multiaddr:e,dataChannelOptions:this.init.dataChannel,signal:t.signal,connectionManager:this.components.connectionManager,transportManager:this.components.transportManager,log:this.log,logger:this.components.logger,onProgress:t.onProgress}),s=new qi(this.components,{peerConnection:o,timeline:{open:Date.now()},remoteAddr:n,metrics:this.metrics?.dialerEvents}),a=await t.upgrader.upgradeOutbound(s,{skipProtection:!0,skipEncryption:!0,muxerFactory:i,onProgress:t.onProgress});return this._closeOnShutdown(o,s),a}async _onProtocol({connection:e,stream:t}){let n=AbortSignal.timeout(this.init.inboundConnectionTimeout??qk),o=new zi(await rl(this.init.rtcConfiguration)),i=new Yo(this.components,{peerConnection:o,dataChannelOptions:this.init.dataChannel});try{let{remoteAddress:s}=await qw({peerConnection:o,connection:e,stream:t,signal:n,log:this.log});await t.close({signal:n});let a=new qi(this.components,{peerConnection:o,timeline:{open:new Date().getTime()},remoteAddr:s,metrics:this.metrics?.listenerEvents});await this.components.upgrader.upgradeInbound(a,{skipEncryption:!0,skipProtection:!0,muxerFactory:i}),this._closeOnShutdown(o,a)}catch(s){throw this.log.error("incoming signaling error",s),o.close(),t.abort(s),s}}_closeOnShutdown(e,t){let n=()=>{t.close().catch(o=>{this.log.error("could not close WebRTCMultiaddrConnection",o)})};this.shutdownController.signal.addEventListener("abort",n),e.addEventListener("close",()=>{this.shutdownController.signal.removeEventListener("abort",n)})}};function Hw(r){let e=r.toString().split(Kk+"/");if(e.length!==2)throw new _("webrtc protocol was not present in multiaddr");if(!e[0].includes(Hk))throw new _("p2p-circuit protocol was not present in multiaddr");let t=H(e[0]),o=H("/"+e[1]).getPeerId();if(o==null)throw new _("destination peer id was missing");let i=t.protos().pop();if(i===void 0)throw new _("invalid multiaddr");return i.name!=="p2p"&&(t=t.encapsulate(`/p2p/${o}`)),{baseAddr:t,peerId:Ue(o)}}var z3=Object.values(oi).map(r=>r.decoder).reduce((r,e)=>r.or(e));function zw(r,e){let t=r.getConfiguration().certificates?.at(0);if(t?.getFingerprints==null){e.log.trace("fetching fingerprint from local SDP");let o=r.localDescription;return o==null?void 0:Wk(o.sdp)}if(e.log.trace("fetching fingerprint from local certificate"),t.getFingerprints().length===0)return;let n=t.getFingerprints()[0].value;if(n==null)throw new ol("","no fingerprint on local certificate");return n}var zk=/^a=fingerprint:(?:\w+-[0-9]+)\s(?<fingerprint>(:?[0-9a-fA-F]{2})+)$/m;function Wk(r){return r.match(zk)?.groups?.fingerprint}function Gk(r){for(let e of r.protoNames())if(e.startsWith("ip"))return e.toUpperCase();return"IP6"}function gh(r){let t=r.stringTuples().filter(n=>n[0]===Qw).map(n=>n[1])[0];if(t===void 0||t==="")throw new _(`Couldn't find a certhash component of multiaddr: ${r.toString()}`);return t}function W3(r){return je.decode(z3.decode(r))}function Qk(r){let e=W3(gh(r)),t=G3(e.code),n=e.digest.reduce((i,s)=>i+s.toString(16).padStart(2,"0"),""),o=n.match(/.{1,2}/g);if(o==null)throw new ol(n,r.toString());return[`${t} ${o.join(":").toUpperCase()}`,n]}function G3(r){switch(r){case 17:return"SHA-1";case 18:return"SHA-256";case 19:return"SHA-512";default:throw new uh(r)}}function Yk(r,e){let{host:t,port:n}=r.toOptions(),o=Gk(r),[i]=Qk(r);return`v=0
20
- o=- 0 0 IN ${o} ${t}
18
+ `)}`:`${t} :`}};jI=Zt;ce.Constructed=jI;Zt.NAME="CONSTRUCTED";var W2=class extends yr{fromBER(e,t,n){return t}toBER(e){return Fo}};W2.override="EndOfContentValueBlock";var WI,Qf=class extends Wt{constructor(e={}){super(e,W2),this.idBlock.tagClass=1,this.idBlock.tagNumber=0}};WI=Qf;ce.EndOfContent=WI;Qf.NAME=Xf;var GI,un=class extends Wt{constructor(e={}){super(e,yr),this.idBlock.tagClass=1,this.idBlock.tagNumber=5}fromBER(e,t,n){return this.lenBlock.length>0&&this.warnings.push("Non-zero length of value block for Null type"),this.idBlock.error.length||(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length||(this.blockLength+=this.lenBlock.blockLength),this.blockLength+=n,t+n>e.byteLength?(this.error="End of input reached before message was fully decoded (inconsistent offset and length values)",-1):t+n}toBER(e,t){let n=new ArrayBuffer(2);if(!e){let o=new Uint8Array(n);o[0]=5,o[1]=0}return t&&t.write(n),n}onAsciiEncoding(){return`${this.constructor.NAME}`}};GI=un;ce.Null=GI;un.NAME="NULL";var G2=class extends ai(yr){get value(){for(let e of this.valueHexView)if(e>0)return!0;return!1}set value(e){this.valueHexView[0]=e?255:0}constructor({value:e,...t}={}){super(t),t.valueHex?this.valueHexView=Me.BufferSourceConverter.toUint8Array(t.valueHex):this.valueHexView=new Uint8Array(1),e&&(this.value=e)}fromBER(e,t,n){let o=Me.BufferSourceConverter.toUint8Array(e);return Hi(this,o,t,n)?(this.valueHexView=o.subarray(t,t+n),n>1&&this.warnings.push("Boolean value encoded in more then 1 octet"),this.isHexOnly=!0,u7.call(this),this.blockLength=n,t+n):-1}toBER(){return this.valueHexView.slice()}toJSON(){return{...super.toJSON(),value:this.value}}};G2.NAME="BooleanValueBlock";var zI,uc=class extends Wt{getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}constructor(e={}){super(e,G2),this.idBlock.tagClass=1,this.idBlock.tagNumber=1}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.getValue}`}};zI=uc;ce.Boolean=zI;uc.NAME="BOOLEAN";var z2=class extends ai(ii){constructor({isConstructed:e=!1,...t}={}){super(t),this.isConstructed=e}fromBER(e,t,n){let o=0;if(this.isConstructed){if(this.isHexOnly=!1,o=ii.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let i=0;i<this.value.length;i++){let s=this.value[i].constructor.NAME;if(s===Xf){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only",-1}if(s!==KI)return this.error="OCTET STRING may consists of OCTET STRINGs only",-1}}else this.isHexOnly=!0,o=super.fromBER(e,t,n),this.blockLength=n;return o}toBER(e,t){return this.isConstructed?ii.prototype.toBER.call(this,e,t):e?new ArrayBuffer(this.valueHexView.byteLength):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),isConstructed:this.isConstructed}}};z2.NAME="OctetStringValueBlock";var p7,Ur=class extends Wt{constructor({idBlock:e={},lenBlock:t={},...n}={}){var o,i;(o=n.isConstructed)!==null&&o!==void 0||(n.isConstructed=!!(!((i=n.value)===null||i===void 0)&&i.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},z2),this.idBlock.tagClass=1,this.idBlock.tagNumber=4}fromBER(e,t,n){if(this.valueBlock.isConstructed=this.idBlock.isConstructed,this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm,n===0)return this.idBlock.error.length===0&&(this.blockLength+=this.idBlock.blockLength),this.lenBlock.error.length===0&&(this.blockLength+=this.lenBlock.blockLength),t;if(!this.valueBlock.isConstructed){let i=(e instanceof ArrayBuffer?new Uint8Array(e):e).subarray(t,t+n);try{if(i.byteLength){let s=Pu(i,0,i.byteLength);s.offset!==-1&&s.offset===n&&(this.valueBlock.value=[s.result])}}catch{}}return super.fromBER(e,t,n)}onAsciiEncoding(){if(this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length)return Zt.prototype.onAsciiEncoding.call(this);let e=this.constructor.NAME,t=Me.Convert.ToHex(this.valueBlock.valueHexView);return`${e} : ${t}`}getValue(){if(!this.idBlock.isConstructed)return this.valueBlock.valueHexView.slice().buffer;let e=[];for(let t of this.valueBlock.value)t instanceof p7&&e.push(t.valueBlock.valueHexView);return Me.BufferSourceConverter.concat(e)}};p7=Ur;ce.OctetString=p7;Ur.NAME=KI;var X2=class extends ai(ii){constructor({unusedBits:e=0,isConstructed:t=!1,...n}={}){super(n),this.unusedBits=e,this.isConstructed=t,this.blockLength=this.valueHexView.byteLength}fromBER(e,t,n){if(!n)return t;let o=-1;if(this.isConstructed){if(o=ii.prototype.fromBER.call(this,e,t,n),o===-1)return o;for(let a of this.value){let c=a.constructor.NAME;if(c===Xf){if(this.isIndefiniteForm)break;return this.error="EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only",-1}if(c!==VI)return this.error="BIT STRING may consists of BIT STRINGs only",-1;let l=a.valueBlock;if(this.unusedBits>0&&l.unusedBits>0)return this.error='Using of "unused bits" inside constructive BIT STRING allowed for least one only',-1;this.unusedBits=l.unusedBits}return o}let i=Me.BufferSourceConverter.toUint8Array(e);if(!Hi(this,i,t,n))return-1;let s=i.subarray(t,t+n);if(this.unusedBits=s[0],this.unusedBits>7)return this.error="Unused bits for BitString must be in range 0-7",-1;if(!this.unusedBits){let a=s.subarray(1);try{if(a.byteLength){let c=Pu(a,0,a.byteLength);c.offset!==-1&&c.offset===n-1&&(this.value=[c.result])}}catch{}}return this.valueHexView=s.subarray(1),this.blockLength=s.length,t+n}toBER(e,t){if(this.isConstructed)return ii.prototype.toBER.call(this,e,t);if(e)return new ArrayBuffer(this.valueHexView.byteLength+1);if(!this.valueHexView.byteLength)return Fo;let n=new Uint8Array(this.valueHexView.length+1);return n[0]=this.unusedBits,n.set(this.valueHexView,1),n.buffer}toJSON(){return{...super.toJSON(),unusedBits:this.unusedBits,isConstructed:this.isConstructed}}};X2.NAME="BitStringValueBlock";var XI,Uo=class extends Wt{constructor({idBlock:e={},lenBlock:t={},...n}={}){var o,i;(o=n.isConstructed)!==null&&o!==void 0||(n.isConstructed=!!(!((i=n.value)===null||i===void 0)&&i.length)),super({idBlock:{isConstructed:n.isConstructed,...e},lenBlock:{...t,isIndefiniteForm:!!n.isIndefiniteForm},...n},X2),this.idBlock.tagClass=1,this.idBlock.tagNumber=3}fromBER(e,t,n){return this.valueBlock.isConstructed=this.idBlock.isConstructed,this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm,super.fromBER(e,t,n)}onAsciiEncoding(){if(this.valueBlock.isConstructed||this.valueBlock.value&&this.valueBlock.value.length)return Zt.prototype.onAsciiEncoding.call(this);{let e=[],t=this.valueBlock.valueHexView;for(let s of t)e.push(s.toString(2).padStart(8,"0"));let n=e.join(""),o=this.constructor.NAME,i=n.substring(0,n.length-this.valueBlock.unusedBits);return`${o} : ${i}`}}};XI=Uo;ce.BitString=XI;Uo.NAME=VI;var YI;function gK(r,e){let t=new Uint8Array([0]),n=new Uint8Array(r),o=new Uint8Array(e),i=n.slice(0),s=i.length-1,a=o.slice(0),c=a.length-1,l=0,u=c<s?s:c,d=0;for(let h=u;h>=0;h--,d++){switch(!0){case d<a.length:l=i[s-d]+a[c-d]+t[0];break;default:l=i[s-d]+t[0]}switch(t[0]=l/10,!0){case d>=i.length:i=K2(new Uint8Array([l%10]),i);break;default:i[s-d]=l%10}}return t[0]>0&&(i=K2(t,i)),i}function $I(r){if(r>=Gf.length)for(let e=Gf.length;e<=r;e++){let t=new Uint8Array([0]),n=Gf[e-1].slice(0);for(let o=n.length-1;o>=0;o--){let i=new Uint8Array([(n[o]<<1)+t[0]]);t[0]=i[0]/10,n[o]=i[0]%10}t[0]>0&&(n=K2(t,n)),Gf.push(n)}return Gf[r]}function yK(r,e){let t=0,n=new Uint8Array(r),o=new Uint8Array(e),i=n.slice(0),s=i.length-1,a=o.slice(0),c=a.length-1,l,u=0;for(let d=c;d>=0;d--,u++)switch(l=i[s-u]-a[c-u]-t,!0){case l<0:t=1,i[s-u]=l+10;break;default:t=0,i[s-u]=l}if(t>0)for(let d=s-c+1;d>=0;d--,u++)if(l=i[s-u]-t,l<0)t=1,i[s-u]=l+10;else{t=0,i[s-u]=l;break}return i.slice()}var Zf=class extends ai(yr){setValueHex(){this.valueHexView.length>=4?(this.warnings.push("Too big Integer for decoding, hex only"),this.isHexOnly=!0,this._valueDec=0):(this.isHexOnly=!1,this.valueHexView.length>0&&(this._valueDec=u7.call(this)))}constructor({value:e,...t}={}){super(t),this._valueDec=0,t.valueHex&&this.setValueHex(),e!==void 0&&(this.valueDec=e)}set valueDec(e){this._valueDec=e,this.isHexOnly=!1,this.valueHexView=new Uint8Array(BI(e))}get valueDec(){return this._valueDec}fromDER(e,t,n,o=0){let i=this.fromBER(e,t,n);if(i===-1)return i;let s=this.valueHexView;return s[0]===0&&(s[1]&128)!==0?this.valueHexView=s.subarray(1):o!==0&&s.length<o&&(o-s.length>1&&(o=s.length+1),this.valueHexView=s.subarray(o-s.length)),i}toDER(e=!1){let t=this.valueHexView;switch(!0){case(t[0]&128)!==0:{let n=new Uint8Array(this.valueHexView.length+1);n[0]=0,n.set(t,1),this.valueHexView=n}break;case(t[0]===0&&(t[1]&128)===0):this.valueHexView=this.valueHexView.subarray(1);break}return this.toBER(e)}fromBER(e,t,n){let o=super.fromBER(e,t,n);return o===-1||this.setValueHex(),o}toBER(e){return e?new ArrayBuffer(this.valueHexView.length):this.valueHexView.slice().buffer}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}toString(){let e=this.valueHexView.length*8-1,t=new Uint8Array(this.valueHexView.length*8/3),n=0,o,i=this.valueHexView,s="",a=!1;for(let c=i.byteLength-1;c>=0;c--){o=i[c];for(let l=0;l<8;l++){if((o&1)===1)switch(n){case e:t=yK($I(n),t),s="-";break;default:t=gK(t,$I(n))}n++,o>>=1}}for(let c=0;c<t.length;c++)t[c]&&(a=!0),a&&(s+=UI.charAt(t[c]));return a===!1&&(s+=UI.charAt(0)),s}};YI=Zf;Zf.NAME="IntegerValueBlock";Object.defineProperty(YI.prototype,"valueHex",{set:function(r){this.valueHexView=new Uint8Array(r),this.setValueHex()},get:function(){return this.valueHexView.slice().buffer}});var zf,Ln=class extends Wt{constructor(e={}){super(e,Zf),this.idBlock.tagClass=1,this.idBlock.tagNumber=2}toBigInt(){return V2(),BigInt(this.valueBlock.toString())}static fromBigInt(e){V2();let t=BigInt(e),n=new Cu,o=t.toString(16).replace(/^-/,""),i=new Uint8Array(Me.Convert.FromHex(o));if(t<0){let a=new Uint8Array(i.length+(i[0]&128?1:0));a[0]|=128;let l=BigInt(`0x${Me.Convert.ToHex(a)}`)+t,u=Me.BufferSourceConverter.toUint8Array(Me.Convert.FromHex(l.toString(16)));u[0]|=128,n.write(u)}else i[0]&128&&n.write(new Uint8Array([0])),n.write(i);return new zf({valueHex:n.final()})}convertToDER(){let e=new zf({valueHex:this.valueBlock.valueHexView});return e.valueBlock.toDER(),e}convertFromDER(){return new zf({valueHex:this.valueBlock.valueHexView[0]===0?this.valueBlock.valueHexView.subarray(1):this.valueBlock.valueHexView})}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()}`}};zf=Ln;ce.Integer=zf;Ln.NAME="INTEGER";var QI,dc=class extends Ln{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=10}};QI=dc;ce.Enumerated=QI;dc.NAME="ENUMERATED";var Jf=class extends ai(yr){constructor({valueDec:e=-1,isFirstSid:t=!1,...n}={}){super(n),this.valueDec=e,this.isFirstSid=t}fromBER(e,t,n){if(!n)return t;let o=Me.BufferSourceConverter.toUint8Array(e);if(!Hi(this,o,t,n))return-1;let i=o.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=i[a]&127,this.blockLength++,(i[a]&128)!==0);a++);let s=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)s[a]=this.valueHexView[a];return this.valueHexView=s,(i[this.blockLength-1]&128)!==0?(this.error="End of input reached before message was fully decoded",-1):(this.valueHexView[0]===0&&this.warnings.push("Needlessly long format of SID encoding"),this.blockLength<=8?this.valueDec=lc(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}set valueBigInt(e){V2();let t=BigInt(e).toString(2);for(;t.length%7;)t="0"+t;let n=new Uint8Array(t.length/7);for(let o=0;o<n.length;o++)n[o]=parseInt(t.slice(o*7,o*7+7),2)+(o+1<n.length?128:0);this.fromBER(n.buffer,0,n.length)}toBER(e){if(this.isHexOnly){if(e)return new ArrayBuffer(this.valueHexView.byteLength);let o=this.valueHexView,i=new Uint8Array(this.blockLength);for(let s=0;s<this.blockLength-1;s++)i[s]=o[s]|128;return i[this.blockLength-1]=o[this.blockLength-1],i.buffer}let t=Ks(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",Fo;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),i=t.byteLength-1;for(let s=0;s<i;s++)n[s]=o[s]|128;n[i]=o[i]}return n}toString(){let e="";if(this.isHexOnly)e=Me.Convert.ToHex(this.valueHexView);else if(this.isFirstSid){let t=this.valueDec;this.valueDec<=39?e="0.":this.valueDec<=79?(e="1.",t-=40):(e="2.",t-=80),e+=t.toString()}else e=this.valueDec.toString();return e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec,isFirstSid:this.isFirstSid}}};Jf.NAME="sidBlock";var Y2=class extends yr{constructor({value:e=ln,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let i=new Jf;if(o=i.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=i.error,o;this.value.length===0&&(i.isFirstSid=!0),this.blockLength+=i.blockLength,n-=i.blockLength,this.value.push(i)}return o}toBER(e){let t=[];for(let n=0;n<this.value.length;n++){let o=this.value[n].toBER(e);if(o.byteLength===0)return this.error=this.value[n].error,Fo;t.push(o)}return h7(t)}fromString(e){this.value=[];let t=0,n=0,o="",i=!1;do if(n=e.indexOf(".",t),n===-1?o=e.substring(t):o=e.substring(t,n),t=n+1,i){let s=this.value[0],a=0;switch(s.valueDec){case 0:break;case 1:a=40;break;case 2:a=80;break;default:this.value=[];return}let c=parseInt(o,10);if(isNaN(c))return;s.valueDec=c+a,i=!1}else{let s=new Jf;if(o>Number.MAX_SAFE_INTEGER){V2();let a=BigInt(o);s.valueBigInt=a}else if(s.valueDec=parseInt(o,10),isNaN(s.valueDec))return;this.value.length||(s.isFirstSid=!0,i=!0),this.value.push(s)}while(n!==-1)}toString(){let e="",t=!1;for(let n=0;n<this.value.length;n++){t=this.value[n].isHexOnly;let o=this.value[n].toString();n!==0&&(e=`${e}.`),t?(o=`{${o}}`,this.value[n].isFirstSid?e=`2.{${o} - 80}`:e+=o):e+=o}return e}toJSON(){let e={...super.toJSON(),value:this.toString(),sidArray:[]};for(let t=0;t<this.value.length;t++)e.sidArray.push(this.value[t].toJSON());return e}};Y2.NAME="ObjectIdentifierValueBlock";var ZI,Bn=class extends Wt{getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}constructor(e={}){super(e,Y2),this.idBlock.tagClass=1,this.idBlock.tagNumber=6}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};ZI=Bn;ce.ObjectIdentifier=ZI;Bn.NAME="OBJECT IDENTIFIER";var eh=class extends ai(Ki){constructor({valueDec:e=0,...t}={}){super(t),this.valueDec=e}fromBER(e,t,n){if(n===0)return t;let o=Me.BufferSourceConverter.toUint8Array(e);if(!Hi(this,o,t,n))return-1;let i=o.subarray(t,t+n);this.valueHexView=new Uint8Array(n);for(let a=0;a<n&&(this.valueHexView[a]=i[a]&127,this.blockLength++,(i[a]&128)!==0);a++);let s=new Uint8Array(this.blockLength);for(let a=0;a<this.blockLength;a++)s[a]=this.valueHexView[a];return this.valueHexView=s,(i[this.blockLength-1]&128)!==0?(this.error="End of input reached before message was fully decoded",-1):(this.valueHexView[0]===0&&this.warnings.push("Needlessly long format of SID encoding"),this.blockLength<=8?this.valueDec=lc(this.valueHexView,7):(this.isHexOnly=!0,this.warnings.push("Too big SID for decoding, hex only")),t+this.blockLength)}toBER(e){if(this.isHexOnly){if(e)return new ArrayBuffer(this.valueHexView.byteLength);let o=this.valueHexView,i=new Uint8Array(this.blockLength);for(let s=0;s<this.blockLength-1;s++)i[s]=o[s]|128;return i[this.blockLength-1]=o[this.blockLength-1],i.buffer}let t=Ks(this.valueDec,7);if(t.byteLength===0)return this.error="Error during encoding SID value",Fo;let n=new Uint8Array(t.byteLength);if(!e){let o=new Uint8Array(t),i=t.byteLength-1;for(let s=0;s<i;s++)n[s]=o[s]|128;n[i]=o[i]}return n.buffer}toString(){let e="";return this.isHexOnly?e=Me.Convert.ToHex(this.valueHexView):e=this.valueDec.toString(),e}toJSON(){return{...super.toJSON(),valueDec:this.valueDec}}};eh.NAME="relativeSidBlock";var Q2=class extends yr{constructor({value:e=ln,...t}={}){super(t),this.value=[],e&&this.fromString(e)}fromBER(e,t,n){let o=t;for(;n>0;){let i=new eh;if(o=i.fromBER(e,o,n),o===-1)return this.blockLength=0,this.error=i.error,o;this.blockLength+=i.blockLength,n-=i.blockLength,this.value.push(i)}return o}toBER(e,t){let n=[];for(let o=0;o<this.value.length;o++){let i=this.value[o].toBER(e);if(i.byteLength===0)return this.error=this.value[o].error,Fo;n.push(i)}return h7(n)}fromString(e){this.value=[];let t=0,n=0,o="";do{n=e.indexOf(".",t),n===-1?o=e.substring(t):o=e.substring(t,n),t=n+1;let i=new eh;if(i.valueDec=parseInt(o,10),isNaN(i.valueDec))return!0;this.value.push(i)}while(n!==-1);return!0}toString(){let e="",t=!1;for(let n=0;n<this.value.length;n++){t=this.value[n].isHexOnly;let o=this.value[n].toString();n!==0&&(e=`${e}.`),t&&(o=`{${o}}`),e+=o}return e}toJSON(){let e={...super.toJSON(),value:this.toString(),sidArray:[]};for(let t=0;t<this.value.length;t++)e.sidArray.push(this.value[t].toJSON());return e}};Q2.NAME="RelativeObjectIdentifierValueBlock";var JI,th=class extends Wt{getValue(){return this.valueBlock.toString()}setValue(e){this.valueBlock.fromString(e)}constructor(e={}){super(e,Q2),this.idBlock.tagClass=1,this.idBlock.tagNumber=13}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.valueBlock.toString()||"empty"}`}toJSON(){return{...super.toJSON(),value:this.getValue()}}};JI=th;ce.RelativeObjectIdentifier=JI;th.NAME="RelativeObjectIdentifier";var eT,_t=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=16}};eT=_t;ce.Sequence=eT;_t.NAME="SEQUENCE";var tT,dn=class extends Zt{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=17}};tT=dn;ce.Set=tT;dn.NAME="SET";var Z2=class extends ai(yr){constructor({...e}={}){super(e),this.isHexOnly=!0,this.value=ln}toJSON(){return{...super.toJSON(),value:this.value}}};Z2.NAME="StringValueBlock";var J2=class extends Z2{};J2.NAME="SimpleStringValueBlock";var Xr=class extends Yf{constructor({...e}={}){super(e,J2)}fromBuffer(e){this.valueBlock.value=String.fromCharCode.apply(null,Me.BufferSourceConverter.toUint8Array(e))}fromString(e){let t=e.length,n=this.valueBlock.valueHexView=new Uint8Array(t);for(let o=0;o<t;o++)n[o]=e.charCodeAt(o);this.valueBlock.value=e}};Xr.NAME="SIMPLE STRING";var eg=class extends Xr{fromBuffer(e){this.valueBlock.valueHexView=Me.BufferSourceConverter.toUint8Array(e);try{this.valueBlock.value=Me.Convert.ToUtf8String(e)}catch(t){this.warnings.push(`Error during "decodeURIComponent": ${t}, using raw string`),this.valueBlock.value=Me.Convert.ToBinary(e)}}fromString(e){this.valueBlock.valueHexView=new Uint8Array(Me.Convert.FromUtf8String(e)),this.valueBlock.value=e}};eg.NAME="Utf8StringValueBlock";var rT,Zn=class extends eg{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=12}};rT=Zn;ce.Utf8String=rT;Zn.NAME="UTF8String";var tg=class extends Xr{fromBuffer(e){this.valueBlock.value=Me.Convert.ToUtf16String(e),this.valueBlock.valueHexView=Me.BufferSourceConverter.toUint8Array(e)}fromString(e){this.valueBlock.value=e,this.valueBlock.valueHexView=new Uint8Array(Me.Convert.FromUtf16String(e))}};tg.NAME="BmpStringValueBlock";var nT,fc=class extends tg{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=30}};nT=fc;ce.BmpString=nT;fc.NAME="BMPString";var rg=class extends Xr{fromBuffer(e){let t=ArrayBuffer.isView(e)?e.slice().buffer:e.slice(0),n=new Uint8Array(t);for(let o=0;o<n.length;o+=4)n[o]=n[o+3],n[o+1]=n[o+2],n[o+2]=0,n[o+3]=0;this.valueBlock.value=String.fromCharCode.apply(null,new Uint32Array(t))}fromString(e){let t=e.length,n=this.valueBlock.valueHexView=new Uint8Array(t*4);for(let o=0;o<t;o++){let i=Ks(e.charCodeAt(o),8),s=new Uint8Array(i);if(s.length>4)continue;let a=4-s.length;for(let c=s.length-1;c>=0;c--)n[o*4+c+a]=s[c]}this.valueBlock.value=e}};rg.NAME="UniversalStringValueBlock";var oT,hc=class extends rg{constructor({...e}={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=28}};oT=hc;ce.UniversalString=oT;hc.NAME="UniversalString";var iT,pc=class extends Xr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=18}};iT=pc;ce.NumericString=iT;pc.NAME="NumericString";var sT,mc=class extends Xr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=19}};sT=mc;ce.PrintableString=sT;mc.NAME="PrintableString";var aT,gc=class extends Xr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=20}};aT=gc;ce.TeletexString=aT;gc.NAME="TeletexString";var cT,yc=class extends Xr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=21}};cT=yc;ce.VideotexString=cT;yc.NAME="VideotexString";var lT,wc=class extends Xr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=22}};lT=wc;ce.IA5String=lT;wc.NAME="IA5String";var uT,bc=class extends Xr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=25}};uT=bc;ce.GraphicString=uT;bc.NAME="GraphicString";var dT,Hs=class extends Xr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=26}};dT=Hs;ce.VisibleString=dT;Hs.NAME="VisibleString";var fT,xc=class extends Xr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=27}};fT=xc;ce.GeneralString=fT;xc.NAME="GeneralString";var hT,vc=class extends Xr{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=29}};hT=vc;ce.CharacterString=hT;vc.NAME="CharacterString";var pT,qs=class extends Hs{constructor({value:e,valueDate:t,...n}={}){if(super(n),this.year=0,this.month=0,this.day=0,this.hour=0,this.minute=0,this.second=0,e){this.fromString(e),this.valueBlock.valueHexView=new Uint8Array(e.length);for(let o=0;o<e.length;o++)this.valueBlock.valueHexView[o]=e.charCodeAt(o)}t&&(this.fromDate(t),this.valueBlock.valueHexView=new Uint8Array(this.toBuffer())),this.idBlock.tagClass=1,this.idBlock.tagNumber=23}fromBuffer(e){this.fromString(String.fromCharCode.apply(null,Me.BufferSourceConverter.toUint8Array(e)))}toBuffer(){let e=this.toString(),t=new ArrayBuffer(e.length),n=new Uint8Array(t);for(let o=0;o<e.length;o++)n[o]=e.charCodeAt(o);return t}fromDate(e){this.year=e.getUTCFullYear(),this.month=e.getUTCMonth()+1,this.day=e.getUTCDate(),this.hour=e.getUTCHours(),this.minute=e.getUTCMinutes(),this.second=e.getUTCSeconds()}toDate(){return new Date(Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second))}fromString(e){let n=/(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})Z/ig.exec(e);if(n===null){this.error="Wrong input string for conversion";return}let o=parseInt(n[1],10);o>=50?this.year=1900+o:this.year=2e3+o,this.month=parseInt(n[2],10),this.day=parseInt(n[3],10),this.hour=parseInt(n[4],10),this.minute=parseInt(n[5],10),this.second=parseInt(n[6],10)}toString(e="iso"){if(e==="iso"){let t=new Array(7);return t[0]=cn(this.year<2e3?this.year-1900:this.year-2e3,2),t[1]=cn(this.month,2),t[2]=cn(this.day,2),t[3]=cn(this.hour,2),t[4]=cn(this.minute,2),t[5]=cn(this.second,2),t[6]="Z",t.join("")}return super.toString(e)}onAsciiEncoding(){return`${this.constructor.NAME} : ${this.toDate().toISOString()}`}toJSON(){return{...super.toJSON(),year:this.year,month:this.month,day:this.day,hour:this.hour,minute:this.minute,second:this.second}}};pT=qs;ce.UTCTime=pT;qs.NAME="UTCTime";var mT,Ec=class extends qs{constructor(e={}){var t;super(e),(t=this.millisecond)!==null&&t!==void 0||(this.millisecond=0),this.idBlock.tagClass=1,this.idBlock.tagNumber=24}fromDate(e){super.fromDate(e),this.millisecond=e.getUTCMilliseconds()}toDate(){let e=Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second,this.millisecond);return new Date(e)}fromString(e){let t=!1,n="",o="",i=0,s,a=0,c=0;if(e[e.length-1]==="Z")n=e.substring(0,e.length-1),t=!0;else{let d=new Number(e[e.length-1]);if(isNaN(d.valueOf()))throw new Error("Wrong input string for conversion");n=e}if(t){if(n.indexOf("+")!==-1)throw new Error("Wrong input string for conversion");if(n.indexOf("-")!==-1)throw new Error("Wrong input string for conversion")}else{let d=1,h=n.indexOf("+"),m="";if(h===-1&&(h=n.indexOf("-"),d=-1),h!==-1){if(m=n.substring(h+1),n=n.substring(0,h),m.length!==2&&m.length!==4)throw new Error("Wrong input string for conversion");let g=parseInt(m.substring(0,2),10);if(isNaN(g.valueOf()))throw new Error("Wrong input string for conversion");if(a=d*g,m.length===4){if(g=parseInt(m.substring(2,4),10),isNaN(g.valueOf()))throw new Error("Wrong input string for conversion");c=d*g}}}let l=n.indexOf(".");if(l===-1&&(l=n.indexOf(",")),l!==-1){let d=new Number(`0${n.substring(l)}`);if(isNaN(d.valueOf()))throw new Error("Wrong input string for conversion");i=d.valueOf(),o=n.substring(0,l)}else o=n;switch(!0){case o.length===8:if(s=/(\d{4})(\d{2})(\d{2})/ig,l!==-1)throw new Error("Wrong input string for conversion");break;case o.length===10:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let d=60*i;this.minute=Math.floor(d),d=60*(d-this.minute),this.second=Math.floor(d),d=1e3*(d-this.second),this.millisecond=Math.floor(d)}break;case o.length===12:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let d=60*i;this.second=Math.floor(d),d=1e3*(d-this.second),this.millisecond=Math.floor(d)}break;case o.length===14:if(s=/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/ig,l!==-1){let d=1e3*i;this.millisecond=Math.floor(d)}break;default:throw new Error("Wrong input string for conversion")}let u=s.exec(o);if(u===null)throw new Error("Wrong input string for conversion");for(let d=1;d<u.length;d++)switch(d){case 1:this.year=parseInt(u[d],10);break;case 2:this.month=parseInt(u[d],10);break;case 3:this.day=parseInt(u[d],10);break;case 4:this.hour=parseInt(u[d],10)+a;break;case 5:this.minute=parseInt(u[d],10)+c;break;case 6:this.second=parseInt(u[d],10);break;default:throw new Error("Wrong input string for conversion")}if(t===!1){let d=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.millisecond);this.year=d.getUTCFullYear(),this.month=d.getUTCMonth(),this.day=d.getUTCDay(),this.hour=d.getUTCHours(),this.minute=d.getUTCMinutes(),this.second=d.getUTCSeconds(),this.millisecond=d.getUTCMilliseconds()}}toString(e="iso"){if(e==="iso"){let t=[];return t.push(cn(this.year,4)),t.push(cn(this.month,2)),t.push(cn(this.day,2)),t.push(cn(this.hour,2)),t.push(cn(this.minute,2)),t.push(cn(this.second,2)),this.millisecond!==0&&(t.push("."),t.push(cn(this.millisecond,3))),t.push("Z"),t.join("")}return super.toString(e)}toJSON(){return{...super.toJSON(),millisecond:this.millisecond}}};mT=Ec;ce.GeneralizedTime=mT;Ec.NAME="GeneralizedTime";var gT,rh=class extends Zn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=31}};gT=rh;ce.DATE=gT;rh.NAME="DATE";var yT,nh=class extends Zn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=32}};yT=nh;ce.TimeOfDay=yT;nh.NAME="TimeOfDay";var wT,oh=class extends Zn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=33}};wT=oh;ce.DateTime=wT;oh.NAME="DateTime";var bT,ih=class extends Zn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=34}};bT=ih;ce.Duration=bT;ih.NAME="Duration";var xT,sh=class extends Zn{constructor(e={}){super(e),this.idBlock.tagClass=1,this.idBlock.tagNumber=14}};xT=sh;ce.TIME=xT;sh.NAME="TIME";var si=class{constructor({name:e=ln,optional:t=!1}={}){this.name=e,this.optional=t}},ku=class extends si{constructor({value:e=[],...t}={}){super(t),this.value=e}},Sc=class extends si{constructor({value:e=new si,local:t=!1,...n}={}){super(n),this.value=e,this.local=t}},f7=class{get data(){return this.dataView.slice().buffer}set data(e){this.dataView=Me.BufferSourceConverter.toUint8Array(e)}constructor({data:e=ng}={}){this.dataView=Me.BufferSourceConverter.toUint8Array(e)}fromBER(e,t,n){let o=t+n;return this.dataView=Me.BufferSourceConverter.toUint8Array(e).subarray(t,o),o}toBER(e){return this.dataView.slice().buffer}};function Vs(r,e,t){if(t instanceof ku){for(let i of t.value)if(Vs(r,e,i).verified)return{verified:!0,result:r};{let i={verified:!1,result:{error:"Wrong values for Choice type"}};return t.hasOwnProperty(d7)&&(i.name=t.name),i}}if(t instanceof si)return t.hasOwnProperty(d7)&&(r[t.name]=e),{verified:!0,result:r};if(!(r instanceof Object))return{verified:!1,result:{error:"Wrong root object"}};if(!(e instanceof Object))return{verified:!1,result:{error:"Wrong ASN.1 data"}};if(!(t instanceof Object))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(!(aK in t))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(!(dK in t.idBlock))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(!(fK in t.idBlock))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};let n=t.idBlock.toBER(!1);if(n.byteLength===0)return{verified:!1,result:{error:"Error encoding idBlock for ASN.1 schema"}};if(t.idBlock.fromBER(n,0,n.byteLength)===-1)return{verified:!1,result:{error:"Error decoding idBlock for ASN.1 schema"}};if(t.idBlock.hasOwnProperty(cK)===!1)return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(t.idBlock.tagClass!==e.idBlock.tagClass)return{verified:!1,result:r};if(t.idBlock.hasOwnProperty(lK)===!1)return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(t.idBlock.tagNumber!==e.idBlock.tagNumber)return{verified:!1,result:r};if(t.idBlock.hasOwnProperty(uK)===!1)return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(t.idBlock.isConstructed!==e.idBlock.isConstructed)return{verified:!1,result:r};if(!(sK in t.idBlock))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};if(t.idBlock.isHexOnly!==e.idBlock.isHexOnly)return{verified:!1,result:r};if(t.idBlock.isHexOnly){if(!(FI in t.idBlock))return{verified:!1,result:{error:"Wrong ASN.1 schema"}};let i=t.idBlock.valueHexView,s=e.idBlock.valueHexView;if(i.length!==s.length)return{verified:!1,result:r};for(let a=0;a<i.length;a++)if(i[a]!==s[1])return{verified:!1,result:r}}if(t.name&&(t.name=t.name.replace(/^\s+|\s+$/g,ln),t.name&&(r[t.name]=e)),t instanceof ce.Constructed){let i=0,s={verified:!1,result:{error:"Unknown error"}},a=t.valueBlock.value.length;if(a>0&&t.valueBlock.value[0]instanceof Sc&&(a=e.valueBlock.value.length),a===0)return{verified:!0,result:r};if(e.valueBlock.value.length===0&&t.valueBlock.value.length!==0){let c=!0;for(let l=0;l<t.valueBlock.value.length;l++)c=c&&(t.valueBlock.value[l].optional||!1);return c?{verified:!0,result:r}:(t.name&&(t.name=t.name.replace(/^\s+|\s+$/g,ln),t.name&&delete r[t.name]),r.error="Inconsistent object length",{verified:!1,result:r})}for(let c=0;c<a;c++)if(c-i>=e.valueBlock.value.length){if(t.valueBlock.value[c].optional===!1){let l={verified:!1,result:r};return r.error="Inconsistent length between ASN.1 data and schema",t.name&&(t.name=t.name.replace(/^\s+|\s+$/g,ln),t.name&&(delete r[t.name],l.name=t.name)),l}}else if(t.valueBlock.value[0]instanceof Sc){if(s=Vs(r,e.valueBlock.value[c],t.valueBlock.value[0].value),s.verified===!1)if(t.valueBlock.value[0].optional)i++;else return t.name&&(t.name=t.name.replace(/^\s+|\s+$/g,ln),t.name&&delete r[t.name]),s;if(d7 in t.valueBlock.value[0]&&t.valueBlock.value[0].name.length>0){let l={};hK in t.valueBlock.value[0]&&t.valueBlock.value[0].local?l=e:l=r,typeof l[t.valueBlock.value[0].name]>"u"&&(l[t.valueBlock.value[0].name]=[]),l[t.valueBlock.value[0].name].push(e.valueBlock.value[c])}}else if(s=Vs(r,e.valueBlock.value[c-i],t.valueBlock.value[c]),s.verified===!1)if(t.valueBlock.value[c].optional)i++;else return t.name&&(t.name=t.name.replace(/^\s+|\s+$/g,ln),t.name&&delete r[t.name]),s;if(s.verified===!1){let c={verified:!1,result:r};return t.name&&(t.name=t.name.replace(/^\s+|\s+$/g,ln),t.name&&(delete r[t.name],c.name=t.name)),c}return{verified:!0,result:r}}if(t.primitiveSchema&&FI in e.valueBlock){let i=Pu(e.valueBlock.valueHexView);if(i.offset===-1){let s={verified:!1,result:i.result};return t.name&&(t.name=t.name.replace(/^\s+|\s+$/g,ln),t.name&&(delete r[t.name],s.name=t.name)),s}return Vs(r,i.result,t.primitiveSchema)}return{verified:!0,result:r}}function wK(r,e){if(!(e instanceof Object))return{verified:!1,result:{error:"Wrong ASN.1 schema type"}};let t=Pu(Me.BufferSourceConverter.toUint8Array(r));return t.offset===-1?{verified:!1,result:t.result}:Vs(t.result,t.result,e)}async function og(r,e){let n=await Iu.create().encrypt(r,e);return Ht.encode(n)}async function m7(r,e,t){if(r.type==="RSA")return EK(r,e,t);if(r.type==="Ed25519")return bK(r,e,t);if(r.type==="secp256k1")return xK(r,e,t);if(r.type==="ECDSA")return vK(r,e,t);throw new ho}async function bK(r,e,t="libp2p-key"){if(t==="libp2p-key")return og(Ua(r),e);throw new D(`export format '${t}' is not supported`)}async function xK(r,e,t="libp2p-key"){if(t==="libp2p-key")return og(Ua(r),e);throw new D("Export format is not supported")}async function vK(r,e,t="libp2p-key"){if(t==="libp2p-key")return og(Ua(r),e);throw new D(`export format '${t}' is not supported`)}async function EK(r,e,t="pkcs-8"){if(t==="pkcs-8")return SK(r,e);if(t==="libp2p-key")return og(Ua(r),e);throw new D("Export format is not supported")}async function SK(r,e){let t=en.get(),o=new _t({value:[new Ln({value:0}),new _t({value:[new Bn({value:"1.2.840.113549.1.1.1"}),new un]}),new Ur({valueHex:r.raw})]}).toBER(),i=new Uint8Array(o,0,o.byteLength),s=qr(16),a=await b1(Si,e,s,{c:1e4,dkLen:32}),c=qr(16),l=await t.subtle.importKey("raw",a,"AES-CBC",!1,["encrypt"]),u=await t.subtle.encrypt({name:"AES-CBC",iv:c},l,i),d=new _t({value:[new Ur({valueHex:s}),new Ln({value:1e4}),new Ln({value:32}),new _t({value:[new Bn({value:"1.2.840.113549.2.11"}),new un]})]}),h=new _t({value:[new Bn({value:"1.2.840.113549.1.5.13"}),new _t({value:[new _t({value:[new Bn({value:"1.2.840.113549.1.5.12"}),d]}),new _t({value:[new Bn({value:"2.16.840.1.101.3.4.1.42"}),new Ur({valueHex:c})]})]})]}),g=new _t({value:[h,new Ur({valueHex:u})]}).toBER(),w=new Uint8Array(g,0,g.byteLength);return["-----BEGIN ENCRYPTED PRIVATE KEY-----",...M(w,"base64pad").split(/(.{64})/).filter(Boolean),"-----END ENCRYPTED PRIVATE KEY-----"].join(`
19
+ `)}async function g7(r,e){try{let t=await AK(r,e);return ev(t)}catch{}if(!r.includes("BEGIN"))throw new D("Encrypted key was not a libp2p-key or a PEM file");return _K(r,e)}async function AK(r,e){let t=Ht.decode(r);return Iu.create().decrypt(t,e)}async function _K(r,e){let t=en.get(),n;if(r.includes("-----BEGIN ENCRYPTED PRIVATE KEY-----")){let i=V(r.replace("-----BEGIN ENCRYPTED PRIVATE KEY-----","").replace("-----END ENCRYPTED PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=Mn(i),{iv:a,salt:c,iterations:l,keySize:u,cipherText:d}=IK(s),h=await b1(Si,e,c,{c:l,dkLen:u}),m=await t.subtle.importKey("raw",h,"AES-CBC",!1,["decrypt"]),g=ah(await t.subtle.decrypt({name:"AES-CBC",iv:a},m,d)),{result:w}=Mn(g);n=ST(w)}else if(r.includes("-----BEGIN PRIVATE KEY-----")){let i=V(r.replace("-----BEGIN PRIVATE KEY-----","").replace("-----END PRIVATE KEY-----","").replace(/\n/g,"").trim(),"base64pad"),{result:s}=Mn(i);n=ST(s)}else throw new D("Could not parse private key from PEM data");let o=tv(n);if(o.type!=="RSA")throw new D("Could not parse RSA private key from PEM data");return o}function IK(r){let e=r.valueBlock.value[0];if(e.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.13")throw new D("Only pkcs5PBES2 encrypted private keys are supported");let n=e.valueBlock.value[1].valueBlock.value[0];if(n.valueBlock.value[0].toString()!=="OBJECT IDENTIFIER : 1.2.840.113549.1.5.12")throw new D("Only pkcs5PBKDF2 key derivation functions are supported");let i=n.valueBlock.value[1],s=ah(i.valueBlock.value[0].getValue()),a=1e4,c=32;if(i.valueBlock.value.length===3)a=Number(i.valueBlock.value[1].toBigInt()),c=Number(i.valueBlock.value[2].toBigInt());else if(i.valueBlock.value.length===2)throw new D("Could not derive key size and iterations from PEM file - please use @libp2p/rsa to re-import your key");let l=e.valueBlock.value[1].valueBlock.value[1],u=l.valueBlock.value[0].toString();if(u!=="OBJECT IDENTIFIER : 1.2.840.113549.3.7"){if(u!=="OBJECT IDENTIFIER : 1.3.14.3.2.7"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.2"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.22"){if(u!=="OBJECT IDENTIFIER : 2.16.840.1.101.3.4.1.42")throw new D("Only AES-CBC encryption schemes are supported")}}}}let d=ah(l.valueBlock.value[1].getValue());return{cipherText:ah(r.valueBlock.value[1].getValue()),salt:s,iterations:a,keySize:c,iv:d}}function ST(r){return ah(r.valueBlock.value[2].getValue())}function ah(r){return new Uint8Array(r,0,r.byteLength)}var TK="/pkcs8/",w7="/info/",ch=new WeakMap,Ac={minKeyLength:112/8,minSaltLength:128/8,minIterationCount:1e3},y7={dek:{keyLength:512/8,iterationCount:1e4,salt:"you should override this value with a crypto secure random number",hash:"sha2-512"}};function Ru(r){return r==null||typeof r!="string"?!1:r===(0,AT.default)(r.trim())&&r.length>0}async function wr(){let t=Math.random()*800+200;await new Promise(n=>setTimeout(n,t))}function _c(r){return new ct(TK+r)}function Nu(r){return new ct(w7+r)}async function CK(r){let e=Ua(r),t=await yt.digest(e);return He.encode(t.bytes).substring(1)}var ig=class{components;init;log;self;constructor(e,t){if(this.components=e,this.log=e.logger.forComponent("libp2p:keychain"),this.init=_u(y7,t),this.self=t.selfKey??"self",this.init.pass!=null&&this.init.pass?.length<20)throw new Error("pass must be least 20 characters");if(this.init.dek?.keyLength!=null&&this.init.dek.keyLength<Ac.minKeyLength)throw new Error(`dek.keyLength must be least ${Ac.minKeyLength} bytes`);if(this.init.dek?.salt?.length!=null&&this.init.dek.salt.length<Ac.minSaltLength)throw new Error(`dek.saltLength must be least ${Ac.minSaltLength} bytes`);if(this.init.dek?.iterationCount!=null&&this.init.dek.iterationCount<Ac.minIterationCount)throw new Error(`dek.iterationCount must be least ${Ac.minIterationCount}`);let n=this.init.pass!=null&&this.init.dek?.salt!=null?Jd(this.init.pass,this.init.dek?.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";ch.set(this,{dek:n})}[Symbol.toStringTag]="@libp2p/keychain";[Xe]=["@libp2p/keychain"];static generateOptions(){let e=Object.assign({},y7),t=Math.ceil(Ac.minSaltLength/3)*3;return e.dek.salt=M(qr(t),"base64"),e}static get options(){return y7}async findKeyByName(e){if(!Ru(e))throw await wr(),new D(`Invalid key name '${e}'`);let t=Nu(e);try{let n=await this.components.datastore.get(t);return JSON.parse(M(n))}catch(n){throw await wr(),this.log.error(n),new ze(`Key '${e}' does not exist.`)}}async findKeyById(e){try{let t={prefix:w7};for await(let n of this.components.datastore.query(t)){let o=JSON.parse(M(n.value));if(o.id===e)return o}throw new D(`Key with id '${e}' does not exist.`)}catch(t){throw await wr(),t}}async importKey(e,t){if(!Ru(e))throw await wr(),new D(`Invalid key name '${e}'`);if(t==null)throw await wr(),new D("Key is required");let n=_c(e);if(await this.components.datastore.has(n))throw await wr(),new D(`Key '${e}' already exists`);let i,s;try{i=await CK(t);let l=ch.get(this);if(l==null)throw new D("dek missing");let u=l.dek;s=await m7(t,u,t.type==="RSA"?"pkcs-8":"libp2p-key")}catch(l){throw await wr(),l}let a={name:e,id:i},c=this.components.datastore.batch();return c.put(n,V(s)),c.put(Nu(e),V(JSON.stringify(a))),await c.commit(),a}async exportKey(e){if(!Ru(e))throw await wr(),new D(`Invalid key name '${e}'`);let t=_c(e);try{let n=await this.components.datastore.get(t),o=M(n),i=ch.get(this);if(i==null)throw new D("dek missing");let s=i.dek;return await g7(o,s)}catch(n){throw await wr(),n}}async removeKey(e){if(!Ru(e)||e===this.self)throw await wr(),new D(`Invalid key name '${e}'`);let t=_c(e),n=await this.findKeyByName(e),o=this.components.datastore.batch();return o.delete(t),o.delete(Nu(e)),await o.commit(),n}async listKeys(){let e={prefix:w7},t=[];for await(let n of this.components.datastore.query(e))t.push(JSON.parse(M(n.value)));return t}async renameKey(e,t){if(!Ru(e)||e===this.self)throw await wr(),new D(`Invalid old key name '${e}'`);if(!Ru(t)||t===this.self)throw await wr(),new D(`Invalid new key name '${t}'`);let n=_c(e),o=_c(t),i=Nu(e),s=Nu(t);if(await this.components.datastore.has(o))throw await wr(),new D(`Key '${t}' already exists`);try{let c=await this.components.datastore.get(n),l=await this.components.datastore.get(i),u=JSON.parse(M(l));u.name=t;let d=this.components.datastore.batch();return d.put(o,c),d.put(s,V(JSON.stringify(u))),d.delete(n),d.delete(i),await d.commit(),u}catch(c){throw await wr(),c}}async rotateKeychainPass(e,t){if(typeof e!="string")throw await wr(),new D(`Invalid old pass type '${typeof e}'`);if(typeof t!="string")throw await wr(),new D(`Invalid new pass type '${typeof t}'`);if(t.length<20)throw await wr(),new D(`Invalid pass length ${t.length}`);this.log("recreating keychain");let n=ch.get(this);if(n==null)throw new D("dek missing");let o=n.dek;this.init.pass=t;let i=t!=null&&this.init.dek?.salt!=null?Jd(t,this.init.dek.salt,this.init.dek?.iterationCount,this.init.dek?.keyLength,this.init.dek?.hash):"";ch.set(this,{dek:i});let s=await this.listKeys();for(let a of s){let c=await this.components.datastore.get(_c(a.name)),l=M(c),u=await g7(l,o),d=i.toString(),h=await m7(u,d,u.type==="RSA"?"pkcs-8":"libp2p-key"),m=this.components.datastore.batch(),g={name:a.name,id:a.id};m.put(_c(a.name),V(h)),m.put(Nu(a.name),V(JSON.stringify(g))),await m.commit()}this.log("keychain reconstructed")}};function sg(r={}){return e=>new ig(e,r)}var Du=class{memoryStorage;points;duration;blockDuration;execEvenly;execEvenlyMinDelayMs;keyPrefix;constructor(e={}){this.points=e.points??4,this.duration=e.duration??1,this.blockDuration=e.blockDuration??0,this.execEvenly=e.execEvenly??!1,this.execEvenlyMinDelayMs=e.execEvenlyMinDelayMs??this.duration*1e3/this.points,this.keyPrefix=e.keyPrefix??"rlflx",this.memoryStorage=new b7}async consume(e,t=1,n={}){let o=this.getKey(e),i=this._getKeySecDuration(n),s=this.memoryStorage.incrby(o,t,i);if(s.remainingPoints=Math.max(this.points-s.consumedPoints,0),s.consumedPoints>this.points)throw this.blockDuration>0&&s.consumedPoints<=this.points+t&&(s=this.memoryStorage.set(o,s.consumedPoints,this.blockDuration)),new Mp("Rate limit exceeded",s);if(this.execEvenly&&s.msBeforeNext>0&&!s.isFirstInDuration){let a=Math.ceil(s.msBeforeNext/(s.remainingPoints+2));a<this.execEvenlyMinDelayMs&&(a=s.consumedPoints*this.execEvenlyMinDelayMs),await U0(a)}return s}penalty(e,t=1,n={}){let o=this.getKey(e),i=this._getKeySecDuration(n),s=this.memoryStorage.incrby(o,t,i);return s.remainingPoints=Math.max(this.points-s.consumedPoints,0),s}reward(e,t=1,n={}){let o=this.getKey(e),i=this._getKeySecDuration(n),s=this.memoryStorage.incrby(o,-t,i);return s.remainingPoints=Math.max(this.points-s.consumedPoints,0),s}block(e,t){let n=t*1e3,o=this.points+1;return this.memoryStorage.set(this.getKey(e),o,t),{remainingPoints:0,msBeforeNext:n===0?-1:n,consumedPoints:o,isFirstInDuration:!1}}set(e,t,n=0){let o=(n>=0?n:this.duration)*1e3;return this.memoryStorage.set(this.getKey(e),t,n),{remainingPoints:0,msBeforeNext:o===0?-1:o,consumedPoints:t,isFirstInDuration:!1}}get(e){let t=this.memoryStorage.get(this.getKey(e));return t!=null&&(t.remainingPoints=Math.max(this.points-t.consumedPoints,0)),t}delete(e){this.memoryStorage.delete(this.getKey(e))}_getKeySecDuration(e){return e?.customDuration!=null&&e.customDuration>=0?e.customDuration:this.duration}getKey(e){return this.keyPrefix.length>0?`${this.keyPrefix}:${e}`:e}parseKey(e){return e.substring(this.keyPrefix.length)}},b7=class{storage;constructor(){this.storage=new Map}incrby(e,t,n){let o=this.storage.get(e);if(o!=null){let i=o.expiresAt!=null?o.expiresAt.getTime()-new Date().getTime():-1;return o.expiresAt==null||i>0?(o.value+=t,{remainingPoints:0,msBeforeNext:i,consumedPoints:o.value,isFirstInDuration:!1}):this.set(e,t,n)}return this.set(e,t,n)}set(e,t,n){let o=n*1e3,i=this.storage.get(e);i!=null&&clearTimeout(i.timeoutId);let s={value:t,expiresAt:o>0?new Date(Date.now()+o):void 0};return this.storage.set(e,s),o>0&&(s.timeoutId=setTimeout(()=>{this.storage.delete(e)},o),s.timeoutId.unref!=null&&s.timeoutId.unref()),{remainingPoints:0,msBeforeNext:o===0?-1:o,consumedPoints:s.value,isFirstInDuration:!0}}get(e){let t=this.storage.get(e);if(t!=null)return{remainingPoints:0,msBeforeNext:t.expiresAt!=null?t.expiresAt.getTime()-new Date().getTime():-1,consumedPoints:t.value,isFirstInDuration:!1}}delete(e){let t=this.storage.get(e);return t!=null?(t.timeoutId!=null&&clearTimeout(t.timeoutId),this.storage.delete(e),!0):!1}};var je;(function(r){r[r.NEW_STREAM=0]="NEW_STREAM",r[r.MESSAGE_RECEIVER=1]="MESSAGE_RECEIVER",r[r.MESSAGE_INITIATOR=2]="MESSAGE_INITIATOR",r[r.CLOSE_RECEIVER=3]="CLOSE_RECEIVER",r[r.CLOSE_INITIATOR=4]="CLOSE_INITIATOR",r[r.RESET_RECEIVER=5]="RESET_RECEIVER",r[r.RESET_INITIATOR=6]="RESET_INITIATOR"})(je||(je={}));var lh=Object.freeze({0:"NEW_STREAM",1:"MESSAGE_RECEIVER",2:"MESSAGE_INITIATOR",3:"CLOSE_RECEIVER",4:"CLOSE_INITIATOR",5:"RESET_RECEIVER",6:"RESET_INITIATOR"}),x7=Object.freeze({NEW_STREAM:je.NEW_STREAM,MESSAGE:je.MESSAGE_INITIATOR,CLOSE:je.CLOSE_INITIATOR,RESET:je.RESET_INITIATOR}),_T=Object.freeze({MESSAGE:je.MESSAGE_RECEIVER,CLOSE:je.CLOSE_RECEIVER,RESET:je.RESET_RECEIVER});var v7=1<<20,kK=4<<20,ag=class{_buffer;_headerInfo;_maxMessageSize;_maxUnprocessedMessageQueueSize;constructor(e=v7,t=kK){this._buffer=new J,this._headerInfo=null,this._maxMessageSize=e,this._maxUnprocessedMessageQueueSize=t}write(e){if(e==null||e.length===0)return[];if(this._buffer.append(e),this._buffer.byteLength>this._maxUnprocessedMessageQueueSize)throw new Oe("Unprocessed message queue size too large!");let t=[];for(;this._buffer.length!==0;){if(this._headerInfo==null)try{this._headerInfo=this._decodeHeader(this._buffer)}catch(l){if(l.name==="InvalidMessageError")throw l;break}let{id:n,type:o,length:i,offset:s}=this._headerInfo;if(this._buffer.length-s<i)break;let c={id:n,type:o};(o===je.NEW_STREAM||o===je.MESSAGE_INITIATOR||o===je.MESSAGE_RECEIVER)&&(c.data=this._buffer.sublist(s,s+i)),t.push(c),this._buffer.consume(s+i),this._headerInfo=null}return t}_decodeHeader(e){let{value:t,offset:n}=TT(e),{value:o,offset:i}=TT(e,n),s=t&7;if(lh[s]==null)throw new Error(`Invalid type received: ${s}`);if(o>this._maxMessageSize)throw new Oe("Message size too large");return{id:t>>3,type:s,offset:n+i,length:o}}},PK=128,IT=127;function TT(r,e=0){let t=0,n=0,o=e,i,s=r.length;do{if(o>=s||n>49)throw e=0,new RangeError("Could not decode varint");i=r.get(o++),t+=n<28?(i&IT)<<n:(i&IT)*Math.pow(2,n),n+=7}while(i>=PK);return e=o-e,{value:t,offset:e}}var E7=10*1024,S7=class{_pool;_poolOffset;constructor(){this._pool=Ct(E7),this._poolOffset=0}write(e,t){let n=this._pool,o=this._poolOffset;Fe(e.id<<3|e.type,n,o),o+=Ce(e.id<<3|e.type),(e.type===je.NEW_STREAM||e.type===je.MESSAGE_INITIATOR||e.type===je.MESSAGE_RECEIVER)&&e.data!=null?(Fe(e.data.length,n,o),o+=Ce(e.data.length)):(Fe(0,n,o),o+=Ce(0));let i=n.subarray(this._poolOffset,o);E7-o<100?(this._pool=Ct(E7),this._poolOffset=0):this._poolOffset=o,t.append(i),(e.type===je.NEW_STREAM||e.type===je.MESSAGE_INITIATOR||e.type===je.MESSAGE_RECEIVER)&&e.data!=null&&t.append(e.data)}},RK=new S7;async function*CT(r){for await(let e of r){let t=new J;RK.write(e,t),yield t}}var cg=class extends Error{constructor(e="Stream input buffer error"){super(e),this.name="StreamInputBufferError"}};var A7=class extends Ns{name;streamId;send;types;maxDataSize;constructor(e){super(e),this.types=e.direction==="outbound"?x7:_T,this.send=e.send,this.name=e.name,this.streamId=e.streamId,this.maxDataSize=e.maxDataSize}async sendNewStream(){await this.send({id:this.streamId,type:x7.NEW_STREAM,data:new J(V(this.name))})}async sendData(e){for(e=e.sublist();e.byteLength>0;){let t=Math.min(e.byteLength,this.maxDataSize);await this.send({id:this.streamId,type:this.types.MESSAGE,data:e.sublist(0,t)}),e.consume(t)}}async sendReset(){await this.send({id:this.streamId,type:this.types.RESET})}async sendCloseWrite(){await this.send({id:this.streamId,type:this.types.CLOSE})}async sendCloseRead(){}};function kT(r){let{id:e,name:t,send:n,onEnd:o,type:i="initiator",maxMsgSize:s=v7}=r;return new A7({id:i==="initiator"?`i${e}`:`r${e}`,streamId:e,name:`${t??e}`,direction:i==="initiator"?"outbound":"inbound",maxDataSize:s,onEnd:o,send:n,log:r.logger.forComponent(`libp2p:mplex:stream:${i}:${e}`)})}var NK=1024,DK=1024,OK=1024*1024*4,LK=5,BK=500;function PT(r){let e={...r,type:`${lh[r.type]} (${r.type})`};return r.type===je.NEW_STREAM&&(e.data=M(r.data instanceof Uint8Array?r.data:r.data.subarray())),(r.type===je.MESSAGE_INITIATOR||r.type===je.MESSAGE_RECEIVER)&&(e.data=M(r.data instanceof Uint8Array?r.data:r.data.subarray(),"base16")),e}var lg=class{protocol="/mplex/6.7.0";sink;source;log;_streamId;_streams;_init;_source;closeController;rateLimiter;closeTimeout;logger;constructor(e,t){t=t??{},this.log=e.logger.forComponent("libp2p:mplex"),this.logger=e.logger,this._streamId=0,this._streams={initiators:new Map,receivers:new Map},this._init=t,this.closeTimeout=t.closeTimeout??BK,this.sink=this._createSink(),this._source=Zr({objectMode:!0,onEnd:()=>{for(let n of this._streams.initiators.values())n.destroy();for(let n of this._streams.receivers.values())n.destroy()}}),this.source=rr(this._source,n=>CT(n)),this.closeController=new AbortController,this.rateLimiter=new Du({points:t.disconnectThreshold??LK,duration:1})}get streams(){let e=[];for(let t of this._streams.initiators.values())e.push(t);for(let t of this._streams.receivers.values())e.push(t);return e}newStream(e){if(this.closeController.signal.aborted)throw new Go("Muxer already closed");let t=this._streamId++;e=e==null?t.toString():e.toString();let n=this._streams.initiators;return this._newStream({id:t,name:e,type:"initiator",registry:n})}async close(e){if(this.closeController.signal.aborted)return;let t=e?.signal??AbortSignal.timeout(this.closeTimeout);try{await Promise.all(this.streams.map(async n=>n.close({signal:t}))),this._source.end(),await this._source.onEmpty({signal:t}),this.closeController.abort()}catch(n){this.abort(n)}}abort(e){this.closeController.signal.aborted||(this.streams.forEach(t=>{t.abort(e)}),this.closeController.abort(e))}_newReceiverStream(e){let{id:t,name:n}=e,o=this._streams.receivers;return this._newStream({id:t,name:n,type:"receiver",registry:o})}_newStream(e){let{id:t,name:n,type:o,registry:i}=e;if(this.log("new %s stream %s",o,t),o==="initiator"&&this._streams.initiators.size===(this._init.maxOutboundStreams??DK))throw new ss("Too many outbound streams open");if(i.has(t))throw new Error(`${o} stream ${t} already exists!`);let c=kT({id:t,name:n,send:async l=>{this.log.enabled&&this.log.trace("%s stream %s send",o,t,PT(l)),this._source.push(l)},type:o,onEnd:()=>{this.log("%s stream with id %s and protocol %s ended",o,t,c.protocol),i.delete(t),this._init.onStreamEnd!=null&&this._init.onStreamEnd(c)},maxMsgSize:this._init.maxMsgSize,logger:this.logger});return i.set(t,c),c}_createSink(){return async t=>{let n=()=>{u0(t,this.log)};this.closeController.signal.addEventListener("abort",n);try{let o=new ag(this._init.maxMsgSize,this._init.maxUnprocessedMessageQueueSize);for await(let i of t)for(let s of o.write(i))await this._handleIncoming(s);this._source.end()}catch(o){this.log("error in sink",o),this._source.end(o)}finally{this.closeController.signal.removeEventListener("abort",n)}}}async _handleIncoming(e){let{id:t,type:n}=e;if(this.log.enabled&&this.log.trace("incoming message",PT(e)),e.type===je.NEW_STREAM){if(this._streams.receivers.size===(this._init.maxInboundStreams??NK)){this.log("too many inbound streams open"),this._source.push({id:t,type:je.RESET_RECEIVER});try{await this.rateLimiter.consume("new-stream",1)}catch{this.log("rate limit hit when opening too many new streams over the inbound stream limit - closing remote connection"),this.abort(new Error("Too many open streams"));return}return}let a=this._newReceiverStream({id:t,name:M(e.data instanceof Uint8Array?e.data:e.data.subarray())});this._init.onIncomingStream!=null&&this._init.onIncomingStream(a);return}let i=((n&1)===1?this._streams.initiators:this._streams.receivers).get(t);if(i==null){this.log("missing stream %s for message type %s",t,lh[n]);try{await this.rateLimiter.consume("missing-stream",1)}catch{this.log("rate limit hit when receiving messages for streams that do not exist - closing remote connection"),this.abort(new Error("Too many messages for missing streams"));return}return}let s=this._init.maxStreamBufferSize??OK;try{switch(n){case je.MESSAGE_INITIATOR:case je.MESSAGE_RECEIVER:if(i.sourceReadableLength()>s)throw this._source.push({id:e.id,type:n===je.MESSAGE_INITIATOR?je.RESET_RECEIVER:je.RESET_INITIATOR}),new cg("Input buffer full - increase Mplex maxBufferSize to accommodate slow consumers");i.sourcePush(e.data);break;case je.CLOSE_INITIATOR:case je.CLOSE_RECEIVER:i.remoteCloseWrite();break;case je.RESET_INITIATOR:case je.RESET_RECEIVER:i.reset();break;default:this.log("unknown message type %s",n)}}catch(a){this.log.error("error while processing message",a),i.abort(a)}}};var _7=class{protocol="/mplex/6.7.0";_init;components;constructor(e,t={}){this.components=e,this._init=t}[Symbol.toStringTag]="@libp2p/mplex";[Xe]=["@libp2p/stream-multiplexing"];createStreamMuxer(e={}){return new lg(this.components,{...e,...this._init})}};function RT(r={}){return e=>new _7(e,r)}var NT="1.0.0",DT="ping",OT="ipfs";var ug=class{protocol;components;started;timeout;maxInboundStreams;maxOutboundStreams;runOnLimitedConnection;log;constructor(e,t={}){this.components=e,this.log=e.logger.forComponent("libp2p:ping"),this.started=!1,this.protocol=`/${t.protocolPrefix??OT}/${DT}/${NT}`,this.timeout=t.timeout??1e4,this.maxInboundStreams=t.maxInboundStreams??2,this.maxOutboundStreams=t.maxOutboundStreams??1,this.runOnLimitedConnection=t.runOnLimitedConnection??!0,this.handleMessage=this.handleMessage.bind(this)}[Symbol.toStringTag]="@libp2p/ping";[Xe]=["@libp2p/ping"];async start(){await this.components.registrar.handle(this.protocol,this.handleMessage,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnection}),this.started=!0}async stop(){await this.components.registrar.unhandle(this.protocol),this.started=!1}isStarted(){return this.started}handleMessage(e){this.log("incoming ping from %p",e.connection.remotePeer);let{stream:t}=e,n=Date.now(),o=Qt(t),i=!1;Promise.resolve().then(async()=>{for(;;){let s=AbortSignal.timeout(this.timeout);s.addEventListener("abort",()=>{t?.abort(new zo("ping timeout"))});let a=await o.read({bytes:32,signal:s});await o.write(a,{signal:s}),i=!0}}).catch(s=>{i&&s.name==="UnexpectedEOFError"&&t.readStatus!=="ready"||(this.log.error("incoming ping from %p failed with error - %e",e.connection.remotePeer,s),t?.abort(s))}).finally(()=>{let s=Date.now()-n;this.log("incoming ping from %p complete in %dms",e.connection.remotePeer,s);let a=AbortSignal.timeout(this.timeout);t.close({signal:a}).catch(c=>{this.log.error("error closing ping stream from %p - %e",e.connection.remotePeer,c),t?.abort(c)})})}async ping(e,t={}){this.log("pinging %p",e);let n=Date.now(),o=qr(32),i=await this.components.connectionManager.openConnection(e,t),s;if(t.signal==null){let a=AbortSignal.timeout(this.timeout);t={...t,signal:a}}try{s=await i.newStream(this.protocol,{...t,runOnLimitedConnection:this.runOnLimitedConnection});let a=Qt(s),[,c]=await Promise.all([a.write(o,t),a.read({...t,bytes:32})]),l=Date.now()-n;if(!ge(o,c.subarray()))throw new Dp(`Received wrong ping ack after ${l}ms`);return this.log("ping %p complete in %dms",i.remotePeer,l),l}catch(a){throw this.log.error("error while pinging %p",i.remotePeer,a),s?.abort(a),a}finally{s!=null&&await s.close(t)}}};function LT(r={}){return e=>new ug(e,r)}var Fr;(function(r){let e;(function(o){o.FIN="FIN",o.STOP_SENDING="STOP_SENDING",o.RESET="RESET",o.FIN_ACK="FIN_ACK"})(e=r.Flag||(r.Flag={}));let t;(function(o){o[o.FIN=0]="FIN",o[o.STOP_SENDING=1]="STOP_SENDING",o[o.RESET=2]="RESET",o[o.FIN_ACK=3]="FIN_ACK"})(t||(t={})),function(o){o.codec=()=>Et(t)}(e=r.Flag||(r.Flag={}));let n;r.codec=()=>(n==null&&(n=_e((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.flag!=null&&(i.uint32(8),r.Flag.codec().encode(o.flag,i)),o.message!=null&&(i.uint32(18),i.bytes(o.message)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.flag=r.Flag.codec().decode(o);break}case 2:{a.message=o.bytes();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>Ae(o,r.codec()),r.decode=(o,i)=>Se(o,r.codec(),i)})(Fr||(Fr={}));var BT=["stun:stun.l.google.com:19302","stun:global.stun.twilio.com:3478","stun:stun.cloudflare.com:3478","stun:stun.services.mozilla.com:3478"],T7=Array.from("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"),MT="libp2p+webrtc+v1/";var UT=466,FT=2*1024*1024,$T=30*1e3,Ou=16*1024;function $K(r=Ou){let e=Ce(r-Ce(r)),t=1+Ce(Object.keys(Fr.Flag).length-1),n=1,o=r-e-t-n,i=Ce(o);return e+t+n+i}var KT=$K(),VT=5e3,HT=5e3,qT=3e4,C7="/webrtc",uh="/webrtc-signaling/0.0.1",jT="/libp2p/webrtc-direct/certificate",WT="webrtc-direct-certificate-private-key";var GT=12096e5,k7=864e5;var zT=function(r,e,t){if(t||arguments.length===2)for(var n=0,o=e.length,i;n<o;n++)(i||!(n in e))&&(i||(i=Array.prototype.slice.call(e,0,n)),i[n]=e[n]);return r.concat(i||Array.prototype.slice.call(e))},KK=function(){function r(e,t,n){this.name=e,this.version=t,this.os=n,this.type="browser"}return r}();var VK=function(){function r(e){this.version=e,this.type="node",this.name="node",this.os=process.platform}return r}();var HK=function(){function r(e,t,n,o){this.name=e,this.version=t,this.os=n,this.bot=o,this.type="bot-device"}return r}();var qK=function(){function r(){this.type="bot",this.bot=!0,this.name="bot",this.version=null,this.os=null}return r}();var jK=function(){function r(){this.type="react-native",this.name="react-native",this.version=null,this.os=null}return r}();var WK=/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/,GK=/(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/,XT=3,zK=[["aol",/AOLShield\/([0-9\._]+)/],["edge",/Edge\/([0-9\._]+)/],["edge-ios",/EdgiOS\/([0-9\._]+)/],["yandexbrowser",/YaBrowser\/([0-9\._]+)/],["kakaotalk",/KAKAOTALK\s([0-9\.]+)/],["samsung",/SamsungBrowser\/([0-9\.]+)/],["silk",/\bSilk\/([0-9._-]+)\b/],["miui",/MiuiBrowser\/([0-9\.]+)$/],["beaker",/BeakerBrowser\/([0-9\.]+)/],["edge-chromium",/EdgA?\/([0-9\.]+)/],["chromium-webview",/(?!Chrom.*OPR)wv\).*Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["chrome",/(?!Chrom.*OPR)Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["phantomjs",/PhantomJS\/([0-9\.]+)(:?\s|$)/],["crios",/CriOS\/([0-9\.]+)(:?\s|$)/],["firefox",/Firefox\/([0-9\.]+)(?:\s|$)/],["fxios",/FxiOS\/([0-9\.]+)/],["opera-mini",/Opera Mini.*Version\/([0-9\.]+)/],["opera",/Opera\/([0-9\.]+)(?:\s|$)/],["opera",/OPR\/([0-9\.]+)(:?\s|$)/],["pie",/^Microsoft Pocket Internet Explorer\/(\d+\.\d+)$/],["pie",/^Mozilla\/\d\.\d+\s\(compatible;\s(?:MSP?IE|MSInternet Explorer) (\d+\.\d+);.*Windows CE.*\)$/],["netfront",/^Mozilla\/\d\.\d+.*NetFront\/(\d.\d)/],["ie",/Trident\/7\.0.*rv\:([0-9\.]+).*\).*Gecko$/],["ie",/MSIE\s([0-9\.]+);.*Trident\/[4-7].0/],["ie",/MSIE\s(7\.0)/],["bb10",/BB10;\sTouch.*Version\/([0-9\.]+)/],["android",/Android\s([0-9\.]+)/],["ios",/Version\/([0-9\._]+).*Mobile.*Safari.*/],["safari",/Version\/([0-9\._]+).*Safari/],["facebook",/FB[AS]V\/([0-9\.]+)/],["instagram",/Instagram\s([0-9\.]+)/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Mobile/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Gecko\)$/],["curl",/^curl\/([0-9\.]+)$/],["searchbot",WK]],YT=[["iOS",/iP(hone|od|ad)/],["Android OS",/Android/],["BlackBerry OS",/BlackBerry|BB10/],["Windows Mobile",/IEMobile/],["Amazon OS",/Kindle/],["Windows 3.11",/Win16/],["Windows 95",/(Windows 95)|(Win95)|(Windows_95)/],["Windows 98",/(Windows 98)|(Win98)/],["Windows 2000",/(Windows NT 5.0)|(Windows 2000)/],["Windows XP",/(Windows NT 5.1)|(Windows XP)/],["Windows Server 2003",/(Windows NT 5.2)/],["Windows Vista",/(Windows NT 6.0)/],["Windows 7",/(Windows NT 6.1)/],["Windows 8",/(Windows NT 6.2)/],["Windows 8.1",/(Windows NT 6.3)/],["Windows 10",/(Windows NT 10.0)/],["Windows ME",/Windows ME/],["Windows CE",/Windows CE|WinCE|Microsoft Pocket Internet Explorer/],["Open BSD",/OpenBSD/],["Sun OS",/SunOS/],["Chrome OS",/CrOS/],["Linux",/(Linux)|(X11)/],["Mac OS",/(Mac_PowerPC)|(Macintosh)/],["QNX",/QNX/],["BeOS",/BeOS/],["OS/2",/OS\/2/]];function ZT(r){return r?QT(r):typeof document>"u"&&typeof navigator<"u"&&navigator.product==="ReactNative"?new jK:typeof navigator<"u"?QT(navigator.userAgent):QK()}function XK(r){return r!==""&&zK.reduce(function(e,t){var n=t[0],o=t[1];if(e)return e;var i=o.exec(r);return!!i&&[n,i]},!1)}function QT(r){var e=XK(r);if(!e)return null;var t=e[0],n=e[1];if(t==="searchbot")return new qK;var o=n[1]&&n[1].split(".").join("_").split("_").slice(0,3);o?o.length<XT&&(o=zT(zT([],o,!0),ZK(XT-o.length),!0)):o=[];var i=o.join("."),s=YK(r),a=GK.exec(r);return a&&a[1]?new HK(t,i,s,a[1]):new KK(t,i,s)}function YK(r){for(var e=0,t=YT.length;e<t;e++){var n=YT[e],o=n[0],i=n[1],s=i.exec(r);if(s)return o}return null}function QK(){var r=typeof process<"u"&&process.version;return r?new VK(process.version.slice(1)):null}function ZK(r){for(var e=[],t=0;t<r;t++)e.push("0");return e}var JT=ZT(),dh=JT!=null&&JT.name==="firefox",dg=async function*(){},fg=async r=>{};function eC(r,e,t=qT,n){r.readyState==="open"&&Promise.resolve().then(async()=>{if(r.bufferedAmount>0){n.log("%s drain channel with %d buffered bytes",e,r.bufferedAmount);let o=de(),i=!1;r.bufferedAmountLowThreshold=0;let s=()=>{i||(n.log("%s drain channel closed before drain",e),o.resolve())};r.addEventListener("close",s,{once:!0}),r.addEventListener("bufferedamountlow",()=>{i=!0,r.removeEventListener("close",s),o.resolve()}),await Ao(o.promise,{milliseconds:t})}}).then(async()=>{r.readyState==="open"&&r.close()}).catch(o=>{n.log.error("error closing outbound stream",o)})}async function P7(r){return r=r??{},typeof r=="function"&&(r=await r()),r.iceServers=r.iceServers??BT.map(e=>({urls:[e]})),r}var tC=(r=32)=>MT+[...Array(r)].map(()=>T7.at(Math.floor(Math.random()*T7.length))).join("");var Ic=class{log;peerConnection;remoteAddr;timeline;metrics;source=dg();sink=fg;constructor(e,t){this.log=e.logger.forComponent("libp2p:webrtc:maconn"),this.remoteAddr=t.remoteAddr,this.timeline=t.timeline,this.peerConnection=t.peerConnection;let n=this.peerConnection,o=n.connectionState;this.peerConnection.onconnectionstatechange=()=>{this.log.trace("peer connection state change",n.connectionState,"initial state",o),(n.connectionState==="disconnected"||n.connectionState==="failed"||n.connectionState==="closed")&&(this.timeline.close=Date.now())}}async close(e){this.log.trace("closing connection"),this.peerConnection.close(),this.timeline.close=Date.now(),this.metrics?.increment({close:!0})}abort(e){this.log.error("closing connection due to error",e),this.peerConnection.close(),this.timeline.close=Date.now(),this.metrics?.increment({abort:!0})}};var R7=class extends Ns{channel;incomingData;maxBufferedAmount;bufferedAmountLowEventTimeout;maxMessageSize;receiveFinAck;finAckTimeout;openTimeout;closeController;constructor(e){let t=e.onEnd;switch(e.onEnd=o=>{this.log.trace('readable and writeable ends closed with status "%s"',this.status),Promise.resolve(async()=>{if(!(this.timeline.abort!=null||this.timeline.reset!==null))try{await Ao(this.receiveFinAck.promise,{milliseconds:this.finAckTimeout})}catch(i){this.log.error("error receiving FIN_ACK",i)}}).then(()=>{this.incomingData.end(),t?.(o)}).catch(i=>{this.log.error("error ending stream",i)}).finally(()=>{this.channel.close()})},super(e),this.channel=e.channel,this.channel.binaryType="arraybuffer",this.incomingData=Zr(),this.bufferedAmountLowEventTimeout=e.bufferedAmountLowEventTimeout??$T,this.maxBufferedAmount=e.maxBufferedAmount??FT,this.maxMessageSize=(e.maxMessageSize??Ou)-KT,this.receiveFinAck=de(),this.finAckTimeout=e.closeTimeout??VT,this.openTimeout=e.openTimeout??HT,this.closeController=new AbortController,this.channel.readyState){case"open":this.timeline.open=new Date().getTime();break;case"closed":case"closing":(this.timeline.close===void 0||this.timeline.close===0)&&(this.timeline.close=Date.now());break;case"connecting":break;default:throw this.log.error("unknown datachannel state %s",this.channel.readyState),new ya("Unknown datachannel state")}this.channel.onopen=o=>{this.timeline.open=new Date().getTime()},this.channel.onclose=o=>{this.log.trace("received onclose event"),this.closeController.abort(),this.receiveFinAck.resolve(),this.close().catch(i=>{this.log.error("error closing stream after channel closed",i)})},this.channel.onerror=o=>{this.log.trace("received onerror event"),this.closeController.abort();let i=o.error;this.abort(i)},this.channel.onmessage=async o=>{let{data:i}=o;i===null||i.byteLength===0||this.incomingData.push(new Uint8Array(i,0,i.byteLength))};let n=this;Promise.resolve().then(async()=>{for await(let o of mo(this.incomingData)){let i=n.processIncomingProtobuf(o);i!=null&&n.sourcePush(new J(i))}}).catch(o=>{this.log.error("error processing incoming data channel messages",o)})}sendNewStream(){}async _sendMessage(e,t=!0){if(this.channel.readyState==="closed"||this.channel.readyState==="closing")throw new ya(`Invalid datachannel state - ${this.channel.readyState}`);if(this.channel.readyState!=="open"){let n=AbortSignal.timeout(this.openTimeout),o=Ne([this.closeController.signal,n]);try{this.log('channel state is "%s" and not "open", waiting for "open" event before sending data',this.channel.readyState),await tr(this.channel,"open",o)}finally{o.clear()}this.log('channel state is now "%s", sending data',this.channel.readyState)}if(t&&this.channel.bufferedAmount>this.maxBufferedAmount){let n=AbortSignal.timeout(this.bufferedAmountLowEventTimeout),o=Ne([this.closeController.signal,n]);try{this.log('channel buffer is %d, wait for "bufferedamountlow" event',this.channel.bufferedAmount),await tr(this.channel,"bufferedamountlow",o)}catch(i){throw n.aborted?new zo(`Timed out waiting for DataChannel buffer to clear after ${this.bufferedAmountLowEventTimeout}ms`):i}finally{o.clear()}}try{this.log.trace('sending message, channel state "%s"',this.channel.readyState),this.channel.send(e.subarray())}catch(n){this.log.error("error while sending message",n)}}async sendData(e){let t=e.byteLength;for(e=e.sublist();e.byteLength>0;){let n=Math.min(e.byteLength,this.maxMessageSize),o=e.subarray(0,n),i=Fr.encode({message:o}),s=po.single(i);this.log.trace("sending %d/%d bytes on channel",o.byteLength,t),await this._sendMessage(s),e.consume(n)}this.log.trace('finished sending data, channel state "%s"',this.channel.readyState)}async sendReset(){try{await this._sendFlag(Fr.Flag.RESET)}catch(e){this.log.error("failed to send reset - %e",e)}finally{this.channel.close()}}async sendCloseWrite(e){if(this.channel.readyState!=="open"){this.receiveFinAck.resolve();return}if(await this._sendFlag(Fr.Flag.FIN)){this.log.trace("awaiting FIN_ACK");try{await dt(this.receiveFinAck.promise,e?.signal,{errorMessage:"sending close-write was aborted before FIN_ACK was received",errorName:"FinAckNotReceivedError"})}catch(n){this.log.error("failed to await FIN_ACK",n)}}else this.log.trace("sending FIN failed, not awaiting FIN_ACK");this.receiveFinAck.resolve()}async sendCloseRead(){this.channel.readyState==="open"&&await this._sendFlag(Fr.Flag.STOP_SENDING)}processIncomingProtobuf(e){let t=Fr.decode(e);if(t.flag!==void 0&&(this.log.trace('incoming flag %s, write status "%s", read status "%s"',t.flag,this.writeStatus,this.readStatus),t.flag===Fr.Flag.FIN&&(this.remoteCloseWrite(),this.log.trace("sending FIN_ACK"),this._sendFlag(Fr.Flag.FIN_ACK).catch(n=>{this.log.error("error sending FIN_ACK immediately",n)})),t.flag===Fr.Flag.RESET&&this.reset(),t.flag===Fr.Flag.STOP_SENDING&&this.remoteCloseRead(),t.flag===Fr.Flag.FIN_ACK&&(this.log.trace("received FIN_ACK"),this.receiveFinAck.resolve())),this.readStatus==="ready")return t.message}async _sendFlag(e){if(this.channel.readyState!=="open")return this.log.trace('not sending flag %s because channel is "%s" and not "open"',e.toString(),this.channel.readyState),!1;this.log.trace("sending flag %s",e.toString());let t=Fr.encode({flag:e}),n=po.single(t);try{return await this._sendMessage(n,!1),!0}catch(o){this.log.error("could not send flag %s - %e",e.toString(),o)}return!1}};function Lu(r){let{channel:e,direction:t,handshake:n}=r;return new R7({id:`${e.id}`,log:r.logger.forComponent(`libp2p:webrtc:stream:${n===!0?"handshake":t}:${e.id}`),...r})}var js=class{protocol;peerConnection;bufferedStreams=[];metrics;dataChannelOptions;components;log;constructor(e,t){this.components=e,this.peerConnection=t.peerConnection,this.metrics=t.metrics,this.protocol=t.protocol??C7,this.dataChannelOptions=t.dataChannelOptions??{},this.log=e.logger.forComponent("libp2p:webrtc:muxerfactory"),this.peerConnection.ondatachannel=({channel:n})=>{if(this.log.trace('incoming early datachannel with channel id %d and label "%s"',n.id),n.label==="init"){this.log.trace("closing early init channel"),n.close();return}let o={},i=Lu({channel:n,direction:"inbound",onEnd:s=>{o.onEnd(s)},logger:e.logger,...this.dataChannelOptions});o.stream=i,o.channel=n,o.onEnd=()=>{this.bufferedStreams=this.bufferedStreams.filter(s=>s.stream.id!==i.id)},this.bufferedStreams.push(o)}}createStreamMuxer(e){return new N7(this.components,{...e,peerConnection:this.peerConnection,dataChannelOptions:this.dataChannelOptions,metrics:this.metrics,streams:this.bufferedStreams,protocol:this.protocol})}},N7=class{init;streams;protocol;log;peerConnection;dataChannelOptions;metrics;logger;constructor(e,t){this.init=t,this.log=e.logger.forComponent("libp2p:webrtc:muxer"),this.logger=e.logger,this.streams=t.streams.map(n=>n.stream),this.peerConnection=t.peerConnection,this.protocol=t.protocol??C7,this.metrics=t.metrics,this.dataChannelOptions=t.dataChannelOptions??{},this.peerConnection.ondatachannel=({channel:n})=>{if(this.log.trace("incoming datachannel with channel id %d",n.id),n.label==="init"){this.log.trace("closing init channel"),n.close();return}let o=n.id,i=Lu({channel:n,direction:"inbound",onEnd:()=>{this.#e(i,n),this.log("incoming channel %s ended",o)},logger:this.logger,...this.dataChannelOptions});this.streams.push(i),this.metrics?.increment({incoming_stream:!0}),t?.onIncomingStream?.(i)},this.init.streams.length>0&&queueMicrotask(()=>{this.init.streams.forEach(n=>{n.onEnd=()=>{this.log("incoming early channel %s ended with state %s",n.channel.id,n.channel.readyState),this.#e(n.stream,n.channel)},this.metrics?.increment({incoming_stream:!0}),this.init?.onIncomingStream?.(n.stream)})})}#e(e,t){this.log.trace("stream %s %s %s onEnd",e.direction,e.id,e.protocol),eC(t,`${e.direction} ${e.id} ${e.protocol}`,this.dataChannelOptions.drainTimeout,{log:this.log}),this.streams=this.streams.filter(n=>n.id!==e.id),this.metrics?.increment({stream_end:!0}),this.init?.onStreamEnd?.(e)}async close(e){try{await Promise.all(this.streams.map(async t=>t.close(e)))}catch(t){this.abort(t)}}abort(e){for(let t of this.streams)t.abort(e)}source=dg();sink=fg;newStream(){let e=this.peerConnection.createDataChannel(""),t=e.id;this.log.trace("opened outgoing datachannel with channel id %s",t);let n=Lu({channel:e,direction:"outbound",onEnd:()=>{this.#e(n,e),this.log("outgoing channel %s ended",t)},logger:this.logger,...this.dataChannelOptions});return this.streams.push(n),this.metrics?.increment({outgoing_stream:!0}),n}};var hg=globalThis.RTCPeerConnection,pg=globalThis.RTCSessionDescription,rC=globalThis.RTCIceCandidate;var mg=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},gg=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},yg=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function nC(r,e={}){let t=Qt(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=Ce(e.maxDataLength));let n=e?.lengthDecoder??nt,o=e?.lengthEncoder??Fe;return{read:async s=>{let a=-1,c=new J;for(;;){c.append(await t.read({...s,bytes:1}));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(a<0)throw new mg("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new yg("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new gg("message length too long");return t.read({...s,bytes:a})},write:async(s,a)=>{await t.write(new J(o(s.byteLength),s),a)},writeV:async(s,a)=>{let c=new J(...s.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function wg(r,e){let t=nC(r,e),n={read:async(o,i)=>{let s=await t.read(i);return o.decode(s)},write:async(o,i,s)=>{await t.write(i.encode(o),s)},writeV:async(o,i,s)=>{await t.writeV(o.map(a=>i.encode(a)),s)},pb:o=>({read:async i=>n.read(o,i),write:async(i,s)=>n.write(i,o,s),writeV:async(i,s)=>n.writeV(i,o,s),unwrap:()=>n}),unwrap:()=>t.unwrap()};return n}var Ws=class extends Error{constructor(e){super(`WebRTC transport error: ${e}`),this.name="WebRTCTransportError"}},eo=class extends Ws{constructor(e="SDP handshake failed"){super(e),this.name="SDPHandshakeFailedError"}};var bg=class extends Ws{constructor(e,t){super(`Invalid fingerprint "${e}" within ${t}`),this.name="WebRTC/InvalidFingerprintError"}};var xg=class extends Ws{constructor(e){super(`A method (${e}) was called though it has been intentionally left unimplemented.`),this.name="WebRTC/UnimplementedError"}},vg=class extends Ws{constructor(e){super(`unsupported hash algorithm code: ${e} please see the codes at https://github.com/multiformats/multicodec/blob/master/table.csv `),this.name="WebRTC/UnsupportedHashAlgorithmError"}};var fn;(function(r){let e;(function(o){o.SDP_OFFER="SDP_OFFER",o.SDP_ANSWER="SDP_ANSWER",o.ICE_CANDIDATE="ICE_CANDIDATE"})(e=r.Type||(r.Type={}));let t;(function(o){o[o.SDP_OFFER=0]="SDP_OFFER",o[o.SDP_ANSWER=1]="SDP_ANSWER",o[o.ICE_CANDIDATE=2]="ICE_CANDIDATE"})(t||(t={})),function(o){o.codec=()=>Et(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=_e((o,i,s={})=>{s.lengthDelimited!==!1&&i.fork(),o.type!=null&&(i.uint32(8),r.Type.codec().encode(o.type,i)),o.data!=null&&(i.uint32(18),i.string(o.data)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(o);break}case 2:{a.data=o.string();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>Ae(o,r.codec()),r.decode=(o,i)=>Se(o,r.codec(),i)})(fn||(fn={}));var Eg=async(r,e,t)=>{try{let n=de();for(JK(r,n);;){let o=await Promise.race([n.promise,e.read({signal:t.signal}).catch(()=>{})]);if(o==null){t.signal?.throwIfAborted();break}if(o.type!==fn.Type.ICE_CANDIDATE)throw new Oe("ICE candidate message expected");let i=JSON.parse(o.data??"null");if(i===""||i===null){t.onProgress?.(new ae("webrtc:end-of-ice-candidates")),t.log.trace("end-of-candidates received");continue}let s=new rC(i);t.log.trace("%s received new ICE candidate %o",t.direction,i);try{t.onProgress?.(new ae("webrtc:add-ice-candidate",s.candidate)),await r.addIceCandidate(s)}catch(a){t.log.error("%s bad candidate received",t.direction,i,a)}}}catch(n){if(t.log.error("%s error parsing ICE candidate",t.direction,n),t.signal?.aborted===!0&&Sg(r)!=="connected")throw n}};function Sg(r){return dh?r.iceConnectionState:r.connectionState}function JK(r,e){r[dh?"oniceconnectionstatechange":"onconnectionstatechange"]=t=>{switch(Sg(r)){case"connected":e.resolve();break;case"failed":case"disconnected":case"closed":e.reject(new hl("RTCPeerConnection was closed"));break;default:break}}}async function oC({rtcConfiguration:r,dataChannel:e,signal:t,metrics:n,multiaddr:o,connectionManager:i,transportManager:s,log:a,logger:c,onProgress:l}){let{baseAddr:u}=iC(o);n?.dialerEvents.increment({open:!0}),a.trace("dialing base address: %a",u);let d=u.getPeerId();if(d==null)throw new D("Relay peer was missing");let h=i.getConnections(bt(d)),m,g=!1;h.length===0?(l?.(new ae("webrtc:dial-relay")),m=await s.dial(u,{signal:t,onProgress:l}),g=!0):(l?.(new ae("webrtc:reuse-relay-connection")),m=h[0]);try{l?.(new ae("webrtc:open-signaling-stream"));let w=await m.newStream(uh,{signal:t,runOnLimitedConnection:!0}),y=wg(w).pb(fn),x=new hg(r),S=new js({logger:c},{peerConnection:x,dataChannelOptions:e});try{let v=x.createDataChannel("init");x.onicecandidate=({candidate:$})=>{let P=JSON.stringify($?.toJSON()??null);a.trace("initiator sending ICE candidate %o",$),y.write({type:fn.Type.ICE_CANDIDATE,data:P},{signal:t}).catch(R=>{a.error("error sending ICE candidate",R)})},x.onicecandidateerror=$=>{a.error("initiator ICE candidate error",$)};let N=await x.createOffer().catch($=>{throw a.error("could not execute createOffer",$),new eo("Failed to set createOffer")});a.trace("initiator send SDP offer %s",N.sdp),l?.(new ae("webrtc:send-sdp-offer")),await y.write({type:fn.Type.SDP_OFFER,data:N.sdp},{signal:t}),await x.setLocalDescription(N).catch($=>{throw a.error("could not execute setLocalDescription",$),new eo("Failed to set localDescription")}),l?.(new ae("webrtc:read-sdp-answer")),a.trace("initiator read SDP answer");let W=await y.read({signal:t});if(W.type!==fn.Type.SDP_ANSWER)throw new eo("Remote should send an SDP answer");a.trace("initiator received SDP answer %s",W.data);let H=new pg({type:"answer",sdp:W.data});return await x.setRemoteDescription(H).catch($=>{throw a.error("could not execute setRemoteDescription",$),new eo("Failed to set remoteDescription")}),a.trace("initiator read candidates until connected"),l?.(new ae("webrtc:read-ice-candidates")),await Eg(x,y,{direction:"initiator",signal:t,log:a,onProgress:l}),a.trace("initiator connected, closing init channel"),v.close(),l?.(new ae("webrtc:close-signaling-stream")),a.trace("closing signaling channel"),await w.close({signal:t}),a.trace("initiator connected to remote address %s",o),{remoteAddress:o,peerConnection:x,muxerFactory:S}}catch(v){throw a.error("outgoing signaling error",v),x.close(),w.abort(v),v}finally{x.onicecandidate=null,x.onicecandidateerror=null}}finally{if(g)try{await m.close({signal:t})}catch(w){m.abort(w)}}}var sC=it(bm.matchers[0],Be("p2p-circuit")),Ag=class r extends Le{transportManager;shutdownController;events;constructor(e,t){super(),this.transportManager=e.transportManager,this.events=e.events,this.shutdownController=t.shutdownController,this.onTransportListening=this.onTransportListening.bind(this)}async listen(){this.events.addEventListener("transport:listening",this.onTransportListening)}onTransportListening(e){e.detail.getAddrs().filter(n=>sC.exactMatch(n)).map(n=>n.encapsulate("/webrtc")).length>0&&this.safeDispatchEvent("listening")}getAddrs(){return this.transportManager.getListeners().filter(e=>!(e instanceof r)).map(e=>e.getAddrs().filter(t=>sC.exactMatch(t)).map(t=>t.encapsulate("/webrtc"))).flat()}updateAnnounceAddrs(){}async close(){this.events.removeEventListener("transport:listening",this.onTransportListening),this.shutdownController.abort(),queueMicrotask(()=>{this.safeDispatchEvent("close")})}};async function aC({peerConnection:r,stream:e,signal:t,connection:n,log:o}){o.trace("new inbound signaling stream");let i=wg(e).pb(fn);try{r.onicecandidate=({candidate:u})=>{let d=JSON.stringify(u?.toJSON()??null);o.trace("recipient sending ICE candidate %s",d),i.write({type:fn.Type.ICE_CANDIDATE,data:d},{signal:t}).catch(h=>{o.error("error sending ICE candidate",h)})},o.trace("recipient read SDP offer");let a=await i.read({signal:t});if(a.type!==fn.Type.SDP_OFFER)throw new eo(`expected message type SDP_OFFER, received: ${a.type??"undefined"} `);o.trace("recipient received SDP offer %s",a.data);let c=new pg({type:"offer",sdp:a.data});await r.setRemoteDescription(c).catch(u=>{throw o.error("could not execute setRemoteDescription",u),new eo("Failed to set remoteDescription")});let l=await r.createAnswer().catch(u=>{throw o.error("could not execute createAnswer",u),new eo("Failed to create answer")});o.trace("recipient send SDP answer %s",l.sdp),await i.write({type:fn.Type.SDP_ANSWER,data:l.sdp},{signal:t}),await r.setLocalDescription(l).catch(u=>{throw o.error("could not execute setLocalDescription",u),new eo("Failed to set localDescription")}),o.trace("recipient read candidates until connected"),await Eg(r,i,{direction:"recipient",signal:t,log:o})}catch(a){if(Sg(r)!=="connected")throw o.error("error while handling signaling stream from peer %a",n.remoteAddr,a),r.close(),a;o("error while handling signaling stream from peer %a, ignoring as the RTCPeerConnection is already connected",n.remoteAddr,a)}let s=oe(`/webrtc/p2p/${n.remoteAddr.getPeerId()}`);return o.trace("recipient connected to remote address %s",s),{remoteAddress:s}}var _g=class{components;init;log;_started=!1;metrics;shutdownController;constructor(e,t={}){this.components=e,this.init=t,this.log=e.logger.forComponent("libp2p:webrtc"),this.shutdownController=new AbortController,this.shutdownController.signal,e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webrtc_dialer_events_total",{label:"event",help:"Total count of WebRTC dialer events by type"}),listenerEvents:e.metrics.registerCounterGroup("libp2p_webrtc_listener_events_total",{label:"event",help:"Total count of WebRTC listener events by type"})})}[ns]=!0;[Symbol.toStringTag]="@libp2p/webrtc";[Xe]=["@libp2p/transport"];[Sn]=["@libp2p/identify","@libp2p/circuit-relay-v2-transport"];isStarted(){return this._started}async start(){await this.components.registrar.handle(uh,e=>{let t=this.components.upgrader.createInboundAbortSignal(this.shutdownController.signal);this._onProtocol(e,t).catch(n=>{this.log.error("failed to handle incoming connect from %p",e.connection.remotePeer,n)}).finally(()=>{t.clear()})},{runOnLimitedConnection:!0}),this._started=!0}async stop(){await this.components.registrar.unhandle(uh),this._started=!1}createListener(e){return new Ag(this.components,{shutdownController:this.shutdownController})}listenFilter(e){return e.filter(Sf.exactMatch)}dialFilter(e){return this.listenFilter(e)}async dial(e,t){this.log.trace("dialing address: %a",e);let{remoteAddress:n,peerConnection:o,muxerFactory:i}=await oC({rtcConfiguration:await P7(this.init.rtcConfiguration),dataChannel:this.init.dataChannel,multiaddr:e,dataChannelOptions:this.init.dataChannel,signal:t.signal,connectionManager:this.components.connectionManager,transportManager:this.components.transportManager,log:this.log,logger:this.components.logger,onProgress:t.onProgress}),s=new Ic(this.components,{peerConnection:o,timeline:{open:Date.now()},remoteAddr:n,metrics:this.metrics?.dialerEvents}),a=await t.upgrader.upgradeOutbound(s,{skipProtection:!0,skipEncryption:!0,muxerFactory:i,onProgress:t.onProgress,signal:t.signal});return this._closeOnShutdown(o,s),a}async _onProtocol({connection:e,stream:t},n){let o=new hg(await P7(this.init.rtcConfiguration)),i=new js(this.components,{peerConnection:o,dataChannelOptions:this.init.dataChannel});try{let{remoteAddress:s}=await aC({peerConnection:o,connection:e,stream:t,signal:n,log:this.log});await t.close({signal:n});let a=new Ic(this.components,{peerConnection:o,timeline:{open:new Date().getTime()},remoteAddr:s,metrics:this.metrics?.listenerEvents});await this.components.upgrader.upgradeInbound(a,{skipEncryption:!0,skipProtection:!0,muxerFactory:i,signal:n}),this._closeOnShutdown(o,a)}catch(s){throw this.log.error("incoming signaling error",s),o.close(),t.abort(s),s}}_closeOnShutdown(e,t){let n=()=>{t.close().catch(o=>{this.log.error("could not close WebRTCMultiaddrConnection",o)})};this.shutdownController.signal.addEventListener("abort",n),e.addEventListener("close",()=>{this.shutdownController.signal.removeEventListener("abort",n)})}};function iC(r){let e=r.toString().split("/webrtc/");if(e.length!==2)throw new D("webrtc protocol was not present in multiaddr");if(!e[0].includes("/p2p-circuit"))throw new D("p2p-circuit protocol was not present in multiaddr");let t=oe(e[0]),o=oe("/"+e[1]).getPeerId();if(o==null)throw new D("destination peer id was missing");let i=t.protos().pop();if(i===void 0)throw new D("invalid multiaddr");return i.name!=="p2p"&&(t=t.encapsulate(`/p2p/${o}`)),{baseAddr:t,peerId:bt(o)}}var KPe=Vt(lC());var _;(function(r){r[r.Sequence=0]="Sequence",r[r.Set=1]="Set",r[r.Choice=2]="Choice"})(_||(_={}));var b;(function(r){r[r.Any=1]="Any",r[r.Boolean=2]="Boolean",r[r.OctetString=3]="OctetString",r[r.BitString=4]="BitString",r[r.Integer=5]="Integer",r[r.Enumerated=6]="Enumerated",r[r.ObjectIdentifier=7]="ObjectIdentifier",r[r.Utf8String=8]="Utf8String",r[r.BmpString=9]="BmpString",r[r.UniversalString=10]="UniversalString",r[r.NumericString=11]="NumericString",r[r.PrintableString=12]="PrintableString",r[r.TeletexString=13]="TeletexString",r[r.VideotexString=14]="VideotexString",r[r.IA5String=15]="IA5String",r[r.GraphicString=16]="GraphicString",r[r.VisibleString=17]="VisibleString",r[r.GeneralString=18]="GeneralString",r[r.CharacterString=19]="CharacterString",r[r.UTCTime=20]="UTCTime",r[r.GeneralizedTime=21]="GeneralizedTime",r[r.DATE=22]="DATE",r[r.TimeOfDay=23]="TimeOfDay",r[r.DateTime=24]="DateTime",r[r.Duration=25]="Duration",r[r.TIME=26]="TIME",r[r.Null=27]="Null"})(b||(b={}));var D7=Vt($i()),ci=class{constructor(e,t=0){if(this.unusedBits=0,this.value=new ArrayBuffer(0),e)if(typeof e=="number")this.fromNumber(e);else if(D7.BufferSourceConverter.isBufferSource(e))this.unusedBits=t,this.value=D7.BufferSourceConverter.toArrayBuffer(e);else throw TypeError("Unsupported type of 'params' argument for BitString")}fromASN(e){if(!(e instanceof Uo))throw new TypeError("Argument 'asn' is not instance of ASN.1 BitString");return this.unusedBits=e.valueBlock.unusedBits,this.value=e.valueBlock.valueHex,this}toASN(){return new Uo({unusedBits:this.unusedBits,valueHex:this.value})}toSchema(e){return new Uo({name:e})}toNumber(){let e="",t=new Uint8Array(this.value);for(let n of t)e+=n.toString(2).padStart(8,"0");return e=e.split("").reverse().join(""),this.unusedBits&&(e=e.slice(this.unusedBits).padStart(this.unusedBits,"0")),parseInt(e,2)}fromNumber(e){let t=e.toString(2),n=t.length+7>>3;this.unusedBits=(n<<3)-t.length;let o=new Uint8Array(n);t=t.padStart(n<<3,"0").split("").reverse().join("");let i=0;for(;i<n;)o[i]=parseInt(t.slice(i<<3,(i<<3)+8),2),i++;this.value=o.buffer}};var O7=Vt($i()),be=class{get byteLength(){return this.buffer.byteLength}get byteOffset(){return 0}constructor(e){typeof e=="number"?this.buffer=new ArrayBuffer(e):O7.BufferSourceConverter.isBufferSource(e)?this.buffer=O7.BufferSourceConverter.toArrayBuffer(e):Array.isArray(e)?this.buffer=new Uint8Array(e):this.buffer=new ArrayBuffer(0)}fromASN(e){if(!(e instanceof Ur))throw new TypeError("Argument 'asn' is not instance of ASN.1 OctetString");return this.buffer=e.valueBlock.valueHex,this}toASN(){return new Ur({valueHex:this.buffer})}toSchema(e){return new Ur({name:e})}};var eV={fromASN:r=>r instanceof un?null:r.valueBeforeDecodeView,toASN:r=>{if(r===null)return new un;let e=Mn(r);if(e.result.error)throw new Error(e.result.error);return e.result}},tV={fromASN:r=>r.valueBlock.valueHexView.byteLength>=4?r.valueBlock.toString():r.valueBlock.valueDec,toASN:r=>new Ln({value:+r})},rV={fromASN:r=>r.valueBlock.valueDec,toASN:r=>new dc({value:r})},$e={fromASN:r=>r.valueBlock.valueHexView,toASN:r=>new Ln({valueHex:r})};var nV={fromASN:r=>r.valueBlock.valueHexView,toASN:r=>new Uo({valueHex:r})},oV={fromASN:r=>r.valueBlock.toString(),toASN:r=>new Bn({value:r})},iV={fromASN:r=>r.valueBlock.value,toASN:r=>new uc({value:r})},Bu={fromASN:r=>r.valueBlock.valueHexView,toASN:r=>new Ur({valueHex:r})},uC={fromASN:r=>new be(r.getValue()),toASN:r=>r.toASN()};function to(r){return{fromASN:e=>e.valueBlock.value,toASN:e=>new r({value:e})}}var L7=to(Zn),sV=to(fc),aV=to(hc),cV=to(pc),lV=to(mc),uV=to(gc),dV=to(yc),fV=to(wc),hV=to(bc),pV=to(Hs),mV=to(xc),gV=to(vc),yV={fromASN:r=>r.toDate(),toASN:r=>new qs({valueDate:r})},wV={fromASN:r=>r.toDate(),toASN:r=>new Ec({valueDate:r})},bV={fromASN:()=>null,toASN:()=>new un};function Mu(r){switch(r){case b.Any:return eV;case b.BitString:return nV;case b.BmpString:return sV;case b.Boolean:return iV;case b.CharacterString:return gV;case b.Enumerated:return rV;case b.GeneralString:return mV;case b.GeneralizedTime:return wV;case b.GraphicString:return hV;case b.IA5String:return fV;case b.Integer:return tV;case b.Null:return bV;case b.NumericString:return cV;case b.ObjectIdentifier:return oV;case b.OctetString:return Bu;case b.PrintableString:return lV;case b.TeletexString:return uV;case b.UTCTime:return yV;case b.UniversalString:return aV;case b.Utf8String:return L7;case b.VideotexString:return dV;case b.VisibleString:return pV;default:return null}}function ro(r){return typeof r=="function"&&r.prototype?r.prototype.toASN&&r.prototype.fromASN?!0:ro(r.prototype):!!(r&&typeof r=="object"&&"toASN"in r&&"fromASN"in r)}function M7(r){var e;if(r){let t=Object.getPrototypeOf(r);return((e=t?.prototype)===null||e===void 0?void 0:e.constructor)===Array?!0:M7(t)}return!1}function dC(r,e){if(!(r&&e)||r.byteLength!==e.byteLength)return!1;let t=new Uint8Array(r),n=new Uint8Array(e);for(let o=0;o<r.byteLength;o++)if(t[o]!==n[o])return!1;return!0}var Ig=class{constructor(){this.items=new WeakMap}has(e){return this.items.has(e)}get(e,t=!1){let n=this.items.get(e);if(!n)throw new Error(`Cannot get schema for '${e.prototype.constructor.name}' target`);if(t&&!n.schema)throw new Error(`Schema '${e.prototype.constructor.name}' doesn't contain ASN.1 schema. Call 'AsnSchemaStorage.cache'.`);return n}cache(e){let t=this.get(e);t.schema||(t.schema=this.create(e,!0))}createDefault(e){let t={type:_.Sequence,items:{}},n=this.findParentSchema(e);return n&&(Object.assign(t,n),t.items=Object.assign({},t.items,n.items)),t}create(e,t){let n=this.items.get(e)||this.createDefault(e),o=[];for(let i in n.items){let s=n.items[i],a=t?i:"",c;if(typeof s.type=="number"){let u=b[s.type],d=Jn[u];if(!d)throw new Error(`Cannot get ASN1 class by name '${u}'`);c=new d({name:a})}else ro(s.type)?c=new s.type().toSchema(a):s.optional?this.get(s.type).type===_.Choice?c=new si({name:a}):(c=this.create(s.type,!1),c.name=a):c=new si({name:a});let l=!!s.optional||s.defaultValue!==void 0;if(s.repeated){c.name="";let u=s.repeated==="set"?dn:_t;c=new u({name:"",value:[new Sc({name:a,value:c})]})}if(s.context!==null&&s.context!==void 0)if(s.implicit)if(typeof s.type=="number"||ro(s.type)){let u=s.repeated?Zt:Vi;o.push(new u({name:a,optional:l,idBlock:{tagClass:3,tagNumber:s.context}}))}else{this.cache(s.type);let u=!!s.repeated,d=u?c:this.get(s.type,!0).schema;d="valueBlock"in d?d.valueBlock.value:d.value,o.push(new Zt({name:u?"":a,optional:l,idBlock:{tagClass:3,tagNumber:s.context},value:d}))}else o.push(new Zt({optional:l,idBlock:{tagClass:3,tagNumber:s.context},value:[c]}));else c.optional=l,o.push(c)}switch(n.type){case _.Sequence:return new _t({value:o,name:""});case _.Set:return new dn({value:o,name:""});case _.Choice:return new ku({value:o,name:""});default:throw new Error("Unsupported ASN1 type in use")}}set(e,t){return this.items.set(e,t),this}findParentSchema(e){let t=Object.getPrototypeOf(e);return t?this.items.get(t)||this.findParentSchema(t):null}};var Yr=new Ig;var C=r=>e=>{let t;Yr.has(e)?t=Yr.get(e):(t=Yr.createDefault(e),Yr.set(e,t)),Object.assign(t,r)};var p=r=>(e,t)=>{let n;Yr.has(e.constructor)?n=Yr.get(e.constructor):(n=Yr.createDefault(e.constructor),Yr.set(e.constructor,n));let o=Object.assign({},r);if(typeof o.type=="number"&&!o.converter){let i=Mu(r.type);if(!i)throw new Error(`Cannot get default converter for property '${t}' of ${e.constructor.name}`);o.converter=i}n.items[t]=o};var fh=class extends Error{constructor(){super(...arguments),this.schemas=[]}};var hh=class{static parse(e,t){let n=Mn(e);if(n.result.error)throw new Error(n.result.error);return this.fromASN(n.result,t)}static fromASN(e,t){var n;try{if(ro(t))return new t().fromASN(e);let o=Yr.get(t);Yr.cache(t);let i=o.schema;if(e.constructor===Zt&&o.type!==_.Choice){i=new Zt({idBlock:{tagClass:3,tagNumber:e.idBlock.tagNumber},value:o.schema.valueBlock.value});for(let c in o.items)delete e[c]}let s=Vs({},e,i);if(!s.verified)throw new fh(`Data does not match to ${t.name} ASN1 schema. ${s.result.error}`);let a=new t;if(M7(t)){if(!("value"in e.valueBlock&&Array.isArray(e.valueBlock.value)))throw new Error("Cannot get items from the ASN.1 parsed value. ASN.1 object is not constructed.");let c=o.itemType;if(typeof c=="number"){let l=Mu(c);if(!l)throw new Error(`Cannot get default converter for array item of ${t.name} ASN1 schema`);return t.from(e.valueBlock.value,u=>l.fromASN(u))}else return t.from(e.valueBlock.value,l=>this.fromASN(l,c))}for(let c in o.items){let l=s.result[c];if(!l)continue;let u=o.items[c],d=u.type;if(typeof d=="number"||ro(d)){let h=(n=u.converter)!==null&&n!==void 0?n:ro(d)?new d:null;if(!h)throw new Error("Converter is empty");if(u.repeated)if(u.implicit){let m=u.repeated==="sequence"?_t:dn,g=new m;g.valueBlock=l.valueBlock;let w=Mn(g.toBER(!1));if(w.offset===-1)throw new Error(`Cannot parse the child item. ${w.result.error}`);if(!("value"in w.result.valueBlock&&Array.isArray(w.result.valueBlock.value)))throw new Error("Cannot get items from the ASN.1 parsed value. ASN.1 object is not constructed.");let y=w.result.valueBlock.value;a[c]=Array.from(y,x=>h.fromASN(x))}else a[c]=Array.from(l,m=>h.fromASN(m));else{let m=l;if(u.implicit){let g;if(ro(d))g=new d().toSchema("");else{let w=b[d],y=Jn[w];if(!y)throw new Error(`Cannot get '${w}' class from asn1js module`);g=new y}g.valueBlock=m.valueBlock,m=Mn(g.toBER(!1)).result}a[c]=h.fromASN(m)}}else if(u.repeated){if(!Array.isArray(l))throw new Error("Cannot get list of items from the ASN.1 parsed value. ASN.1 value should be iterable.");a[c]=Array.from(l,h=>this.fromASN(h,d))}else a[c]=this.fromASN(l,d)}return a}catch(o){throw o instanceof fh&&o.schemas.push(t.name),o}}};var ph=class r{static serialize(e){return e instanceof Wt?e.toBER(!1):this.toASN(e).toBER(!1)}static toASN(e){if(e&&typeof e=="object"&&ro(e))return e.toASN();if(!(e&&typeof e=="object"))throw new TypeError("Parameter 1 should be type of Object.");let t=e.constructor,n=Yr.get(t);Yr.cache(t);let o=[];if(n.itemType){if(!Array.isArray(e))throw new TypeError("Parameter 1 should be type of Array.");if(typeof n.itemType=="number"){let s=Mu(n.itemType);if(!s)throw new Error(`Cannot get default converter for array item of ${t.name} ASN1 schema`);o=e.map(a=>s.toASN(a))}else o=e.map(s=>this.toAsnItem({type:n.itemType},"[]",t,s))}else for(let s in n.items){let a=n.items[s],c=e[s];if(c===void 0||a.defaultValue===c||typeof a.defaultValue=="object"&&typeof c=="object"&&dC(this.serialize(a.defaultValue),this.serialize(c)))continue;let l=r.toAsnItem(a,s,t,c);if(typeof a.context=="number")if(a.implicit)if(!a.repeated&&(typeof a.type=="number"||ro(a.type))){let u={};u.valueHex=l instanceof un?l.valueBeforeDecodeView:l.valueBlock.toBER(),o.push(new Vi({optional:a.optional,idBlock:{tagClass:3,tagNumber:a.context},...u}))}else o.push(new Zt({optional:a.optional,idBlock:{tagClass:3,tagNumber:a.context},value:l.valueBlock.value}));else o.push(new Zt({optional:a.optional,idBlock:{tagClass:3,tagNumber:a.context},value:[l]}));else a.repeated?o=o.concat(l):o.push(l)}let i;switch(n.type){case _.Sequence:i=new _t({value:o});break;case _.Set:i=new dn({value:o});break;case _.Choice:if(!o[0])throw new Error(`Schema '${t.name}' has wrong data. Choice cannot be empty.`);i=o[0];break}return i}static toAsnItem(e,t,n,o){let i;if(typeof e.type=="number"){let s=e.converter;if(!s)throw new Error(`Property '${t}' doesn't have converter for type ${b[e.type]} in schema '${n.name}'`);if(e.repeated){if(!Array.isArray(o))throw new TypeError("Parameter 'objProp' should be type of Array.");let a=Array.from(o,l=>s.toASN(l)),c=e.repeated==="sequence"?_t:dn;i=new c({value:a})}else i=s.toASN(o)}else if(e.repeated){if(!Array.isArray(o))throw new TypeError("Parameter 'objProp' should be type of Array.");let s=Array.from(o,c=>this.toASN(c)),a=e.repeated==="sequence"?_t:dn;i=new a({value:s})}else i=this.toASN(o);return i}};var we=class extends Array{constructor(e=[]){if(typeof e=="number")super(e);else{super();for(let t of e)this.push(t)}}};var U7=Vt($i());var ee=class r{static serialize(e){return ph.serialize(e)}static parse(e,t){return hh.parse(e,t)}static toString(e){let t=U7.BufferSourceConverter.isBufferSource(e)?U7.BufferSourceConverter.toArrayBuffer(e):r.serialize(e),n=Mn(t);if(n.offset===-1)throw new Error(`Cannot decode ASN.1 data. ${n.result.error}`);return n.result.toString()}};function f(r,e,t,n){var o=arguments.length,i=o<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,s;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(r,e,t,n);else for(var a=r.length-1;a>=0;a--)(s=r[a])&&(i=(o<3?s(i):o>3?s(e,t,i):s(e,t))||i);return o>3&&i&&Object.defineProperty(e,t,i),i}var fC=Vt($i()),mh=class{static isIPv4(e){return/^(\d{1,3}\.){3}\d{1,3}$/.test(e)}static parseIPv4(e){let t=e.split(".");if(t.length!==4)throw new Error("Invalid IPv4 address");return t.map(n=>{let o=parseInt(n,10);if(isNaN(o)||o<0||o>255)throw new Error("Invalid IPv4 address part");return o})}static parseIPv6(e){let n=this.expandIPv6(e).split(":");if(n.length!==8)throw new Error("Invalid IPv6 address");return n.reduce((o,i)=>{let s=parseInt(i,16);if(isNaN(s)||s<0||s>65535)throw new Error("Invalid IPv6 address part");return o.push(s>>8&255),o.push(s&255),o},[])}static expandIPv6(e){if(!e.includes("::"))return e;let t=e.split("::");if(t.length>2)throw new Error("Invalid IPv6 address");let n=t[0]?t[0].split(":"):[],o=t[1]?t[1].split(":"):[],i=8-(n.length+o.length);if(i<0)throw new Error("Invalid IPv6 address");return[...n,...Array(i).fill("0"),...o].join(":")}static formatIPv6(e){let t=[];for(let n=0;n<16;n+=2)t.push((e[n]<<8|e[n+1]).toString(16));return this.compressIPv6(t.join(":"))}static compressIPv6(e){let t=e.split(":"),n=-1,o=0,i=-1,s=0;for(let a=0;a<t.length;a++)t[a]==="0"?(i===-1&&(i=a),s++):(s>o&&(n=i,o=s),i=-1,s=0);if(s>o&&(n=i,o=s),o>1){let a=t.slice(0,n).join(":"),c=t.slice(n+o).join(":");return`${a}::${c}`}return e}static parseCIDR(e){let[t,n]=e.split("/"),o=parseInt(n,10);if(this.isIPv4(t)){if(o<0||o>32)throw new Error("Invalid IPv4 prefix length");return[this.parseIPv4(t),o]}else{if(o<0||o>128)throw new Error("Invalid IPv6 prefix length");return[this.parseIPv6(t),o]}}static decodeIP(e){if(e.length===64&&parseInt(e,16)===0)return"::/0";if(e.length!==16)return e;let t=parseInt(e.slice(8),16).toString(2).split("").reduce((o,i)=>o+ +i,0),n=e.slice(0,8).replace(/(.{2})/g,o=>`${parseInt(o,16)}.`);return n=n.slice(0,-1),`${n}/${t}`}static toString(e){let t=new Uint8Array(e);if(t.length===4)return Array.from(t).join(".");if(t.length===16)return this.formatIPv6(t);if(t.length===8||t.length===32){let n=t.length/2,o=t.slice(0,n),i=t.slice(n);if(t.every(c=>c===0))return t.length===8?"0.0.0.0/0":"::/0";let a=i.reduce((c,l)=>c+(l.toString(2).match(/1/g)||[]).length,0);return t.length===8?`${Array.from(o).join(".")}/${a}`:`${this.formatIPv6(o)}/${a}`}return this.decodeIP(fC.Convert.ToHex(e))}static fromString(e){if(e.includes("/")){let[n,o]=this.parseCIDR(e),i=new Uint8Array(n.length),s=o;for(let c=0;c<i.length;c++)s>=8?(i[c]=255,s-=8):s>0&&(i[c]=255<<8-s,s=0);let a=new Uint8Array(n.length*2);return a.set(n,0),a.set(i,n.length),a.buffer}let t=this.isIPv4(e)?this.parseIPv4(e):this.parseIPv6(e);return new Uint8Array(t).buffer}};var hC=Vt($i()),F7,$7,K7,Gt=class{constructor(e={}){Object.assign(this,e)}toString(){return this.bmpString||this.printableString||this.teletexString||this.universalString||this.utf8String||""}};f([p({type:b.TeletexString})],Gt.prototype,"teletexString",void 0);f([p({type:b.PrintableString})],Gt.prototype,"printableString",void 0);f([p({type:b.UniversalString})],Gt.prototype,"universalString",void 0);f([p({type:b.Utf8String})],Gt.prototype,"utf8String",void 0);f([p({type:b.BmpString})],Gt.prototype,"bmpString",void 0);Gt=f([C({type:_.Choice})],Gt);var Uu=class extends Gt{constructor(e={}){super(e),Object.assign(this,e)}toString(){return this.ia5String||(this.anyValue?hC.Convert.ToHex(this.anyValue):super.toString())}};f([p({type:b.IA5String})],Uu.prototype,"ia5String",void 0);f([p({type:b.Any})],Uu.prototype,"anyValue",void 0);Uu=f([C({type:_.Choice})],Uu);var Tc=class{constructor(e={}){this.type="",this.value=new Uu,Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],Tc.prototype,"type",void 0);f([p({type:Uu})],Tc.prototype,"value",void 0);var Gs=F7=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,F7.prototype)}};Gs=F7=f([C({type:_.Set,itemType:Tc})],Gs);var V7=$7=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,$7.prototype)}};V7=$7=f([C({type:_.Sequence,itemType:Gs})],V7);var lt=K7=class extends V7{constructor(e){super(e),Object.setPrototypeOf(this,K7.prototype)}};lt=K7=f([C({type:_.Sequence})],lt);var xV={fromASN:r=>mh.toString(Bu.fromASN(r)),toASN:r=>Bu.toASN(mh.fromString(r))},zs=class{constructor(e={}){this.typeId="",this.value=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],zs.prototype,"typeId",void 0);f([p({type:b.Any,context:0})],zs.prototype,"value",void 0);var gh=class{constructor(e={}){this.partyName=new Gt,Object.assign(this,e)}};f([p({type:Gt,optional:!0,context:0,implicit:!0})],gh.prototype,"nameAssigner",void 0);f([p({type:Gt,context:1,implicit:!0})],gh.prototype,"partyName",void 0);var Ee=class{constructor(e={}){Object.assign(this,e)}};f([p({type:zs,context:0,implicit:!0})],Ee.prototype,"otherName",void 0);f([p({type:b.IA5String,context:1,implicit:!0})],Ee.prototype,"rfc822Name",void 0);f([p({type:b.IA5String,context:2,implicit:!0})],Ee.prototype,"dNSName",void 0);f([p({type:b.Any,context:3,implicit:!0})],Ee.prototype,"x400Address",void 0);f([p({type:lt,context:4,implicit:!1})],Ee.prototype,"directoryName",void 0);f([p({type:gh,context:5})],Ee.prototype,"ediPartyName",void 0);f([p({type:b.IA5String,context:6,implicit:!0})],Ee.prototype,"uniformResourceIdentifier",void 0);f([p({type:b.OctetString,context:7,implicit:!0,converter:xV})],Ee.prototype,"iPAddress",void 0);f([p({type:b.ObjectIdentifier,context:8,implicit:!0})],Ee.prototype,"registeredID",void 0);Ee=f([C({type:_.Choice})],Ee);var Xs="1.3.6.1.5.5.7",Ys=`${Xs}.1`,pC=`${Xs}.2`,Cc=`${Xs}.3`,Tg=`${Xs}.48`,c5e=`${pC}.1`,l5e=`${pC}.2`,H7=`${Tg}.1`,q7=`${Tg}.2`,j7=`${Tg}.3`,W7=`${Tg}.5`,Re="2.5.29";var G7,Cg=`${Ys}.1`,qi=class{constructor(e={}){this.accessMethod="",this.accessLocation=new Ee,Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],qi.prototype,"accessMethod",void 0);f([p({type:Ee})],qi.prototype,"accessLocation",void 0);var kc=G7=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,G7.prototype)}};kc=G7=f([C({type:_.Sequence,itemType:qi})],kc);var kg=`${Re}.35`,Pc=class extends be{},li=class{constructor(e={}){e&&Object.assign(this,e)}};f([p({type:Pc,context:0,optional:!0,implicit:!0})],li.prototype,"keyIdentifier",void 0);f([p({type:Ee,context:1,optional:!0,implicit:!0,repeated:"sequence"})],li.prototype,"authorityCertIssuer",void 0);f([p({type:b.Integer,context:2,optional:!0,implicit:!0,converter:$e})],li.prototype,"authorityCertSerialNumber",void 0);var Pg=`${Re}.19`,Rc=class{constructor(e={}){this.cA=!1,Object.assign(this,e)}};f([p({type:b.Boolean,defaultValue:!1})],Rc.prototype,"cA",void 0);f([p({type:b.Integer,optional:!0})],Rc.prototype,"pathLenConstraint",void 0);var z7,It=z7=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,z7.prototype)}};It=z7=f([C({type:_.Sequence,itemType:Ee})],It);var X7,vV=`${Re}.29`,mC=X7=class extends It{constructor(e){super(e),Object.setPrototypeOf(this,X7.prototype)}};mC=X7=f([C({type:_.Sequence})],mC);var Y7,Ng=`${Re}.32`,K5e=`${Ng}.0`,ji=class{constructor(e={}){Object.assign(this,e)}toString(){return this.ia5String||this.visibleString||this.bmpString||this.utf8String||""}};f([p({type:b.IA5String})],ji.prototype,"ia5String",void 0);f([p({type:b.VisibleString})],ji.prototype,"visibleString",void 0);f([p({type:b.BmpString})],ji.prototype,"bmpString",void 0);f([p({type:b.Utf8String})],ji.prototype,"utf8String",void 0);ji=f([C({type:_.Choice})],ji);var yh=class{constructor(e={}){this.organization=new ji,this.noticeNumbers=[],Object.assign(this,e)}};f([p({type:ji})],yh.prototype,"organization",void 0);f([p({type:b.Integer,repeated:"sequence"})],yh.prototype,"noticeNumbers",void 0);var wh=class{constructor(e={}){Object.assign(this,e)}};f([p({type:yh,optional:!0})],wh.prototype,"noticeRef",void 0);f([p({type:ji,optional:!0})],wh.prototype,"explicitText",void 0);var Rg=class{constructor(e={}){Object.assign(this,e)}};f([p({type:b.IA5String})],Rg.prototype,"cPSuri",void 0);f([p({type:wh})],Rg.prototype,"userNotice",void 0);Rg=f([C({type:_.Choice})],Rg);var bh=class{constructor(e={}){this.policyQualifierId="",this.qualifier=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],bh.prototype,"policyQualifierId",void 0);f([p({type:b.Any})],bh.prototype,"qualifier",void 0);var Nc=class{constructor(e={}){this.policyIdentifier="",Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],Nc.prototype,"policyIdentifier",void 0);f([p({type:bh,repeated:"sequence",optional:!0})],Nc.prototype,"policyQualifiers",void 0);var xh=Y7=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,Y7.prototype)}};xh=Y7=f([C({type:_.Sequence,itemType:Nc})],xh);var X5e=`${Re}.20`,vh=class{constructor(e=0){this.value=e}};f([p({type:b.Integer})],vh.prototype,"value",void 0);vh=f([C({type:_.Choice})],vh);var r8e=`${Re}.27`,gC=class extends vh{};gC=f([C({type:_.Choice})],gC);var Q7,Dg=`${Re}.31`,$o;(function(r){r[r.unused=1]="unused",r[r.keyCompromise=2]="keyCompromise",r[r.cACompromise=4]="cACompromise",r[r.affiliationChanged=8]="affiliationChanged",r[r.superseded=16]="superseded",r[r.cessationOfOperation=32]="cessationOfOperation",r[r.certificateHold=64]="certificateHold",r[r.privilegeWithdrawn=128]="privilegeWithdrawn",r[r.aACompromise=256]="aACompromise"})($o||($o={}));var Eh=class extends ci{toJSON(){let e=[],t=this.toNumber();return t&$o.aACompromise&&e.push("aACompromise"),t&$o.affiliationChanged&&e.push("affiliationChanged"),t&$o.cACompromise&&e.push("cACompromise"),t&$o.certificateHold&&e.push("certificateHold"),t&$o.cessationOfOperation&&e.push("cessationOfOperation"),t&$o.keyCompromise&&e.push("keyCompromise"),t&$o.privilegeWithdrawn&&e.push("privilegeWithdrawn"),t&$o.superseded&&e.push("superseded"),t&$o.unused&&e.push("unused"),e}toString(){return`[${this.toJSON().join(", ")}]`}},Wi=class{constructor(e={}){Object.assign(this,e)}};f([p({type:Ee,context:0,repeated:"sequence",implicit:!0})],Wi.prototype,"fullName",void 0);f([p({type:Gs,context:1,implicit:!0})],Wi.prototype,"nameRelativeToCRLIssuer",void 0);Wi=f([C({type:_.Choice})],Wi);var ui=class{constructor(e={}){Object.assign(this,e)}};f([p({type:Wi,context:0,optional:!0})],ui.prototype,"distributionPoint",void 0);f([p({type:Eh,context:1,optional:!0,implicit:!0})],ui.prototype,"reasons",void 0);f([p({type:Ee,context:2,optional:!0,repeated:"sequence",implicit:!0})],ui.prototype,"cRLIssuer",void 0);var Qs=Q7=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,Q7.prototype)}};Qs=Q7=f([C({type:_.Sequence,itemType:ui})],Qs);var Z7,y8e=`${Re}.46`,yC=Z7=class extends Qs{constructor(e){super(e),Object.setPrototypeOf(this,Z7.prototype)}};yC=Z7=f([C({type:_.Sequence,itemType:ui})],yC);var _8e=`${Re}.28`,Un=class r{constructor(e={}){this.onlyContainsUserCerts=r.ONLY,this.onlyContainsCACerts=r.ONLY,this.indirectCRL=r.ONLY,this.onlyContainsAttributeCerts=r.ONLY,Object.assign(this,e)}};Un.ONLY=!1;f([p({type:Wi,context:0,optional:!0})],Un.prototype,"distributionPoint",void 0);f([p({type:b.Boolean,context:1,defaultValue:Un.ONLY,implicit:!0})],Un.prototype,"onlyContainsUserCerts",void 0);f([p({type:b.Boolean,context:2,defaultValue:Un.ONLY,implicit:!0})],Un.prototype,"onlyContainsCACerts",void 0);f([p({type:Eh,context:3,optional:!0,implicit:!0})],Un.prototype,"onlySomeReasons",void 0);f([p({type:b.Boolean,context:4,defaultValue:Un.ONLY,implicit:!0})],Un.prototype,"indirectCRL",void 0);f([p({type:b.Boolean,context:5,defaultValue:Un.ONLY,implicit:!0})],Un.prototype,"onlyContainsAttributeCerts",void 0);var wC=`${Re}.21`,Sh;(function(r){r[r.unspecified=0]="unspecified",r[r.keyCompromise=1]="keyCompromise",r[r.cACompromise=2]="cACompromise",r[r.affiliationChanged=3]="affiliationChanged",r[r.superseded=4]="superseded",r[r.cessationOfOperation=5]="cessationOfOperation",r[r.certificateHold=6]="certificateHold",r[r.removeFromCRL=8]="removeFromCRL",r[r.privilegeWithdrawn=9]="privilegeWithdrawn",r[r.aACompromise=10]="aACompromise"})(Sh||(Sh={}));var Ah=class{constructor(e=Sh.unspecified){this.reason=Sh.unspecified,this.reason=e}toJSON(){return Sh[this.reason]}toString(){return this.toJSON()}};f([p({type:b.Enumerated})],Ah.prototype,"reason",void 0);Ah=f([C({type:_.Choice})],Ah);var J7,Og=`${Re}.37`,_h=J7=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,J7.prototype)}};_h=J7=f([C({type:_.Sequence,itemType:b.ObjectIdentifier})],_h);var B8e=`${Og}.0`,bC=`${Cc}.1`,xC=`${Cc}.2`,vC=`${Cc}.3`,EC=`${Cc}.4`,SC=`${Cc}.8`,AC=`${Cc}.9`;var K8e=`${Re}.54`,e9=class{constructor(e=new ArrayBuffer(0)){this.value=e}};f([p({type:b.Integer,converter:$e})],e9.prototype,"value",void 0);e9=f([C({type:_.Choice})],e9);var _C=`${Re}.24`,Ih=class{constructor(e){this.value=new Date,e&&(this.value=e)}};f([p({type:b.GeneralizedTime})],Ih.prototype,"value",void 0);Ih=f([C({type:_.Choice})],Ih);var t9,J8e=`${Re}.18`,IC=t9=class extends It{constructor(e){super(e),Object.setPrototypeOf(this,t9.prototype)}};IC=t9=f([C({type:_.Sequence})],IC);var Lg=`${Re}.15`,Ko;(function(r){r[r.digitalSignature=1]="digitalSignature",r[r.nonRepudiation=2]="nonRepudiation",r[r.keyEncipherment=4]="keyEncipherment",r[r.dataEncipherment=8]="dataEncipherment",r[r.keyAgreement=16]="keyAgreement",r[r.keyCertSign=32]="keyCertSign",r[r.cRLSign=64]="cRLSign",r[r.encipherOnly=128]="encipherOnly",r[r.decipherOnly=256]="decipherOnly"})(Ko||(Ko={}));var Fu=class extends ci{toJSON(){let e=this.toNumber(),t=[];return e&Ko.cRLSign&&t.push("crlSign"),e&Ko.dataEncipherment&&t.push("dataEncipherment"),e&Ko.decipherOnly&&t.push("decipherOnly"),e&Ko.digitalSignature&&t.push("digitalSignature"),e&Ko.encipherOnly&&t.push("encipherOnly"),e&Ko.keyAgreement&&t.push("keyAgreement"),e&Ko.keyCertSign&&t.push("keyCertSign"),e&Ko.keyEncipherment&&t.push("keyEncipherment"),e&Ko.nonRepudiation&&t.push("nonRepudiation"),t}toString(){return`[${this.toJSON().join(", ")}]`}};var r9,l7e=`${Re}.30`,$u=class{constructor(e={}){this.base=new Ee,this.minimum=0,Object.assign(this,e)}};f([p({type:Ee})],$u.prototype,"base",void 0);f([p({type:b.Integer,context:0,defaultValue:0,implicit:!0})],$u.prototype,"minimum",void 0);f([p({type:b.Integer,context:1,optional:!0,implicit:!0})],$u.prototype,"maximum",void 0);var Bg=r9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,r9.prototype)}};Bg=r9=f([C({type:_.Sequence,itemType:$u})],Bg);var Mg=class{constructor(e={}){Object.assign(this,e)}};f([p({type:Bg,context:0,optional:!0,implicit:!0})],Mg.prototype,"permittedSubtrees",void 0);f([p({type:Bg,context:1,optional:!0,implicit:!0})],Mg.prototype,"excludedSubtrees",void 0);var m7e=`${Re}.36`,Ug=class{constructor(e={}){Object.assign(this,e)}};f([p({type:b.Integer,context:0,implicit:!0,optional:!0,converter:$e})],Ug.prototype,"requireExplicitPolicy",void 0);f([p({type:b.Integer,context:1,implicit:!0,optional:!0,converter:$e})],Ug.prototype,"inhibitPolicyMapping",void 0);var n9,x7e=`${Re}.33`,Th=class{constructor(e={}){this.issuerDomainPolicy="",this.subjectDomainPolicy="",Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],Th.prototype,"issuerDomainPolicy",void 0);f([p({type:b.ObjectIdentifier})],Th.prototype,"subjectDomainPolicy",void 0);var TC=n9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,n9.prototype)}};TC=n9=f([C({type:_.Sequence,itemType:Th})],TC);var o9,i9=`${Re}.17`,Fg=o9=class extends It{constructor(e){super(e),Object.setPrototypeOf(this,o9.prototype)}};Fg=o9=f([C({type:_.Sequence})],Fg);var br=class{constructor(e={}){this.type="",this.values=[],Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],br.prototype,"type",void 0);f([p({type:b.Any,repeated:"set"})],br.prototype,"values",void 0);var s9,B7e=`${Re}.9`,CC=s9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,s9.prototype)}};CC=s9=f([C({type:_.Sequence,itemType:br})],CC);var a9=`${Re}.14`,hn=class extends Pc{};var j7e=`${Re}.16`,$g=class{constructor(e={}){Object.assign(this,e)}};f([p({type:b.GeneralizedTime,context:0,implicit:!0,optional:!0})],$g.prototype,"notBefore",void 0);f([p({type:b.GeneralizedTime,context:1,implicit:!0,optional:!0})],$g.prototype,"notAfter",void 0);var Ch;(function(r){r[r.keyUpdateAllowed=1]="keyUpdateAllowed",r[r.newExtensions=2]="newExtensions",r[r.pKIXCertificate=4]="pKIXCertificate"})(Ch||(Ch={}));var Kg=class extends ci{toJSON(){let e=[],t=this.toNumber();return t&Ch.pKIXCertificate&&e.push("pKIXCertificate"),t&Ch.newExtensions&&e.push("newExtensions"),t&Ch.keyUpdateAllowed&&e.push("keyUpdateAllowed"),e}toString(){return`[${this.toJSON().join(", ")}]`}},Vg=class{constructor(e={}){this.entrustVers="",this.entrustInfoFlags=new Kg,Object.assign(this,e)}};f([p({type:b.GeneralString})],Vg.prototype,"entrustVers",void 0);f([p({type:Kg})],Vg.prototype,"entrustInfoFlags",void 0);var c9,e9e=`${Ys}.11`,kC=c9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,c9.prototype)}};kC=c9=f([C({type:_.Sequence,itemType:qi})],kC);var PC=Vt($i()),Y=class r{constructor(e={}){this.algorithm="",Object.assign(this,e)}isEqual(e){return e instanceof r&&e.algorithm==this.algorithm&&(e.parameters&&this.parameters&&PC.isEqual(e.parameters,this.parameters)||e.parameters===this.parameters)}};f([p({type:b.ObjectIdentifier})],Y.prototype,"algorithm",void 0);f([p({type:b.Any,optional:!0})],Y.prototype,"parameters",void 0);var xr=class{constructor(e={}){this.algorithm=new Y,this.subjectPublicKey=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:Y})],xr.prototype,"algorithm",void 0);f([p({type:b.BitString})],xr.prototype,"subjectPublicKey",void 0);var Ot=class{constructor(e){if(e)if(typeof e=="string"||typeof e=="number"||e instanceof Date){let t=new Date(e);t.getUTCFullYear()>2049?this.generalTime=t:this.utcTime=t}else Object.assign(this,e)}getTime(){let e=this.utcTime||this.generalTime;if(!e)throw new Error("Cannot get time from CHOICE object");return e}};f([p({type:b.UTCTime})],Ot.prototype,"utcTime",void 0);f([p({type:b.GeneralizedTime})],Ot.prototype,"generalTime",void 0);Ot=f([C({type:_.Choice})],Ot);var Gi=class{constructor(e){this.notBefore=new Ot(new Date),this.notAfter=new Ot(new Date),e&&(this.notBefore=new Ot(e.notBefore),this.notAfter=new Ot(e.notAfter))}};f([p({type:Ot})],Gi.prototype,"notBefore",void 0);f([p({type:Ot})],Gi.prototype,"notAfter",void 0);var l9,vr=class r{constructor(e={}){this.extnID="",this.critical=r.CRITICAL,this.extnValue=new be,Object.assign(this,e)}};vr.CRITICAL=!1;f([p({type:b.ObjectIdentifier})],vr.prototype,"extnID",void 0);f([p({type:b.Boolean,defaultValue:vr.CRITICAL})],vr.prototype,"critical",void 0);f([p({type:be})],vr.prototype,"extnValue",void 0);var Fn=l9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,l9.prototype)}};Fn=l9=f([C({type:_.Sequence,itemType:vr})],Fn);var di;(function(r){r[r.v1=0]="v1",r[r.v2=1]="v2",r[r.v3=2]="v3"})(di||(di={}));var Er=class{constructor(e={}){this.version=di.v1,this.serialNumber=new ArrayBuffer(0),this.signature=new Y,this.issuer=new lt,this.validity=new Gi,this.subject=new lt,this.subjectPublicKeyInfo=new xr,Object.assign(this,e)}};f([p({type:b.Integer,context:0,defaultValue:di.v1})],Er.prototype,"version",void 0);f([p({type:b.Integer,converter:$e})],Er.prototype,"serialNumber",void 0);f([p({type:Y})],Er.prototype,"signature",void 0);f([p({type:lt})],Er.prototype,"issuer",void 0);f([p({type:Gi})],Er.prototype,"validity",void 0);f([p({type:lt})],Er.prototype,"subject",void 0);f([p({type:xr})],Er.prototype,"subjectPublicKeyInfo",void 0);f([p({type:b.BitString,context:1,implicit:!0,optional:!0})],Er.prototype,"issuerUniqueID",void 0);f([p({type:b.BitString,context:2,implicit:!0,optional:!0})],Er.prototype,"subjectUniqueID",void 0);f([p({type:Fn,context:3,optional:!0})],Er.prototype,"extensions",void 0);var no=class{constructor(e={}){this.tbsCertificate=new Er,this.signatureAlgorithm=new Y,this.signatureValue=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:Er})],no.prototype,"tbsCertificate",void 0);f([p({type:Y})],no.prototype,"signatureAlgorithm",void 0);f([p({type:b.BitString})],no.prototype,"signatureValue",void 0);var Dc=class{constructor(e={}){this.userCertificate=new ArrayBuffer(0),this.revocationDate=new Ot,Object.assign(this,e)}};f([p({type:b.Integer,converter:$e})],Dc.prototype,"userCertificate",void 0);f([p({type:Ot})],Dc.prototype,"revocationDate",void 0);f([p({type:vr,optional:!0,repeated:"sequence"})],Dc.prototype,"crlEntryExtensions",void 0);var $n=class{constructor(e={}){this.signature=new Y,this.issuer=new lt,this.thisUpdate=new Ot,Object.assign(this,e)}};f([p({type:b.Integer,optional:!0})],$n.prototype,"version",void 0);f([p({type:Y})],$n.prototype,"signature",void 0);f([p({type:lt})],$n.prototype,"issuer",void 0);f([p({type:Ot})],$n.prototype,"thisUpdate",void 0);f([p({type:Ot,optional:!0})],$n.prototype,"nextUpdate",void 0);f([p({type:Dc,repeated:"sequence",optional:!0})],$n.prototype,"revokedCertificates",void 0);f([p({type:vr,optional:!0,context:0,repeated:"sequence"})],$n.prototype,"crlExtensions",void 0);var Oc=class{constructor(e={}){this.tbsCertList=new $n,this.signatureAlgorithm=new Y,this.signature=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:$n})],Oc.prototype,"tbsCertList",void 0);f([p({type:Y})],Oc.prototype,"signatureAlgorithm",void 0);f([p({type:b.BitString})],Oc.prototype,"signature",void 0);var Q=Vt($i());var Vo=class{constructor(e={}){this.issuer=new lt,this.serialNumber=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:lt})],Vo.prototype,"issuer",void 0);f([p({type:b.Integer,converter:$e})],Vo.prototype,"serialNumber",void 0);var Lc=class{constructor(e={}){Object.assign(this,e)}};f([p({type:hn,context:0,implicit:!0})],Lc.prototype,"subjectKeyIdentifier",void 0);f([p({type:Vo})],Lc.prototype,"issuerAndSerialNumber",void 0);Lc=f([C({type:_.Choice})],Lc);var Sr;(function(r){r[r.v0=0]="v0",r[r.v1=1]="v1",r[r.v2=2]="v2",r[r.v3=3]="v3",r[r.v4=4]="v4",r[r.v5=5]="v5"})(Sr||(Sr={}));var Bc=class extends Y{};Bc=f([C({type:_.Sequence})],Bc);var kh=class extends Y{};kh=f([C({type:_.Sequence})],kh);var pn=class extends Y{};pn=f([C({type:_.Sequence})],pn);var Ph=class extends Y{};Ph=f([C({type:_.Sequence})],Ph);var NC=class extends Y{};NC=f([C({type:_.Sequence})],NC);var Hg=class extends Y{};Hg=f([C({type:_.Sequence})],Hg);var Ho=class{constructor(e={}){this.attrType="",this.attrValues=[],Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],Ho.prototype,"attrType",void 0);f([p({type:b.Any,repeated:"set"})],Ho.prototype,"attrValues",void 0);var u9,mn=class{constructor(e={}){this.version=Sr.v0,this.sid=new Lc,this.digestAlgorithm=new Bc,this.signatureAlgorithm=new kh,this.signature=new be,Object.assign(this,e)}};f([p({type:b.Integer})],mn.prototype,"version",void 0);f([p({type:Lc})],mn.prototype,"sid",void 0);f([p({type:Bc})],mn.prototype,"digestAlgorithm",void 0);f([p({type:Ho,repeated:"set",context:0,implicit:!0,optional:!0})],mn.prototype,"signedAttrs",void 0);f([p({type:kh})],mn.prototype,"signatureAlgorithm",void 0);f([p({type:be})],mn.prototype,"signature",void 0);f([p({type:Ho,repeated:"set",context:1,implicit:!0,optional:!0})],mn.prototype,"unsignedAttrs",void 0);var Rh=u9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,u9.prototype)}};Rh=u9=f([C({type:_.Set,itemType:mn})],Rh);var DC=class extends Ot{};DC=f([C({type:_.Choice})],DC);var OC=class extends mn{};OC=f([C({type:_.Sequence})],OC);var Nh=class{constructor(e={}){this.acIssuer=new Ee,this.acSerial=0,this.attrs=[],Object.assign(this,e)}};f([p({type:Ee})],Nh.prototype,"acIssuer",void 0);f([p({type:b.Integer})],Nh.prototype,"acSerial",void 0);f([p({type:br,repeated:"sequence"})],Nh.prototype,"attrs",void 0);var d9,Dh=d9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,d9.prototype)}};Dh=d9=f([C({type:_.Sequence,itemType:b.ObjectIdentifier})],Dh);var Ku=class{constructor(e={}){this.permitUnSpecified=!0,Object.assign(this,e)}};f([p({type:b.Integer,optional:!0})],Ku.prototype,"pathLenConstraint",void 0);f([p({type:Dh,implicit:!0,context:0,optional:!0})],Ku.prototype,"permittedAttrs",void 0);f([p({type:Dh,implicit:!0,context:1,optional:!0})],Ku.prototype,"excludedAttrs",void 0);f([p({type:b.Boolean,defaultValue:!0})],Ku.prototype,"permitUnSpecified",void 0);var oo=class{constructor(e={}){this.issuer=new It,this.serial=new ArrayBuffer(0),this.issuerUID=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:It})],oo.prototype,"issuer",void 0);f([p({type:b.Integer,converter:$e})],oo.prototype,"serial",void 0);f([p({type:b.BitString,optional:!0})],oo.prototype,"issuerUID",void 0);var f9;(function(r){r[r.publicKey=0]="publicKey",r[r.publicKeyCert=1]="publicKeyCert",r[r.otherObjectTypes=2]="otherObjectTypes"})(f9||(f9={}));var io=class{constructor(e={}){this.digestedObjectType=f9.publicKey,this.digestAlgorithm=new Y,this.objectDigest=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:b.Enumerated})],io.prototype,"digestedObjectType",void 0);f([p({type:b.ObjectIdentifier,optional:!0})],io.prototype,"otherObjectTypeID",void 0);f([p({type:Y})],io.prototype,"digestAlgorithm",void 0);f([p({type:b.BitString})],io.prototype,"objectDigest",void 0);var Mc=class{constructor(e={}){Object.assign(this,e)}};f([p({type:It,optional:!0})],Mc.prototype,"issuerName",void 0);f([p({type:oo,context:0,implicit:!0,optional:!0})],Mc.prototype,"baseCertificateID",void 0);f([p({type:io,context:1,implicit:!0,optional:!0})],Mc.prototype,"objectDigestInfo",void 0);var Uc=class{constructor(e={}){Object.assign(this,e)}};f([p({type:Ee,repeated:"sequence"})],Uc.prototype,"v1Form",void 0);f([p({type:Mc,context:0,implicit:!0})],Uc.prototype,"v2Form",void 0);Uc=f([C({type:_.Choice})],Uc);var Fc=class{constructor(e={}){this.notBeforeTime=new Date,this.notAfterTime=new Date,Object.assign(this,e)}};f([p({type:b.GeneralizedTime})],Fc.prototype,"notBeforeTime",void 0);f([p({type:b.GeneralizedTime})],Fc.prototype,"notAfterTime",void 0);var Zs=class{constructor(e={}){Object.assign(this,e)}};f([p({type:oo,implicit:!0,context:0,optional:!0})],Zs.prototype,"baseCertificateID",void 0);f([p({type:It,implicit:!0,context:1,optional:!0})],Zs.prototype,"entityName",void 0);f([p({type:io,implicit:!0,context:2,optional:!0})],Zs.prototype,"objectDigestInfo",void 0);var h9;(function(r){r[r.v2=1]="v2"})(h9||(h9={}));var gn=class{constructor(e={}){this.version=h9.v2,this.holder=new Zs,this.issuer=new Uc,this.signature=new Y,this.serialNumber=new ArrayBuffer(0),this.attrCertValidityPeriod=new Fc,this.attributes=[],Object.assign(this,e)}};f([p({type:b.Integer})],gn.prototype,"version",void 0);f([p({type:Zs})],gn.prototype,"holder",void 0);f([p({type:Uc})],gn.prototype,"issuer",void 0);f([p({type:Y})],gn.prototype,"signature",void 0);f([p({type:b.Integer,converter:$e})],gn.prototype,"serialNumber",void 0);f([p({type:Fc})],gn.prototype,"attrCertValidityPeriod",void 0);f([p({type:br,repeated:"sequence"})],gn.prototype,"attributes",void 0);f([p({type:b.BitString,optional:!0})],gn.prototype,"issuerUniqueID",void 0);f([p({type:Fn,optional:!0})],gn.prototype,"extensions",void 0);var $c=class{constructor(e={}){this.acinfo=new gn,this.signatureAlgorithm=new Y,this.signatureValue=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:gn})],$c.prototype,"acinfo",void 0);f([p({type:Y})],$c.prototype,"signatureAlgorithm",void 0);f([p({type:b.BitString})],$c.prototype,"signatureValue",void 0);var Oh;(function(r){r[r.unmarked=1]="unmarked",r[r.unclassified=2]="unclassified",r[r.restricted=4]="restricted",r[r.confidential=8]="confidential",r[r.secret=16]="secret",r[r.topSecret=32]="topSecret"})(Oh||(Oh={}));var Vu=class extends ci{};var Hu=class{constructor(e={}){this.type="",this.value=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:b.ObjectIdentifier,implicit:!0,context:0})],Hu.prototype,"type",void 0);f([p({type:b.Any,implicit:!0,context:1})],Hu.prototype,"value",void 0);var Lh=class{constructor(e={}){this.policyId="",this.classList=new Vu(Oh.unclassified),Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],Lh.prototype,"policyId",void 0);f([p({type:Vu,defaultValue:new Vu(Oh.unclassified)})],Lh.prototype,"classList",void 0);f([p({type:Hu,repeated:"set"})],Lh.prototype,"securityCategories",void 0);var qu=class{constructor(e={}){Object.assign(this,e)}};f([p({type:be})],qu.prototype,"cotets",void 0);f([p({type:b.ObjectIdentifier})],qu.prototype,"oid",void 0);f([p({type:b.Utf8String})],qu.prototype,"string",void 0);var qg=class{constructor(e={}){this.values=[],Object.assign(this,e)}};f([p({type:It,implicit:!0,context:0,optional:!0})],qg.prototype,"policyAuthority",void 0);f([p({type:qu,repeated:"sequence"})],qg.prototype,"values",void 0);var Oxe=`${Ys}.4`,Lxe=`${Ys}.6`,Bxe=`${Ys}.10`,Mxe=`${Re}.55`,Bh=`${Xs}.10`,Uxe=`${Bh}.1`,Fxe=`${Bh}.2`,$xe=`${Bh}.3`,Kxe=`${Bh}.4`,Vxe=`${Bh}.6`,p9="2.5.4",Hxe=`${p9}.72`;var m9,ju=class{constructor(e={}){this.targetCertificate=new oo,Object.assign(this,e)}};f([p({type:oo})],ju.prototype,"targetCertificate",void 0);f([p({type:Ee,optional:!0})],ju.prototype,"targetName",void 0);f([p({type:io,optional:!0})],ju.prototype,"certDigestInfo",void 0);var Wu=class{constructor(e={}){Object.assign(this,e)}};f([p({type:Ee,context:0,implicit:!0})],Wu.prototype,"targetName",void 0);f([p({type:Ee,context:1,implicit:!0})],Wu.prototype,"targetGroup",void 0);f([p({type:ju,context:2,implicit:!0})],Wu.prototype,"targetCert",void 0);Wu=f([C({type:_.Choice})],Wu);var jg=m9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,m9.prototype)}};jg=m9=f([C({type:_.Sequence,itemType:Wu})],jg);var g9,LC=g9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,g9.prototype)}};LC=g9=f([C({type:_.Sequence,itemType:jg})],LC);var Wg=class{constructor(e={}){Object.assign(this,e)}};f([p({type:It,implicit:!0,context:0,optional:!0})],Wg.prototype,"roleAuthority",void 0);f([p({type:Ee,implicit:!0,context:1})],Wg.prototype,"roleName",void 0);var Mh=class{constructor(e={}){this.service=new Ee,this.ident=new Ee,Object.assign(this,e)}};f([p({type:Ee})],Mh.prototype,"service",void 0);f([p({type:Ee})],Mh.prototype,"ident",void 0);f([p({type:be,optional:!0})],Mh.prototype,"authInfo",void 0);var y9,Uh=class{constructor(e={}){this.otherCertFormat="",this.otherCert=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],Uh.prototype,"otherCertFormat",void 0);f([p({type:b.Any})],Uh.prototype,"otherCert",void 0);var Kc=class{constructor(e={}){Object.assign(this,e)}};f([p({type:no})],Kc.prototype,"certificate",void 0);f([p({type:$c,context:2,implicit:!0})],Kc.prototype,"v2AttrCert",void 0);f([p({type:Uh,context:3,implicit:!0})],Kc.prototype,"other",void 0);Kc=f([C({type:_.Choice})],Kc);var Vc=y9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,y9.prototype)}};Vc=y9=f([C({type:_.Set,itemType:Kc})],Vc);var so=class{constructor(e={}){this.contentType="",this.content=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],so.prototype,"contentType",void 0);f([p({type:b.Any,context:0})],so.prototype,"content",void 0);var Gu=class{constructor(e={}){Object.assign(this,e)}};f([p({type:be})],Gu.prototype,"single",void 0);f([p({type:b.Any})],Gu.prototype,"any",void 0);Gu=f([C({type:_.Choice})],Gu);var Hc=class{constructor(e={}){this.eContentType="",Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],Hc.prototype,"eContentType",void 0);f([p({type:Gu,context:0,optional:!0})],Hc.prototype,"eContent",void 0);var Fh=class{constructor(e={}){Object.assign(this,e)}};f([p({type:be,context:0,implicit:!0,optional:!0})],Fh.prototype,"value",void 0);f([p({type:be,converter:uC,context:0,implicit:!0,optional:!0,repeated:"sequence"})],Fh.prototype,"constructedValue",void 0);Fh=f([C({type:_.Choice})],Fh);var Js=class{constructor(e={}){this.contentType="",this.contentEncryptionAlgorithm=new Ph,Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],Js.prototype,"contentType",void 0);f([p({type:Ph})],Js.prototype,"contentEncryptionAlgorithm",void 0);f([p({type:Fh,optional:!0})],Js.prototype,"encryptedContent",void 0);var ea=class{constructor(e={}){this.keyAttrId="",Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],ea.prototype,"keyAttrId",void 0);f([p({type:b.Any,optional:!0})],ea.prototype,"keyAttr",void 0);var w9,zu=class{constructor(e={}){this.subjectKeyIdentifier=new hn,Object.assign(this,e)}};f([p({type:hn})],zu.prototype,"subjectKeyIdentifier",void 0);f([p({type:b.GeneralizedTime,optional:!0})],zu.prototype,"date",void 0);f([p({type:ea,optional:!0})],zu.prototype,"other",void 0);var Xu=class{constructor(e={}){Object.assign(this,e)}};f([p({type:zu,context:0,implicit:!0,optional:!0})],Xu.prototype,"rKeyId",void 0);f([p({type:Vo,optional:!0})],Xu.prototype,"issuerAndSerialNumber",void 0);Xu=f([C({type:_.Choice})],Xu);var $h=class{constructor(e={}){this.rid=new Xu,this.encryptedKey=new be,Object.assign(this,e)}};f([p({type:Xu})],$h.prototype,"rid",void 0);f([p({type:be})],$h.prototype,"encryptedKey",void 0);var Gg=w9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,w9.prototype)}};Gg=w9=f([C({type:_.Sequence,itemType:$h})],Gg);var Kh=class{constructor(e={}){this.algorithm=new Y,this.publicKey=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:Y})],Kh.prototype,"algorithm",void 0);f([p({type:b.BitString})],Kh.prototype,"publicKey",void 0);var qc=class{constructor(e={}){Object.assign(this,e)}};f([p({type:hn,context:0,implicit:!0,optional:!0})],qc.prototype,"subjectKeyIdentifier",void 0);f([p({type:Kh,context:1,implicit:!0,optional:!0})],qc.prototype,"originatorKey",void 0);f([p({type:Vo,optional:!0})],qc.prototype,"issuerAndSerialNumber",void 0);qc=f([C({type:_.Choice})],qc);var zi=class{constructor(e={}){this.version=Sr.v3,this.originator=new qc,this.keyEncryptionAlgorithm=new pn,this.recipientEncryptedKeys=new Gg,Object.assign(this,e)}};f([p({type:b.Integer})],zi.prototype,"version",void 0);f([p({type:qc,context:0})],zi.prototype,"originator",void 0);f([p({type:be,context:1,optional:!0})],zi.prototype,"ukm",void 0);f([p({type:pn})],zi.prototype,"keyEncryptionAlgorithm",void 0);f([p({type:Gg})],zi.prototype,"recipientEncryptedKeys",void 0);var Yu=class{constructor(e={}){Object.assign(this,e)}};f([p({type:hn,context:0,implicit:!0})],Yu.prototype,"subjectKeyIdentifier",void 0);f([p({type:Vo})],Yu.prototype,"issuerAndSerialNumber",void 0);Yu=f([C({type:_.Choice})],Yu);var ta=class{constructor(e={}){this.version=Sr.v0,this.rid=new Yu,this.keyEncryptionAlgorithm=new pn,this.encryptedKey=new be,Object.assign(this,e)}};f([p({type:b.Integer})],ta.prototype,"version",void 0);f([p({type:Yu})],ta.prototype,"rid",void 0);f([p({type:pn})],ta.prototype,"keyEncryptionAlgorithm",void 0);f([p({type:be})],ta.prototype,"encryptedKey",void 0);var jc=class{constructor(e={}){this.keyIdentifier=new be,Object.assign(this,e)}};f([p({type:be})],jc.prototype,"keyIdentifier",void 0);f([p({type:b.GeneralizedTime,optional:!0})],jc.prototype,"date",void 0);f([p({type:ea,optional:!0})],jc.prototype,"other",void 0);var ra=class{constructor(e={}){this.version=Sr.v4,this.kekid=new jc,this.keyEncryptionAlgorithm=new pn,this.encryptedKey=new be,Object.assign(this,e)}};f([p({type:b.Integer})],ra.prototype,"version",void 0);f([p({type:jc})],ra.prototype,"kekid",void 0);f([p({type:pn})],ra.prototype,"keyEncryptionAlgorithm",void 0);f([p({type:be})],ra.prototype,"encryptedKey",void 0);var na=class{constructor(e={}){this.version=Sr.v0,this.keyEncryptionAlgorithm=new pn,this.encryptedKey=new be,Object.assign(this,e)}};f([p({type:b.Integer})],na.prototype,"version",void 0);f([p({type:Hg,context:0,optional:!0})],na.prototype,"keyDerivationAlgorithm",void 0);f([p({type:pn})],na.prototype,"keyEncryptionAlgorithm",void 0);f([p({type:be})],na.prototype,"encryptedKey",void 0);var Vh=class{constructor(e={}){this.oriType="",this.oriValue=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],Vh.prototype,"oriType",void 0);f([p({type:b.Any})],Vh.prototype,"oriValue",void 0);var Xi=class{constructor(e={}){Object.assign(this,e)}};f([p({type:ta,optional:!0})],Xi.prototype,"ktri",void 0);f([p({type:zi,context:1,implicit:!0,optional:!0})],Xi.prototype,"kari",void 0);f([p({type:ra,context:2,implicit:!0,optional:!0})],Xi.prototype,"kekri",void 0);f([p({type:na,context:3,implicit:!0,optional:!0})],Xi.prototype,"pwri",void 0);f([p({type:Vh,context:4,implicit:!0,optional:!0})],Xi.prototype,"ori",void 0);Xi=f([C({type:_.Choice})],Xi);var b9,Hh=b9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,b9.prototype)}};Hh=b9=f([C({type:_.Set,itemType:Xi})],Hh);var x9,BC=`${Xs}.16`,VEe=`${BC}.2`,HEe=`${BC}.4`,Qu=class{constructor(e={}){this.otherRevInfoFormat="",this.otherRevInfo=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],Qu.prototype,"otherRevInfoFormat",void 0);f([p({type:b.Any})],Qu.prototype,"otherRevInfo",void 0);var zg=class{constructor(e={}){this.other=new Qu,Object.assign(this,e)}};f([p({type:Qu,context:1,implicit:!0})],zg.prototype,"other",void 0);zg=f([C({type:_.Choice})],zg);var Zu=x9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,x9.prototype)}};Zu=x9=f([C({type:_.Set,itemType:zg})],Zu);var Ju=class{constructor(e={}){Object.assign(this,e)}};f([p({type:Vc,context:0,implicit:!0,optional:!0})],Ju.prototype,"certs",void 0);f([p({type:Zu,context:1,implicit:!0,optional:!0})],Ju.prototype,"crls",void 0);var v9,E9=v9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,v9.prototype)}};E9=v9=f([C({type:_.Set,itemType:Ho})],E9);var Wc=class{constructor(e={}){this.version=Sr.v0,this.recipientInfos=new Hh,this.encryptedContentInfo=new Js,Object.assign(this,e)}};f([p({type:b.Integer})],Wc.prototype,"version",void 0);f([p({type:Ju,context:0,implicit:!0,optional:!0})],Wc.prototype,"originatorInfo",void 0);f([p({type:Hh})],Wc.prototype,"recipientInfos",void 0);f([p({type:Js})],Wc.prototype,"encryptedContentInfo",void 0);f([p({type:E9,context:1,implicit:!0,optional:!0})],Wc.prototype,"unprotectedAttrs",void 0);var MC="1.2.840.113549.1.7.2";var S9,Xg=S9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,S9.prototype)}};Xg=S9=f([C({type:_.Set,itemType:Bc})],Xg);var Yi=class{constructor(e={}){this.version=Sr.v0,this.digestAlgorithms=new Xg,this.encapContentInfo=new Hc,this.signerInfos=new Rh,Object.assign(this,e)}};f([p({type:b.Integer})],Yi.prototype,"version",void 0);f([p({type:Xg})],Yi.prototype,"digestAlgorithms",void 0);f([p({type:Hc})],Yi.prototype,"encapContentInfo",void 0);f([p({type:Vc,context:0,implicit:!0,optional:!0})],Yi.prototype,"certificates",void 0);f([p({type:Zu,context:1,implicit:!0,optional:!0})],Yi.prototype,"crls",void 0);f([p({type:Rh})],Yi.prototype,"signerInfos",void 0);var Gc="1.2.840.10045.2.1";var qh="1.2.840.10045.4.1",Yg="1.2.840.10045.4.3.1",jh="1.2.840.10045.4.3.2",Wh="1.2.840.10045.4.3.3",Gh="1.2.840.10045.4.3.4";var A9="1.2.840.10045.3.1.7";var _9="1.3.132.0.34";var I9="1.3.132.0.35";function zh(r){return new Y({algorithm:r})}var FC=zh(qh),FSe=zh(Yg),$C=zh(jh),KC=zh(Wh),VC=zh(Gh);var Xh=class{constructor(e={}){Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],Xh.prototype,"fieldType",void 0);f([p({type:b.Any})],Xh.prototype,"parameters",void 0);Xh=f([C({type:_.Sequence})],Xh);var T9=class extends be{};var ed=class{constructor(e={}){Object.assign(this,e)}};f([p({type:b.OctetString})],ed.prototype,"a",void 0);f([p({type:b.OctetString})],ed.prototype,"b",void 0);f([p({type:b.BitString,optional:!0})],ed.prototype,"seed",void 0);ed=f([C({type:_.Sequence})],ed);var C9;(function(r){r[r.ecpVer1=1]="ecpVer1"})(C9||(C9={}));var fi=class{constructor(e={}){this.version=C9.ecpVer1,Object.assign(this,e)}};f([p({type:b.Integer})],fi.prototype,"version",void 0);f([p({type:Xh})],fi.prototype,"fieldID",void 0);f([p({type:ed})],fi.prototype,"curve",void 0);f([p({type:T9})],fi.prototype,"base",void 0);f([p({type:b.Integer,converter:$e})],fi.prototype,"order",void 0);f([p({type:b.Integer,optional:!0})],fi.prototype,"cofactor",void 0);fi=f([C({type:_.Sequence})],fi);var hi=class{constructor(e={}){Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],hi.prototype,"namedCurve",void 0);f([p({type:b.Null})],hi.prototype,"implicitCurve",void 0);f([p({type:fi})],hi.prototype,"specifiedCurve",void 0);hi=f([C({type:_.Choice})],hi);var td=class{constructor(e={}){this.version=1,this.privateKey=new be,Object.assign(this,e)}};f([p({type:b.Integer})],td.prototype,"version",void 0);f([p({type:be})],td.prototype,"privateKey",void 0);f([p({type:hi,context:0,optional:!0})],td.prototype,"parameters",void 0);f([p({type:b.BitString,context:1,optional:!0})],td.prototype,"publicKey",void 0);var zc=class{constructor(e={}){this.r=new ArrayBuffer(0),this.s=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:b.Integer,converter:$e})],zc.prototype,"r",void 0);f([p({type:b.Integer,converter:$e})],zc.prototype,"s",void 0);var yn="1.2.840.113549.1.1",pi=`${yn}.1`,HC=`${yn}.7`,qC=`${yn}.9`,oa=`${yn}.10`,jC=`${yn}.2`,WC=`${yn}.4`,rd=`${yn}.5`,GC=`${yn}.14`;var Qg=`${yn}.11`,nd=`${yn}.12`,od=`${yn}.13`,k9=`${yn}.15`,P9=`${yn}.16`,Xc="1.3.14.3.2.26",Zg="2.16.840.1.101.3.4.2.4",Yc="2.16.840.1.101.3.4.2.1",Qc="2.16.840.1.101.3.4.2.2",Zc="2.16.840.1.101.3.4.2.3",zC="2.16.840.1.101.3.4.2.5",XC="2.16.840.1.101.3.4.2.6",YC="1.2.840.113549.2.2",QC="1.2.840.113549.2.5",ia=`${yn}.8`;function Jt(r){return new Y({algorithm:r,parameters:null})}var hAe=Jt(YC),pAe=Jt(QC),Qi=Jt(Xc),mAe=Jt(Zg),gAe=Jt(Yc),yAe=Jt(Qc),wAe=Jt(Zc),bAe=Jt(zC),xAe=Jt(XC),Jg=new Y({algorithm:ia,parameters:ee.serialize(Qi)}),R9=new Y({algorithm:qC,parameters:ee.serialize(Bu.toASN(new Uint8Array([218,57,163,238,94,107,75,13,50,85,191,239,149,96,24,144,175,216,7,9]).buffer))}),vAe=Jt(pi),EAe=Jt(jC),SAe=Jt(WC),AAe=Jt(rd),_Ae=Jt(k9),IAe=Jt(P9),TAe=Jt(nd),CAe=Jt(od),kAe=Jt(k9),PAe=Jt(P9);var id=class{constructor(e={}){this.hashAlgorithm=new Y(Qi),this.maskGenAlgorithm=new Y({algorithm:ia,parameters:ee.serialize(Qi)}),this.pSourceAlgorithm=new Y(R9),Object.assign(this,e)}};f([p({type:Y,context:0,defaultValue:Qi})],id.prototype,"hashAlgorithm",void 0);f([p({type:Y,context:1,defaultValue:Jg})],id.prototype,"maskGenAlgorithm",void 0);f([p({type:Y,context:2,defaultValue:R9})],id.prototype,"pSourceAlgorithm",void 0);var MAe=new Y({algorithm:HC,parameters:ee.serialize(new id)});var mi=class{constructor(e={}){this.hashAlgorithm=new Y(Qi),this.maskGenAlgorithm=new Y({algorithm:ia,parameters:ee.serialize(Qi)}),this.saltLength=20,this.trailerField=1,Object.assign(this,e)}};f([p({type:Y,context:0,defaultValue:Qi})],mi.prototype,"hashAlgorithm",void 0);f([p({type:Y,context:1,defaultValue:Jg})],mi.prototype,"maskGenAlgorithm",void 0);f([p({type:b.Integer,context:2,defaultValue:20})],mi.prototype,"saltLength",void 0);f([p({type:b.Integer,context:3,defaultValue:1})],mi.prototype,"trailerField",void 0);var qAe=new Y({algorithm:oa,parameters:ee.serialize(new mi)});var Jc=class{constructor(e={}){this.digestAlgorithm=new Y,this.digest=new be,Object.assign(this,e)}};f([p({type:Y})],Jc.prototype,"digestAlgorithm",void 0);f([p({type:be})],Jc.prototype,"digest",void 0);var N9,sd=class{constructor(e={}){this.prime=new ArrayBuffer(0),this.exponent=new ArrayBuffer(0),this.coefficient=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:b.Integer,converter:$e})],sd.prototype,"prime",void 0);f([p({type:b.Integer,converter:$e})],sd.prototype,"exponent",void 0);f([p({type:b.Integer,converter:$e})],sd.prototype,"coefficient",void 0);var e3=N9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,N9.prototype)}};e3=N9=f([C({type:_.Sequence,itemType:sd})],e3);var ao=class{constructor(e={}){this.version=0,this.modulus=new ArrayBuffer(0),this.publicExponent=new ArrayBuffer(0),this.privateExponent=new ArrayBuffer(0),this.prime1=new ArrayBuffer(0),this.prime2=new ArrayBuffer(0),this.exponent1=new ArrayBuffer(0),this.exponent2=new ArrayBuffer(0),this.coefficient=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:b.Integer})],ao.prototype,"version",void 0);f([p({type:b.Integer,converter:$e})],ao.prototype,"modulus",void 0);f([p({type:b.Integer,converter:$e})],ao.prototype,"publicExponent",void 0);f([p({type:b.Integer,converter:$e})],ao.prototype,"privateExponent",void 0);f([p({type:b.Integer,converter:$e})],ao.prototype,"prime1",void 0);f([p({type:b.Integer,converter:$e})],ao.prototype,"prime2",void 0);f([p({type:b.Integer,converter:$e})],ao.prototype,"exponent1",void 0);f([p({type:b.Integer,converter:$e})],ao.prototype,"exponent2",void 0);f([p({type:b.Integer,converter:$e})],ao.prototype,"coefficient",void 0);f([p({type:e3,optional:!0})],ao.prototype,"otherPrimeInfos",void 0);var ad=class{constructor(e={}){this.modulus=new ArrayBuffer(0),this.publicExponent=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:b.Integer,converter:$e})],ad.prototype,"modulus",void 0);f([p({type:b.Integer,converter:$e})],ad.prototype,"publicExponent",void 0);var D9;(function(r){r[r.Transient=0]="Transient",r[r.Singleton=1]="Singleton",r[r.ResolutionScoped=2]="ResolutionScoped",r[r.ContainerScoped=3]="ContainerScoped"})(D9||(D9={}));var Ar=D9;var bk=Vt(wk(),1),{__extends:ld,__assign:v_e,__rest:TV,__decorate:E_e,__param:S_e,__metadata:A_e,__awaiter:xk,__generator:vk,__exportStar:__e,__createBinding:I_e,__values:Yh,__read:Qh,__spread:qo,__spreadArrays:T_e,__await:C_e,__asyncGenerator:k_e,__asyncDelegator:P_e,__asyncValues:R_e,__makeTemplateObject:N_e,__importStar:D_e,__importDefault:O_e,__classPrivateFieldGet:L_e,__classPrivateFieldSet:B_e}=bk.default;var CV="injectionTokens";function L9(r){var e=Reflect.getMetadata("design:paramtypes",r)||[],t=Reflect.getOwnMetadata(CV,r)||{};return Object.keys(t).forEach(function(n){e[+n]=t[n]}),e}function Zh(r){return!!r.useClass}function ud(r){return!!r.useFactory}var n3=function(){function r(e){this.wrap=e,this.reflectMethods=["get","getPrototypeOf","setPrototypeOf","getOwnPropertyDescriptor","defineProperty","has","set","deleteProperty","apply","construct","ownKeys"]}return r.prototype.createProxy=function(e){var t=this,n={},o=!1,i,s=function(){return o||(i=e(t.wrap()),o=!0),i};return new Proxy(n,this.createHandler(s))},r.prototype.createHandler=function(e){var t={},n=function(o){t[o]=function(){for(var i=[],s=0;s<arguments.length;s++)i[s]=arguments[s];i[0]=e();var a=Reflect[o];return a.apply(void 0,qo(i))}};return this.reflectMethods.forEach(n),t},r}();function sa(r){return typeof r=="string"||typeof r=="symbol"}function B9(r){return typeof r=="object"&&"token"in r&&"multiple"in r}function o3(r){return typeof r=="object"&&"token"in r&&"transform"in r}function Ek(r){return typeof r=="function"||r instanceof n3}function el(r){return!!r.useToken}function tl(r){return r.useValue!=null}function Sk(r){return Zh(r)||tl(r)||el(r)||ud(r)}var kV=function(){function r(){this._registryMap=new Map}return r.prototype.entries=function(){return this._registryMap.entries()},r.prototype.getAll=function(e){return this.ensure(e),this._registryMap.get(e)},r.prototype.get=function(e){this.ensure(e);var t=this._registryMap.get(e);return t[t.length-1]||null},r.prototype.set=function(e,t){this.ensure(e),this._registryMap.get(e).push(t)},r.prototype.setAll=function(e,t){this._registryMap.set(e,t)},r.prototype.has=function(e){return this.ensure(e),this._registryMap.get(e).length>0},r.prototype.clear=function(){this._registryMap.clear()},r.prototype.ensure=function(e){this._registryMap.has(e)||this._registryMap.set(e,[])},r}(),Jh=kV;var PV=function(r){ld(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(Jh),Ak=PV;var RV=function(){function r(){this.scopedResolutions=new Map}return r}(),ep=RV;function NV(r,e){if(r===null)return"at position #"+e;var t=r.split(",")[e].trim();return'"'+t+'" at position #'+e}function DV(r,e,t){return t===void 0&&(t=" "),qo([r],e.message.split(`
20
+ `).map(function(n){return t+n})).join(`
21
+ `)}function M9(r,e,t){var n=Qh(r.toString().match(/constructor\(([\w, ]+)\)/)||[],2),o=n[1],i=o===void 0?null:o,s=NV(i,e);return DV("Cannot inject the dependency "+s+' of "'+r.name+'" constructor. Reason:',t)}function _k(r){if(typeof r.dispose!="function")return!1;var e=r.dispose;return!(e.length>0)}var OV=function(r){ld(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(Jh);var LV=function(r){ld(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e}(Jh);var BV=function(){function r(){this.preResolution=new OV,this.postResolution=new LV}return r}(),Ik=BV;var U9=new Map,MV=function(){function r(e){this.parent=e,this._registry=new Ak,this.interceptors=new Ik,this.disposed=!1,this.disposables=new Set}return r.prototype.register=function(e,t,n){n===void 0&&(n={lifecycle:Ar.Transient}),this.ensureNotDisposed();var o;if(Sk(t)?o=t:o={useClass:t},el(o))for(var i=[e],s=o;s!=null;){var a=s.useToken;if(i.includes(a))throw new Error("Token registration cycle detected! "+qo(i,[a]).join(" -> "));i.push(a);var c=this._registry.get(a);c&&el(c.provider)?s=c.provider:s=null}if((n.lifecycle===Ar.Singleton||n.lifecycle==Ar.ContainerScoped||n.lifecycle==Ar.ResolutionScoped)&&(tl(o)||ud(o)))throw new Error('Cannot use lifecycle "'+Ar[n.lifecycle]+'" with ValueProviders or FactoryProviders');return this._registry.set(e,{provider:o,options:n}),this},r.prototype.registerType=function(e,t){return this.ensureNotDisposed(),sa(t)?this.register(e,{useToken:t}):this.register(e,{useClass:t})},r.prototype.registerInstance=function(e,t){return this.ensureNotDisposed(),this.register(e,{useValue:t})},r.prototype.registerSingleton=function(e,t){if(this.ensureNotDisposed(),sa(e)){if(sa(t))return this.register(e,{useToken:t},{lifecycle:Ar.Singleton});if(t)return this.register(e,{useClass:t},{lifecycle:Ar.Singleton});throw new Error('Cannot register a type name as a singleton without a "to" token')}var n=e;return t&&!sa(t)&&(n=t),this.register(e,{useClass:n},{lifecycle:Ar.Singleton})},r.prototype.resolve=function(e,t,n){t===void 0&&(t=new ep),n===void 0&&(n=!1),this.ensureNotDisposed();var o=this.getRegistration(e);if(!o&&sa(e)){if(n)return;throw new Error('Attempted to resolve unregistered dependency token: "'+e.toString()+'"')}if(this.executePreResolutionInterceptor(e,"Single"),o){var i=this.resolveRegistration(o,t);return this.executePostResolutionInterceptor(e,i,"Single"),i}if(Ek(e)){var i=this.construct(e,t);return this.executePostResolutionInterceptor(e,i,"Single"),i}throw new Error("Attempted to construct an undefined constructor. Could mean a circular dependency problem. Try using `delay` function.")},r.prototype.executePreResolutionInterceptor=function(e,t){var n,o;if(this.interceptors.preResolution.has(e)){var i=[];try{for(var s=Yh(this.interceptors.preResolution.getAll(e)),a=s.next();!a.done;a=s.next()){var c=a.value;c.options.frequency!="Once"&&i.push(c),c.callback(e,t)}}catch(l){n={error:l}}finally{try{a&&!a.done&&(o=s.return)&&o.call(s)}finally{if(n)throw n.error}}this.interceptors.preResolution.setAll(e,i)}},r.prototype.executePostResolutionInterceptor=function(e,t,n){var o,i;if(this.interceptors.postResolution.has(e)){var s=[];try{for(var a=Yh(this.interceptors.postResolution.getAll(e)),c=a.next();!c.done;c=a.next()){var l=c.value;l.options.frequency!="Once"&&s.push(l),l.callback(e,t,n)}}catch(u){o={error:u}}finally{try{c&&!c.done&&(i=a.return)&&i.call(a)}finally{if(o)throw o.error}}this.interceptors.postResolution.setAll(e,s)}},r.prototype.resolveRegistration=function(e,t){if(this.ensureNotDisposed(),e.options.lifecycle===Ar.ResolutionScoped&&t.scopedResolutions.has(e))return t.scopedResolutions.get(e);var n=e.options.lifecycle===Ar.Singleton,o=e.options.lifecycle===Ar.ContainerScoped,i=n||o,s;return tl(e.provider)?s=e.provider.useValue:el(e.provider)?s=i?e.instance||(e.instance=this.resolve(e.provider.useToken,t)):this.resolve(e.provider.useToken,t):Zh(e.provider)?s=i?e.instance||(e.instance=this.construct(e.provider.useClass,t)):this.construct(e.provider.useClass,t):ud(e.provider)?s=e.provider.useFactory(this):s=this.construct(e.provider,t),e.options.lifecycle===Ar.ResolutionScoped&&t.scopedResolutions.set(e,s),s},r.prototype.resolveAll=function(e,t,n){var o=this;t===void 0&&(t=new ep),n===void 0&&(n=!1),this.ensureNotDisposed();var i=this.getAllRegistrations(e);if(!i&&sa(e)){if(n)return[];throw new Error('Attempted to resolve unregistered dependency token: "'+e.toString()+'"')}if(this.executePreResolutionInterceptor(e,"All"),i){var s=i.map(function(c){return o.resolveRegistration(c,t)});return this.executePostResolutionInterceptor(e,s,"All"),s}var a=[this.construct(e,t)];return this.executePostResolutionInterceptor(e,a,"All"),a},r.prototype.isRegistered=function(e,t){return t===void 0&&(t=!1),this.ensureNotDisposed(),this._registry.has(e)||t&&(this.parent||!1)&&this.parent.isRegistered(e,!0)},r.prototype.reset=function(){this.ensureNotDisposed(),this._registry.clear(),this.interceptors.preResolution.clear(),this.interceptors.postResolution.clear()},r.prototype.clearInstances=function(){var e,t;this.ensureNotDisposed();try{for(var n=Yh(this._registry.entries()),o=n.next();!o.done;o=n.next()){var i=Qh(o.value,2),s=i[0],a=i[1];this._registry.setAll(s,a.filter(function(c){return!tl(c.provider)}).map(function(c){return c.instance=void 0,c}))}}catch(c){e={error:c}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}},r.prototype.createChildContainer=function(){var e,t;this.ensureNotDisposed();var n=new r(this);try{for(var o=Yh(this._registry.entries()),i=o.next();!i.done;i=o.next()){var s=Qh(i.value,2),a=s[0],c=s[1];c.some(function(l){var u=l.options;return u.lifecycle===Ar.ContainerScoped})&&n._registry.setAll(a,c.map(function(l){return l.options.lifecycle===Ar.ContainerScoped?{provider:l.provider,options:l.options}:l}))}}catch(l){e={error:l}}finally{try{i&&!i.done&&(t=o.return)&&t.call(o)}finally{if(e)throw e.error}}return n},r.prototype.beforeResolution=function(e,t,n){n===void 0&&(n={frequency:"Always"}),this.interceptors.preResolution.set(e,{callback:t,options:n})},r.prototype.afterResolution=function(e,t,n){n===void 0&&(n={frequency:"Always"}),this.interceptors.postResolution.set(e,{callback:t,options:n})},r.prototype.dispose=function(){return xk(this,void 0,void 0,function(){var e;return vk(this,function(t){switch(t.label){case 0:return this.disposed=!0,e=[],this.disposables.forEach(function(n){var o=n.dispose();o&&e.push(o)}),[4,Promise.all(e)];case 1:return t.sent(),[2]}})})},r.prototype.getRegistration=function(e){return this.isRegistered(e)?this._registry.get(e):this.parent?this.parent.getRegistration(e):null},r.prototype.getAllRegistrations=function(e){return this.isRegistered(e)?this._registry.getAll(e):this.parent?this.parent.getAllRegistrations(e):null},r.prototype.construct=function(e,t){var n=this;if(e instanceof n3)return e.createProxy(function(i){return n.resolve(i,t)});var o=function(){var i=U9.get(e);if(!i||i.length===0){if(e.length===0)return new e;throw new Error('TypeInfo not known for "'+e.name+'"')}var s=i.map(n.resolveParams(t,e));return new(e.bind.apply(e,qo([void 0],s)))}();return _k(o)&&this.disposables.add(o),o},r.prototype.resolveParams=function(e,t){var n=this;return function(o,i){var s,a,c;try{return B9(o)?o3(o)?o.multiple?(s=n.resolve(o.transform)).transform.apply(s,qo([n.resolveAll(o.token,new ep,o.isOptional)],o.transformArgs)):(a=n.resolve(o.transform)).transform.apply(a,qo([n.resolve(o.token,e,o.isOptional)],o.transformArgs)):o.multiple?n.resolveAll(o.token,new ep,o.isOptional):n.resolve(o.token,e,o.isOptional):o3(o)?(c=n.resolve(o.transform,e)).transform.apply(c,qo([n.resolve(o.token,e)],o.transformArgs)):n.resolve(o,e)}catch(l){throw new Error(M9(t,i,l))}}},r.prototype.ensureNotDisposed=function(){if(this.disposed)throw new Error("This container has been disposed, you cannot interact with a disposed container")},r}(),pt=new MV;function UV(r){return function(e){U9.set(e,L9(e)),r&&r.token&&(Array.isArray(r.token)?r.token.forEach(function(t){pt.register(t,e)}):pt.register(r.token,e))}}var aa=UV;if(typeof Reflect>"u"||!Reflect.getMetadata)throw new Error(`tsyringe requires a reflect polyfill. Please add 'import "reflect-metadata"' to the top of your entry point.`);var $9,rl=class{constructor(e={}){this.attrId="",this.attrValues=[],Object.assign(e)}};f([p({type:b.ObjectIdentifier})],rl.prototype,"attrId",void 0);f([p({type:b.Any,repeated:"set"})],rl.prototype,"attrValues",void 0);var Tk=$9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,$9.prototype)}};Tk=$9=f([C({type:_.Sequence,itemType:rl})],Tk);var K9,Ck=K9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,K9.prototype)}};Ck=K9=f([C({type:_.Sequence,itemType:so})],Ck);var FV="1.2.840.113549",$V=`${FV}.1`,kk=`${$V}.12`,dd=`${kk}.1`,GTe=`${dd}.1`,zTe=`${dd}.2`,XTe=`${dd}.3`,YTe=`${dd}.4`,QTe=`${dd}.5`,ZTe=`${dd}.6`,nl=`${kk}.10.1`;var tCe=`${nl}.1`,rCe=`${nl}.2`,nCe=`${nl}.3`,oCe=`${nl}.4`,iCe=`${nl}.5`,sCe=`${nl}.6`,i3="1.2.840.113549.1.9";var s3=class{constructor(e={}){this.certId="",this.certValue=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],s3.prototype,"certId",void 0);f([p({type:b.Any,context:0})],s3.prototype,"certValue",void 0);var Pk=`${i3}.22`,dCe=`${Pk}.1`,fCe=`${Pk}.2`;var a3=class{constructor(e={}){this.crlId="",this.crltValue=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],a3.prototype,"crlId",void 0);f([p({type:b.Any,context:0})],a3.prototype,"crltValue",void 0);var KV=`${i3}.23`,yCe=`${KV}.1`;var c3=class extends be{},ca=class{constructor(e={}){this.encryptionAlgorithm=new Y,this.encryptedData=new c3,Object.assign(this,e)}};f([p({type:Y})],ca.prototype,"encryptionAlgorithm",void 0);f([p({type:c3})],ca.prototype,"encryptedData",void 0);var V9,H9;(function(r){r[r.v1=0]="v1"})(H9||(H9={}));var l3=class extends be{},q9=V9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,V9.prototype)}};q9=V9=f([C({type:_.Sequence,itemType:br})],q9);var la=class{constructor(e={}){this.version=H9.v1,this.privateKeyAlgorithm=new Y,this.privateKey=new l3,Object.assign(this,e)}};f([p({type:b.Integer})],la.prototype,"version",void 0);f([p({type:Y})],la.prototype,"privateKeyAlgorithm",void 0);f([p({type:l3})],la.prototype,"privateKey",void 0);f([p({type:q9,implicit:!0,context:0,optional:!0})],la.prototype,"attributes",void 0);var Rk=class extends la{};Rk=f([C({type:_.Sequence})],Rk);var Nk=class extends ca{};Nk=f([C({type:_.Sequence})],Nk);var u3=class{constructor(e={}){this.secretTypeId="",this.secretValue=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],u3.prototype,"secretTypeId",void 0);f([p({type:b.Any,context:0})],u3.prototype,"secretValue",void 0);var ua=class{constructor(e={}){this.mac=new Jc,this.macSalt=new be,this.iterations=1,Object.assign(this,e)}};f([p({type:Jc})],ua.prototype,"mac",void 0);f([p({type:be})],ua.prototype,"macSalt",void 0);f([p({type:b.Integer,defaultValue:1})],ua.prototype,"iterations",void 0);var ol=class{constructor(e={}){this.version=3,this.authSafe=new so,this.macData=new ua,Object.assign(this,e)}};f([p({type:b.Integer})],ol.prototype,"version",void 0);f([p({type:so})],ol.prototype,"authSafe",void 0);f([p({type:ua,optional:!0})],ol.prototype,"macData",void 0);var j9,fd=class{constructor(e={}){this.bagId="",this.bagValue=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:b.ObjectIdentifier})],fd.prototype,"bagId",void 0);f([p({type:b.Any,context:0})],fd.prototype,"bagValue",void 0);f([p({type:rl,repeated:"set",optional:!0})],fd.prototype,"bagAttributes",void 0);var Dk=j9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,j9.prototype)}};Dk=j9=f([C({type:_.Sequence,itemType:fd})],Dk);var W9,G9,z9,Lt="1.2.840.113549.1.9",bke=`${Lt}.0`,Gk=`${Lt}.24`,rp=`${Lt}.25`,zk=`${Lt}.26`,Xk=`${Lt}.27`,xke=`${Gk}.1`,vke=`${Gk}.2`,Eke=`${Lt}.1`,Ske=`${Lt}.2`,Ake=`${Lt}.3`,_ke=`${Lt}.4`,Ike=`${Lt}.5`,Tke=`${Lt}.6`,rw=`${Lt}.7`,Cke=`${Lt}.8`,kke=`${Lt}.9`,Pke=`${Lt}.13`,np=`${Lt}.14`,Rke=`${Lt}.15`,Nke=`${Lt}.20`,Dke=`${Lt}.21`;var Oke=`${rp}.1`,Lke=`${rp}.2`,Bke=`${rp}.3`,Mke=`${rp}.4`,Uke=`${rp}.5`,op="1.3.6.1.5.5.7.9",Fke=`${op}.1`,$ke=`${op}.2`,Kke=`${op}.3`,Vke=`${op}.4`,Hke=`${op}.5`,qke=`${zk}.1`,jke=`${zk}.2`,Wke=`${Xk}.1`,Gke=`${Xk}.2`,zke=`${Lt}.16`,Xke=`${Lt}.22`,Yke=`${Lt}.23`,Qke=`${p9}.65`,d3=class extends Gt{constructor(e={}){super(e)}toString(){return{}.toString(),this.ia5String||super.toString()}};f([p({type:b.IA5String})],d3.prototype,"ia5String",void 0);d3=f([C({type:_.Choice})],d3);var Ok=class extends so{};Ok=f([C({type:_.Sequence})],Ok);var Lk=class extends ol{};Lk=f([C({type:_.Sequence})],Lk);var Bk=class extends ca{};Bk=f([C({type:_.Sequence})],Bk);var X9=class{constructor(e=""){this.value=e}toString(){return this.value}};f([p({type:b.IA5String})],X9.prototype,"value",void 0);X9=f([C({type:_.Choice})],X9);var Mk=class extends d3{};Mk=f([C({type:_.Choice})],Mk);var Uk=class extends Gt{};Uk=f([C({type:_.Choice})],Uk);var Y9=class{constructor(e=new Date){this.value=e}};f([p({type:b.GeneralizedTime})],Y9.prototype,"value",void 0);Y9=f([C({type:_.Choice})],Y9);var Fk=class extends Gt{};Fk=f([C({type:_.Choice})],Fk);var Q9=class{constructor(e="M"){this.value=e}toString(){return this.value}};f([p({type:b.PrintableString})],Q9.prototype,"value",void 0);Q9=f([C({type:_.Choice})],Q9);var f3=class{constructor(e=""){this.value=e}toString(){return this.value}};f([p({type:b.PrintableString})],f3.prototype,"value",void 0);f3=f([C({type:_.Choice})],f3);var $k=class extends f3{};$k=f([C({type:_.Choice})],$k);var Kk=class extends Gt{};Kk=f([C({type:_.Choice})],Kk);var Z9=class{constructor(e=""){this.value=e}toString(){return this.value}};f([p({type:b.ObjectIdentifier})],Z9.prototype,"value",void 0);Z9=f([C({type:_.Choice})],Z9);var Vk=class extends Ot{};Vk=f([C({type:_.Choice})],Vk);var J9=class{constructor(e=0){this.value=e}toString(){return this.value.toString()}};f([p({type:b.Integer})],J9.prototype,"value",void 0);J9=f([C({type:_.Choice})],J9);var Hk=class extends mn{};Hk=f([C({type:_.Sequence})],Hk);var tp=class extends Gt{};tp=f([C({type:_.Choice})],tp);var qk=W9=class extends Fn{constructor(e){super(e),Object.setPrototypeOf(this,W9.prototype)}};qk=W9=f([C({type:_.Sequence})],qk);var jk=G9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,G9.prototype)}};jk=G9=f([C({type:_.Set,itemType:Ho})],jk);var ew=class{constructor(e=""){this.value=e}toString(){return this.value}};f([p({type:b.BmpString})],ew.prototype,"value",void 0);ew=f([C({type:_.Choice})],ew);var tw=class extends Y{};tw=f([C({type:_.Sequence})],tw);var Wk=z9=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,z9.prototype)}};Wk=z9=f([C({type:_.Sequence,itemType:tw})],Wk);var nw,ip=nw=class extends we{constructor(e){super(e),Object.setPrototypeOf(this,nw.prototype)}};ip=nw=f([C({type:_.Sequence,itemType:br})],ip);var gi=class{constructor(e={}){this.version=0,this.subject=new lt,this.subjectPKInfo=new xr,this.attributes=new ip,Object.assign(this,e)}};f([p({type:b.Integer})],gi.prototype,"version",void 0);f([p({type:lt})],gi.prototype,"subject",void 0);f([p({type:xr})],gi.prototype,"subjectPKInfo",void 0);f([p({type:ip,implicit:!0,context:0})],gi.prototype,"attributes",void 0);var da=class{constructor(e={}){this.certificationRequestInfo=new gi,this.signatureAlgorithm=new Y,this.signature=new ArrayBuffer(0),Object.assign(this,e)}};f([p({type:gi})],da.prototype,"certificationRequestInfo",void 0);f([p({type:Y})],da.prototype,"signatureAlgorithm",void 0);f([p({type:b.BitString})],da.prototype,"signature",void 0);var dp="crypto.algorithm",hw=class{getAlgorithms(){return pt.resolveAll(dp)}toAsnAlgorithm(e){({...e});for(let t of this.getAlgorithms()){let n=t.toAsnAlgorithm(e);if(n)return n}if(/^[0-9.]+$/.test(e.name)){let t=new Y({algorithm:e.name});if("parameters"in e){let n=e;t.parameters=n.parameters}return t}throw new Error("Cannot convert WebCrypto algorithm to ASN.1 algorithm")}toWebAlgorithm(e){for(let n of this.getAlgorithms()){let o=n.toWebAlgorithm(e);if(o)return o}return{name:e.algorithm,parameters:e.parameters}}},il="crypto.algorithmProvider";pt.registerSingleton(il,hw);var g3,xn="1.3.36.3.3.2.8.1.1",Yk=`${xn}.1`,Qk=`${xn}.2`,Zk=`${xn}.3`,Jk=`${xn}.4`,eP=`${xn}.5`,tP=`${xn}.6`,rP=`${xn}.7`,nP=`${xn}.8`,oP=`${xn}.9`,iP=`${xn}.10`,sP=`${xn}.11`,aP=`${xn}.12`,cP=`${xn}.13`,lP=`${xn}.14`,uP="brainpoolP160r1",dP="brainpoolP160t1",fP="brainpoolP192r1",hP="brainpoolP192t1",pP="brainpoolP224r1",mP="brainpoolP224t1",gP="brainpoolP256r1",yP="brainpoolP256t1",wP="brainpoolP320r1",bP="brainpoolP320t1",xP="brainpoolP384r1",vP="brainpoolP384t1",EP="brainpoolP512r1",SP="brainpoolP512t1",kt="ECDSA",ap=g3=class{toAsnAlgorithm(e){switch(e.name.toLowerCase()){case kt.toLowerCase():if("hash"in e)switch((typeof e.hash=="string"?e.hash:e.hash.name).toLowerCase()){case"sha-1":return FC;case"sha-256":return $C;case"sha-384":return KC;case"sha-512":return VC}else if("namedCurve"in e){let t="";switch(e.namedCurve){case"P-256":t=A9;break;case"K-256":t=g3.SECP256K1;break;case"P-384":t=_9;break;case"P-521":t=I9;break;case uP:t=Yk;break;case dP:t=Qk;break;case fP:t=Zk;break;case hP:t=Jk;break;case pP:t=eP;break;case mP:t=tP;break;case gP:t=rP;break;case yP:t=nP;break;case wP:t=oP;break;case bP:t=iP;break;case xP:t=sP;break;case vP:t=aP;break;case EP:t=cP;break;case SP:t=lP;break}if(t)return new Y({algorithm:Gc,parameters:ee.serialize(new hi({namedCurve:t}))})}}return null}toWebAlgorithm(e){switch(e.algorithm){case qh:return{name:kt,hash:{name:"SHA-1"}};case jh:return{name:kt,hash:{name:"SHA-256"}};case Wh:return{name:kt,hash:{name:"SHA-384"}};case Gh:return{name:kt,hash:{name:"SHA-512"}};case Gc:{if(!e.parameters)throw new TypeError("Cannot get required parameters from EC algorithm");switch(ee.parse(e.parameters,hi).namedCurve){case A9:return{name:kt,namedCurve:"P-256"};case g3.SECP256K1:return{name:kt,namedCurve:"K-256"};case _9:return{name:kt,namedCurve:"P-384"};case I9:return{name:kt,namedCurve:"P-521"};case Yk:return{name:kt,namedCurve:uP};case Qk:return{name:kt,namedCurve:dP};case Zk:return{name:kt,namedCurve:fP};case Jk:return{name:kt,namedCurve:hP};case eP:return{name:kt,namedCurve:pP};case tP:return{name:kt,namedCurve:mP};case rP:return{name:kt,namedCurve:gP};case nP:return{name:kt,namedCurve:yP};case oP:return{name:kt,namedCurve:wP};case iP:return{name:kt,namedCurve:bP};case sP:return{name:kt,namedCurve:xP};case aP:return{name:kt,namedCurve:vP};case cP:return{name:kt,namedCurve:EP};case lP:return{name:kt,namedCurve:SP}}}}return null}};ap.SECP256K1="1.3.132.0.10";ap=g3=f([aa()],ap);pt.registerSingleton(dp,ap);var OP=Symbol("name"),LP=Symbol("value"),Ge=class{constructor(e,t={},n=""){this[OP]=e,this[LP]=n;for(let o in t)this[o]=t[o]}};Ge.NAME=OP;Ge.VALUE=LP;var pw=class{static toTextObject(e){let t=new Ge("Algorithm Identifier",{},wi.toString(e.algorithm));if(e.parameters)switch(e.algorithm){case Gc:{let n=new ap().toWebAlgorithm(e);n&&"namedCurve"in n?t["Named Curve"]=n.namedCurve:t.Parameters=e.parameters;break}default:t.Parameters=e.parameters}return t}},wi=class{static toString(e){let t=this.items[e];return t||e}};wi.items={[Xc]:"sha1",[Zg]:"sha224",[Yc]:"sha256",[Qc]:"sha384",[Zc]:"sha512",[pi]:"rsaEncryption",[rd]:"sha1WithRSAEncryption",[GC]:"sha224WithRSAEncryption",[Qg]:"sha256WithRSAEncryption",[nd]:"sha384WithRSAEncryption",[od]:"sha512WithRSAEncryption",[Gc]:"ecPublicKey",[qh]:"ecdsaWithSHA1",[Yg]:"ecdsaWithSHA224",[jh]:"ecdsaWithSHA256",[Wh]:"ecdsaWithSHA384",[Gh]:"ecdsaWithSHA512",[bC]:"TLS WWW server authentication",[xC]:"TLS WWW client authentication",[vC]:"Code Signing",[EC]:"E-mail Protection",[SC]:"Time Stamping",[AC]:"OCSP Signing",[MC]:"Signed Data"};var Ji=class{static serialize(e){return this.serializeObj(e).join(`
22
+ `)}static pad(e=0){return"".padStart(2*e," ")}static serializeObj(e,t=0){let n=[],o=this.pad(t++),i="",s=e[Ge.VALUE];s&&(i=` ${s}`),n.push(`${o}${e[Ge.NAME]}:${i}`),o=this.pad(t);for(let a in e){if(typeof a=="symbol")continue;let c=e[a],l=a?`${a}: `:"";if(typeof c=="string"||typeof c=="number"||typeof c=="boolean")n.push(`${o}${l}${c}`);else if(c instanceof Date)n.push(`${o}${l}${c.toUTCString()}`);else if(Array.isArray(c))for(let u of c)u[Ge.NAME]=a,n.push(...this.serializeObj(u,t));else if(c instanceof Ge)c[Ge.NAME]=a,n.push(...this.serializeObj(c,t));else if(Q.BufferSourceConverter.isBufferSource(c))a?(n.push(`${o}${l}`),n.push(...this.serializeBufferSource(c,t+1))):n.push(...this.serializeBufferSource(c,t));else if("toTextObject"in c){let u=c.toTextObject();u[Ge.NAME]=a,n.push(...this.serializeObj(u,t))}else throw new TypeError("Cannot serialize data in text format. Unsupported type.")}return n}static serializeBufferSource(e,t=0){let n=this.pad(t),o=Q.BufferSourceConverter.toUint8Array(e),i=[];for(let s=0;s<o.length;){let a=[];for(let c=0;c<16&&s<o.length;c++){c===8&&a.push("");let l=o[s++].toString(16).padStart(2,"0");a.push(l)}i.push(`${n}${a.join(" ")}`)}return i}static serializeAlgorithm(e){return this.algorithmSerializer.toTextObject(e)}};Ji.oidSerializer=wi;Ji.algorithmSerializer=pw;var fa=class r{constructor(...e){if(e.length===1){let t=e[0];this.rawData=ee.serialize(t),this.onInit(t)}else{let t=ee.parse(e[0],e[1]);this.rawData=Q.BufferSourceConverter.toArrayBuffer(e[0]),this.onInit(t)}}equal(e){return e instanceof r?(0,Q.isEqual)(e.rawData,this.rawData):!1}toString(e="text"){switch(e){case"asn":return ee.toString(this.rawData);case"text":return Ji.serialize(this.toTextObject());case"hex":return Q.Convert.ToHex(this.rawData);case"base64":return Q.Convert.ToBase64(this.rawData);case"base64url":return Q.Convert.ToBase64Url(this.rawData);default:throw TypeError("Argument 'format' is unsupported value")}}getTextName(){return this.constructor.NAME}toTextObject(){let e=this.toTextObjectEmpty();return e[""]=this.rawData,e}toTextObjectEmpty(e){return new Ge(this.getTextName(),{},e)}};fa.NAME="ASN";var lo=class r extends fa{constructor(...e){let t;Q.BufferSourceConverter.isBufferSource(e[0])?t=Q.BufferSourceConverter.toArrayBuffer(e[0]):t=ee.serialize(new vr({extnID:e[0],critical:e[1],extnValue:new be(Q.BufferSourceConverter.toArrayBuffer(e[2]))})),super(t,vr)}onInit(e){this.type=e.extnID,this.critical=e.critical,this.value=e.extnValue.buffer}toTextObject(){let e=this.toTextObjectWithoutValue();return e[""]=this.value,e}toTextObjectWithoutValue(){let e=this.toTextObjectEmpty(this.critical?"critical":void 0);return e[Ge.NAME]===r.NAME&&(e[Ge.NAME]=wi.toString(this.type)),e}},BP,cp=class r{static isCryptoKeyPair(e){return e&&e.privateKey&&e.publicKey}static isCryptoKey(e){return e&&e.usages&&e.type&&e.algorithm&&e.extractable!==void 0}constructor(){this.items=new Map,this[BP]="CryptoProvider",typeof self<"u"&&typeof crypto<"u"?this.set(r.DEFAULT,crypto):typeof globalThis<"u"&&globalThis.crypto&&globalThis.crypto.subtle&&this.set(r.DEFAULT,globalThis.crypto)}clear(){this.items.clear()}delete(e){return this.items.delete(e)}forEach(e,t){return this.items.forEach(e,t)}has(e){return this.items.has(e)}get size(){return this.items.size}entries(){return this.items.entries()}keys(){return this.items.keys()}values(){return this.items.values()}[Symbol.iterator](){return this.items[Symbol.iterator]()}get(e=r.DEFAULT){let t=this.items.get(e.toLowerCase());if(!t)throw new Error(`Cannot get Crypto by name '${e}'`);return t}set(e,t){if(typeof e=="string"){if(!t)throw new TypeError("Argument 'value' is required");this.items.set(e.toLowerCase(),t)}else this.items.set(r.DEFAULT,e);return this}};BP=Symbol.toStringTag;cp.DEFAULT="default";var _r=new cp,jV=/^[0-2](?:\.[1-9][0-9]*)+$/;function WV(r){return new RegExp(jV).test(r)}var w3=class{constructor(e={}){this.items={};for(let t in e)this.register(t,e[t])}get(e){return this.items[e]||null}findId(e){return WV(e)?e:this.get(e)}register(e,t){this.items[e]=t,this.items[t]=e}},wn=new w3;wn.register("CN","2.5.4.3");wn.register("L","2.5.4.7");wn.register("ST","2.5.4.8");wn.register("O","2.5.4.10");wn.register("OU","2.5.4.11");wn.register("C","2.5.4.6");wn.register("DC","0.9.2342.19200300.100.1.25");wn.register("E","1.2.840.113549.1.9.1");wn.register("G","2.5.4.42");wn.register("I","2.5.4.43");wn.register("SN","2.5.4.4");wn.register("T","2.5.4.12");function GV(r,e){return`\\${Q.Convert.ToHex(Q.Convert.FromUtf8String(e)).toUpperCase()}`}function zV(r){return r.replace(/([,+"\\<>;])/g,"\\$1").replace(/^([ #])/,"\\$1").replace(/([ ]$)/,"\\$1").replace(/([\r\n\t])/,GV)}var co=class r{static isASCII(e){for(let t=0;t<e.length;t++)if(e.charCodeAt(t)>255)return!1;return!0}static isPrintableString(e){return/^[A-Za-z0-9 '()+,-./:=?]*$/g.test(e)}constructor(e,t={}){this.extraNames=new w3,this.asn=new lt;for(let n in t)if(Object.prototype.hasOwnProperty.call(t,n)){let o=t[n];this.extraNames.register(n,o)}typeof e=="string"?this.asn=this.fromString(e):e instanceof lt?this.asn=e:Q.BufferSourceConverter.isBufferSource(e)?this.asn=ee.parse(e,lt):this.asn=this.fromJSON(e)}getField(e){let t=this.extraNames.findId(e)||wn.findId(e),n=[];for(let o of this.asn)for(let i of o)i.type===t&&n.push(i.value.toString());return n}getName(e){return this.extraNames.get(e)||wn.get(e)}toString(){return this.asn.map(e=>e.map(t=>{let n=this.getName(t.type)||t.type,o=t.value.anyValue?`#${Q.Convert.ToHex(t.value.anyValue)}`:zV(t.value.toString());return`${n}=${o}`}).join("+")).join(", ")}toJSON(){var e;let t=[];for(let n of this.asn){let o={};for(let i of n){let s=this.getName(i.type)||i.type;(e=o[s])!==null&&e!==void 0||(o[s]=[]),o[s].push(i.value.anyValue?`#${Q.Convert.ToHex(i.value.anyValue)}`:i.value.toString())}t.push(o)}return t}fromString(e){let t=new lt,n=/(\d\.[\d.]*\d|[A-Za-z]+)=((?:"")|(?:".*?[^\\]")|(?:[^,+].*?(?:[^\\][,+]))|(?:))([,+])?/g,o=null,i=",";for(;o=n.exec(`${e},`);){let[,s,a]=o,c=a[a.length-1];(c===","||c==="+")&&(a=a.slice(0,a.length-1),o[3]=c);let l=o[3];s=this.getTypeOid(s);let u=this.createAttribute(s,a);i==="+"?t[t.length-1].push(u):t.push(new Gs([u])),i=l}return t}fromJSON(e){let t=new lt;for(let n of e){let o=new Gs;for(let i in n){let s=this.getTypeOid(i),a=n[i];for(let c of a){let l=this.createAttribute(s,c);o.push(l)}}t.push(o)}return t}getTypeOid(e){if(/[\d.]+/.test(e)||(e=this.getName(e)||""),!e)throw new Error(`Cannot get OID for name type '${e}'`);return e}createAttribute(e,t){let n=new Tc({type:e});if(typeof t=="object")for(let o in t)switch(o){case"ia5String":n.value.ia5String=t[o];break;case"utf8String":n.value.utf8String=t[o];break;case"universalString":n.value.universalString=t[o];break;case"bmpString":n.value.bmpString=t[o];break;case"printableString":n.value.printableString=t[o];break}else if(t[0]==="#")n.value.anyValue=Q.Convert.FromHex(t.slice(1));else{let o=this.processStringValue(t);e===this.getName("E")||e===this.getName("DC")?n.value.ia5String=o:r.isPrintableString(o)?n.value.printableString=o:n.value.utf8String=o}return n}processStringValue(e){let t=/"(.*?[^\\])?"/.exec(e);return t&&(e=t[1]),e.replace(/\\0a/ig,`
23
+ `).replace(/\\0d/ig,"\r").replace(/\\0g/ig," ").replace(/\\(.)/g,"$1")}toArrayBuffer(){return ee.serialize(this.asn)}async getThumbprint(...e){var t;let n,o="SHA-1";return e.length>=1&&!(!((t=e[0])===null||t===void 0)&&t.subtle)?(o=e[0]||o,n=e[1]||_r.get()):n=e[0]||_r.get(),await n.subtle.digest(o,this.toArrayBuffer())}},MP="Cannot initialize GeneralName from ASN.1 data.",AP=`${MP} Unsupported string format in use.`,XV=`${MP} Value doesn't match to GUID regular expression.`,_P=/^([0-9a-f]{8})-?([0-9a-f]{4})-?([0-9a-f]{4})-?([0-9a-f]{4})-?([0-9a-f]{12})$/i,IP="1.3.6.1.4.1.311.25.1",TP="1.3.6.1.4.1.311.20.2.3",ow="dns",iw="dn",sw="email",aw="ip",cw="url",lw="guid",uw="upn",h3="id",yi=class extends fa{constructor(...e){let t;if(e.length===2)switch(e[0]){case iw:{let n=new co(e[1]).toArrayBuffer(),o=ee.parse(n,lt);t=new Ee({directoryName:o});break}case ow:t=new Ee({dNSName:e[1]});break;case sw:t=new Ee({rfc822Name:e[1]});break;case lw:{let n=new RegExp(_P,"i").exec(e[1]);if(!n)throw new Error("Cannot parse GUID value. Value doesn't match to regular expression");let o=n.slice(1).map((i,s)=>s<3?Q.Convert.ToHex(new Uint8Array(Q.Convert.FromHex(i)).reverse()):i).join("");t=new Ee({otherName:new zs({typeId:IP,value:ee.serialize(new be(Q.Convert.FromHex(o)))})});break}case aw:t=new Ee({iPAddress:e[1]});break;case h3:t=new Ee({registeredID:e[1]});break;case uw:{t=new Ee({otherName:new zs({typeId:TP,value:ee.serialize(L7.toASN(e[1]))})});break}case cw:t=new Ee({uniformResourceIdentifier:e[1]});break;default:throw new Error("Cannot create GeneralName. Unsupported type of the name")}else Q.BufferSourceConverter.isBufferSource(e[0])?t=ee.parse(e[0],Ee):t=e[0];super(t)}onInit(e){if(e.dNSName!=null)this.type=ow,this.value=e.dNSName;else if(e.rfc822Name!=null)this.type=sw,this.value=e.rfc822Name;else if(e.iPAddress!=null)this.type=aw,this.value=e.iPAddress;else if(e.uniformResourceIdentifier!=null)this.type=cw,this.value=e.uniformResourceIdentifier;else if(e.registeredID!=null)this.type=h3,this.value=e.registeredID;else if(e.directoryName!=null)this.type=iw,this.value=new co(e.directoryName).toString();else if(e.otherName!=null)if(e.otherName.typeId===IP){this.type=lw;let t=ee.parse(e.otherName.value,be),n=new RegExp(_P,"i").exec(Q.Convert.ToHex(t));if(!n)throw new Error(XV);this.value=n.slice(1).map((o,i)=>i<3?Q.Convert.ToHex(new Uint8Array(Q.Convert.FromHex(o)).reverse()):o).join("-")}else if(e.otherName.typeId===TP)this.type=uw,this.value=ee.parse(e.otherName.value,Gt).toString();else throw new Error(AP);else throw new Error(AP)}toJSON(){return{type:this.type,value:this.value}}toTextObject(){let e;switch(this.type){case iw:case ow:case lw:case aw:case h3:case uw:case cw:e=this.type.toUpperCase();break;case sw:e="Email";break;default:throw new Error("Unsupported GeneralName type")}let t=this.value;return this.type===h3&&(t=wi.toString(t)),new Ge(e,void 0,t)}},sl=class extends fa{constructor(e){let t;if(e instanceof It)t=e;else if(Array.isArray(e)){let n=[];for(let o of e)if(o instanceof Ee)n.push(o);else{let i=ee.parse(new yi(o.type,o.value).rawData,Ee);n.push(i)}t=new It(n)}else if(Q.BufferSourceConverter.isBufferSource(e))t=ee.parse(e,It);else throw new Error("Cannot initialize GeneralNames. Incorrect incoming arguments");super(t)}onInit(e){let t=[];for(let n of e){let o=null;try{o=new yi(n)}catch{continue}t.push(o)}this.items=t}toJSON(){return this.items.map(e=>e.toJSON())}toTextObject(){let e=super.toTextObjectEmpty();for(let t of this.items){let n=t.toTextObject(),o=e[n[Ge.NAME]];Array.isArray(o)||(o=[],e[n[Ge.NAME]]=o),o.push(n)}return e}};sl.NAME="GeneralNames";var sp="-{5}",lp="\\n",YV=`[^${lp}]+`,QV=`${sp}BEGIN (${YV}(?=${sp}))${sp}`,ZV=`${sp}END \\1${sp}`,hd="\\n",JV=`[^:${lp}]+`,eH=`(?:[^${lp}]+${hd}(?: +[^${lp}]+${hd})*)`,tH="[a-zA-Z0-9=+/]+",rH=`(?:${tH}${hd})+`,CP=`${QV}${hd}(?:((?:${JV}: ${eH})+))?${hd}?(${rH})${ZV}`,Qr=class{static isPem(e){return typeof e=="string"&&new RegExp(CP,"g").test(e)}static decodeWithHeaders(e){e=e.replace(/\r/g,"");let t=new RegExp(CP,"g"),n=[],o=null;for(;o=t.exec(e);){let i=o[3].replace(new RegExp(`[${lp}]+`,"g"),""),s={type:o[1],headers:[],rawData:Q.Convert.FromBase64(i)},a=o[2];if(a){let c=a.split(new RegExp(hd,"g")),l=null;for(let u of c){let[d,h]=u.split(/:(.*)/);if(h===void 0){if(!l)throw new Error("Cannot parse PEM string. Incorrect header value");l.value+=d.trim()}else l&&s.headers.push(l),l={key:d,value:h.trim()}}l&&s.headers.push(l)}n.push(s)}return n}static decode(e){return this.decodeWithHeaders(e).map(n=>n.rawData)}static decodeFirst(e){let t=this.decode(e);if(!t.length)throw new RangeError("PEM string doesn't contain any objects");return t[0]}static encode(e,t){if(Array.isArray(e)){let n=new Array;return t?e.forEach(o=>{if(!Q.BufferSourceConverter.isBufferSource(o))throw new TypeError("Cannot encode array of BufferSource in PEM format. Not all items of the array are BufferSource");n.push(this.encodeStruct({type:t,rawData:Q.BufferSourceConverter.toArrayBuffer(o)}))}):e.forEach(o=>{if(!("type"in o))throw new TypeError("Cannot encode array of PemStruct in PEM format. Not all items of the array are PemStrut");n.push(this.encodeStruct(o))}),n.join(`
24
+ `)}else{if(!t)throw new Error("Required argument 'tag' is missed");return this.encodeStruct({type:t,rawData:Q.BufferSourceConverter.toArrayBuffer(e)})}}static encodeStruct(e){var t;let n=e.type.toLocaleUpperCase(),o=[];if(o.push(`-----BEGIN ${n}-----`),!((t=e.headers)===null||t===void 0)&&t.length){for(let l of e.headers)o.push(`${l.key}: ${l.value}`);o.push("")}let i=Q.Convert.ToBase64(e.rawData),s,a=0,c=Array();for(;a<i.length&&(i.length-a<64?s=i.substring(a):(s=i.substring(a,a+64),a+=64),s.length!==0);)if(c.push(s),s.length<64)break;return o.push(...c),o.push(`-----END ${n}-----`),o.join(`
25
+ `)}};Qr.CertificateTag="CERTIFICATE";Qr.CrlTag="CRL";Qr.CertificateRequestTag="CERTIFICATE REQUEST";Qr.PublicKeyTag="PUBLIC KEY";Qr.PrivateKeyTag="PRIVATE KEY";var ha=class r extends fa{static isAsnEncoded(e){return Q.BufferSourceConverter.isBufferSource(e)||typeof e=="string"}static toArrayBuffer(e){if(typeof e=="string"){if(Qr.isPem(e))return Qr.decode(e)[0];if(Q.Convert.isHex(e))return Q.Convert.FromHex(e);if(Q.Convert.isBase64(e))return Q.Convert.FromBase64(e);if(Q.Convert.isBase64Url(e))return Q.Convert.FromBase64Url(e);throw new TypeError("Unsupported format of 'raw' argument. Must be one of DER, PEM, HEX, Base64, or Base4Url")}else{let t=Q.Convert.ToBinary(e);return Qr.isPem(t)?Qr.decode(t)[0]:Q.Convert.isHex(t)?Q.Convert.FromHex(t):Q.Convert.isBase64(t)?Q.Convert.FromBase64(t):Q.Convert.isBase64Url(t)?Q.Convert.FromBase64Url(t):Q.BufferSourceConverter.toArrayBuffer(e)}}constructor(...e){r.isAsnEncoded(e[0])?super(r.toArrayBuffer(e[0]),e[1]):super(e[0])}toString(e="pem"){switch(e){case"pem":return Qr.encode(this.rawData,this.tag);default:return super.toString(e)}}},Zi=class r extends ha{static async create(e,t=_r.get()){if(e instanceof r)return e;if(cp.isCryptoKey(e)){if(e.type!=="public")throw new TypeError("Public key is required");let n=await t.subtle.exportKey("spki",e);return new r(n)}else{if(e.publicKey)return e.publicKey;if(Q.BufferSourceConverter.isBufferSource(e))return new r(e);throw new TypeError("Unsupported PublicKeyType")}}constructor(e){ha.isAsnEncoded(e)?super(e,xr):super(e),this.tag=Qr.PublicKeyTag}async export(...e){let t,n=["verify"],o={hash:"SHA-256",...this.algorithm};e.length>1?(o=e[0]||o,n=e[1]||n,t=e[2]||_r.get()):t=e[0]||_r.get();let i=this.rawData,s=ee.parse(this.rawData,xr);return s.algorithm.algorithm===oa&&(i=nH(s,i)),t.subtle.importKey("spki",i,o,!0,n)}onInit(e){let t=pt.resolve(il),n=this.algorithm=t.toWebAlgorithm(e.algorithm);switch(e.algorithm.algorithm){case pi:{let o=ee.parse(e.subjectPublicKey,ad),i=Q.BufferSourceConverter.toUint8Array(o.modulus);n.publicExponent=Q.BufferSourceConverter.toUint8Array(o.publicExponent),n.modulusLength=(i[0]?i:i.slice(1)).byteLength<<3;break}}}async getThumbprint(...e){var t;let n,o="SHA-1";return e.length>=1&&!(!((t=e[0])===null||t===void 0)&&t.subtle)?(o=e[0]||o,n=e[1]||_r.get()):n=e[0]||_r.get(),await n.subtle.digest(o,this.rawData)}async getKeyIdentifier(...e){let t,n="SHA-1";e.length===1?typeof e[0]=="string"?(n=e[0],t=_r.get()):t=e[0]:e.length===2?(n=e[0],t=e[1]):t=_r.get();let o=ee.parse(this.rawData,xr);return await t.subtle.digest(n,o.subjectPublicKey)}toTextObject(){let e=this.toTextObjectEmpty(),t=ee.parse(this.rawData,xr);switch(e.Algorithm=Ji.serializeAlgorithm(t.algorithm),t.algorithm.algorithm){case Gc:e["EC Point"]=t.subjectPublicKey;break;case pi:default:e["Raw Data"]=t.subjectPublicKey}return e}};function nH(r,e){return r.algorithm=new Y({algorithm:pi,parameters:null}),e=ee.serialize(r),e}var b3=class r extends lo{static async create(e,t=!1,n=_r.get()){if("name"in e&&"serialNumber"in e)return new r(e,t);let i=await(await Zi.create(e,n)).getKeyIdentifier(n);return new r(Q.Convert.ToHex(i),t)}constructor(...e){if(Q.BufferSourceConverter.isBufferSource(e[0]))super(e[0]);else if(typeof e[0]=="string"){let t=new li({keyIdentifier:new Pc(Q.Convert.FromHex(e[0]))});super(kg,e[1],ee.serialize(t))}else{let t=e[0],n=t.name instanceof sl?ee.parse(t.name.rawData,It):t.name,o=new li({authorityCertIssuer:n,authorityCertSerialNumber:Q.Convert.FromHex(t.serialNumber)});super(kg,e[1],ee.serialize(o))}}onInit(e){super.onInit(e);let t=ee.parse(e.extnValue,li);t.keyIdentifier&&(this.keyId=Q.Convert.ToHex(t.keyIdentifier)),(t.authorityCertIssuer||t.authorityCertSerialNumber)&&(this.certId={name:t.authorityCertIssuer||[],serialNumber:t.authorityCertSerialNumber?Q.Convert.ToHex(t.authorityCertSerialNumber):""})}toTextObject(){let e=this.toTextObjectWithoutValue(),t=ee.parse(this.value,li);return t.authorityCertIssuer&&(e["Authority Issuer"]=new sl(t.authorityCertIssuer).toTextObject()),t.authorityCertSerialNumber&&(e["Authority Serial Number"]=t.authorityCertSerialNumber),t.keyIdentifier&&(e[""]=t.keyIdentifier),e}};b3.NAME="Authority Key Identifier";var pd=class extends lo{constructor(...e){if(Q.BufferSourceConverter.isBufferSource(e[0])){super(e[0]);let t=ee.parse(this.value,Rc);this.ca=t.cA,this.pathLength=t.pathLenConstraint}else{let t=new Rc({cA:e[0],pathLenConstraint:e[1]});super(Pg,e[2],ee.serialize(t)),this.ca=e[0],this.pathLength=e[1]}}toTextObject(){let e=this.toTextObjectWithoutValue();return this.ca&&(e.CA=this.ca),this.pathLength!==void 0&&(e["Path Length"]=this.pathLength),e}};pd.NAME="Basic Constraints";var kP;(function(r){r.serverAuth="1.3.6.1.5.5.7.3.1",r.clientAuth="1.3.6.1.5.5.7.3.2",r.codeSigning="1.3.6.1.5.5.7.3.3",r.emailProtection="1.3.6.1.5.5.7.3.4",r.timeStamping="1.3.6.1.5.5.7.3.8",r.ocspSigning="1.3.6.1.5.5.7.3.9"})(kP||(kP={}));var x3=class extends lo{constructor(...e){if(Q.BufferSourceConverter.isBufferSource(e[0])){super(e[0]);let t=ee.parse(this.value,_h);this.usages=t.map(n=>n)}else{let t=new _h(e[0]);super(Og,e[1],ee.serialize(t)),this.usages=e[0]}}toTextObject(){let e=this.toTextObjectWithoutValue();return e[""]=this.usages.map(t=>wi.toString(t)).join(", "),e}};x3.NAME="Extended Key Usages";var PP;(function(r){r[r.digitalSignature=1]="digitalSignature",r[r.nonRepudiation=2]="nonRepudiation",r[r.keyEncipherment=4]="keyEncipherment",r[r.dataEncipherment=8]="dataEncipherment",r[r.keyAgreement=16]="keyAgreement",r[r.keyCertSign=32]="keyCertSign",r[r.cRLSign=64]="cRLSign",r[r.encipherOnly=128]="encipherOnly",r[r.decipherOnly=256]="decipherOnly"})(PP||(PP={}));var v3=class extends lo{constructor(...e){if(Q.BufferSourceConverter.isBufferSource(e[0])){super(e[0]);let t=ee.parse(this.value,Fu);this.usages=t.toNumber()}else{let t=new Fu(e[0]);super(Lg,e[1],ee.serialize(t)),this.usages=e[0]}}toTextObject(){let e=this.toTextObjectWithoutValue(),t=ee.parse(this.value,Fu);return e[""]=t.toJSON().join(", "),e}};v3.NAME="Key Usages";var E3=class r extends lo{static async create(e,t=!1,n=_r.get()){let i=await(await Zi.create(e,n)).getKeyIdentifier(n);return new r(Q.Convert.ToHex(i),t)}constructor(...e){if(Q.BufferSourceConverter.isBufferSource(e[0])){super(e[0]);let t=ee.parse(this.value,hn);this.keyId=Q.Convert.ToHex(t)}else{let t=typeof e[0]=="string"?Q.Convert.FromHex(e[0]):e[0],n=new hn(t);super(a9,e[1],ee.serialize(n)),this.keyId=Q.Convert.ToHex(t)}}toTextObject(){let e=this.toTextObjectWithoutValue(),t=ee.parse(this.value,hn);return e[""]=t,e}};E3.NAME="Subject Key Identifier";var S3=class extends lo{constructor(...e){Q.BufferSourceConverter.isBufferSource(e[0])?super(e[0]):super(i9,e[1],new sl(e[0]||[]).rawData)}onInit(e){super.onInit(e);let t=ee.parse(e.extnValue,Fg);this.names=new sl(t)}toTextObject(){let e=this.toTextObjectWithoutValue(),t=this.names.toTextObject();for(let n in t)e[n]=t[n];return e}};S3.NAME="Subject Alternative Name";var bn=class{static register(e,t){this.items.set(e,t)}static create(e){let t=new lo(e),n=this.items.get(t.type);return n?new n(e):t}};bn.items=new Map;var A3=class extends lo{constructor(...e){var t;if(Q.BufferSourceConverter.isBufferSource(e[0])){super(e[0]);let n=ee.parse(this.value,xh);this.policies=n.map(o=>o.policyIdentifier)}else{let n=e[0],o=(t=e[1])!==null&&t!==void 0?t:!1,i=new xh(n.map(s=>new Nc({policyIdentifier:s})));super(Ng,o,ee.serialize(i)),this.policies=n}}toTextObject(){let e=this.toTextObjectWithoutValue();return e.Policy=this.policies.map(t=>new Ge("",{},wi.toString(t))),e}};A3.NAME="Certificate Policies";bn.register(Ng,A3);var _3=class extends lo{constructor(...e){var t;if(Q.BufferSourceConverter.isBufferSource(e[0]))super(e[0]);else if(Array.isArray(e[0])&&typeof e[0][0]=="string"){let o=e[0].map(s=>new ui({distributionPoint:new Wi({fullName:[new Ee({uniformResourceIdentifier:s})]})})),i=new Qs(o);super(Dg,e[1],ee.serialize(i))}else{let n=new Qs(e[0]);super(Dg,e[1],ee.serialize(n))}(t=this.distributionPoints)!==null&&t!==void 0||(this.distributionPoints=[])}onInit(e){super.onInit(e);let t=ee.parse(e.extnValue,Qs);this.distributionPoints=t}toTextObject(){let e=this.toTextObjectWithoutValue();return e["Distribution Point"]=this.distributionPoints.map(t=>{var n;let o={};return t.distributionPoint&&(o[""]=(n=t.distributionPoint.fullName)===null||n===void 0?void 0:n.map(i=>new yi(i).toString()).join(", ")),t.reasons&&(o.Reasons=t.reasons.toString()),t.cRLIssuer&&(o["CRL Issuer"]=t.cRLIssuer.map(i=>i.toString()).join(", ")),o}),e}};_3.NAME="CRL Distribution Points";var I3=class extends lo{constructor(...e){var t,n,o,i;if(Q.BufferSourceConverter.isBufferSource(e[0]))super(e[0]);else if(e[0]instanceof kc){let s=new kc(e[0]);super(Cg,e[1],ee.serialize(s))}else{let s=e[0],a=new kc;m3(a,s,H7,"ocsp"),m3(a,s,q7,"caIssuers"),m3(a,s,j7,"timeStamping"),m3(a,s,W7,"caRepository"),super(Cg,e[1],ee.serialize(a))}(t=this.ocsp)!==null&&t!==void 0||(this.ocsp=[]),(n=this.caIssuers)!==null&&n!==void 0||(this.caIssuers=[]),(o=this.timeStamping)!==null&&o!==void 0||(this.timeStamping=[]),(i=this.caRepository)!==null&&i!==void 0||(this.caRepository=[])}onInit(e){super.onInit(e),this.ocsp=[],this.caIssuers=[],this.timeStamping=[],this.caRepository=[],ee.parse(e.extnValue,kc).forEach(n=>{switch(n.accessMethod){case H7:this.ocsp.push(new yi(n.accessLocation));break;case q7:this.caIssuers.push(new yi(n.accessLocation));break;case j7:this.timeStamping.push(new yi(n.accessLocation));break;case W7:this.caRepository.push(new yi(n.accessLocation));break}})}toTextObject(){let e=this.toTextObjectWithoutValue();return this.ocsp.length&&p3(e,"OCSP",this.ocsp),this.caIssuers.length&&p3(e,"CA Issuers",this.caIssuers),this.timeStamping.length&&p3(e,"Time Stamping",this.timeStamping),this.caRepository.length&&p3(e,"CA Repository",this.caRepository),e}};I3.NAME="Authority Info Access";function p3(r,e,t){if(t.length===1)r[e]=t[0].toTextObject();else{let n=new Ge("");t.forEach((o,i)=>{let s=o.toTextObject(),a=`${s[Ge.NAME]} ${i+1}`,c=n[a];Array.isArray(c)||(c=[],n[a]=c),c.push(s)}),r[e]=n}}function m3(r,e,t,n){let o=e[n];o&&(Array.isArray(o)?o:[o]).forEach(s=>{typeof s=="string"&&(s=new yi("url",s)),r.push(new qi({accessMethod:t,accessLocation:ee.parse(s.rawData,Ee)}))})}var md=class r extends fa{constructor(...e){let t;if(Q.BufferSourceConverter.isBufferSource(e[0]))t=Q.BufferSourceConverter.toArrayBuffer(e[0]);else{let n=e[0],o=Array.isArray(e[1])?e[1].map(i=>Q.BufferSourceConverter.toArrayBuffer(i)):[];t=ee.serialize(new br({type:n,values:o}))}super(t,br)}onInit(e){this.type=e.type,this.values=e.values}toTextObject(){let e=this.toTextObjectWithoutValue();return e.Value=this.values.map(t=>new Ge("",{"":t})),e}toTextObjectWithoutValue(){let e=this.toTextObjectEmpty();return e[Ge.NAME]===r.NAME&&(e[Ge.NAME]=wi.toString(this.type)),e}};md.NAME="Attribute";var T3=class extends md{constructor(...e){var t;if(Q.BufferSourceConverter.isBufferSource(e[0]))super(e[0]);else{let n=new tp({printableString:e[0]});super(rw,[ee.serialize(n)])}(t=this.password)!==null&&t!==void 0||(this.password="")}onInit(e){if(super.onInit(e),this.values[0]){let t=ee.parse(this.values[0],tp);this.password=t.toString()}}toTextObject(){let e=this.toTextObjectWithoutValue();return e[Ge.VALUE]=this.password,e}};T3.NAME="Challenge Password";var up=class extends md{constructor(...e){var t;if(Q.BufferSourceConverter.isBufferSource(e[0]))super(e[0]);else{let n=e[0],o=new Fn;for(let i of n)o.push(ee.parse(i.rawData,vr));super(np,[ee.serialize(o)])}(t=this.items)!==null&&t!==void 0||(this.items=[])}onInit(e){if(super.onInit(e),this.values[0]){let t=ee.parse(this.values[0],Fn);this.items=t.map(n=>bn.create(ee.serialize(n)))}}toTextObject(){let e=this.toTextObjectWithoutValue(),t=this.items.map(n=>n.toTextObject());for(let n of t)e[n[Ge.NAME]]=n;return e}};up.NAME="Extensions";var gd=class{static register(e,t){this.items.set(e,t)}static create(e){let t=new md(e),n=this.items.get(t.type);return n?new n(e):t}};gd.items=new Map;var fp="crypto.signatureFormatter",mw=class{toAsnSignature(e,t){return Q.BufferSourceConverter.toArrayBuffer(t)}toWebSignature(e,t){return Q.BufferSourceConverter.toArrayBuffer(t)}},y3,gw=y3=class{static createPssParams(e,t){let n=y3.getHashAlgorithm(e);return n?new mi({hashAlgorithm:n,maskGenAlgorithm:new Y({algorithm:ia,parameters:ee.serialize(n)}),saltLength:t}):null}static getHashAlgorithm(e){let t=pt.resolve(il);return typeof e=="string"?t.toAsnAlgorithm({name:e}):typeof e=="object"&&e&&"name"in e?t.toAsnAlgorithm(e):null}toAsnAlgorithm(e){switch(e.name.toLowerCase()){case"rsassa-pkcs1-v1_5":if("hash"in e){let t;if(typeof e.hash=="string")t=e.hash;else if(e.hash&&typeof e.hash=="object"&&"name"in e.hash&&typeof e.hash.name=="string")t=e.hash.name.toUpperCase();else throw new Error("Cannot get hash algorithm name");switch(t.toLowerCase()){case"sha-1":return new Y({algorithm:rd,parameters:null});case"sha-256":return new Y({algorithm:Qg,parameters:null});case"sha-384":return new Y({algorithm:nd,parameters:null});case"sha-512":return new Y({algorithm:od,parameters:null})}}else return new Y({algorithm:pi,parameters:null});break;case"rsa-pss":if("hash"in e){if(!("saltLength"in e&&typeof e.saltLength=="number"))throw new Error("Cannot get 'saltLength' from 'alg' argument");let t=y3.createPssParams(e.hash,e.saltLength);if(!t)throw new Error("Cannot create PSS parameters");return new Y({algorithm:oa,parameters:ee.serialize(t)})}else return new Y({algorithm:oa,parameters:null})}return null}toWebAlgorithm(e){switch(e.algorithm){case pi:return{name:"RSASSA-PKCS1-v1_5"};case rd:return{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-1"}};case Qg:return{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}};case nd:return{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-384"}};case od:return{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-512"}};case oa:if(e.parameters){let t=ee.parse(e.parameters,mi);return{name:"RSA-PSS",hash:pt.resolve(il).toWebAlgorithm(t.hashAlgorithm),saltLength:t.saltLength}}else return{name:"RSA-PSS"}}return null}};gw=y3=f([aa()],gw);pt.registerSingleton(dp,gw);var yw=class{toAsnAlgorithm(e){switch(e.name.toLowerCase()){case"sha-1":return new Y({algorithm:Xc});case"sha-256":return new Y({algorithm:Yc});case"sha-384":return new Y({algorithm:Qc});case"sha-512":return new Y({algorithm:Zc})}return null}toWebAlgorithm(e){switch(e.algorithm){case Xc:return{name:"SHA-1"};case Yc:return{name:"SHA-256"};case Qc:return{name:"SHA-384"};case Zc:return{name:"SHA-512"}}return null}};yw=f([aa()],yw);pt.registerSingleton(dp,yw);var es=class r{addPadding(e,t){let n=Q.BufferSourceConverter.toUint8Array(t),o=new Uint8Array(e);return o.set(n,e-n.length),o}removePadding(e,t=!1){let n=Q.BufferSourceConverter.toUint8Array(e);for(let o=0;o<n.length;o++)if(n[o]){n=n.slice(o);break}if(t&&n[0]>127){let o=new Uint8Array(n.length+1);return o.set(n,1),o.buffer}return n.buffer}toAsnSignature(e,t){if(e.name==="ECDSA"){let n=e.namedCurve,o=r.namedCurveSize.get(n)||r.defaultNamedCurveSize,i=new zc,s=Q.BufferSourceConverter.toUint8Array(t);return i.r=this.removePadding(s.slice(0,o),!0),i.s=this.removePadding(s.slice(o,o+o),!0),ee.serialize(i)}return null}toWebSignature(e,t){if(e.name==="ECDSA"){let n=ee.parse(t,zc),o=e.namedCurve,i=r.namedCurveSize.get(o)||r.defaultNamedCurveSize,s=this.addPadding(i,this.removePadding(n.r)),a=this.addPadding(i,this.removePadding(n.s));return(0,Q.combine)(s,a)}return null}};es.namedCurveSize=new Map;es.defaultNamedCurveSize=32;var dw="1.3.101.110",RP="1.3.101.111",fw="1.3.101.112",NP="1.3.101.113",ww=class{toAsnAlgorithm(e){let t=null;switch(e.name.toLowerCase()){case"ed25519":t=fw;break;case"x25519":t=dw;break;case"eddsa":switch(e.namedCurve.toLowerCase()){case"ed25519":t=fw;break;case"ed448":t=NP;break}break;case"ecdh-es":switch(e.namedCurve.toLowerCase()){case"x25519":t=dw;break;case"x448":t=RP;break}}return t?new Y({algorithm:t}):null}toWebAlgorithm(e){switch(e.algorithm){case fw:return{name:"Ed25519"};case NP:return{name:"EdDSA",namedCurve:"Ed448"};case dw:return{name:"X25519"};case RP:return{name:"ECDH-ES",namedCurve:"X448"}}return null}};ww=f([aa()],ww);pt.registerSingleton(dp,ww);var bw=class extends ha{constructor(e){ha.isAsnEncoded(e)?super(e,da):super(e),this.tag=Qr.CertificateRequestTag}onInit(e){this.tbs=ee.serialize(e.certificationRequestInfo),this.publicKey=new Zi(e.certificationRequestInfo.subjectPKInfo);let t=pt.resolve(il);this.signatureAlgorithm=t.toWebAlgorithm(e.signatureAlgorithm),this.signature=e.signature,this.attributes=e.certificationRequestInfo.attributes.map(o=>gd.create(ee.serialize(o)));let n=this.getAttribute(np);this.extensions=[],n instanceof up&&(this.extensions=n.items),this.subjectName=new co(e.certificationRequestInfo.subject),this.subject=this.subjectName.toString()}getAttribute(e){for(let t of this.attributes)if(t.type===e)return t;return null}getAttributes(e){return this.attributes.filter(t=>t.type===e)}getExtension(e){for(let t of this.extensions)if(t.type===e)return t;return null}getExtensions(e){return this.extensions.filter(t=>t.type===e)}async verify(e=_r.get()){let t={...this.publicKey.algorithm,...this.signatureAlgorithm},n=await this.publicKey.export(t,["verify"],e),o=pt.resolveAll(fp).reverse(),i=null;for(let a of o)if(i=a.toWebSignature(t,this.signature),i)break;if(!i)throw Error("Cannot convert WebCrypto signature value to ASN.1 format");return await e.subtle.verify(this.signatureAlgorithm,n,i,this.tbs)}toTextObject(){let e=this.toTextObjectEmpty(),t=ee.parse(this.rawData,da),n=t.certificationRequestInfo,o=new Ge("",{Version:`${di[n.version]} (${n.version})`,Subject:this.subject,"Subject Public Key Info":this.publicKey});if(this.attributes.length){let i=new Ge("");for(let s of this.attributes){let a=s.toTextObject();i[a[Ge.NAME]]=a}o.Attributes=i}return e.Data=o,e.Signature=new Ge("",{Algorithm:Ji.serializeAlgorithm(t.signatureAlgorithm),"":t.signature}),e}};bw.NAME="PKCS#10 Certificate Request";var yd=class extends ha{constructor(e){ha.isAsnEncoded(e)?super(e,no):super(e),this.tag=Qr.CertificateTag}onInit(e){let t=e.tbsCertificate;this.tbs=ee.serialize(t),this.serialNumber=Q.Convert.ToHex(t.serialNumber),this.subjectName=new co(t.subject),this.subject=new co(t.subject).toString(),this.issuerName=new co(t.issuer),this.issuer=this.issuerName.toString();let n=pt.resolve(il);this.signatureAlgorithm=n.toWebAlgorithm(e.signatureAlgorithm),this.signature=e.signatureValue;let o=t.validity.notBefore.utcTime||t.validity.notBefore.generalTime;if(!o)throw new Error("Cannot get 'notBefore' value");this.notBefore=o;let i=t.validity.notAfter.utcTime||t.validity.notAfter.generalTime;if(!i)throw new Error("Cannot get 'notAfter' value");this.notAfter=i,this.extensions=[],t.extensions&&(this.extensions=t.extensions.map(s=>bn.create(ee.serialize(s)))),this.publicKey=new Zi(t.subjectPublicKeyInfo)}getExtension(e){for(let t of this.extensions)if(typeof e=="string"){if(t.type===e)return t}else if(t instanceof e)return t;return null}getExtensions(e){return this.extensions.filter(t=>typeof e=="string"?t.type===e:t instanceof e)}async verify(e={},t=_r.get()){let n,o,i=e.publicKey;try{if(!i)n={...this.publicKey.algorithm,...this.signatureAlgorithm},o=await this.publicKey.export(n,["verify"],t);else if("publicKey"in i)n={...i.publicKey.algorithm,...this.signatureAlgorithm},o=await i.publicKey.export(n,["verify"],t);else if(i instanceof Zi)n={...i.algorithm,...this.signatureAlgorithm},o=await i.export(n,["verify"],t);else if(Q.BufferSourceConverter.isBufferSource(i)){let l=new Zi(i);n={...l.algorithm,...this.signatureAlgorithm},o=await l.export(n,["verify"],t)}else n={...i.algorithm,...this.signatureAlgorithm},o=i}catch{return!1}let s=pt.resolveAll(fp).reverse(),a=null;for(let l of s)if(a=l.toWebSignature(n,this.signature),a)break;if(!a)throw Error("Cannot convert ASN.1 signature value to WebCrypto format");let c=await t.subtle.verify(this.signatureAlgorithm,o,a,this.tbs);if(e.signatureOnly)return c;{let u=(e.date||new Date).getTime();return c&&this.notBefore.getTime()<u&&u<this.notAfter.getTime()}}async getThumbprint(...e){let t,n="SHA-1";return e[0]&&(e[0].subtle?t=e[0]:(n=e[0]||n,t=e[1])),t??(t=_r.get()),await t.subtle.digest(n,this.rawData)}async isSelfSigned(e=_r.get()){return this.subject===this.issuer&&await this.verify({signatureOnly:!0},e)}toTextObject(){let e=this.toTextObjectEmpty(),t=ee.parse(this.rawData,no),n=t.tbsCertificate,o=new Ge("",{Version:`${di[n.version]} (${n.version})`,"Serial Number":n.serialNumber,"Signature Algorithm":Ji.serializeAlgorithm(n.signature),Issuer:this.issuer,Validity:new Ge("",{"Not Before":n.validity.notBefore.getTime(),"Not After":n.validity.notAfter.getTime()}),Subject:this.subject,"Subject Public Key Info":this.publicKey});if(n.issuerUniqueID&&(o["Issuer Unique ID"]=n.issuerUniqueID),n.subjectUniqueID&&(o["Subject Unique ID"]=n.subjectUniqueID),this.extensions.length){let i=new Ge("");for(let s of this.extensions){let a=s.toTextObject();i[a[Ge.NAME]]=a}o.Extensions=i}return e.Data=o,e.Signature=new Ge("",{Algorithm:Ji.serializeAlgorithm(t.signatureAlgorithm),"":t.signatureValue}),e}};yd.NAME="Certificate";var C3=class{static async createSelfSigned(e,t=_r.get()){if(!e.keys.privateKey)throw new Error("Bad field 'keys' in 'params' argument. 'privateKey' is empty");if(!e.keys.publicKey)throw new Error("Bad field 'keys' in 'params' argument. 'publicKey' is empty");return this.create({serialNumber:e.serialNumber,subject:e.name,issuer:e.name,notBefore:e.notBefore,notAfter:e.notAfter,publicKey:e.keys.publicKey,signingKey:e.keys.privateKey,signingAlgorithm:e.signingAlgorithm,extensions:e.extensions},t)}static async create(e,t=_r.get()){var n;let o;e.publicKey instanceof Zi?o=e.publicKey.rawData:"publicKey"in e.publicKey?o=e.publicKey.publicKey.rawData:Q.BufferSourceConverter.isBufferSource(e.publicKey)?o=e.publicKey:o=await t.subtle.exportKey("spki",e.publicKey);let i=e.serialNumber?Q.BufferSourceConverter.toUint8Array(Q.Convert.FromHex(e.serialNumber)):t.getRandomValues(new Uint8Array(16));i[0]>127&&(i[0]&=127),i.length>1&&i[0]===0&&(i[1]|=128);let s=e.notBefore||new Date,a=e.notAfter||new Date(s.getTime()+31536e6),c=new no({tbsCertificate:new Er({version:di.v3,serialNumber:i,validity:new Gi({notBefore:s,notAfter:a}),extensions:new Fn(((n=e.extensions)===null||n===void 0?void 0:n.map(y=>ee.parse(y.rawData,vr)))||[]),subjectPublicKeyInfo:ee.parse(o,xr)})});if(e.subject){let y=e.subject instanceof co?e.subject:new co(e.subject);c.tbsCertificate.subject=ee.parse(y.toArrayBuffer(),lt)}if(e.issuer){let y=e.issuer instanceof co?e.issuer:new co(e.issuer);c.tbsCertificate.issuer=ee.parse(y.toArrayBuffer(),lt)}let l={hash:"SHA-256"},u="signingKey"in e?{...l,...e.signingAlgorithm,...e.signingKey.algorithm}:{...l,...e.signingAlgorithm},d=pt.resolve(il);c.tbsCertificate.signature=c.signatureAlgorithm=d.toAsnAlgorithm(u);let h=ee.serialize(c.tbsCertificate),m="signingKey"in e?await t.subtle.sign(u,e.signingKey,h):e.signature,g=pt.resolveAll(fp).reverse(),w=null;for(let y of g)if(w=y.toAsnSignature(u,m),w)break;if(!w)throw Error("Cannot convert ASN.1 signature value to WebCrypto format");return c.signatureValue=w,new yd(ee.serialize(c))}},DP;(function(r){r[r.unspecified=0]="unspecified",r[r.keyCompromise=1]="keyCompromise",r[r.cACompromise=2]="cACompromise",r[r.affiliationChanged=3]="affiliationChanged",r[r.superseded=4]="superseded",r[r.cessationOfOperation=5]="cessationOfOperation",r[r.certificateHold=6]="certificateHold",r[r.removeFromCRL=8]="removeFromCRL",r[r.privilegeWithdrawn=9]="privilegeWithdrawn",r[r.aACompromise=10]="aACompromise"})(DP||(DP={}));bn.register(Pg,pd);bn.register(Og,x3);bn.register(Lg,v3);bn.register(a9,E3);bn.register(kg,b3);bn.register(i9,S3);bn.register(Dg,_3);bn.register(Cg,I3);gd.register(rw,T3);gd.register(np,up);pt.registerSingleton(fp,mw);pt.registerSingleton(fp,es);es.namedCurveSize.set("P-256",32);es.namedCurveSize.set("K-256",32);es.namedCurveSize.set("P-384",48);es.namedCurveSize.set("P-521",66);var k3=class extends Le{async listen(){throw new xg("WebRTCTransport.createListener")}getAddrs(){return[]}updateAnnounceAddrs(){}async close(){}};var xw=Object.values(Aa).map(r=>r.decoder).reduce((r,e)=>r.or(e)),oH=/^a=fingerprint:(?:\w+-[0-9]+)\s(?<fingerprint>(:?[0-9a-fA-F]{2})+)$/m;function UP(r){return r?.match(oH)?.groups?.fingerprint}function vw(r){let t=r.stringTuples().filter(n=>n[0]===UT).map(n=>n[1])[0];if(t===void 0||t==="")throw new D(`Couldn't find a certhash component of multiaddr: ${r.toString()}`);return t}function iH(r){return vt.decode(xw.decode(r))}function sH(r){let e=iH(vw(r)),t=aH(e.code),n=e.digest.reduce((i,s)=>i+s.toString(16).padStart(2,"0"),""),o=n.match(/.{1,2}/g);if(o==null)throw new bg(n,r.toString());return`${t} ${o.join(":").toUpperCase()}`}function FP(r){let e=r.split(":").map(o=>parseInt(o,16)),t=Uint8Array.from(e),n=Nr(yt.code,t);return oe(`/certhash/${va.encode(n.bytes)}`)}function aH(r){switch(r){case 17:return"sha-1";case 18:return"sha-256";case 19:return"sha-512";default:throw new vg(r)}}function $P(r,e){let{host:t,port:n,family:o}=r.toOptions(),i=sH(r);return{type:"answer",sdp:`v=0
26
+ o=- 0 0 IN IP${o} ${t}
21
27
  s=-
22
- c=IN ${o} ${t}
23
28
  t=0 0
24
29
  a=ice-lite
25
30
  m=application ${n} UDP/DTLS/SCTP webrtc-datachannel
31
+ c=IN IP${o} ${t}
26
32
  a=mid:0
27
- a=setup:passive
33
+ a=ice-options:ice2
28
34
  a=ice-ufrag:${e}
29
35
  a=ice-pwd:${e}
30
36
  a=fingerprint:${i}
37
+ a=setup:passive
38
+ a=sctp-port:5000
39
+ a=max-message-size:${Ou}
40
+ a=candidate:1467250027 1 UDP 1467250027 ${t} ${n} typ host
41
+ a=end-of-candidates
42
+ `}}function KP(r,e){let{host:t,port:n,family:o}=r.toOptions();return{type:"offer",sdp:`v=0
43
+ o=- 0 0 IN IP${o} ${t}
44
+ s=-
45
+ c=IN IP${o} ${t}
46
+ t=0 0
47
+ a=ice-options:ice2,trickle
48
+ m=application ${n} UDP/DTLS/SCTP webrtc-datachannel
49
+ a=mid:0
50
+ a=setup:active
51
+ a=ice-ufrag:${e}
52
+ a=ice-pwd:${e}
53
+ a=fingerprint:sha-256 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
31
54
  a=sctp-port:5000
32
- a=max-message-size:${ah}
33
- a=candidate:1467250027 1 UDP 1467250027 ${t} ${n} typ host\r
34
- `}function Ww(r,e){return{type:"answer",sdp:Yk(r,e)}}function Gw(r,e){if(r.sdp===void 0)throw new _("Can't munge a missing SDP");return r.sdp=r.sdp.replace(/\na=ice-ufrag:[^\n]*\n/,`
35
- a=ice-ufrag:`+e+`
36
- `).replace(/\na=ice-pwd:[^\n]*\n/,`
37
- a=ice-pwd:`+e+`
38
- `),r}var Yw=Array.from("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"),Xw=r=>[...Array(r)].map(()=>Yw.at(Math.floor(Math.random()*Yw.length))).join("");var jk=1e4,sce=Z("webrtc-direct").code,Qw=Z("certhash").code,yh=class{log;metrics;components;init;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:webrtc-direct"),this.components=e,this.init=t,e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webrtc-direct_dialer_events_total",{label:"event",help:"Total count of WebRTC-direct dial events by type"})})}[co]=!0;[Symbol.toStringTag]="@libp2p/webrtc-direct";[Se]=["@libp2p/transport"];async dial(e,t){let n=await this._connect(e,t);return this.log("dialing address: %a",e),n}createListener(e){throw new lh("WebRTCTransport.createListener")}listenFilter(e){return e.filter(_c.exactMatch)}dialFilter(e){return this.listenFilter(e)}async _connect(e,t){let n=new AbortController,o=n.signal,i,s=e.getPeerId();s!=null&&(i=Ue(s));let a=W3(gh(e)),c=await zi.generateCertificate({name:"ECDSA",namedCurve:"P-256",hash:G3(a.code)}),l=new zi({...await rl(this.init.rtcConfiguration),certificates:[c]});try{let u=new Promise((P,S)=>{let A=l.createDataChannel("",{negotiated:!0,id:0}),F=setTimeout(()=>{let D=`Data channel was never opened: state: ${A.readyState}`;this.log.error(D),this.metrics?.dialerEvents.increment({open_error:!0}),S(new nl("data",D))},jk);A.onopen=D=>{clearTimeout(F),P(A)},A.onerror=D=>{clearTimeout(F);let $=`Error opening a data channel for handshaking: ${D.target?.toString()??"not specified"}`;this.log.error($),this.metrics?.dialerEvents.increment({unknown_error:!0}),S(new nl("data",$))}}),d="libp2p+webrtc+v1/"+Xw(32),f=await l.createOffer(),h=Gw(f,d);await l.setLocalDescription(h);let p=Ww(e,d);await l.setRemoteDescription(p);let g=await u,m=this.generateNoisePrologue(l,a.code,e),y=L1({prologueBytes:m})(this.components),x=ga({channel:g,direction:"inbound",logger:this.components.logger,...this.init.dataChannel??{}}),w={...x,sink:x.sink.bind(x),source:async function*(){for await(let P of x.source)for(let S of P)yield S}()},I=new qi(this.components,{peerConnection:l,remoteAddr:e,timeline:{open:Date.now()},metrics:this.metrics?.dialerEvents}),B=tl?"iceconnectionstatechange":"connectionstatechange";l.addEventListener(B,()=>{switch(l.connectionState){case"failed":case"disconnected":case"closed":I.close().catch(P=>{this.log.error("error closing connection",P)}).finally(()=>{n.abort()});break;default:break}},{signal:o}),this.metrics?.dialerEvents.increment({peer_connection:!0});let L=new Yo(this.components,{peerConnection:l,metrics:this.metrics?.dialerEvents,dataChannelOptions:this.init.dataChannel});return await y.secureInbound(w,{signal:o,remotePeer:i}),await t.upgrader.upgradeOutbound(I,{skipProtection:!0,skipEncryption:!0,muxerFactory:L})}catch(u){throw l.close(),u}}generateNoisePrologue(e,t,n){if(e.getConfiguration().certificates?.length===0)throw new _("no local certificate");let o=zw(e,{log:this.log});if(o==null)throw new _("no local fingerprint found");let i=o.trim().toLowerCase().replaceAll(":",""),s=N(i,"hex"),a=Zt(t,s),c=z3.decode(gh(n)),l=N("libp2p-webrtc-noise:");return Pe([l,a.bytes,c])}};function jw(r){return e=>new yh(e,r)}function Zw(r){return e=>new mh(e,r)}var Jw=async r=>{if(r.readyState>=2)throw new Error("socket closed");r.readyState!==1&&await new Promise((e,t)=>{function n(){r.removeEventListener("open",o),r.removeEventListener("error",i)}function o(){n(),e()}function i(s){n(),t(s.error??new Error(`connect ECONNREFUSED ${r.url}`))}r.addEventListener("open",o),r.addEventListener("error",i)})};var eb=(r,e)=>(e=e??{},e.closeOnEnd=e.closeOnEnd!==!1,async n=>{for await(let o of n){try{await Jw(r)}catch(i){if(i.message==="socket closed")break;throw i}if(r.readyState===r.CLOSING||r.readyState===r.CLOSED)break;r.send(o)}e.closeOnEnd!=null&&r.readyState<=1&&await new Promise((o,i)=>{r.addEventListener("close",s=>{if(s.wasClean||s.code===1006)o();else{let a=Object.assign(new Error("ws error"),{event:s});i(a)}}),setTimeout(()=>{r.close()})})});var ob=Mr(rb(),1);function nb(r){return r instanceof ArrayBuffer||r?.constructor?.name==="ArrayBuffer"&&typeof r?.byteLength=="number"}var ib=r=>{r.binaryType="arraybuffer";let e=async()=>{await new Promise((i,s)=>{if(n){i();return}if(o!=null){s(o);return}let a=u=>{r.removeEventListener("open",c),r.removeEventListener("error",l),u()},c=()=>{a(i)},l=u=>{a(()=>{s(u.error??new Error(`connect ECONNREFUSED ${r.url}`))})};r.addEventListener("open",c),r.addEventListener("error",l)})},t=async function*(){let i=new ob.EventIterator(({push:s,stop:a,fail:c})=>{let l=d=>{let f=null;typeof d.data=="string"&&(f=N(d.data)),nb(d.data)&&(f=new Uint8Array(d.data)),d.data instanceof Uint8Array&&(f=d.data),f!=null&&s(f)},u=d=>{c(d.error??new Error("Socket error"))};return r.addEventListener("message",l),r.addEventListener("error",u),r.addEventListener("close",a),()=>{r.removeEventListener("message",l),r.removeEventListener("error",u),r.removeEventListener("close",a)}},{highWaterMark:1/0});await e();for await(let s of i)yield nb(s)?new Uint8Array(s):s}(),n=r.readyState===1,o;return r.addEventListener("open",()=>{n=!0,o=null}),r.addEventListener("close",()=>{n=!1,o=null}),r.addEventListener("error",i=>{n||(o=i.error??new Error(`connect ECONNREFUSED ${r.url}`))}),Object.assign(t,{connected:e})};var sb=(r,e)=>{e=e??{};let t=ib(r),n=e.remoteAddress,o=e.remotePort;if(r.url!=null)try{let s=new URL(r.url);n=s.hostname,o=parseInt(s.port,10)}catch{}if(n==null||o==null)throw new Error("Remote connection did not have address and/or port");return{sink:eb(r,e),source:t,connected:async()=>{await t.connected()},close:async()=>{(r.readyState===r.CONNECTING||r.readyState===r.OPEN)&&await new Promise(s=>{r.addEventListener("close",()=>{s()}),r.close()})},destroy:()=>{r.terminate!=null?r.terminate():r.close()},remoteAddress:n,remotePort:o,socket:r}};var ab=WebSocket;var Jk={"http:":"ws:","https:":"wss:"},cb="ws:",lb=(r,e)=>{if(r.startsWith("//")&&(r=`${e?.protocol??cb}${r}`),r.startsWith("/")&&e!=null){let n=e.protocol??cb,o=e.host,i=e.port!=null&&o?.endsWith(`:${e.port}`)!==!0?`:${e.port}`:"";r=`${n}//${o}${i}${r}`}let t=new URL(r);for(let[n,o]of Object.entries(Jk))t.protocol===n&&(t.protocol=o);return t};function ub(r,e){let t=typeof window>"u"?void 0:window.location;e=e??{};let n=lb(r,t),o=new ab(n.toString(),e.websocket);return sb(o,e)}function db(r){return r.filter(e=>ki.exactMatch(e)||to.exactMatch(e))}function fb(){throw new Error("WebSocket Servers can not be created in the browser!")}function hb(r,e,t){let n=t.logger.forComponent("libp2p:websockets:maconn"),o=t.metrics,i=t.metricPrefix??"",s={log:n,async sink(a){try{await r.sink(async function*(){for await(let c of a)c instanceof Uint8Array?yield c:yield c.subarray()}())}catch(c){c.type!=="aborted"&&n.error(c)}},source:r.source,remoteAddr:e,timeline:{open:Date.now()},async close(a={}){let c=Date.now();if(a.signal==null){let u=AbortSignal.timeout(500);a={...a,signal:u}}let l=()=>{let{host:u,port:d}=s.remoteAddr.toOptions();n("timeout closing stream to %s:%s after %dms, destroying it manually",u,d,Date.now()-c),this.abort(new Ft("Socket close timeout"))};a.signal?.addEventListener("abort",l);try{await r.close()}catch(u){n.error("error closing WebSocket gracefully",u),this.abort(u)}finally{a.signal?.removeEventListener("abort",l),s.timeline.close=Date.now()}},abort(a){let{host:c,port:l}=s.remoteAddr.toOptions();n("timeout closing stream to %s:%s due to error",c,l,a),r.destroy(),s.timeline.close=Date.now(),o?.increment({[`${i}error`]:!0})}};return r.socket.addEventListener("close",()=>{o?.increment({[`${i}close`]:!0}),s.timeline.close==null&&(s.timeline.close=Date.now())},{once:!0}),s}var X3=class{log;init;logger;metrics;components;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:websockets"),this.logger=e.logger,this.components=e,this.init=t,e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_websockets_dialer_events_total",{label:"event",help:"Total count of WebSockets dialer events by type"})})}[co]=!0;[Symbol.toStringTag]="@libp2p/websockets";[Se]=["@libp2p/transport"];async dial(e,t){this.log("dialing %s",e),t=t??{};let n=await this._connect(e,t),o=hb(n,e,{logger:this.logger,metrics:this.metrics?.dialerEvents});this.log("new outbound connection %s",o.remoteAddr);let i=await t.upgrader.upgradeOutbound(o,t);return this.log("outbound connection %s upgraded",o.remoteAddr),i}async _connect(e,t){t?.signal?.throwIfAborted();let n=e.toOptions();this.log("dialing %s:%s",n.host,n.port);let o=J(),i=ub(Jd(e),this.init);i.socket.addEventListener("error",()=>{let s=new es(`Could not connect to ${e.toString()}`);this.log.error("connection error:",s),this.metrics?.dialerEvents.increment({error:!0}),o.reject(s)});try{t.onProgress?.(new W("websockets:open-connection")),await st(Promise.race([i.connected(),o.promise]),t.signal)}catch(s){throw t.signal?.aborted===!0&&this.metrics?.dialerEvents.increment({abort:!0}),i.close().catch(a=>{this.log.error("error closing raw socket",a)}),s}return this.log("connected %s",e),this.metrics?.dialerEvents.increment({connect:!0}),i}createListener(e){return fb({logger:this.logger,events:this.components.events,metrics:this.components.metrics},{...this.init,...e})}listenFilter(e){return e=Array.isArray(e)?e:[e],this.init?.filter!=null?this.init?.filter(e):db(e)}dialFilter(e){return this.listenFilter(e)}};function pb(r={}){return e=>new X3(e,r)}var j3=Mr(s1(),1);function mb(r,e){let t=e.map((n,o)=>({record:Cn(n),index:o}));return t.sort((n,o)=>{let i=n.record.sequence,s=o.record.sequence;if(i>s)return-1;if(i<s)return 1;if(n.record.validityType===sr.ValidityType.EOL&&o.record.validityType===sr.ValidityType.EOL){let a=j3.default.fromString(n.record.validity).toDate(),c=j3.default.fromString(o.record.validity).toDate();if(a.getTime()>c.getTime())return-1;if(a.getTime()<c.getTime())return 1}return 0}),t[0].index}var gb="2.6.1",sl="js-libp2p";function xh(r,e){return`${r??sl}/${e??gb} browser/${globalThis.navigator.userAgent}`}var wb="5.2.1",bb="helia";var xb={list:["/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN","/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb","/dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt","/dnsaddr/va1.bootstrap.libp2p.io/p2p/12D3KooWKnDdG3iXw9eTFijk3EWSunZcFi54Zka4wmtqtt6rPxc8","/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ"]};function vh(r={}){let e=`${bb}/${wb} ${xh()}`;return{privateKey:r.privateKey,dns:r.dns,nodeInfo:{userAgent:e},addresses:{listen:["/p2p-circuit","/webrtc"]},transports:[y3(),Zw(),jw(),pb()],connectionEncrypters:[L1()],streamMuxers:[D9(),_w()],peerDiscovery:[Q9(xb)],services:{autoNAT:M9(),dcutr:fy(),delegatedRouting:()=>M7("https://delegated-ipfs.dev",xm()),dht:Zy({clientMode:!0,validators:{ipns:h1},selectors:{ipns:mb}}),identify:by(),identifyPush:xy(),keychain:eh(r.keychain),ping:Rw()}}}async function Z3(r,e={}){let t=eh(e)({datastore:r,logger:Po()}),n=new De("/pkcs8/self"),o;return await r.has(n)?o=await t.exportKey("self"):(o=await Qu(e.keyType??"Ed25519"),await t.importKey("self",o)),o}var tP=32,{code:rP}=Z("dnsaddr"),J3=class extends Error{constructor(e="Max recursive depth reached"){super(e),this.name="RecursionLimitError"}},Gi=async function(e,t={}){let n=t.maxRecursiveDepth??tP;if(n===0)throw new J3("Max recursive depth reached");let[,o]=e.stringTuples().find(([l])=>l===rP)??[],s=await(t?.dns??ld()).query(`_dnsaddr.${o}`,{signal:t?.signal,types:[mr.TXT]}),a=e.getPeerId(),c=[];for(let l of s.Answer){let u=l.data.replace(/["']/g,"").trim().split("=")[1];if(u==null||a!=null&&!u.includes(a))continue;let d=H(u);if(u.startsWith("/dnsaddr")){let f=await d.resolve({...t,maxRecursiveDepth:n-1});c.push(...f.map(h=>h.toString()))}else c.push(d.toString())}return c};var nP={addresses:{listen:[],announce:[],noAnnounce:[],announceFilter:r=>r},connectionManager:{resolvers:{dnsaddr:Gi}},transportManager:{faultTolerance:ao.FATAL_ALL}};async function vb(r){let e=da(nP,r);if(e.connectionProtector===null&&globalThis.process?.env?.LIBP2P_FORCE_PNET!=null)throw new _("Private network is enforced, but no protector was provided");return e}var ya;(function(r){let e;(function(o){let i;o.codec=()=>(i==null&&(i=re((s,a,c={})=>{c.lengthDelimited!==!1&&a.fork(),s.key!=null&&s.key!==""&&(a.uint32(10),a.string(s.key)),s.value!=null&&s.value.byteLength>0&&(a.uint32(18),a.bytes(s.value)),c.lengthDelimited!==!1&&a.ldelim()},(s,a,c={})=>{let l={key:"",value:se(0)},u=a==null?s.len:s.pos+a;for(;s.pos<u;){let d=s.uint32();switch(d>>>3){case 1:{l.key=s.string();break}case 2:{l.value=s.bytes();break}default:{s.skipType(d&7);break}}}return l})),i),o.encode=s=>te(s,o.codec()),o.decode=(s,a)=>ee(s,o.codec(),a)})(e=r.Peer$metadataEntry||(r.Peer$metadataEntry={}));let t;(function(o){let i;o.codec=()=>(i==null&&(i=re((s,a,c={})=>{c.lengthDelimited!==!1&&a.fork(),s.key!=null&&s.key!==""&&(a.uint32(10),a.string(s.key)),s.value!=null&&(a.uint32(18),Sh.codec().encode(s.value,a)),c.lengthDelimited!==!1&&a.ldelim()},(s,a,c={})=>{let l={key:""},u=a==null?s.len:s.pos+a;for(;s.pos<u;){let d=s.uint32();switch(d>>>3){case 1:{l.key=s.string();break}case 2:{l.value=Sh.codec().decode(s,s.uint32(),{limits:c.limits?.value});break}default:{s.skipType(d&7);break}}}return l})),i),o.encode=s=>te(s,o.codec()),o.decode=(s,a)=>ee(s,o.codec(),a)})(t=r.Peer$tagsEntry||(r.Peer$tagsEntry={}));let n;r.codec=()=>(n==null&&(n=re((o,i,s={})=>{if(s.lengthDelimited!==!1&&i.fork(),o.addresses!=null)for(let a of o.addresses)i.uint32(10),Eh.codec().encode(a,i);if(o.protocols!=null)for(let a of o.protocols)i.uint32(18),i.string(a);if(o.publicKey!=null&&(i.uint32(34),i.bytes(o.publicKey)),o.peerRecordEnvelope!=null&&(i.uint32(42),i.bytes(o.peerRecordEnvelope)),o.metadata!=null&&o.metadata.size!==0)for(let[a,c]of o.metadata.entries())i.uint32(50),r.Peer$metadataEntry.codec().encode({key:a,value:c},i);if(o.tags!=null&&o.tags.size!==0)for(let[a,c]of o.tags.entries())i.uint32(58),r.Peer$tagsEntry.codec().encode({key:a,value:c},i);s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={addresses:[],protocols:[],metadata:new Map,tags:new Map},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{if(s.limits?.addresses!=null&&a.addresses.length===s.limits.addresses)throw new Oe('Decode error - map field "addresses" had too many elements');a.addresses.push(Eh.codec().decode(o,o.uint32(),{limits:s.limits?.addresses$}));break}case 2:{if(s.limits?.protocols!=null&&a.protocols.length===s.limits.protocols)throw new Oe('Decode error - map field "protocols" had too many elements');a.protocols.push(o.string());break}case 4:{a.publicKey=o.bytes();break}case 5:{a.peerRecordEnvelope=o.bytes();break}case 6:{if(s.limits?.metadata!=null&&a.metadata.size===s.limits.metadata)throw new Pa('Decode error - map field "metadata" had too many elements');let u=r.Peer$metadataEntry.codec().decode(o,o.uint32());a.metadata.set(u.key,u.value);break}case 7:{if(s.limits?.tags!=null&&a.tags.size===s.limits.tags)throw new Pa('Decode error - map field "tags" had too many elements');let u=r.Peer$tagsEntry.codec().decode(o,o.uint32(),{limits:{value:s.limits?.tags$value}});a.tags.set(u.key,u.value);break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>te(o,r.codec()),r.decode=(o,i)=>ee(o,r.codec(),i)})(ya||(ya={}));var Eh;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.multiaddr!=null&&t.multiaddr.byteLength>0&&(n.uint32(10),n.bytes(t.multiaddr)),t.isCertified!=null&&(n.uint32(16),n.bool(t.isCertified)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={multiaddr:se(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.multiaddr=t.bytes();break}case 2:{i.isCertified=t.bool();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(Eh||(Eh={}));var Sh;(function(r){let e;r.codec=()=>(e==null&&(e=re((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.value!=null&&t.value!==0&&(n.uint32(8),n.uint32(t.value)),t.expiry!=null&&(n.uint32(16),n.uint64(t.expiry)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={value:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.value=t.uint32();break}case 2:{i.expiry=t.uint64();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>te(t,r.codec()),r.decode=(t,n)=>ee(t,r.codec(),n)})(Sh||(Sh={}));function wa(r,e){let t=ya.decode(e);if(t.publicKey!=null&&r.publicKey==null){let i=tt(t.publicKey);r=An(i)}let n=new Map,o=BigInt(Date.now());for(let[i,s]of t.tags.entries())s.expiry!=null&&s.expiry<o||n.set(i,s);return{...t,id:r,addresses:t.addresses.map(({multiaddr:i,isCertified:s})=>({multiaddr:H(i),isCertified:s??!1})),metadata:t.metadata,peerRecordEnvelope:t.peerRecordEnvelope??void 0,tags:n}}var e4="/peers/";function ba(r){if(!pl(r)||r.type==null)throw new _("Invalid PeerId");let e=r.toCID().toString();return new De(`${e4}${e}`)}async function Eb(r,e,t){let n=new Map;for(let o of t){if(o==null)continue;if(o.multiaddr instanceof Uint8Array&&(o.multiaddr=H(o.multiaddr)),!Mo(o.multiaddr))throw new _("Multiaddr was invalid");if(!await e(r,o.multiaddr))continue;let i=o.isCertified??!1,s=o.multiaddr.toString(),a=n.get(s);a!=null?o.isCertified=a.isCertified||i:n.set(s,{multiaddr:o.multiaddr,isCertified:i})}return[...n.values()].sort((o,i)=>o.multiaddr.toString().localeCompare(i.multiaddr.toString())).map(({isCertified:o,multiaddr:i})=>({isCertified:o,multiaddr:i.bytes}))}async function Ih(r,e,t,n){if(e==null)throw new _("Invalid PeerData");if(e.publicKey!=null&&r.publicKey!=null&&!e.publicKey.equals(r.publicKey))throw new _("publicKey bytes do not match peer id publicKey bytes");let o=n.existingPeer;if(o!=null&&!r.equals(o.id))throw new _("peer id did not match existing peer id");let i=o?.addresses??[],s=new Set(o?.protocols??[]),a=o?.metadata??new Map,c=o?.tags??new Map,l=o?.peerRecordEnvelope;if(t==="patch"){if((e.multiaddrs!=null||e.addresses!=null)&&(i=[],e.multiaddrs!=null&&i.push(...e.multiaddrs.map(f=>({isCertified:!1,multiaddr:f}))),e.addresses!=null&&i.push(...e.addresses)),e.protocols!=null&&(s=new Set(e.protocols)),e.metadata!=null){let f=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);a=Ah(f,{validate:Sb})}if(e.tags!=null){let f=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags);c=Ah(f,{validate:Ab,map:Ib})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}if(t==="merge"){if(e.multiaddrs!=null&&i.push(...e.multiaddrs.map(f=>({isCertified:!1,multiaddr:f}))),e.addresses!=null&&i.push(...e.addresses),e.protocols!=null&&(s=new Set([...s,...e.protocols])),e.metadata!=null){let f=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);for(let[h,p]of f)p==null?a.delete(h):a.set(h,p);a=Ah([...a.entries()],{validate:Sb})}if(e.tags!=null){let f=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags),h=new Map(c);for(let[p,g]of f)g==null?h.delete(p):h.set(p,g);c=Ah([...h.entries()],{validate:Ab,map:Ib})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}let u;o?.id.publicKey!=null?u=Nt(o.id.publicKey):e.publicKey!=null?u=Nt(e.publicKey):r.publicKey!=null&&(u=Nt(r.publicKey));let d={addresses:await Eb(r,n.addressFilter??(async()=>!0),i),protocols:[...s.values()].sort((f,h)=>f.localeCompare(h)),metadata:a,tags:c,publicKey:u,peerRecordEnvelope:l};return r.type!=="RSA"&&delete d.publicKey,d}function Ah(r,e){let t=new Map;for(let[n,o]of r)o!=null&&e.validate(n,o);for(let[n,o]of r.sort(([i],[s])=>i.localeCompare(s)))o!=null&&t.set(n,e.map?.(n,o)??o);return t}function Sb(r,e){if(typeof r!="string")throw new _("Metadata key must be a string");if(!(e instanceof Uint8Array))throw new _("Metadata value must be a Uint8Array")}function Ab(r,e){if(typeof r!="string")throw new _("Tag name must be a string");if(e.value!=null){if(parseInt(`${e.value}`,10)!==e.value)throw new _("Tag value must be an integer");if(e.value<0||e.value>100)throw new _("Tag value must be between 0-100")}if(e.ttl!=null){if(parseInt(`${e.ttl}`,10)!==e.ttl)throw new _("Tag ttl must be an integer");if(e.ttl<0)throw new _("Tag ttl must be between greater than 0")}}function Ib(r,e){let t;return e.expiry!=null&&(t=e.expiry),e.ttl!=null&&(t=BigInt(Date.now()+Number(e.ttl))),{value:e.value??0,expiry:t}}function Th(r,e){let t=r.toString().split("/")[2],n=X.parse(t,at),o=In(n);return wa(o,e)}function oP(r){return r==null?{}:{prefix:e4,filters:(r.filters??[]).map(e=>({key:t,value:n})=>e(Th(t,n))),orders:(r.orders??[]).map(e=>(t,n)=>e(Th(t.key,t.value),Th(n.key,n.value)))}}var _h=class{peerId;datastore;lock;addressFilter;log;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-store"),this.peerId=e.peerId,this.datastore=e.datastore,this.addressFilter=t.addressFilter,this.lock=Si({name:"peer-store",singleProcess:!0})}async has(e){return this.datastore.has(ba(e))}async delete(e){if(this.peerId.equals(e))throw new _("Cannot delete self peer");await this.datastore.delete(ba(e))}async load(e){let t=await this.datastore.get(ba(e));return wa(e,t)}async save(e,t){let{existingBuf:n,existingPeer:o}=await this.#e(e),i=await Ih(e,t,"patch",{addressFilter:this.addressFilter});return this.#t(e,i,n,o)}async patch(e,t){let{existingBuf:n,existingPeer:o}=await this.#e(e),i=await Ih(e,t,"patch",{addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,i,n,o)}async merge(e,t){let{existingBuf:n,existingPeer:o}=await this.#e(e),i=await Ih(e,t,"merge",{addressFilter:this.addressFilter,existingPeer:o});return this.#t(e,i,n,o)}async*all(e){for await(let{key:t,value:n}of this.datastore.query(oP(e??{}))){let o=Th(t,n);o.id.equals(this.peerId)||(yield o)}}async#e(e){try{let t=await this.datastore.get(ba(e)),n=wa(e,t);return{existingBuf:t,existingPeer:n}}catch(t){t.name!=="NotFoundError"&&this.log.error("invalid peer data found in peer store - %e",t)}return{}}async#t(e,t,n,o){let i=ya.encode(t);return n!=null&&ne(i,n)?{peer:wa(e,i),previous:o,updated:!1}:(await this.datastore.put(ba(e),i),{peer:wa(e,i),previous:o,updated:!0})}};var t4=class{store;events;peerId;log;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-store"),this.events=e.events,this.peerId=e.peerId,this.store=new _h(e,t)}[Symbol.toStringTag]="@libp2p/peer-store";async forEach(e,t){this.log.trace("forEach await read lock");let n=await this.store.lock.readLock();this.log.trace("forEach got read lock");try{for await(let o of this.store.all(t))e(o)}finally{this.log.trace("forEach release read lock"),n()}}async all(e){this.log.trace("all await read lock");let t=await this.store.lock.readLock();this.log.trace("all got read lock");try{return await Li(this.store.all(e))}finally{this.log.trace("all release read lock"),t()}}async delete(e){this.log.trace("delete await write lock");let t=await this.store.lock.writeLock();this.log.trace("delete got write lock");try{await this.store.delete(e)}finally{this.log.trace("delete release write lock"),t()}}async has(e){this.log.trace("has await read lock");let t=await this.store.lock.readLock();this.log.trace("has got read lock");try{return await this.store.has(e)}finally{this.log.trace("has release read lock"),t()}}async get(e){this.log.trace("get await read lock");let t=await this.store.lock.readLock();this.log.trace("get got read lock");try{return await this.store.load(e)}finally{this.log.trace("get release read lock"),t()}}async save(e,t){this.log.trace("save await write lock");let n=await this.store.lock.writeLock();this.log.trace("save got write lock");try{let o=await this.store.save(e,t);return this.#e(e,o),o.peer}finally{this.log.trace("save release write lock"),n()}}async patch(e,t){this.log.trace("patch await write lock");let n=await this.store.lock.writeLock();this.log.trace("patch got write lock");try{let o=await this.store.patch(e,t);return this.#e(e,o),o.peer}finally{this.log.trace("patch release write lock"),n()}}async merge(e,t){this.log.trace("merge await write lock");let n=await this.store.lock.writeLock();this.log.trace("merge got write lock");try{let o=await this.store.merge(e,t);return this.#e(e,o),o.peer}finally{this.log.trace("merge release write lock"),n()}}async consumePeerRecord(e,t){let n=await vr.openAndCertify(e,Qt.DOMAIN),o=In(n.publicKey.toCID());if(t?.equals(o)===!1)return this.log("envelope peer id was not the expected peer id - expected: %p received: %p",t,o),!1;let i=Qt.createFromProtobuf(n.payload),s;try{s=await this.get(o)}catch(a){if(a.name!=="NotFoundError")throw a}if(s?.peerRecordEnvelope!=null){let a=await vr.createFromProtobuf(s.peerRecordEnvelope),c=Qt.createFromProtobuf(a.payload);if(c.seqNumber>=i.seqNumber)return this.log("sequence number was lower or equal to existing sequence number - stored: %d received: %d",c.seqNumber,i.seqNumber),!1}return await this.patch(i.peerId,{peerRecordEnvelope:e,addresses:i.multiaddrs.map(a=>({isCertified:!0,multiaddr:a}))}),!0}#e(e,t){t.updated&&(this.peerId.equals(e)?this.events.safeDispatchEvent("self:peer:update",{detail:t}):this.events.safeDispatchEvent("peer:update",{detail:t}))}};function Tb(r,e={}){return new t4(r,e)}function _b(r,e){let t,n=function(){let o=function(){t=void 0,r()};clearTimeout(t),t=setTimeout(o,e)};return n.start=()=>{},n.stop=()=>{clearTimeout(t)},n}var Cb=864e13;var iP=448,r4=449,sP=53,aP=54,cP=55,lP=56,Ch=class{log;mappings;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:dns-mappings"),this.mappings=new Map}has(e){let t=this.findHost(e);for(let n of this.mappings.values())if(n.domain===t)return!0;return!1}add(e,t){t.forEach(n=>{this.log("add DNS mapping %s to %s",n,e);let o=Gt(n)===!0;this.mappings.set(n,{domain:e,verified:o,expires:o?Cb-Date.now():0,lastVerified:o?Cb-Date.now():void 0})})}remove(e){let t=this.findHost(e),n=!1;for(let[o,i]of this.mappings.entries())i.domain===t&&(this.log("removing %s to %s DNS mapping %e",o,i.domain,new Error("where")),this.mappings.delete(o),n=n||i.verified);return n}getAll(e){let t=[];for(let n=0;n<e.length;n++){let i=e[n].multiaddr.stringTuples(),s=i[0][1];if(s!=null)for(let[a,c]of this.mappings.entries()){if(s!==a)continue;this.maybeAddSNITuple(i,c.domain)&&(e.splice(n,1),n--,t.push({multiaddr:H(`/${i.map(u=>[Z(u[0]).name,u[1]].join("/")).join("/")}`),verified:c.verified,type:"dns-mapping",expires:c.expires,lastVerified:c.lastVerified}))}}return t}maybeAddSNITuple(e,t){for(let n=0;n<e.length;n++)if(e[n][0]===iP&&e[n+1]?.[0]!==r4)return e.splice(n+1,0,[r4,t]),!0;return!1}confirm(e,t){let n=this.findHost(e),o=!1;for(let[i,s]of this.mappings.entries())s.domain===n&&(this.log("marking %s to %s DNS mapping as verified",i,s.domain),o=s.verified,s.verified=!0,s.expires=Date.now()+t,s.lastVerified=Date.now());return o}unconfirm(e,t){let n=this.findHost(e),o=!1;for(let[i,s]of this.mappings.entries())s.domain===n&&(this.log("removing verification of %s to %s DNS mapping",i,s.domain),o=o||s.verified,s.verified=!1,s.expires=Date.now()+t);return o}findHost(e){for(let t of e.stringTuples())if(t[0]===r4||t[0]===sP||t[0]===aP||t[0]===cP||t[0]===lP)return t[1]}};var n4=4,o4=41,i4=6,uP=273,kh=class{log;mappings;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:ip-mappings"),this.mappings=new Map}has(e){let t=e.stringTuples();for(let n of this.mappings.values())for(let o of n)if(o.externalIp===t[0][1])return!0;return!1}add(e,t,n,o=t,i="tcp"){let s=`${e}-${t}-${i}`,a=this.mappings.get(s)??[],c={internalIp:e,internalPort:t,externalIp:n,externalPort:o,externalFamily:nn(n)?4:6,protocol:i,verified:!1,expires:0};a.push(c),this.mappings.set(s,a)}remove(e){let t=e.stringTuples(),n=t[0][1]??"",o=t[1][0]===i4?"tcp":"udp",i=parseInt(t[1][1]??"0"),s=!1;for(let[a,c]of this.mappings.entries()){for(let l=0;l<c.length;l++){let u=c[l];u.externalIp===n&&u.externalPort===i&&u.protocol===o&&(this.log("removing %s:%s to %s:%s %s IP mapping",u.externalIp,u.externalPort,n,i,o),s=s||u.verified,c.splice(l,1),l--)}c.length===0&&this.mappings.delete(a)}return s}getAll(e){let t=[];for(let{multiaddr:n}of e){let o=n.stringTuples(),i;if((o[0][0]===n4||o[0][0]===o4)&&o[1][0]===i4?i=`${o[0][1]}-${o[1][1]}-tcp`:(o[0][0]===n4||o[0][0]===o4)&&o[1][0]===uP&&(i=`${o[0][1]}-${o[1][1]}-udp`),i==null)continue;let s=this.mappings.get(i);if(s!=null)for(let a of s)o[0][0]=a.externalFamily===4?n4:o4,o[0][1]=a.externalIp,o[1][1]=`${a.externalPort}`,t.push({multiaddr:H(`/${o.map(c=>[Z(c[0]).name,c[1]].join("/")).join("/")}`),verified:a.verified,type:"ip-mapping",expires:a.expires,lastVerified:a.lastVerified})}return t}confirm(e,t){let o=e.stringTuples()[0][1],i=!1;for(let s of this.mappings.values())for(let a of s)a.externalIp===o&&(this.log("marking %s to %s IP mapping as verified",a.internalIp,a.externalIp),i=a.verified,a.verified=!0,a.expires=Date.now()+t,a.lastVerified=Date.now());return i}unconfirm(e,t){let n=e.stringTuples(),o=n[0][1]??"",i=n[1][0]===i4?"tcp":"udp",s=parseInt(n[1][1]??"0"),a=!1;for(let c of this.mappings.values())for(let l=0;l<c.length;l++){let u=c[l];u.externalIp===o&&u.externalPort===s&&u.protocol===i&&(this.log("removing verification of %s:%s to %s:%s %s IP mapping",u.externalIp,u.externalPort,o,s,i),a=a||u.verified,u.verified=!1,u.expires=Date.now()+t)}return a}};function kb(r){try{let[[e,t]]=r.stringTuples();if(t==null)return!1;if(e===4)return t.startsWith("169.254.");if(e===41)return t.toLowerCase().startsWith("fe80")}catch{}return!1}var dP={maxObservedAddresses:10},Ph=class{log;addresses;maxObservedAddresses;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:observed-addresses"),this.addresses=new Map,this.maxObservedAddresses=t.maxObservedAddresses??dP.maxObservedAddresses}has(e){return this.addresses.has(e.toString())}removePrefixed(e){for(let t of this.addresses.keys())t.toString().startsWith(e)&&this.addresses.delete(t)}add(e){this.addresses.size!==this.maxObservedAddresses&&(Nr(e)||kb(e)||(this.log("adding observed address %a",e),this.addresses.set(e.toString(),{verified:!1,expires:0})))}getAll(){return Array.from(this.addresses).map(([e,t])=>({multiaddr:H(e),verified:t.verified,type:"observed",expires:t.expires,lastVerified:t.lastVerified}))}remove(e){let t=this.addresses.get(e.toString())?.verified??!1;return this.log("removing observed address %a",e),this.addresses.delete(e.toString()),t}confirm(e,t){let n=e.toString(),o=this.addresses.get(n)??{verified:!1,expires:Date.now()+t,lastVerified:Date.now()},i=o.verified;return o.verified=!0,o.expires=Date.now()+t,o.lastVerified=Date.now(),this.log("marking observed address %a as verified",n),this.addresses.set(n,o),i}};var fP={maxObservedAddresses:10},Rh=class{log;addresses;maxObservedAddresses;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:observed-addresses"),this.addresses=new Map,this.maxObservedAddresses=t.maxObservedAddresses??fP.maxObservedAddresses}get(e,t){if(Nr(e))return{multiaddr:e,verified:!0,type:"transport",expires:Date.now()+t,lastVerified:Date.now()};let n=this.toKey(e),o=this.addresses.get(n);return o==null&&(o={verified:!1,expires:0},this.addresses.set(n,o)),{multiaddr:e,verified:o.verified,type:"transport",expires:o.expires,lastVerified:o.lastVerified}}has(e){let t=this.toKey(e);return this.addresses.has(t)}remove(e){let t=this.toKey(e),n=this.addresses.get(t)?.verified??!1;return this.log("removing observed address %a",e),this.addresses.delete(t),n}confirm(e,t){let n=this.toKey(e),o=this.addresses.get(n)??{verified:!1,expires:0,lastVerified:0},i=o.verified;return o.verified=!0,o.expires=Date.now()+t,o.lastVerified=Date.now(),this.addresses.set(n,o),i}unconfirm(e,t){let n=this.toKey(e),o=this.addresses.get(n)??{verified:!1,expires:0},i=o.verified;return o.verified=!1,o.expires=Date.now()+t,this.addresses.set(n,o),i}toKey(e){let t=e.toOptions();return`${t.host}-${t.port}-${t.transport}`}};var Pb=6e4,Rb={maxObservedAddresses:10,addressVerificationTTL:Pb*10,addressVerificationRetry:Pb*5},hP=r=>r;function s4(r,e){let t=r.getPeerId();return t!=null&&Ue(t).equals(e)&&(r=r.decapsulate(H(`/p2p/${e.toString()}`))),r}var Dh=class{log;components;listen;announce;appendAnnounce;announceFilter;observed;dnsMappings;ipMappings;transportAddresses;observedAddressFilter;addressVerificationTTL;addressVerificationRetry;constructor(e,t={}){let{listen:n=[],announce:o=[],appendAnnounce:i=[]}=t;this.components=e,this.log=e.logger.forComponent("libp2p:address-manager"),this.listen=n.map(s=>s.toString()),this.announce=new Set(o.map(s=>s.toString())),this.appendAnnounce=new Set(i.map(s=>s.toString())),this.observed=new Ph(e,t),this.dnsMappings=new Ch(e,t),this.ipMappings=new kh(e,t),this.transportAddresses=new Rh(e,t),this.announceFilter=t.announceFilter??hP,this.observedAddressFilter=nr(1024),this.addressVerificationTTL=t.addressVerificationTTL??Rb.addressVerificationTTL,this.addressVerificationRetry=t.addressVerificationRetry??Rb.addressVerificationRetry,this._updatePeerStoreAddresses=_b(this._updatePeerStoreAddresses.bind(this),1e3),e.events.addEventListener("transport:listening",()=>{this._updatePeerStoreAddresses()}),e.events.addEventListener("transport:close",()=>{this._updatePeerStoreAddresses()})}[Symbol.toStringTag]="@libp2p/address-manager";_updatePeerStoreAddresses(){let e=this.getAddresses().map(t=>t.getPeerId()===this.components.peerId.toString()?t.decapsulate(`/p2p/${this.components.peerId.toString()}`):t);this.components.peerStore.patch(this.components.peerId,{multiaddrs:e}).catch(t=>{this.log.error("error updating addresses",t)})}getListenAddrs(){return Array.from(this.listen).map(e=>H(e))}getAnnounceAddrs(){return Array.from(this.announce).map(e=>H(e))}getAppendAnnounceAddrs(){return Array.from(this.appendAnnounce).map(e=>H(e))}getObservedAddrs(){return this.observed.getAll().map(e=>e.multiaddr)}addObservedAddr(e){let t=e.stringTuples(),n=`${t[0][1]}:${t[1][1]}`;this.observedAddressFilter.has(n)||(this.observedAddressFilter.add(n),e=s4(e,this.components.peerId),!this.ipMappings.has(e)&&(this.dnsMappings.has(e)||this.observed.add(e)))}confirmObservedAddr(e,t){e=s4(e,this.components.peerId);let n=!0;(t?.type==="transport"||this.transportAddresses.has(e))&&!this.transportAddresses.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1),(t?.type==="dns-mapping"||this.dnsMappings.has(e))&&!this.dnsMappings.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1),(t?.type==="ip-mapping"||this.ipMappings.has(e))&&!this.ipMappings.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1),(t?.type==="observed"||this.observed.has(e))&&(this.maybeUpgradeToIPMapping(e)?(this.ipMappings.confirm(e,t?.ttl??this.addressVerificationTTL),n=!1):!this.observed.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1)),n||this._updatePeerStoreAddresses()}removeObservedAddr(e,t){e=s4(e,this.components.peerId);let n=!1;this.observed.has(e)&&!this.observed.remove(e)&&n&&(n=!1),this.transportAddresses.has(e)&&!this.transportAddresses.unconfirm(e,t?.ttl??this.addressVerificationRetry)&&n&&(n=!1),this.dnsMappings.has(e)&&!this.dnsMappings.unconfirm(e,t?.ttl??this.addressVerificationRetry)&&n&&(n=!1),this.ipMappings.has(e)&&!this.ipMappings.unconfirm(e,t?.ttl??this.addressVerificationRetry)&&n&&(n=!1),n&&this._updatePeerStoreAddresses()}getAddresses(){let e=new Set,t=this.getAddressesWithMetadata().filter(n=>{if(!n.verified)return!1;let o=n.multiaddr.toString();return e.has(o)?!1:(e.add(o),!0)}).map(n=>n.multiaddr);return this.announceFilter(t.map(n=>{let o=H(n);return o.protos().pop()?.path===!0||o.getPeerId()===this.components.peerId.toString()?o:o.encapsulate(`/p2p/${this.components.peerId.toString()}`)}))}getAddressesWithMetadata(){let e=this.getAnnounceAddrs();if(e.length>0)return e.map(n=>({multiaddr:n,verified:!0,type:"announce",expires:Date.now()+this.addressVerificationTTL,lastVerified:Date.now()}));let t=[];return t=t.concat(this.components.transportManager.getAddrs().map(n=>this.transportAddresses.get(n,this.addressVerificationTTL))),t=t.concat(this.getAppendAnnounceAddrs().map(n=>({multiaddr:n,verified:!0,type:"announce",expires:Date.now()+this.addressVerificationTTL,lastVerified:Date.now()}))),t=t.concat(this.observed.getAll()),t=t.concat(this.ipMappings.getAll(t)),t=t.concat(this.dnsMappings.getAll(t)),t}addDNSMapping(e,t){this.dnsMappings.add(e,t)}removeDNSMapping(e){this.dnsMappings.remove(H(`/dns/${e}`))&&this._updatePeerStoreAddresses()}addPublicAddressMapping(e,t,n,o=t,i="tcp"){this.ipMappings.add(e,t,n,o,i),this.observed.removePrefixed(`/ip${nn(n)?4:6}/${n}/${i}/${o}`)}removePublicAddressMapping(e,t,n,o=t,i="tcp"){this.ipMappings.remove(H(`/ip${nn(n)?4:6}/${n}/${i}/${o}`))&&this._updatePeerStoreAddresses()}maybeUpgradeToIPMapping(e){if(this.ipMappings.has(e))return!1;let t=e.toOptions();if(t.family===6||t.host==="127.0.0.1"||Gt(t.host)===!0)return!1;let n=this.components.transportManager.getListeners(),o=[i=>to.exactMatch(i)||ki.exactMatch(i),i=>Ci.exactMatch(i),i=>n7.exactMatch(i)];for(let i of o){if(!i(e))continue;let s=n.filter(l=>l.getAddrs().filter(u=>u.toOptions().family===4&&i(u)).length>0);if(s.length!==1)continue;let a=s[0].getAddrs().filter(l=>l.toOptions().host!=="127.0.0.1").pop();if(a==null)continue;let c=a.toOptions();return this.observed.remove(e),this.ipMappings.add(c.host,c.port,t.host,t.port,t.transport),!0}return!1}};var Db;(function(r){r.NOT_STARTED_YET="The libp2p node is not started yet",r.NOT_FOUND="Not found"})(Db||(Db={}));var Lh=class extends Error{constructor(e="Missing service"){super(e),this.name="MissingServiceError"}},Nh=class extends Error{constructor(e="Unmet service dependencies"){super(e),this.name="UnmetServiceDependenciesError"}},xa=class extends Error{constructor(e="No content routers available"){super(e),this.name="NoContentRoutersError"}},al=class extends Error{constructor(e="No peer routers available"){super(e),this.name="NoPeerRoutersError"}},Bh=class extends Error{constructor(e="Should not try to find self"){super(e),this.name="QueriedForSelfError"}},Oh=class extends Error{constructor(e="Unhandled protocol error"){super(e),this.name="UnhandledProtocolError"}},Mh=class extends Error{constructor(e="Duplicate protocol handler error"){super(e),this.name="DuplicateProtocolHandlerError"}},cl=class extends Error{constructor(e="Dial denied error"){super(e),this.name="DialDeniedError"}},Qi=class extends Error{constructor(e="No valid addresses"){super(e),this.name="NoValidAddressesError"}},Uh=class extends Error{constructor(e="Connection intercepted"){super(e),this.name="ConnectionInterceptedError"}},Fh=class extends Error{constructor(e="Connection denied"){super(e),this.name="ConnectionDeniedError"}},Yi=class extends Error{constructor(e="Stream is not multiplexed"){super(e),this.name="MuxerUnavailableError"}},Xi=class extends Error{constructor(e="Encryption failed"){super(e),this.name="EncryptionFailedError"}},Vh=class extends Error{constructor(e="Transport unavailable"){super(e),this.name="TransportUnavailableError"}};var a4=class{components={};_started=!1;constructor(e={}){this.components={};for(let[t,n]of Object.entries(e))this.components[t]=n;this.components.logger==null&&(this.components.logger=Po())}isStarted(){return this._started}async _invokeStartableMethod(e){await Promise.all(Object.values(this.components).filter(t=>vl(t)).map(async t=>{await t[e]?.()}))}async beforeStart(){await this._invokeStartableMethod("beforeStart")}async start(){await this._invokeStartableMethod("start"),this._started=!0}async afterStart(){await this._invokeStartableMethod("afterStart")}async beforeStop(){await this._invokeStartableMethod("beforeStop")}async stop(){await this._invokeStartableMethod("stop"),this._started=!1}async afterStop(){await this._invokeStartableMethod("afterStop")}},mP=["metrics","connectionProtector","dns"],gP=["components","isStarted","beforeStart","start","afterStart","beforeStop","stop","afterStop","then","_invokeStartableMethod"];function Lb(r={}){let e=new a4(r);return new Proxy(e,{get(n,o,i){if(typeof o=="string"&&!gP.includes(o)){let s=e.components[o];if(s==null&&!mP.includes(o))throw new Lh(`${o} not set`);return s}return Reflect.get(n,o,i)},set(n,o,i){return typeof o=="string"?e.components[o]=i:Reflect.set(n,o,i),!0}})}function Nb(r){let e={};for(let t of Object.values(r.components))for(let n of yP(t))e[n]=!0;for(let t of Object.values(r.components))for(let n of wP(t))if(e[n]!==!0)throw new Nh(`Service "${bP(t)}" required capability "${n}" but it was not provided by any component, you may need to add additional configuration when creating your node.`)}function yP(r){return Array.isArray(r?.[Se])?r[Se]:[]}function wP(r){return Array.isArray(r?.[dr])?r[dr]:[]}function bP(r){return r?.[Symbol.toStringTag]??r?.toString()??"unknown"}var xP=4,vP=41;function Bb(r={}){return{denyDialPeer:async()=>!1,denyDialMultiaddr:async e=>{if(to.matches(e))return!1;let t=e.stringTuples();return t[0][0]===xP||t[0][0]===vP?!!Gt(`${t[0][1]}`):!1},denyInboundConnection:async()=>!1,denyOutboundConnection:async()=>!1,denyInboundEncryptedConnection:async()=>!1,denyOutboundEncryptedConnection:async()=>!1,denyInboundUpgradedConnection:async()=>!1,denyOutboundUpgradedConnection:async()=>!1,filterMultiaddrForPeer:async()=>!0,...r}}function $h(r){if(pl(r))return{peerId:r,multiaddrs:[]};Array.isArray(r)||(r=[r]);let e;if(r.length>0){let t=r[0].getPeerId();e=t==null?void 0:Ue(t),r.forEach(n=>{if(!Mo(n))throw new lo("Invalid multiaddr");let o=n.getPeerId();if(o==null){if(e!=null)throw new _("Multiaddrs must all have the same peer id or have no peer id")}else{let i=Ue(o);if(e?.equals(i)!==!0)throw new _("Multiaddrs must all have the same peer id or have no peer id")}})}return{peerId:e,multiaddrs:r}}var EP=["/ipfs/id/1.0.0","/ipfs/id/push/1.0.0","/libp2p/autonat/1.0.0","/libp2p/dcutr"];async function Ob(r,e){let t=r?.streams?.map(o=>o.protocol)??[],n=e?.closableProtocols??EP;if(!(t.filter(o=>o!=null&&!n.includes(o)).length>0))try{await r?.close(e)}catch(o){r?.abort(o)}}var Mb="last-dial-failure",Ub="last-dial-success";var Kh=100,Hh=50;async function Fb(r,e){let t=!1;for(let o of Ks.keys())if(t=r.protoNames().includes(o),t)break;if(!t)return[r];let n=await r.resolve(e);return e.log("resolved %s to",r,n.map(o=>o.toString())),n}function ll(r){try{let e;if(typeof r=="string"?e=H(r):e=r,!e.protoNames().includes("ipcidr")){let n=e.protoNames().includes("ip6")?"/ipcidr/128":"/ipcidr/32";e=e.encapsulate(n)}return um(e)}catch{throw new Error(`Can't convert to IpNet, Invalid multiaddr format: ${r}`)}}var SP={maxConnections:Kh,allow:[]},qh=class{maxConnections;connectionManager;peerStore;allow;events;log;constructor(e,t={}){this.maxConnections=t.maxConnections??SP.maxConnections,this.allow=(t.allow??[]).map(n=>ll(n)),this.connectionManager=e.connectionManager,this.peerStore=e.peerStore,this.events=e.events,this.log=e.logger.forComponent("libp2p:connection-manager:connection-pruner"),this.maybePruneConnections=this.maybePruneConnections.bind(this)}start(){this.events.addEventListener("connection:open",this.maybePruneConnections)}stop(){this.events.removeEventListener("connection:open",this.maybePruneConnections)}maybePruneConnections(){this._maybePruneConnections().catch(e=>{this.log.error("error while pruning connections %e",e)})}async _maybePruneConnections(){let e=this.connectionManager.getConnections(),t=e.length;if(this.log("checking max connections limit %d/%d",t,this.maxConnections),t<=this.maxConnections)return;let n=new ht;for(let a of e){let c=a.remotePeer;if(!n.has(c)){n.set(c,0);try{let l=await this.peerStore.get(c);n.set(c,[...l.tags.values()].reduce((u,d)=>u+d.value,0))}catch(l){l.name!=="NotFoundError"&&this.log.error("error loading peer tags",l)}}}let o=this.sortConnections(e,n),i=Math.max(t-this.maxConnections,0),s=[];for(let a of o)if(this.log("too many connections open - closing a connection to %p",a.remotePeer),this.allow.some(l=>l.contains(a.remoteAddr.nodeAddress().address))||s.push(a),s.length===i)break;await Promise.all(s.map(async a=>{await Ob(a,{signal:AbortSignal.timeout(1e3)})})),this.events.safeDispatchEvent("connection:prune",{detail:s})}sortConnections(e,t){return e.sort((n,o)=>{let i=n.timeline.open,s=o.timeline.open;return i<s?1:i>s?-1:0}).sort((n,o)=>n.direction==="outbound"&&o.direction==="inbound"?1:n.direction==="inbound"&&o.direction==="outbound"?-1:0).sort((n,o)=>n.streams.length>o.streams.length?1:n.streams.length<o.streams.length?-1:0).sort((n,o)=>{let i=t.get(n.remotePeer)??0,s=t.get(o.remotePeer)??0;return i>s?1:i<s?-1:0})}};var zh=class extends Vt{constructor(e={}){super({...e,sort:(t,n)=>t.options.priority>n.options.priority?-1:t.options.priority<n.options.priority?1:0})}};function AP(r,e){let t=Ci.exactMatch(r.multiaddr),n=Ci.exactMatch(e.multiaddr);if(t&&!n)return-1;if(!t&&n)return 1;let o=ki.exactMatch(r.multiaddr),i=ki.exactMatch(e.multiaddr);if(o&&!i)return-1;if(!o&&i)return 1;let s=to.exactMatch(r.multiaddr),a=to.exactMatch(e.multiaddr);if(s&&!a)return-1;if(!s&&a)return 1;let c=Cc.exactMatch(r.multiaddr),l=Cc.exactMatch(e.multiaddr);if(c&&!l)return-1;if(!c&&l)return 1;let u=_c.exactMatch(r.multiaddr),d=_c.exactMatch(e.multiaddr);if(u&&!d)return-1;if(!u&&d)return 1;let f=Jp.exactMatch(r.multiaddr),h=Jp.exactMatch(e.multiaddr);return f&&!h?-1:!f&&h?1:0}function IP(r,e){let t=Nr(r.multiaddr),n=Nr(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function TP(r,e){return r.isCertified&&!e.isCertified?-1:!r.isCertified&&e.isCertified?1:0}function _P(r,e){let t=ir.exactMatch(r.multiaddr),n=ir.exactMatch(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function Vb(r){return r.sort(AP).sort(TP).sort(_P).sort(IP)}var Wh={maxParallelDials:Hh,maxDialQueueLength:500,maxPeerAddrsToDial:25,dialTimeout:5e3,resolvers:{dnsaddr:Gi}},Gh=class{queue;components;addressSorter;maxPeerAddrsToDial;maxDialQueueLength;dialTimeout;shutDownController;connections;log;constructor(e,t={}){this.addressSorter=t.addressSorter,this.maxPeerAddrsToDial=t.maxPeerAddrsToDial??Wh.maxPeerAddrsToDial,this.maxDialQueueLength=t.maxDialQueueLength??Wh.maxDialQueueLength,this.dialTimeout=t.dialTimeout??Wh.dialTimeout,this.connections=t.connections??new ht,this.log=e.logger.forComponent("libp2p:connection-manager:dial-queue"),this.components=e,this.shutDownController=new AbortController,this.shutDownController.signal;for(let[n,o]of Object.entries(t.resolvers??{}))Ks.set(n,o);this.queue=new zh({concurrency:t.maxParallelDials??Wh.maxParallelDials,metricName:"libp2p_dial_queue",metrics:e.metrics}),this.queue.addEventListener("error",n=>{n.detail.name!==Ft.name&&this.log.error("error in dial queue - %e",n.detail)})}start(){this.shutDownController=new AbortController,this.shutDownController.signal}stop(){this.shutDownController.abort(),this.queue.abort()}async dial(e,t={}){let{peerId:n,multiaddrs:o}=$h(e),i=Array.from(this.connections.values()).flat().find(a=>t.force===!0?!1:a.remotePeer.equals(n)?!0:o.find(c=>c.equals(a.remoteAddr)));if(i?.status==="open")return this.log("already connected to %a",i.remoteAddr),t.onProgress?.(new W("dial-queue:already-connected")),i;let s=this.queue.queue.find(a=>{if(n?.equals(a.options.peerId)===!0)return!0;let c=a.options.multiaddrs;if(c==null)return!1;for(let l of o)if(c.has(l.toString()))return!0;return!1});if(s!=null){this.log("joining existing dial target for %p",n);for(let a of o)s.options.multiaddrs.add(a.toString());return t.onProgress?.(new W("dial-queue:already-in-dial-queue")),s.join(t)}if(this.queue.size>=this.maxDialQueueLength)throw new Nn("Dial queue is full");return this.log("creating dial target for %p",n,o.map(a=>a.toString())),t.onProgress?.(new W("dial-queue:add-to-dial-queue")),this.queue.add(async a=>{a?.onProgress?.(new W("dial-queue:start-dial"));let c=ce([this.shutDownController.signal,a.signal]);let l;try{l=await this.calculateMultiaddrs(n,a?.multiaddrs,{...a,signal:c}),a?.onProgress?.(new W("dial-queue:calculated-addresses",l)),l.map(({multiaddr:u})=>u.toString()).forEach(u=>{a?.multiaddrs.add(u)})}catch(u){throw c.clear(),u}try{let u=0,d=[];for(let f of l){if(u===this.maxPeerAddrsToDial)throw this.log("dialed maxPeerAddrsToDial (%d) addresses for %p, not trying any others",u,n),new Nn("Peer had more than maxPeerAddrsToDial");u++;try{let h=await this.components.transportManager.dial(f.multiaddr,{...a,signal:c});this.log("dial to %a succeeded",f.multiaddr);try{await this.components.peerStore.merge(h.remotePeer,{multiaddrs:[h.remoteAddr],metadata:{[Ub]:N(Date.now().toString())}})}catch(p){this.log.error("could not update last dial failure key for %p",n,p)}return h}catch(h){if(this.log.error("dial failed to %a",f.multiaddr,h),n!=null)try{await this.components.peerStore.merge(n,{metadata:{[Mb]:N(Date.now().toString())}})}catch(p){this.log.error("could not update last dial failure key for %p",n,p)}if(c.aborted)throw new Ur(h.message);d.push(h)}}throw d.length===1?d[0]:new AggregateError(d,"All multiaddr dials failed")}finally{c.clear()}},{peerId:n,priority:t.priority??d4,multiaddrs:new Set(o.map(a=>a.toString())),signal:t.signal??AbortSignal.timeout(this.dialTimeout),onProgress:t.onProgress})}async calculateMultiaddrs(e,t=new Set,n={}){let o=[...t].map(d=>({multiaddr:H(d),isCertified:!1}));if(e!=null){if(this.components.peerId.equals(e))throw new Nn("Tried to dial self");if(await this.components.connectionGater.denyDialPeer?.(e)===!0)throw new cl("The dial request is blocked by gater.allowDialPeer");if(o.length===0){this.log("loading multiaddrs for %p",e);try{let d=await this.components.peerStore.get(e);o.push(...d.addresses),this.log("loaded multiaddrs for %p",e,o.map(({multiaddr:f})=>f.toString()))}catch(d){if(d.name!=="NotFoundError")throw d}}if(o.length===0){this.log("looking up multiaddrs for %p in the peer routing",e);try{let d=await this.components.peerRouting.findPeer(e,n);this.log("found multiaddrs for %p in the peer routing",e,o.map(({multiaddr:f})=>f.toString())),o.push(...d.multiaddrs.map(f=>({multiaddr:f,isCertified:!1})))}catch(d){d.name!=="NoPeerRoutersError"&&this.log.error("looking up multiaddrs for %p in the peer routing failed",e,d)}}}let i=(await Promise.all(o.map(async d=>{let f=await Fb(d.multiaddr,{dns:this.components.dns,...n,log:this.log});return f.length===1&&f[0].equals(d.multiaddr)?d:f.map(h=>({multiaddr:h,isCertified:!1}))}))).flat();if(e!=null){let d=`/p2p/${e.toString()}`;i=i.map(f=>f.multiaddr.protos().pop()?.path===!0?f:f.multiaddr.getPeerId()==null?{multiaddr:f.multiaddr.encapsulate(d),isCertified:f.isCertified}:f)}let s=i.filter(d=>{if(this.components.transportManager.dialTransportForMultiaddr(d.multiaddr)==null)return!1;let f=d.multiaddr.getPeerId();return e!=null&&f!=null?e.equals(f):!0}),a=new Map;for(let d of s){let f=d.multiaddr.toString(),h=a.get(f);if(h!=null){h.isCertified=h.isCertified||d.isCertified||!1;continue}a.set(f,d)}let c=[...a.values()];if(c.length===0)throw new Qi("The dial request has no valid addresses");let l=[];for(let d of c)this.components.connectionGater.denyDialMultiaddr!=null&&await this.components.connectionGater.denyDialMultiaddr(d.multiaddr)||l.push(d);let u=this.addressSorter==null?Vb(l):l.sort(this.addressSorter);if(u.length===0)throw new cl("The connection gater denied all addresses in the dial request");return this.log.trace("addresses for %p before filtering",e??"unknown peer",i.map(({multiaddr:d})=>d.toString())),this.log.trace("addresses for %p after filtering",e??"unknown peer",u.map(({multiaddr:d})=>d.toString())),u}async isDialable(e,t={}){Array.isArray(e)||(e=[e]);try{let n=await this.calculateMultiaddrs(void 0,new Set(e.map(o=>o.toString())),t);return t.runOnLimitedConnection===!1?n.find(o=>!ir.matches(o.multiaddr))!=null:!0}catch(n){this.log.trace("error calculating if multiaddr(s) were dialable",n)}return!1}};var Gb=Mr(zb(),1);var kP=Object.prototype.toString,PP=r=>kP.call(r)==="[object Error]",RP=new Set(["network error","Failed to fetch","NetworkError when attempting to fetch resource.","The Internet connection appears to be offline.","Load failed","Network request failed","fetch failed","terminated"]);function f4(r){return r&&PP(r)&&r.name==="TypeError"&&typeof r.message=="string"?r.message==="Load failed"?r.stack===void 0:RP.has(r.message):!1}var h4=class extends Error{constructor(e){super(),e instanceof Error?(this.originalError=e,{message:e}=e):(this.originalError=new Error(e),this.originalError.stack=this.stack),this.name="AbortError",this.message=e}},Wb=(r,e,t)=>{let n=t.retries-(e-1);return r.attemptNumber=e,r.retriesLeft=n,r};async function p4(r,e){return new Promise((t,n)=>{e={...e},e.onFailedAttempt??=()=>{},e.shouldRetry??=()=>!0,e.retries??=10;let o=Gb.default.operation(e),i=()=>{o.stop(),n(e.signal?.reason)};e.signal&&!e.signal.aborted&&e.signal.addEventListener("abort",i,{once:!0});let s=()=>{e.signal?.removeEventListener("abort",i),o.stop()};o.attempt(async a=>{try{let c=await r(a);s(),t(c)}catch(c){try{if(!(c instanceof Error))throw new TypeError(`Non-error was thrown: "${c}". You should only throw errors.`);if(c instanceof h4)throw c.originalError;if(c instanceof TypeError&&!f4(c))throw c;if(Wb(c,a,e),await e.shouldRetry(c)||(o.stop(),n(c)),await e.onFailedAttempt(c),!o.retry(c))throw o.mainError()}catch(l){Wb(l,a,e),s(),n(l)}}})})}var Qh=class{log;queue;started;peerStore;retries;retryInterval;backoffFactor;connectionManager;events;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:reconnect-queue"),this.peerStore=e.peerStore,this.connectionManager=e.connectionManager,this.queue=new yt({concurrency:t.maxParallelReconnects??5,metricName:"libp2p_reconnect_queue",metrics:e.metrics}),this.started=!1,this.retries=t.retries??5,this.backoffFactor=t.backoffFactor,this.retryInterval=t.retryInterval,this.events=e.events,e.events.addEventListener("peer:disconnect",n=>{this.maybeReconnect(n.detail).catch(o=>{this.log.error("failed to maybe reconnect to %p - %e",n.detail,o)})})}async maybeReconnect(e){if(!this.started)return;let t=await this.peerStore.get(e);Qb(t)&&(this.queue.has(e)||this.queue.add(async n=>{await p4(async o=>{if(this.started)try{await this.connectionManager.openConnection(e,{signal:n?.signal})}catch(i){throw this.log("reconnecting to %p attempt %d of %d failed - %e",e,o,this.retries,i),i}},{signal:n?.signal,retries:this.retries,factor:this.backoffFactor,minTimeout:this.retryInterval})},{peerId:e}).catch(async n=>{this.log.error("failed to reconnect to %p - %e",e,n);let o={};[...t.tags.keys()].forEach(i=>{i.startsWith(so)&&(o[i]=void 0)}),await this.peerStore.merge(e,{tags:o}),this.events.safeDispatchEvent("peer:reconnect-failure",{detail:e})}).catch(async n=>{this.log.error("failed to remove keep-alive tag from %p - %e",e,n)}))}start(){this.started=!0}async afterStart(){Promise.resolve().then(async()=>{let e=await this.peerStore.all({filters:[t=>Qb(t)]});await Promise.all(e.map(async t=>{await this.connectionManager.openConnection(t.id).catch(n=>{this.log.error(n)})}))}).catch(e=>{this.log.error(e)})}stop(){this.started=!1,this.queue.abort()}};function Qb(r){for(let e of r.tags.keys())if(e.startsWith(so))return!0;return!1}var d4=50,m4={maxConnections:Kh,inboundConnectionThreshold:5,maxIncomingPendingConnections:10},Yh=class{started;connections;allow;deny;maxIncomingPendingConnections;incomingPendingConnections;outboundPendingConnections;maxConnections;dialQueue;reconnectQueue;connectionPruner;inboundConnectionRateLimiter;peerStore;metrics;events;log;peerId;constructor(e,t={}){if(this.maxConnections=t.maxConnections??m4.maxConnections,this.maxConnections<1)throw new _("Connection Manager maxConnections must be greater than 0");this.connections=new ht,this.started=!1,this.peerId=e.peerId,this.peerStore=e.peerStore,this.metrics=e.metrics,this.events=e.events,this.log=e.logger.forComponent("libp2p:connection-manager"),this.onConnect=this.onConnect.bind(this),this.onDisconnect=this.onDisconnect.bind(this),this.allow=(t.allow??[]).map(n=>ll(n)),this.deny=(t.deny??[]).map(n=>ll(n)),this.incomingPendingConnections=0,this.maxIncomingPendingConnections=t.maxIncomingPendingConnections??m4.maxIncomingPendingConnections,this.outboundPendingConnections=0,this.inboundConnectionRateLimiter=new ma({points:t.inboundConnectionThreshold??m4.inboundConnectionThreshold,duration:1}),this.connectionPruner=new qh({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{maxConnections:this.maxConnections,allow:t.allow?.map(n=>H(n))}),this.dialQueue=new Gh(e,{addressSorter:t.addressSorter,maxParallelDials:t.maxParallelDials??Hh,maxDialQueueLength:t.maxDialQueueLength??500,maxPeerAddrsToDial:t.maxPeerAddrsToDial??25,dialTimeout:t.dialTimeout??5e3,resolvers:t.resolvers??{dnsaddr:Gi},connections:this.connections}),this.reconnectQueue=new Qh({events:e.events,peerStore:e.peerStore,logger:e.logger,connectionManager:this},{retries:t.reconnectRetries,retryInterval:t.reconnectRetryInterval,backoffFactor:t.reconnectBackoffFactor,maxParallelReconnects:t.maxParallelReconnects})}[Symbol.toStringTag]="@libp2p/connection-manager";async start(){this.metrics?.registerMetricGroup("libp2p_connection_manager_connections",{calculate:()=>{let e={inbound:0,"inbound pending":this.incomingPendingConnections,outbound:0,"outbound pending":this.outboundPendingConnections};for(let t of this.connections.values())for(let n of t)e[n.direction]++;return e}}),this.metrics?.registerMetricGroup("libp2p_protocol_streams_total",{label:"protocol",calculate:()=>{let e={};for(let t of this.connections.values())for(let n of t)for(let o of n.streams){let i=`${o.direction} ${o.protocol??"unnegotiated"}`;e[i]=(e[i]??0)+1}return e}}),this.metrics?.registerMetricGroup("libp2p_connection_manager_protocol_streams_per_connection_90th_percentile",{label:"protocol",calculate:()=>{let e={};for(let n of this.connections.values())for(let o of n){let i={};for(let s of o.streams){let a=`${s.direction} ${s.protocol??"unnegotiated"}`;i[a]=(i[a]??0)+1}for(let[s,a]of Object.entries(i))e[s]=e[s]??[],e[s].push(a)}let t={};for(let[n,o]of Object.entries(e)){o=o.sort((s,a)=>s-a);let i=Math.floor(o.length*.9);t[n]=o[i]}return t}}),this.events.addEventListener("connection:open",this.onConnect),this.events.addEventListener("connection:close",this.onDisconnect),await gt(this.dialQueue,this.reconnectQueue,this.connectionPruner),this.started=!0,this.log("started")}async stop(){this.events.removeEventListener("connection:open",this.onConnect),this.events.removeEventListener("connection:close",this.onDisconnect),await kt(this.reconnectQueue,this.dialQueue,this.connectionPruner);let e=[];for(let t of this.connections.values())for(let n of t)e.push((async()=>{try{await n.close()}catch(o){this.log.error(o)}})());this.log("closing %d connections",e.length),await Promise.all(e),this.connections.clear(),this.log("stopped")}getMaxConnections(){return this.maxConnections}onConnect(e){this._onConnect(e).catch(t=>{this.log.error(t)})}async _onConnect(e){let{detail:t}=e;if(!this.started){await t.close();return}if(t.status!=="open")return;let n=t.remotePeer,o=!this.connections.has(n),i=this.connections.get(n)??[];i.push(t),this.connections.set(n,i),n.publicKey!=null&&n.type==="RSA"&&await this.peerStore.patch(n,{publicKey:n.publicKey}),o&&this.events.safeDispatchEvent("peer:connect",{detail:t.remotePeer})}onDisconnect(e){let{detail:t}=e,n=t.remotePeer,i=(this.connections.get(n)??[]).filter(s=>s.id!==t.id);this.connections.set(n,i),i.length===0&&(this.log("onDisconnect remove all connections for peer %p",n),this.connections.delete(n),this.events.safeDispatchEvent("peer:disconnect",{detail:t.remotePeer}))}getConnections(e){if(e!=null)return this.connections.get(e)??[];let t=[];for(let n of this.connections.values())t=t.concat(n);return t}getConnectionsMap(){return this.connections}async openConnection(e,t={}){if(!this.started)throw new Fr("Not started");this.outboundPendingConnections++;try{t.signal?.throwIfAborted();let{peerId:n}=$h(e);if(this.peerId.equals(n))throw new ts("Can not dial self");if(n!=null&&t.force!==!0){this.log("dial %p",n);let a=this.getConnections(n).find(c=>c.limits==null);if(a!=null)return this.log("had an existing non-limited connection to %p",n),t.onProgress?.(new W("dial-queue:already-connected")),a}let o=await this.dialQueue.dial(e,{...t,priority:t.priority??d4});if(o.status!=="open")throw new Ji("Remote closed connection during opening");let i=this.connections.get(o.remotePeer);i==null&&(i=[],this.connections.set(o.remotePeer,i));let s=!1;for(let a of i)if(a.id===o.id&&(s=!0),t.force!==!0&&a.id!==o.id&&a.remoteAddr.equals(o.remoteAddr))return o.abort(new lo("Duplicate multiaddr connection")),a;return s||i.push(o),o}finally{this.outboundPendingConnections--}}async closeConnections(e,t={}){let n=this.connections.get(e)??[];await Promise.all(n.map(async o=>{try{await o.close(t)}catch(i){o.abort(i)}}))}async acceptIncomingConnection(e){if(this.deny.some(o=>o.contains(e.remoteAddr.nodeAddress().address)))return this.log("connection from %a refused - connection remote address was in deny list",e.remoteAddr),!1;if(this.allow.some(o=>o.contains(e.remoteAddr.nodeAddress().address)))return this.incomingPendingConnections++,!0;if(this.incomingPendingConnections===this.maxIncomingPendingConnections)return this.log("connection from %a refused - incomingPendingConnections exceeded by host",e.remoteAddr),!1;if(e.remoteAddr.isThinWaistAddress()){let o=e.remoteAddr.nodeAddress().address;try{await this.inboundConnectionRateLimiter.consume(o,1)}catch{return this.log("connection from %a refused - inboundConnectionThreshold exceeded by host %s",e.remoteAddr,o),!1}}return this.getConnections().length<this.maxConnections?(this.incomingPendingConnections++,!0):(this.log("connection from %a refused - maxConnections exceeded",e.remoteAddr),!1)}afterUpgradeInbound(){this.incomingPendingConnections--}getDialQueue(){let e={queued:"queued",running:"active",errored:"error",complete:"success"};return this.dialQueue.queue.queue.map(t=>({id:t.id,status:e[t.status],peerId:t.options.peerId,multiaddrs:[...t.options.multiaddrs].map(n=>H(n))}))}async isDialable(e,t={}){return this.dialQueue.isDialable(e,t)}};var NP=1e4,BP="1.0.0",OP="ping",MP="ipfs",Yb=32,UP=!0,Xh=class{protocol;components;log;heartbeatInterval;pingIntervalMs;abortController;timeout;abortConnectionOnPingFailure;constructor(e,t={}){this.components=e,this.protocol=`/${t.protocolPrefix??MP}/${OP}/${BP}`,this.log=e.logger.forComponent("libp2p:connection-monitor"),this.pingIntervalMs=t.pingInterval??NP,this.abortConnectionOnPingFailure=t.abortConnectionOnPingFailure??UP,this.timeout=new fn({...t.pingTimeout??{},metrics:e.metrics,metricName:"libp2p_connection_monitor_ping_time_milliseconds"})}[Symbol.toStringTag]="@libp2p/connection-monitor";[Se]=["@libp2p/connection-monitor"];start(){this.abortController=new AbortController,this.abortController.signal,this.heartbeatInterval=setInterval(()=>{this.components.connectionManager.getConnections().forEach(e=>{Promise.resolve().then(async()=>{let t=Date.now();try{let n=this.timeout.getTimeoutSignal({signal:this.abortController?.signal}),o=await e.newStream(this.protocol,{signal:n,runOnLimitedConnection:!0}),i=Bi(o);t=Date.now(),await Promise.all([i.write(qt(Yb),{signal:n}),i.read(Yb,{signal:n})]),e.rtt=Date.now()-t,await i.unwrap().close({signal:n})}catch(n){if(n.name!=="UnsupportedProtocolError")throw n;e.rtt=(Date.now()-t)/2}}).catch(t=>{this.log.error("error during heartbeat",t),this.abortConnectionOnPingFailure?(this.log.error("aborting connection due to ping failure"),e.abort(t)):this.log("connection ping failed, but not aborting due to abortConnectionOnPingFailure flag")})})},this.pingIntervalMs)}stop(){this.abortController?.abort(),this.heartbeatInterval!=null&&clearInterval(this.heartbeatInterval)}};var jh=class{routers;started;components;constructor(e,t){this.routers=t.routers??[],this.started=!1,this.components=e,this.findProviders=e.metrics?.traceFunction("libp2p.contentRouting.findProviders",this.findProviders.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,cid:n.toString()}),getAttributesFromYieldedValue:(n,o)=>({...o,providers:[...Array.isArray(o.providers)?o.providers:[],n.id.toString()]})})??this.findProviders,this.provide=e.metrics?.traceFunction("libp2p.contentRouting.provide",this.provide.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,cid:n.toString()})})??this.provide,this.cancelReprovide=e.metrics?.traceFunction("libp2p.contentRouting.cancelReprovide",this.cancelReprovide.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,cid:n.toString()})})??this.cancelReprovide,this.put=e.metrics?.traceFunction("libp2p.contentRouting.put",this.put.bind(this),{optionsIndex:2,getAttributesFromArgs:([n])=>({key:U(n,"base36")})})??this.put,this.get=e.metrics?.traceFunction("libp2p.contentRouting.get",this.get.bind(this),{optionsIndex:1,getAttributesFromArgs:([n])=>({key:U(n,"base36")})})??this.get}[Symbol.toStringTag]="@libp2p/content-routing";isStarted(){return this.started}async start(){this.started=!0}async stop(){this.started=!1}async*findProviders(e,t={}){if(this.routers.length===0)throw new xa("No content routers available");let n=this,o=new zt;for await(let i of Kt(...n.routers.map(s=>s.findProviders(e,t))))i!=null&&(i.multiaddrs.length>0&&await this.components.peerStore.merge(i.id,{multiaddrs:i.multiaddrs}),!o.has(i.id)&&(o.add(i.id),yield i))}async provide(e,t={}){if(this.routers.length===0)throw new xa("No content routers available");await Promise.all(this.routers.map(async n=>{await n.provide(e,t)}))}async cancelReprovide(e,t={}){if(this.routers.length===0)throw new xa("No content routers available");await Promise.all(this.routers.map(async n=>{await n.cancelReprovide(e,t)}))}async put(e,t,n){if(!this.isStarted())throw new Fr;await Promise.all(this.routers.map(async o=>{await o.put(e,t,n)}))}async get(e,t){if(!this.isStarted())throw new Fr;return Promise.any(this.routers.map(async n=>n.get(e,t)))}};var Zh=class{log;peerId;peerStore;routers;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-routing"),this.peerId=e.peerId,this.peerStore=e.peerStore,this.routers=t.routers??[],this.findPeer=e.metrics?.traceFunction("libp2p.peerRouting.findPeer",this.findPeer.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,peer:n.toString()})})??this.findPeer,this.getClosestPeers=e.metrics?.traceFunction("libp2p.peerRouting.getClosestPeers",this.getClosestPeers.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,key:U(n,"base36")}),getAttributesFromYieldedValue:(n,o)=>({...o,peers:[...Array.isArray(o.peers)?o.peers:[],n.id.toString()]})})??this.getClosestPeers}[Symbol.toStringTag]="@libp2p/peer-routing";async findPeer(e,t){if(this.routers.length===0)throw new al("No peer routers available");if(e.toString()===this.peerId.toString())throw new Bh("Should not try to find self");let n=this,o=Kt(...this.routers.map(i=>async function*(){try{yield await i.findPeer(e,t)}catch(s){n.log.error(s)}}()));for await(let i of o)if(i!=null)return i.multiaddrs.length>0&&await this.peerStore.merge(i.id,{multiaddrs:i.multiaddrs}),i;throw new Be}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new al("No peer routers available");let n=this,o=nr(1024);for await(let i of dn(async function*(){let s=Kt(...n.routers.map(a=>a.getClosestPeers(e,t)));for await(let a of s)yield async()=>{if(a.multiaddrs.length===0)try{a=await n.findPeer(a.id,{...t,useCache:!1})}catch(c){n.log.error("could not find peer multiaddrs",c);return}return a}}()))i!=null&&(i.multiaddrs.length>0&&await this.peerStore.merge(i.id,{multiaddrs:i.multiaddrs}),!o.has(i.id.toMultihash().bytes)&&(o.add(i.id.toMultihash().bytes),yield i))}};var Jh=class extends ge{peerRouting;log;walking;walkers;shutdownController;walkController;needNext;constructor(e){super(),this.log=e.logger.forComponent("libp2p:random-walk"),this.peerRouting=e.peerRouting,this.walkers=0,this.walking=!1,this.shutdownController=new AbortController,this.shutdownController.signal}[Symbol.toStringTag]="@libp2p/random-walk";start(){this.shutdownController=new AbortController,this.shutdownController.signal}stop(){this.shutdownController.abort()}async*walk(e){this.walking||this.startWalk(),this.walkers++;let t=ce([this.shutdownController.signal,e?.signal]);try{for(;;)this.needNext?.resolve(),this.needNext=J(),yield(await fr(this,"walk:peer",t,{errorEvent:"walk:error"})).detail}finally{t.clear(),this.walkers--,this.walkers===0&&(this.walkController?.abort(),this.walkController=void 0)}}startWalk(){this.walking=!0,this.walkController=new AbortController,this.walkController.signal;let e=ce([this.walkController.signal,this.shutdownController.signal]);let t=Date.now(),n=0;Promise.resolve().then(async()=>{for(this.log("start walk");this.walkers>0;)try{let o=qt(32),i=Date.now();for await(let s of this.peerRouting.getClosestPeers(o,{signal:e}))e.aborted&&this.log("aborting walk"),e.throwIfAborted(),this.log("found peer %p after %dms for %d walkers",s.id,Date.now()-i,this.walkers),n++,this.safeDispatchEvent("walk:peer",{detail:s}),this.walkers===1&&this.needNext!=null&&(this.log("wait for need next"),await st(this.needNext.promise,e)),i=Date.now();this.log("walk iteration for %b and %d walkers finished, found %d peers",o,this.walkers,n)}catch(o){this.log.error("randomwalk errored",o),this.safeDispatchEvent("walk:error",{detail:o})}this.log("no walkers left, ended walk")}).catch(o=>{this.log.error("randomwalk errored",o)}).finally(()=>{this.log("finished walk, found %d peers after %dms",n,Date.now()-t),this.walking=!1})}};var g4=32,y4=64,e0=class{log;topologies;handlers;components;constructor(e){this.log=e.logger.forComponent("libp2p:registrar"),this.topologies=new Map,this.handlers=new Map,this.components=e,this._onDisconnect=this._onDisconnect.bind(this),this._onPeerUpdate=this._onPeerUpdate.bind(this),this._onPeerIdentify=this._onPeerIdentify.bind(this),this.components.events.addEventListener("peer:disconnect",this._onDisconnect),this.components.events.addEventListener("peer:update",this._onPeerUpdate),this.components.events.addEventListener("peer:identify",this._onPeerIdentify)}[Symbol.toStringTag]="@libp2p/registrar";getProtocols(){return Array.from(new Set([...this.handlers.keys()])).sort()}getHandler(e){let t=this.handlers.get(e);if(t==null)throw new Oh(`No handler registered for protocol ${e}`);return t}getTopologies(e){let t=this.topologies.get(e);return t==null?[]:[...t.values()]}async handle(e,t,n){if(this.handlers.has(e)&&n?.force!==!0)throw new Mh(`Handler already registered for protocol ${e}`);let o=da.bind({ignoreUndefined:!0})({maxInboundStreams:g4,maxOutboundStreams:y4},n);this.handlers.set(e,{handler:t,options:o}),await this.components.peerStore.merge(this.components.peerId,{protocols:[e]})}async unhandle(e){(Array.isArray(e)?e:[e]).forEach(n=>{this.handlers.delete(n)}),await this.components.peerStore.patch(this.components.peerId,{protocols:this.getProtocols()})}async register(e,t){if(t==null)throw new _("invalid topology");let n=`${(Math.random()*1e9).toString(36)}${Date.now()}`,o=this.topologies.get(e);return o==null&&(o=new Map,this.topologies.set(e,o)),o.set(n,t),n}unregister(e){for(let[t,n]of this.topologies.entries())n.has(e)&&(n.delete(e),n.size===0&&this.topologies.delete(t))}_onDisconnect(e){let t=e.detail;this.components.peerStore.get(t).then(n=>{for(let o of n.protocols){let i=this.topologies.get(o);if(i!=null)for(let s of i.values())s.filter?.has(t)!==!1&&(s.filter?.remove(t),s.onDisconnect?.(t))}}).catch(n=>{n.name!=="NotFoundError"&&this.log.error("could not inform topologies of disconnecting peer %p",t,n)})}_onPeerUpdate(e){let{peer:t,previous:n}=e.detail,o=(n?.protocols??[]).filter(i=>!t.protocols.includes(i));for(let i of o){let s=this.topologies.get(i);if(s!=null)for(let a of s.values())a.filter?.has(t.id)!==!1&&(a.filter?.remove(t.id),a.onDisconnect?.(t.id))}}_onPeerIdentify(e){let t=e.detail.protocols,n=e.detail.connection,o=e.detail.peerId;for(let i of t){let s=this.topologies.get(i);if(s!=null)for(let a of s.values())n.limits!=null&&a.notifyOnLimitedConnection!==!0||a.filter?.has(o)!==!0&&(a.filter?.add(o),a.onConnect?.(o,n))}}};var t0=class{log;components;transports;listeners;faultTolerance;started;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:transports"),this.components=e,this.started=!1,this.transports=new Map,this.listeners=Ud({name:"libp2p_transport_manager_listeners",metrics:this.components.metrics}),this.faultTolerance=t.faultTolerance??ao.FATAL_ALL}[Symbol.toStringTag]="@libp2p/transport-manager";add(e){let t=e[Symbol.toStringTag];if(t==null)throw new _("Transport must have a valid tag");if(this.transports.has(t))throw new _(`There is already a transport with the tag ${t}`);this.log("adding transport %s",t),this.transports.set(t,e),this.listeners.has(t)||this.listeners.set(t,[])}isStarted(){return this.started}start(){this.started=!0}async afterStart(){let e=this.components.addressManager.getListenAddrs();await this.listen(e)}async stop(){let e=[];for(let[t,n]of this.listeners)for(this.log("closing listeners for %s",t);n.length>0;){let o=n.pop();o!=null&&e.push(o.close())}await Promise.all(e),this.log("all listeners closed");for(let t of this.listeners.keys())this.listeners.set(t,[]);this.started=!1}async dial(e,t){let n=this.dialTransportForMultiaddr(e);if(n==null)throw new Vh(`No transport available for address ${String(e)}`);return t?.onProgress?.(new W("transport-manager:selected-transport",n[Symbol.toStringTag])),n.dial(e,{...t,upgrader:this.components.upgrader})}getAddrs(){let e=[];for(let t of this.listeners.values())for(let n of t)e=[...e,...n.getAddrs()];return e}getTransports(){return Array.of(...this.transports.values())}getListeners(){return Array.of(...this.listeners.values()).flat()}dialTransportForMultiaddr(e){for(let t of this.transports.values())if(t.dialFilter([e]).length>0)return t}listenTransportForMultiaddr(e){for(let t of this.transports.values())if(t.listenFilter([e]).length>0)return t}async listen(e){if(!this.isStarted())throw new Fr("Not started");if(e==null||e.length===0){this.log("no addresses were provided for listening, this node is dial only");return}let t=[];for(let[n,o]of this.transports.entries()){let i=o.listenFilter(e),s=[];for(let l of i){this.log("creating listener for %s on %a",n,l);let u=o.createListener({upgrader:this.components.upgrader}),d=this.listeners.get(n)??[];d==null&&(d=[],this.listeners.set(n,d)),d.push(u),u.addEventListener("listening",()=>{this.components.events.safeDispatchEvent("transport:listening",{detail:u})}),u.addEventListener("close",()=>{let f=d.findIndex(h=>h===u);d.splice(f,1),this.components.events.safeDispatchEvent("transport:close",{detail:u})}),s.push(u.listen(l))}if(s.length===0){t.push(n);continue}if((await Promise.allSettled(s)).find(l=>l.status==="fulfilled")==null&&this.faultTolerance!==ao.NO_FATAL)throw new Qi(`Transport (${n}) could not listen on any available address`)}if(t.length===this.transports.size){let n=`no valid addresses were provided for transports [${t.join(", ")}]`;if(this.faultTolerance===ao.FATAL_ALL)throw new Qi(n);this.log(`libp2p in dial mode only: ${n}`)}}async remove(e){let t=this.listeners.get(e)??[];this.log.trace("removing transport %s",e);let n=[];for(this.log.trace("closing listeners for %s",e);t.length>0;){let o=t.pop();o!=null&&n.push(o.close())}await Promise.all(n),this.transports.delete(e),this.listeners.delete(e)}async removeAll(){let e=[];for(let t of this.transports.keys())e.push(this.remove(t));await Promise.all(e)}};var Tt="/multistream/1.0.0";var FP=N(`
39
- `);async function Zi(r,e,t){await r.write(e,t)}async function Xb(r,e,t){await r.writeV(e,t)}async function VP(r,e){let t=await r.read(e);if(t.byteLength===0||t.get(t.byteLength-1)!==FP[0])throw e.log.error("Invalid mss message - missing newline",t),new fe("Missing newline");return t.sublist(0,-1)}async function Xo(r,e){let t=await VP(r,e);return U(t.subarray())}async function ul(r,e,t){if(e=Array.isArray(e)?[...e]:[e],e.length===1&&t.negotiateFully===!1)return $P(r,e[0],t);let n=kn(r,{...t,maxDataLength:1024}),o=e.shift();if(o==null)throw new Error("At least one protocol must be specified");t.log.trace('select: write ["%s", "%s"]',Tt,o);let i=N(`${Tt}
40
- `),s=N(`${o}
41
- `);await Xb(n,[i,s],t),t.log.trace("select: reading multistream-select header");let a=await Xo(n,t);if(t.log.trace('select: read "%s"',a),a===Tt&&(t.log.trace("select: reading protocol response"),a=await Xo(n,t),t.log.trace('select: read "%s"',a)),a===o)return{stream:n.unwrap(),protocol:o};for(let c of e){t.log.trace('select: write "%s"',c),await Zi(n,N(`${c}
42
- `),t),t.log.trace("select: reading protocol response");let l=await Xo(n,t);if(t.log.trace('select: read "%s" for "%s"',l,c),l===c)return{stream:n.unwrap(),protocol:c}}throw new Ln("protocol selection failed")}function $P(r,e,t){let n=r.sink.bind(r),o=r.source,i=!1,s=!1,a=J(),c=!1,l=!1,u=J(),d=!1,f=!1,h=J(),p=kn({sink:n,source:o},{...t,maxDataLength:1024});r.sink=async x=>{let{sink:w}=p.unwrap();await w(async function*(){let I=!1;for await(let B of x){if(l&&await u.promise,c)yield B;else{l=!0,t.log.trace('optimistic: write ["%s", "%s", data(%d)] in sink',Tt,e,B.byteLength);let L=`${e}
43
- `;yield new ue(Uint8Array.from([19]),N(`${Tt}
44
- `),$e(L.length),N(L),B).subarray(),t.log.trace('optimistic: wrote ["%s", "%s", data(%d)] in sink',Tt,e,B.byteLength),c=!0,l=!1,u.resolve(),g().catch(P=>{t.log.error("could not finish optimistic protocol negotiation of %s",e,P)})}I=!0}I||await g()}())};async function g(){if(s){t.log.trace("optimistic: already negotiating %s stream",e),await a.promise;return}s=!0;try{c||(t.log.trace("optimistic: doing send protocol for %s stream",e),await m()),d||(t.log.trace("optimistic: doing read protocol for %s stream",e),await y())}finally{s=!1,i=!0,a.resolve()}}async function m(){if(l){await u.promise;return}l=!0;try{t.log.trace('optimistic: write ["%s", "%s", data] in source',Tt,e),await p.writeV([N(`${Tt}
45
- `),N(`${e}
46
- `)]),t.log.trace('optimistic: wrote ["%s", "%s", data] in source',Tt,e)}finally{c=!0,l=!1,u.resolve()}}async function y(){if(f){await h.promise;return}f=!0;try{t.log.trace("optimistic: reading multistream select header");let x=await Xo(p,t);if(t.log.trace('optimistic: read multistream select header "%s"',x),x===Tt&&(x=await Xo(p,t)),t.log.trace('optimistic: read protocol "%s", expecting "%s"',x,e),x!==e)throw new Ln("protocol selection failed")}finally{d=!0,f=!1,h.resolve()}}if(r.source=async function*(){await g(),t.log.trace('optimistic: reading data from "%s" stream',e),yield*p.unwrap().source}(),r.closeRead!=null){let x=r.closeRead.bind(r);r.closeRead=async w=>{i||await g().catch(I=>{t.log.error("could not negotiate protocol before close read",I)}),await x(w)}}if(r.closeWrite!=null){let x=r.closeWrite.bind(r);r.closeWrite=async w=>{i||await g().catch(I=>{t.log.error("could not negotiate protocol before close write",I)}),await x(w)}}if(r.close!=null){let x=r.close.bind(r);r.close=async w=>{let I=[];l&&I.push(u.promise),f&&I.push(h.promise),I.length>0?await st(Promise.all(I),w?.signal):(i=!0,s=!1,a.resolve()),await x(w)}}return{stream:r,protocol:e}}async function dl(r,e,t){e=Array.isArray(e)?e:[e],t.log.trace("handle: available protocols %s",e);let n=kn(r,{...t,maxDataLength:1024,maxLengthLength:2});for(;;){t.log.trace("handle: reading incoming string");let o=await Xo(n,t);if(t.log.trace('handle: read "%s"',o),o===Tt){t.log.trace('handle: respond with "%s" for "%s"',Tt,o),await Zi(n,N(`${Tt}
47
- `),t),t.log.trace('handle: responded with "%s" for "%s"',Tt,o);continue}if(e.includes(o))return t.log.trace('handle: respond with "%s" for "%s"',o,o),await Zi(n,N(`${o}
48
- `),t),t.log.trace('handle: responded with "%s" for "%s"',o,o),{stream:n.unwrap(),protocol:o};if(o==="ls"){let i=new ue(...e.map(s=>$r.single(N(`${s}
49
- `))),N(`
50
- `));t.log.trace('handle: respond with "%s" for %s',e,o),await Zi(n,i,t),t.log.trace('handle: responded with "%s" for %s',e,o);continue}t.log.trace('handle: respond with "na" for "%s"',o),await Zi(n,N(`na
51
- `),t),t.log('handle: responded with "na" for "%s"',o)}}var HP=500,b4=class{id;remoteAddr;remotePeer;direction;timeline;multiplexer;encryption;status;limits;log;tags;_newStream;_close;_abort;_getStreams;constructor(e){let{remoteAddr:t,remotePeer:n,newStream:o,close:i,abort:s,getStreams:a}=e;this.id=`${parseInt(String(Math.random()*1e9)).toString(36)}${Date.now()}`,this.remoteAddr=t,this.remotePeer=n,this.direction=e.direction,this.status="open",this.timeline=e.timeline,this.multiplexer=e.multiplexer,this.encryption=e.encryption,this.limits=e.limits,this.log=e.logger.forComponent(`libp2p:connection:${this.direction}:${this.id}`),this.remoteAddr.getPeerId()==null&&(this.remoteAddr=this.remoteAddr.encapsulate(`/p2p/${this.remotePeer}`)),this._newStream=o,this._close=i,this._abort=s,this._getStreams=a,this.tags=[]}[Symbol.toStringTag]="Connection";[C4]=!0;get streams(){return this._getStreams()}async newStream(e,t){if(this.status==="closing")throw new gl("the connection is being closed");if(this.status==="closed")throw new Ji("the connection is closed");if(Array.isArray(e)||(e=[e]),this.limits!=null&&t?.runOnLimitedConnection!==!0)throw new rs("Cannot open protocol stream on limited connection");let n=await this._newStream(e,t);return n.direction="outbound",n}async close(e={}){if(!(this.status==="closed"||this.status==="closing")){if(this.log("closing connection to %a",this.remoteAddr),this.status="closing",e.signal==null){let t=AbortSignal.timeout(HP);e={...e,signal:t}}try{this.log.trace("closing underlying transport"),await this._close(e),this.log.trace("updating timeline with close time"),this.status="closed",this.timeline.close=Date.now()}catch(t){this.log.error("error encountered during graceful close of connection to %a",this.remoteAddr,t),this.abort(t)}}}abort(e){this.status!=="closed"&&(this.log.error("aborting connection to %a due to error",this.remoteAddr,e),this.status="closing",this._abort(e),this.status="closed",this.timeline.close=Date.now())}};function Zb(r){return new b4(r)}function WP(r,e){try{let{options:t}=e.getHandler(r);return t.maxInboundStreams}catch(t){if(t.name!=="UnhandledProtocolError")throw t}return g4}function GP(r,e,t={}){try{let{options:n}=e.getHandler(r);if(n.maxOutboundStreams!=null)return n.maxOutboundStreams}catch(n){if(n.name!=="UnhandledProtocolError")throw n}return t.maxOutboundStreams??y4}function Jb(r,e,t){let n=0;return t.streams.forEach(o=>{o.direction===e&&o.protocol===r&&n++}),n}var r0=class{components;connectionEncrypters;streamMuxers;inboundUpgradeTimeout;outboundUpgradeTimeout;inboundStreamProtocolNegotiationTimeout;outboundStreamProtocolNegotiationTimeout;events;metrics;constructor(e,t){this.components=e,this.connectionEncrypters=new Map,t.connectionEncrypters.forEach(n=>{this.connectionEncrypters.set(n.protocol,n)}),this.streamMuxers=new Map,t.streamMuxers.forEach(n=>{this.streamMuxers.set(n.protocol,n)}),this.inboundUpgradeTimeout=t.inboundUpgradeTimeout??3e3,this.outboundUpgradeTimeout=t.outboundUpgradeTimeout??3e3,this.inboundStreamProtocolNegotiationTimeout=t.inboundStreamProtocolNegotiationTimeout??2e3,this.outboundStreamProtocolNegotiationTimeout=t.outboundStreamProtocolNegotiationTimeout??2e3,this.events=e.events,this.metrics={dials:e.metrics?.registerCounterGroup("libp2p_connection_manager_dials_total"),errors:e.metrics?.registerCounterGroup("libp2p_connection_manager_dial_errors_total")}}[Symbol.toStringTag]="@libp2p/upgrader";async shouldBlockConnection(e,...t){let n=this.components.connectionGater[e];if(n==null)return;if(await n.apply(this.components.connectionGater,t)===!0)throw new Uh(`The multiaddr connection is blocked by gater.${e}`)}async upgradeInbound(e,t={}){let n=!1;try{if(this.metrics.dials?.increment({inbound:!0}),n=await this.components.connectionManager.acceptIncomingConnection(e),!n)throw new Fh("Connection denied");await this.shouldBlockConnection("denyInboundConnection",e),await this._performUpgrade(e,"inbound",t)}catch(o){throw this.metrics.errors?.increment({inbound:!0}),o}finally{n&&this.components.connectionManager.afterUpgradeInbound()}}async upgradeOutbound(e,t={}){try{this.metrics.dials?.increment({outbound:!0});let n=e.remoteAddr.getPeerId(),o;n!=null&&(o=Ue(n),await this.shouldBlockConnection("denyOutboundConnection",o,e));let i="outbound";return t.initiator===!1&&(i="inbound"),await this._performUpgrade(e,i,t)}catch(n){throw this.metrics.errors?.increment({outbound:!0}),n}}async _performUpgrade(e,t,n){let o,i,s,a,c,l=AbortSignal.timeout(t==="inbound"?this.inboundUpgradeTimeout:this.outboundUpgradeTimeout),u=ce([l,n.signal]);n.signal=u,this.components.metrics?.trackMultiaddrConnection(e),e.log.trace("starting the %s connection upgrade",t);let d=e;if(n?.skipProtection!==!0){let f=this.components.connectionProtector;f!=null&&(e.log("protecting the %s connection",t),d=await f.protect(e,n))}try{if(o=d,n?.skipEncryption!==!0){n?.onProgress?.(new W(`upgrader:encrypt-${t}-connection`)),{conn:o,remotePeer:i,protocol:c}=await(t==="inbound"?this._encryptInbound(d,{...n,signal:u}):this._encryptOutbound(d,{...n,signal:u}));let f={...d,...o};await this.shouldBlockConnection(t==="inbound"?"denyInboundEncryptedConnection":"denyOutboundEncryptedConnection",i,f)}else{let f=e.remoteAddr.getPeerId();if(f==null)throw new lo(`${t} connection that skipped encryption must have a peer id`);let h=Ue(f);c="native",i=h}if(i.equals(this.components.peerId)){let f=new ts("Can not dial self");throw e.abort(f),f}if(s=o,n?.muxerFactory!=null)a=n.muxerFactory;else if(this.streamMuxers.size>0){n?.onProgress?.(new W(`upgrader:multiplex-${t}-connection`));let f=await(t==="inbound"?this._multiplexInbound({...d,...o},this.streamMuxers,n):this._multiplexOutbound({...d,...o},this.streamMuxers,n));a=f.muxerFactory,s=f.stream}}catch(f){throw e.log.error("failed to upgrade inbound connection %s %a - %e",t==="inbound"?"from":"to",e.remoteAddr,f),f}finally{u.clear()}return await this.shouldBlockConnection(t==="inbound"?"denyInboundUpgradedConnection":"denyOutboundUpgradedConnection",i,e),e.log("successfully upgraded %s connection",t),this._createConnection({cryptoProtocol:c,direction:t,maConn:e,upgradedConn:s,muxerFactory:a,remotePeer:i,limits:n?.limits})}_createConnection(e){let{cryptoProtocol:t,direction:n,maConn:o,upgradedConn:i,remotePeer:s,muxerFactory:a,limits:c}=e,l,u,d;a!=null&&(l=a.createStreamMuxer({direction:n,onIncomingStream:p=>{d!=null&&Promise.resolve().then(async()=>{let g=this.components.registrar.getProtocols(),m=AbortSignal.timeout(this.inboundStreamProtocolNegotiationTimeout);let{stream:y,protocol:x}=await dl(p,g,{signal:m,log:p.log,yieldBytes:!1});if(d==null)return;d.log("incoming stream opened on %s",x);let w=WP(x,this.components.registrar);if(Jb(x,"inbound",d)===w){let B=new xl(`Too many inbound protocol streams for protocol "${x}" - limit ${w}`);throw p.abort(B),B}p.source=y.source,p.sink=y.sink,p.protocol=x,y.closeWrite!=null&&(p.closeWrite=y.closeWrite),y.closeRead!=null&&(p.closeRead=y.closeRead),y.close!=null&&(p.close=y.close),await this.components.peerStore.merge(s,{protocols:[x]}),this.components.metrics?.trackProtocolStream(p,d),this._onStream({connection:d,stream:p,protocol:x})}).catch(async g=>{d.log.error("error handling incoming stream id %s - %e",p.id,g),p.timeline.close==null&&await p.close()})}}),u=async(p,g={})=>{if(l==null)throw new Yi("Connection is not multiplexed");d.log.trace("starting new stream for protocols %s",p);let m=await l.newStream();d.log.trace("started new stream %s for protocols %s",m.id,p);try{if(g.signal==null){m.log("no abort signal was passed while trying to negotiate protocols %s falling back to default timeout",p);let B=AbortSignal.timeout(this.outboundStreamProtocolNegotiationTimeout);g={...g,signal:B}}m.log.trace("selecting protocol from protocols %s",p);let{stream:y,protocol:x}=await ul(m,p,{...g,log:m.log,yieldBytes:!0});m.log.trace("selected protocol %s",x);let w=GP(x,this.components.registrar,g),I=Jb(x,"outbound",d);if(I>=w){let B=new fo(`Too many outbound protocol streams for protocol "${x}" - ${I}/${w}`);throw m.abort(B),B}return await this.components.peerStore.merge(s,{protocols:[x]}),m.source=y.source,m.sink=y.sink,m.protocol=x,y.closeWrite!=null&&(m.closeWrite=y.closeWrite),y.closeRead!=null&&(m.closeRead=y.closeRead),y.close!=null&&(m.close=y.close),this.components.metrics?.trackProtocolStream(m,d),m}catch(y){throw d.log.error("could not create new outbound stream on connection %s %a for protocols %s - %e",n==="inbound"?"from":"to",e.maConn.remoteAddr,p,y),m.timeline.close==null&&m.abort(y),y}},Promise.all([l.sink(i.source),i.sink(l.source)]).catch(p=>{d.log.error("error piping data through muxer - %e",p)}));let f=o.timeline;o.timeline=new Proxy(f,{set:(...p)=>(p[1]==="close"&&p[2]!=null&&f.close==null&&(async()=>{try{d.status==="open"&&await d.close()}catch(g){d.log.error("error closing connection after timeline close %e",g)}finally{this.events.safeDispatchEvent("connection:close",{detail:d})}})().catch(g=>{d.log.error("error thrown while dispatching connection:close event %e",g)}),Reflect.set(...p))}),o.timeline.upgraded=Date.now();let h=()=>{throw new Yi("Connection is not multiplexed")};return d=Zb({remoteAddr:o.remoteAddr,remotePeer:s,status:"open",direction:n,timeline:o.timeline,multiplexer:l?.protocol,encryption:t,limits:c,logger:this.components.logger,newStream:u??h,getStreams:()=>l?.streams??[],close:async p=>{await l?.close(p),await o.close(p)},abort:p=>{o.abort(p),l?.abort(p)}}),this.events.safeDispatchEvent("connection:open",{detail:d}),d.__maConnTimeline=f,d}_onStream(e){let{connection:t,stream:n,protocol:o}=e,{handler:i,options:s}=this.components.registrar.getHandler(o);if(t.limits!=null&&s.runOnLimitedConnection!==!0)throw new rs("Cannot open protocol stream on limited connection");i({connection:t,stream:n})}async _encryptInbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{let{stream:o,protocol:i}=await dl(e,n,{...t,log:e.log}),s=this.connectionEncrypters.get(i);if(s==null)throw new Xi(`no crypto module found for ${i}`);return e.log("encrypting inbound connection to %a using %s",e.remoteAddr,i),{...await s.secureInbound(o,t),protocol:i}}catch(o){throw e.log.error("encrypting inbound connection from %a failed",e.remoteAddr,o),new Xi(o.message)}}async _encryptOutbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{e.log.trace("selecting encrypter from %s",n);let{stream:o,protocol:i}=await ul(e,n,{...t,log:e.log,yieldBytes:!0}),s=this.connectionEncrypters.get(i);if(s==null)throw new Xi(`no crypto module found for ${i}`);return e.log("encrypting outbound connection to %a using %s",e.remoteAddr,i),{...await s.secureOutbound(o,t),protocol:i}}catch(o){throw e.log.error("encrypting outbound connection to %a failed",e.remoteAddr,o),new Xi(o.message)}}async _multiplexOutbound(e,t,n){let o=Array.from(t.keys());e.log("outbound selecting muxer %s",o);try{e.log.trace("selecting stream muxer from %s",o);let{stream:i,protocol:s}=await ul(e,o,{...n,log:e.log,yieldBytes:!0});e.log("selected %s as muxer protocol",s);let a=t.get(s);return{stream:i,muxerFactory:a}}catch(i){throw e.log.error("error multiplexing outbound connection",i),new Yi(String(i))}}async _multiplexInbound(e,t,n){let o=Array.from(t.keys());e.log("inbound handling muxers %s",o);try{let{stream:i,protocol:s}=await dl(e,o,{...n,log:e.log}),a=t.get(s);return{stream:i,muxerFactory:a}}catch(i){throw e.log.error("error multiplexing inbound connection",i),new Yi(String(i))}}};var n0=class extends ge{peerId;peerStore;contentRouting;peerRouting;metrics;services;logger;status;components;log;constructor(e){super(),this.status="stopped";let t=new ge,n=t.dispatchEvent.bind(t);t.dispatchEvent=l=>{let u=n(l),d=this.dispatchEvent(new CustomEvent(l.type,{detail:l.detail}));return u||d},this.peerId=e.peerId,this.logger=e.logger??Po(),this.log=this.logger.forComponent("libp2p"),this.services={};let o=e.nodeInfo?.name??sl,i=e.nodeInfo?.version??sl,s=this.components=Lb({peerId:e.peerId,privateKey:e.privateKey,nodeInfo:{name:o,version:i,userAgent:e.nodeInfo?.userAgent??xh(o,i)},logger:this.logger,events:t,datastore:e.datastore??new Ni,connectionGater:Bb(e.connectionGater),dns:e.dns});this.peerStore=this.configureComponent("peerStore",Tb(s,{addressFilter:this.components.connectionGater.filterMultiaddrForPeer,...e.peerStore})),e.metrics!=null&&(this.metrics=this.configureComponent("metrics",e.metrics(this.components))),s.events.addEventListener("peer:update",l=>{if(l.detail.previous==null){let u={id:l.detail.peer.id,multiaddrs:l.detail.peer.addresses.map(d=>d.multiaddr)};s.events.safeDispatchEvent("peer:discovery",{detail:u})}}),e.connectionProtector!=null&&this.configureComponent("connectionProtector",e.connectionProtector(s)),this.components.upgrader=new r0(this.components,{connectionEncrypters:(e.connectionEncrypters??[]).map((l,u)=>this.configureComponent(`connection-encryption-${u}`,l(this.components))),streamMuxers:(e.streamMuxers??[]).map((l,u)=>this.configureComponent(`stream-muxers-${u}`,l(this.components))),inboundUpgradeTimeout:e.connectionManager?.inboundUpgradeTimeout,outboundUpgradeTimeout:e.connectionManager?.outboundUpgradeTimeout}),this.configureComponent("transportManager",new t0(this.components,e.transportManager)),this.configureComponent("connectionManager",new Yh(this.components,e.connectionManager)),e.connectionMonitor?.enabled!==!1&&this.configureComponent("connectionMonitor",new Xh(this.components,e.connectionMonitor)),this.configureComponent("registrar",new e0(this.components)),this.configureComponent("addressManager",new Dh(this.components,e.addresses));let a=(e.peerRouters??[]).map((l,u)=>this.configureComponent(`peer-router-${u}`,l(this.components)));this.peerRouting=this.components.peerRouting=this.configureComponent("peerRouting",new Zh(this.components,{routers:a}));let c=(e.contentRouters??[]).map((l,u)=>this.configureComponent(`content-router-${u}`,l(this.components)));if(this.contentRouting=this.components.contentRouting=this.configureComponent("contentRouting",new jh(this.components,{routers:c})),this.configureComponent("randomWalk",new Jh(this.components)),(e.peerDiscovery??[]).forEach((l,u)=>{this.configureComponent(`peer-discovery-${u}`,l(this.components)).addEventListener("peer",f=>{this.#e(f)})}),e.transports?.forEach((l,u)=>{this.components.transportManager.add(this.configureComponent(`transport-${u}`,l(this.components)))}),e.services!=null)for(let l of Object.keys(e.services)){let u=e.services[l],d=u(this.components);if(d==null){this.log.error("service factory %s returned null or undefined instance",l);continue}this.services[l]=d,this.configureComponent(l,d),d[pn]!=null&&(this.log("registering service %s for content routing",l),c.push(d[pn])),d[mn]!=null&&(this.log("registering service %s for peer routing",l),a.push(d[mn])),d[jo]!=null&&(this.log("registering service %s for peer discovery",l),d[jo].addEventListener?.("peer",f=>{this.#e(f)}))}Nb(s)}configureComponent(e,t){return t==null&&this.log.error("component %s was null or undefined",e),this.components[e]=t,t}async start(){if(this.status==="stopped"){this.status="starting",this.log("libp2p is starting");try{await this.components.beforeStart?.(),await this.components.start(),await this.components.afterStart?.(),this.status="started",this.safeDispatchEvent("start",{detail:this}),this.log("libp2p has started")}catch(e){throw this.log.error("An error occurred starting libp2p",e),this.status="started",await this.stop(),e}}}async stop(){this.status==="started"&&(this.log("libp2p is stopping"),this.status="stopping",await this.components.beforeStop?.(),await this.components.stop(),await this.components.afterStop?.(),this.status="stopped",this.safeDispatchEvent("stop",{detail:this}),this.log("libp2p has stopped"))}getConnections(e){return this.components.connectionManager.getConnections(e)}getDialQueue(){return this.components.connectionManager.getDialQueue()}getPeers(){let e=new zt;for(let t of this.components.connectionManager.getConnections())e.add(t.remotePeer);return Array.from(e)}async dial(e,t={}){return this.components.connectionManager.openConnection(e,{priority:75,...t})}async dialProtocol(e,t,n={}){if(t==null)throw new _("no protocols were provided to open a stream");if(t=Array.isArray(t)?t:[t],t.length===0)throw new _("no protocols were provided to open a stream");return(await this.dial(e,n)).newStream(t,n)}getMultiaddrs(){return this.components.addressManager.getAddresses()}getProtocols(){return this.components.registrar.getProtocols()}async hangUp(e,t={}){Mo(e)&&(e=Ue(e.getPeerId()??"")),await this.components.connectionManager.closeConnections(e,t)}async getPublicKey(e,t={}){if(this.log("getPublicKey %p",e),e.publicKey!=null)return e.publicKey;try{let s=await this.peerStore.get(e);if(s.id.publicKey!=null)return s.id.publicKey}catch(s){if(s.name!=="NotFoundError")throw s}let n=Pe([N("/pk/"),e.toMultihash().bytes]),o=await this.contentRouting.get(n,t),i=tt(o);return await this.peerStore.patch(e,{publicKey:i}),i}async handle(e,t,n){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async o=>{await this.components.registrar.handle(o,t,n)}))}async unhandle(e){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async t=>{await this.components.registrar.unhandle(t)}))}async register(e,t){return this.components.registrar.register(e,t)}unregister(e){this.components.registrar.unregister(e)}async isDialable(e,t={}){return this.components.connectionManager.isDialable(e,t)}#e(e){let{detail:t}=e;if(t.id.toString()===this.peerId.toString()){this.log.error("peer discovery mechanism discovered self");return}this.components.peerStore.merge(t.id,{multiaddrs:t.multiaddrs}).catch(n=>{this.log.error(n)})}};async function ex(r={}){r.privateKey??=await Qu("Ed25519");let e=new n0({...await vb(r),peerId:Gg(r.privateKey)});return r.start!==!1&&await e.start(),e}async function tx(r){let e=r.libp2p??{};e.privateKey==null&&r.datastore!=null&&(e.privateKey=await Z3(r.datastore,r.keychain));let t=vh(e);return t.datastore=t.datastore??r.datastore,await ex({...t,...e,start:!1})}async function QP(r={}){let e=r.datastore??new Ni,t=r.blockstore??new Nc,n;YP(r.libp2p)?n=r.libp2p:n=await tx({...r,libp2p:{dns:r.dns,...r.libp2p,start:void 0},datastore:e});let o=new v1({...r,libp2p:n,datastore:e,blockstore:t,blockBrokers:r.blockBrokers??[wm(),Wp()],routers:r.routers??[Rm(n),km()],metrics:n.metrics});return r.start!==!1&&await o.start(),o}function YP(r){return r==null?!1:["dial","dialProtocol","hangUp","handle","unhandle","getMultiaddrs","getProtocols"].every(t=>typeof r[t]=="function")}return mx(XP);})();
55
+ a=max-message-size:${Ou}
56
+ a=candidate:1467250027 1 UDP 1467250027 ${t} ${n} typ host
57
+ a=end-of-candidates
58
+ `}}function Ew(r,e){if(r.sdp===void 0)throw new D("Can't munge a missing SDP");let t=r.sdp.includes(`\r
59
+ `)?`\r
60
+ `:`
61
+ `;return r.sdp=r.sdp.replace(/\na=ice-ufrag:[^\n]*\n/,`
62
+ a=ice-ufrag:`+e+t).replace(/\na=ice-pwd:[^\n]*\n/,`
63
+ a=ice-pwd:`+e+t),r}var Sw=V("libp2p-webrtc-noise:");function HP(r,e,t){let n=r.trim().toLowerCase().replaceAll(":",""),o=V(n,"hex"),i=Nr(yt.code,o),s=xw.decode(vw(e)),a=Sw.byteLength+i.bytes.byteLength+s.byteLength;return t==="server"?st([Sw,s,i.bytes],a):st([Sw,i.bytes,s],a)}var cH=dh?"iceconnectionstatechange":"connectionstatechange";async function qP(r,e,t){let n=r.createDataChannel("",{negotiated:!0,id:0});try{if(t.role==="client"){t.log.trace("client creating local offer");let d=await r.createOffer();t.log.trace("client created local offer %s",d.sdp);let h=Ew(d,e);t.log.trace("client setting local offer %s",h.sdp),await r.setLocalDescription(h);let m=$P(t.remoteAddr,e);t.log.trace("client setting server description %s",m.sdp),await r.setRemoteDescription(m)}else{let d=KP(t.remoteAddr,e);t.log.trace("server setting client %s %s",d.type,d.sdp),await r.setRemoteDescription(d),t.log.trace("server creating local answer");let h=await r.createAnswer();t.log.trace("server created local answer");let m=Ew(h,e);t.log.trace("server setting local description %s",h.sdp),await r.setLocalDescription(m)}if(n.readyState!=="open"&&(t.log.trace("%s wait for handshake channel to open, starting status %s",t.role,n.readyState),await tr(n,"open",t.signal)),t.log.trace("%s handshake channel opened",t.role),t.role==="server"){let d=r.remoteFingerprint()?.value??"";t.remoteAddr=t.remoteAddr.encapsulate(FP(d))}let o=UP(r.localDescription?.sdp);if(o==null)throw new Ws("Could not get fingerprint from local description sdp");t.log.trace("%s performing noise handshake",t.role);let i=HP(o,t.remoteAddr,t.role),s=n0({prologueBytes:i})(t),a=Lu({channel:n,direction:"outbound",handshake:!0,logger:t.logger,...t.dataChannel??{}}),c=new Ic(t,{peerConnection:r,remoteAddr:t.remoteAddr,timeline:{open:Date.now()},metrics:t.events});r.addEventListener(cH,()=>{switch(r.connectionState){case"failed":case"disconnected":case"closed":c.close().catch(d=>{t.log.error("error closing connection",d),c.abort(d)});break;default:break}}),t.events?.increment({peer_connection:!0});let l=new js(t,{peerConnection:r,metrics:t.events,dataChannelOptions:t.dataChannel});if(t.role==="client")return t.log.trace("%s secure inbound",t.role),await s.secureInbound(a,{remotePeer:t.remotePeerId,signal:t.signal,skipStreamMuxerNegotiation:!0}),t.log.trace("%s upgrade outbound",t.role),await t.upgrader.upgradeOutbound(c,{skipProtection:!0,skipEncryption:!0,muxerFactory:l,signal:t.signal});t.log.trace("%s secure outbound",t.role);let u=await s.secureOutbound(a,{remotePeer:t.remotePeerId,signal:t.signal,skipStreamMuxerNegotiation:!0});c.remoteAddr=c.remoteAddr.encapsulate(`/p2p/${u.remotePeer}`),t.log.trace("%s upgrade inbound",t.role),await t.upgrader.upgradeInbound(c,{skipProtection:!0,skipEncryption:!0,muxerFactory:l,signal:t.signal})}catch(o){throw n.close(),o}}async function jP(r,e,t,n){n==null&&(n=await RTCPeerConnection.generateCertificate({name:"ECDSA",namedCurve:"P-256"}));let o=typeof t=="function"?await t():t;return new RTCPeerConnection({...o??{},certificates:[n]})}async function WP(r){let e=await y1(r),t=await crypto.subtle.exportKey("pkcs8",e.privateKey);return["-----BEGIN PRIVATE KEY-----",...M(new Uint8Array(t),"base64pad").split(/(.{64})/).filter(Boolean),"-----END PRIVATE KEY-----"].join(`
64
+ `)}var P3=class{log;metrics;components;init;certificate;privateKey;emitter;renewCertificateTask;constructor(e,t={}){if(this.log=e.logger.forComponent("libp2p:webrtc-direct"),this.components=e,this.init=t,this.emitter=new Le,t.certificateLifespan!=null&&t.certificateRenewalThreshold!=null&&t.certificateRenewalThreshold>=t.certificateLifespan)throw new D("Certificate renewal threshold must be less than certificate lifespan");e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_webrtc-direct_dialer_events_total",{label:"event",help:"Total count of WebRTC-direct dial events by type"})})}[ns]=!0;[Symbol.toStringTag]="@libp2p/webrtc-direct";[Xe]=["@libp2p/transport"];async start(){this.certificate=await this.getCertificate()}async stop(){this.renewCertificateTask!=null&&clearTimeout(this.renewCertificateTask),this.certificate=void 0}async dial(e,t){this.log("dial %a",e),t.signal.throwIfAborted();let n,o=e.getPeerId();o!=null&&(n=bt(o));let i=tC(),s=await jP("client",i,typeof this.init.rtcConfiguration=="function"?await this.init.rtcConfiguration():this.init.rtcConfiguration??{});try{return await qP(s,i,{role:"client",log:this.log,logger:this.components.logger,metrics:this.components.metrics,events:this.metrics?.dialerEvents,signal:t.signal,remoteAddr:e,dataChannel:this.init.dataChannel,upgrader:t.upgrader,peerId:this.components.peerId,remotePeerId:n,privateKey:this.components.privateKey})}catch(a){throw s.close(),a}}createListener(e){if(this.certificate==null)throw new En;return new k3(this.components,{...this.init,...e,certificate:this.certificate,emitter:this.emitter})}listenFilter(e){return e.filter(Ef.exactMatch)}dialFilter(e){return this.listenFilter(e)}async getCertificate(e){if(lH(this.init.certificate))return this.log("using provided TLS certificate"),this.init.certificate;let t=await this.loadOrCreatePrivateKey(),{pem:n,certhash:o}=await this.loadOrCreateCertificate(t,e);return{privateKey:await WP(t),pem:n,certhash:o}}async loadOrCreatePrivateKey(){if(this.privateKey!=null)return this.privateKey;let e=this.init.certificateKeychainName??WT,t=this.getKeychain();try{if(t==null)throw this.log("no keychain configured - not checking for stored private key"),new ze;this.log.trace("checking for stored private key"),this.privateKey=await t.exportKey(e)}catch(n){if(n.name!=="NotFoundError")throw n;this.log.trace("generating private key"),this.privateKey=await $l("ECDSA","P-256"),t!=null?(this.log.trace("storing private key"),await t.importKey(e,this.privateKey)):this.log("no keychain configured - not storing private key")}return this.privateKey}async loadOrCreateCertificate(e,t){if(this.certificate!=null&&t!==!0)return this.certificate;let n,o=new ct(this.init.certificateDatastoreKey??jT),i=await y1(e);try{if(t===!0)throw this.log.trace("forcing renewal of TLS certificate"),new ze;this.log.trace("checking for stored TLS certificate"),n=await this.loadCertificate(o,i)}catch(a){if(a.name!=="NotFoundError")throw a;this.log.trace("generating new TLS certificate"),n=await this.createCertificate(o,i)}let s=n.notAfter.getTime()-(this.init.certificateRenewalThreshold??k7)-Date.now();return s<0&&(s=100),this.log("will renew TLS certificate after %d ms",s),this.renewCertificateTask=setTimeout(()=>{this.log("renewing TLS certificate"),this.getCertificate(!0).then(a=>{this.certificate=a,this.emitter.safeDispatchEvent("certificate:renew",{detail:a})}).catch(a=>{this.log.error("could not renew certificate - %e",a)})},s),{pem:n.toString("pem"),certhash:va.encode((await yt.digest(new Uint8Array(n.rawData))).bytes)}}async loadCertificate(e,t){let n=await this.components.datastore.get(e),o=new yd(n),i=o.notAfter.getTime()-(this.init.certificateRenewalThreshold??k7);if(Date.now()>i)throw this.log("stored TLS certificate has expired"),new ze;this.log("loaded certificate, expires in %d ms",i);let s=await o.publicKey.export(crypto),a=await crypto.subtle.exportKey("raw",s),c=await crypto.subtle.exportKey("raw",t.publicKey);if(!ge(new Uint8Array(a,0,a.byteLength),new Uint8Array(c,0,c.byteLength)))throw this.log("stored TLS certificate public key did not match public key from private key"),new ze;return this.log("loaded certificate, expiry time is %o",i),o}async createCertificate(e,t){let n=new Date,o=new Date(Date.now()+(this.init.certificateLifespan??GT));n.setMilliseconds(0),o.setMilliseconds(0);let i=await C3.createSelfSigned({serialNumber:(BigInt(Math.random().toString().replace(".",""))*100000n).toString(16),name:"CN=example.com, C=US, L=CA, O=example, ST=CA",notBefore:n,notAfter:o,keys:t,extensions:[new pd(!1,void 0,!0)]},crypto);return this.getKeychain()!=null?(this.log.trace("storing TLS certificate"),await this.components.datastore.put(e,V(i.toString("pem")))):this.log("no keychain is configured so not storing TLS certificate since the private key will not be reused"),i}getKeychain(){try{return this.components.keychain}catch{}}};function lH(r){return r==null?!1:typeof r.privateKey=="string"&&typeof r.pem=="string"&&typeof r.certhash=="string"}function GP(r){return e=>new P3(e,r)}function zP(r){return e=>new _g(e,r)}var XP=async r=>{if(r.readyState>=2)throw new Error("socket closed");r.readyState!==1&&await new Promise((e,t)=>{function n(){r.removeEventListener("open",o),r.removeEventListener("error",i)}function o(){n(),e()}function i(s){n(),t(s.error??new Error(`connect ECONNREFUSED ${r.url}`))}r.addEventListener("open",o),r.addEventListener("error",i)})};var YP=(r,e)=>(e=e??{},e.closeOnEnd=e.closeOnEnd!==!1,async n=>{for await(let o of n){try{await XP(r)}catch(i){if(i.message==="socket closed")break;throw i}if(r.readyState===r.CLOSING||r.readyState===r.CLOSED)break;r.send(o)}e.closeOnEnd!=null&&r.readyState<=1&&await new Promise((o,i)=>{r.addEventListener("close",s=>{if(s.wasClean||s.code===1006)o();else{let a=Object.assign(new Error("ws error"),{event:s});i(a)}}),setTimeout(()=>{r.close()})})});var eR=Vt(ZP(),1);function JP(r){return r instanceof ArrayBuffer||r?.constructor?.name==="ArrayBuffer"&&typeof r?.byteLength=="number"}var tR=r=>{r.binaryType="arraybuffer";let e=async()=>{await new Promise((i,s)=>{if(n){i();return}if(o!=null){s(o);return}let a=u=>{r.removeEventListener("open",c),r.removeEventListener("error",l),u()},c=()=>{a(i)},l=u=>{a(()=>{s(u.error??new Error(`connect ECONNREFUSED ${r.url}`))})};r.addEventListener("open",c),r.addEventListener("error",l)})},t=async function*(){let i=new eR.EventIterator(({push:s,stop:a,fail:c})=>{let l=d=>{let h=null;typeof d.data=="string"&&(h=V(d.data)),JP(d.data)&&(h=new Uint8Array(d.data)),d.data instanceof Uint8Array&&(h=d.data),h!=null&&s(h)},u=d=>{c(d.error??new Error("Socket error"))};return r.addEventListener("message",l),r.addEventListener("error",u),r.addEventListener("close",a),()=>{r.removeEventListener("message",l),r.removeEventListener("error",u),r.removeEventListener("close",a)}},{highWaterMark:1/0});await e();for await(let s of i)yield JP(s)?new Uint8Array(s):s}(),n=r.readyState===1,o;return r.addEventListener("open",()=>{n=!0,o=null}),r.addEventListener("close",()=>{n=!1,o=null}),r.addEventListener("error",i=>{n||(o=i.error??new Error(`connect ECONNREFUSED ${r.url}`))}),Object.assign(t,{connected:e})};var rR=(r,e)=>{e=e??{};let t=tR(r),n=e.remoteAddress,o=e.remotePort;if(r.url!=null)try{let s=new URL(r.url);n=s.hostname,o=parseInt(s.port,10)}catch{}if(n==null||o==null)throw new Error("Remote connection did not have address and/or port");return{sink:YP(r,e),source:t,connected:async()=>{await t.connected()},close:async()=>{(r.readyState===r.CONNECTING||r.readyState===r.OPEN)&&await new Promise(s=>{r.addEventListener("close",()=>{s()}),r.close()})},destroy:()=>{r.terminate!=null?r.terminate():r.close()},remoteAddress:n,remotePort:o,socket:r}};var nR=WebSocket;var dH={"http:":"ws:","https:":"wss:"},oR="ws:",iR=(r,e)=>{if(r.startsWith("//")&&(r=`${e?.protocol??oR}${r}`),r.startsWith("/")&&e!=null){let n=e.protocol??oR,o=e.host,i=e.port!=null&&o?.endsWith(`:${e.port}`)!==!0?`:${e.port}`:"";r=`${n}//${o}${i}${r}`}let t=new URL(r);for(let[n,o]of Object.entries(dH))t.protocol===n&&(t.protocol=o);return t};function sR(r,e){let t=typeof window>"u"?void 0:window.location;e=e??{};let n=iR(r,t),o=new nR(n.toString(),e.websocket);return rR(o,e)}function aR(r){return r.filter(e=>Qa.exactMatch(e)||Oi.exactMatch(e))}function cR(){throw new Error("WebSocket Servers can not be created in the browser!")}function lR(r,e,t){let n=t.logger.forComponent("libp2p:websockets:maconn"),o=t.metrics,i=t.metricPrefix??"",s={log:n,async sink(a){try{await r.sink(async function*(){for await(let c of a)c instanceof Uint8Array?yield c:yield c.subarray()}())}catch(c){c.type!=="aborted"&&n.error(c)}},source:r.source,remoteAddr:e,timeline:{open:Date.now()},async close(a={}){let c=Date.now();if(a.signal==null){let u=AbortSignal.timeout(500);a={...a,signal:u}}let l=()=>{let{host:u,port:d}=s.remoteAddr.toOptions();n("timeout closing stream to %s:%s after %dms, destroying it manually",u,d,Date.now()-c),this.abort(new cr("Socket close timeout"))};a.signal?.addEventListener("abort",l);try{await r.close()}catch(u){n.error("error closing WebSocket gracefully",u),this.abort(u)}finally{a.signal?.removeEventListener("abort",l),s.timeline.close=Date.now()}},abort(a){let{host:c,port:l}=s.remoteAddr.toOptions();n("timeout closing stream to %s:%s due to error",c,l,a),r.destroy(),s.timeline.close=Date.now(),o?.increment({[`${i}error`]:!0})}};return r.socket.addEventListener("close",()=>{o?.increment({[`${i}close`]:!0}),s.timeline.close==null&&(s.timeline.close=Date.now())},{once:!0}),s}var Iw=class{log;init;logger;metrics;components;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:websockets"),this.logger=e.logger,this.components=e,this.init=t,e.metrics!=null&&(this.metrics={dialerEvents:e.metrics.registerCounterGroup("libp2p_websockets_dialer_events_total",{label:"event",help:"Total count of WebSockets dialer events by type"})})}[ns]=!0;[Symbol.toStringTag]="@libp2p/websockets";[Xe]=["@libp2p/transport"];async dial(e,t){this.log("dialing %s",e),t=t??{};let n=await this._connect(e,t),o=lR(n,e,{logger:this.logger,metrics:this.metrics?.dialerEvents});this.log("new outbound connection %s",o.remoteAddr);let i=await t.upgrader.upgradeOutbound(o,t);return this.log("outbound connection %s upgraded",o.remoteAddr),i}async _connect(e,t){t?.signal?.throwIfAborted();let n=e.toOptions();this.log("dialing %s:%s",n.host,n.port);let o=de(),i=sR(Sm(e),this.init);i.socket.addEventListener("error",()=>{let s=new hl(`Could not connect to ${e.toString()}`);this.log.error("connection error:",s),this.metrics?.dialerEvents.increment({error:!0}),o.reject(s)});try{t.onProgress?.(new ae("websockets:open-connection")),await dt(Promise.race([i.connected(),o.promise]),t.signal)}catch(s){throw t.signal?.aborted&&this.metrics?.dialerEvents.increment({abort:!0}),i.close().catch(a=>{this.log.error("error closing raw socket",a)}),s}return this.log("connected %s",e),this.metrics?.dialerEvents.increment({connect:!0}),i}createListener(e){return cR({logger:this.logger,events:this.components.events,metrics:this.components.metrics},{...this.init,...e})}listenFilter(e){return e=Array.isArray(e)?e:[e],this.init?.filter!=null?this.init?.filter(e):aR(e)}dialFilter(e){return this.listenFilter(e)}};function uR(r={}){return e=>new Iw(e,r)}var Tw=Vt(Pm(),1);function dR(r,e){let t=e.map((n,o)=>({record:ni(n),index:o}));return t.sort((n,o)=>{let i=n.record.sequence,s=o.record.sequence;if(i>s)return-1;if(i<s)return 1;if(n.record.validityType===on.ValidityType.EOL&&o.record.validityType===on.ValidityType.EOL){let a=Tw.default.fromString(n.record.validity).toDate(),c=Tw.default.fromString(o.record.validity).toDate();if(a.getTime()>c.getTime())return-1;if(a.getTime()<c.getTime())return 1}return 0}),t[0].index}var D3="2.8.5",O3="js-libp2p";function L3(r,e){return`${r??O3}/${e??D3} browser/${globalThis.navigator.userAgent}`}var hR="5.3.0-313e2c1",pR="helia";var mR={list:["/dnsaddr/bootstrap.libp2p.io/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN","/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb","/dnsaddr/bootstrap.libp2p.io/p2p/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt","/dnsaddr/va1.bootstrap.libp2p.io/p2p/12D3KooWKnDdG3iXw9eTFijk3EWSunZcFi54Zka4wmtqtt6rPxc8","/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ"]};function B3(r={}){let e=`${pR}/${hR} ${L3()}`;return{privateKey:r.privateKey,dns:r.dns,nodeInfo:{userAgent:e},addresses:{listen:["/p2p-circuit","/webrtc"]},transports:[j8(),zP(),GP(),uR()],connectionEncrypters:[n0()],streamMuxers:[VA(),RT()],peerDiscovery:[i_(mR)],services:{autoNAT:zA(),dcutr:I_(),delegatedRouting:()=>zS("https://delegated-ipfs.dev",z5()),dht:yI({clientMode:!0,validators:{ipns:Mm},selectors:{ipns:dR}}),identify:O_(),identifyPush:L_(),keychain:sg(r.keychain),ping:LT()}}}async function Cw(r,e={}){let t=e.selfKey??"self",n=sg(e)({datastore:r,logger:Es()}),o;return await r.has(new ct(`/pkcs8/${t}`))?o=await n.exportKey(t):(o=await $l(e.keyType??"Ed25519"),await n.importKey(t,o)),o}var hH=32,{code:pH}=Ie("dnsaddr"),kw=class extends Error{constructor(e="Max recursive depth reached"){super(e),this.name="RecursionLimitError"}},al=async function(e,t={}){let n=t.maxRecursiveDepth??hH;if(n===0)throw new kw("Max recursive depth reached");let[,o]=e.stringTuples().find(([l])=>l===pH)??[],s=await(t?.dns??N1()).query(`_dnsaddr.${o}`,{signal:t?.signal,types:[Tn.TXT]}),a=e.getPeerId(),c=[];for(let l of s.Answer){let u=l.data.replace(/["']/g,"").trim().split("=")[1];if(u==null||a!=null&&!u.includes(a))continue;let d=oe(u);if(u.startsWith("/dnsaddr")){let h=await d.resolve({...t,maxRecursiveDepth:n-1});c.push(...h.map(m=>m.toString()))}else c.push(d.toString())}return c};var mH={addresses:{listen:[],announce:[],noAnnounce:[],announceFilter:r=>r},connectionManager:{resolvers:{dnsaddr:al}},transportManager:{faultTolerance:ga.FATAL_ALL}};async function gR(r){let e=_u(mH,r);if(e.connectionProtector===null&&globalThis.process?.env?.LIBP2P_FORCE_PNET!=null)throw new D("Private network is enforced, but no protector was provided");return e}var ts;(function(r){let e;(function(o){let i;o.codec=()=>(i==null&&(i=_e((s,a,c={})=>{c.lengthDelimited!==!1&&a.fork(),s.key!=null&&s.key!==""&&(a.uint32(10),a.string(s.key)),s.value!=null&&s.value.byteLength>0&&(a.uint32(18),a.bytes(s.value)),c.lengthDelimited!==!1&&a.ldelim()},(s,a,c={})=>{let l={key:"",value:ke(0)},u=a==null?s.len:s.pos+a;for(;s.pos<u;){let d=s.uint32();switch(d>>>3){case 1:{l.key=s.string();break}case 2:{l.value=s.bytes();break}default:{s.skipType(d&7);break}}}return l})),i),o.encode=s=>Ae(s,o.codec()),o.decode=(s,a)=>Se(s,o.codec(),a)})(e=r.Peer$metadataEntry||(r.Peer$metadataEntry={}));let t;(function(o){let i;o.codec=()=>(i==null&&(i=_e((s,a,c={})=>{c.lengthDelimited!==!1&&a.fork(),s.key!=null&&s.key!==""&&(a.uint32(10),a.string(s.key)),s.value!=null&&(a.uint32(18),U3.codec().encode(s.value,a)),c.lengthDelimited!==!1&&a.ldelim()},(s,a,c={})=>{let l={key:""},u=a==null?s.len:s.pos+a;for(;s.pos<u;){let d=s.uint32();switch(d>>>3){case 1:{l.key=s.string();break}case 2:{l.value=U3.codec().decode(s,s.uint32(),{limits:c.limits?.value});break}default:{s.skipType(d&7);break}}}return l})),i),o.encode=s=>Ae(s,o.codec()),o.decode=(s,a)=>Se(s,o.codec(),a)})(t=r.Peer$tagsEntry||(r.Peer$tagsEntry={}));let n;r.codec=()=>(n==null&&(n=_e((o,i,s={})=>{if(s.lengthDelimited!==!1&&i.fork(),o.addresses!=null)for(let a of o.addresses)i.uint32(10),M3.codec().encode(a,i);if(o.protocols!=null)for(let a of o.protocols)i.uint32(18),i.string(a);if(o.publicKey!=null&&(i.uint32(34),i.bytes(o.publicKey)),o.peerRecordEnvelope!=null&&(i.uint32(42),i.bytes(o.peerRecordEnvelope)),o.metadata!=null&&o.metadata.size!==0)for(let[a,c]of o.metadata.entries())i.uint32(50),r.Peer$metadataEntry.codec().encode({key:a,value:c},i);if(o.tags!=null&&o.tags.size!==0)for(let[a,c]of o.tags.entries())i.uint32(58),r.Peer$tagsEntry.codec().encode({key:a,value:c},i);o.updated!=null&&(i.uint32(64),i.uint64Number(o.updated)),s.lengthDelimited!==!1&&i.ldelim()},(o,i,s={})=>{let a={addresses:[],protocols:[],metadata:new Map,tags:new Map},c=i==null?o.len:o.pos+i;for(;o.pos<c;){let l=o.uint32();switch(l>>>3){case 1:{if(s.limits?.addresses!=null&&a.addresses.length===s.limits.addresses)throw new at('Decode error - map field "addresses" had too many elements');a.addresses.push(M3.codec().decode(o,o.uint32(),{limits:s.limits?.addresses$}));break}case 2:{if(s.limits?.protocols!=null&&a.protocols.length===s.limits.protocols)throw new at('Decode error - map field "protocols" had too many elements');a.protocols.push(o.string());break}case 4:{a.publicKey=o.bytes();break}case 5:{a.peerRecordEnvelope=o.bytes();break}case 6:{if(s.limits?.metadata!=null&&a.metadata.size===s.limits.metadata)throw new kd('Decode error - map field "metadata" had too many elements');let u=r.Peer$metadataEntry.codec().decode(o,o.uint32());a.metadata.set(u.key,u.value);break}case 7:{if(s.limits?.tags!=null&&a.tags.size===s.limits.tags)throw new kd('Decode error - map field "tags" had too many elements');let u=r.Peer$tagsEntry.codec().decode(o,o.uint32(),{limits:{value:s.limits?.tags$value}});a.tags.set(u.key,u.value);break}case 8:{a.updated=o.uint64Number();break}default:{o.skipType(l&7);break}}}return a})),n),r.encode=o=>Ae(o,r.codec()),r.decode=(o,i)=>Se(o,r.codec(),i)})(ts||(ts={}));var M3;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.multiaddr!=null&&t.multiaddr.byteLength>0&&(n.uint32(10),n.bytes(t.multiaddr)),t.isCertified!=null&&(n.uint32(16),n.bool(t.isCertified)),t.observed!=null&&(n.uint32(24),n.uint64Number(t.observed)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={multiaddr:ke(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.multiaddr=t.bytes();break}case 2:{i.isCertified=t.bool();break}case 3:{i.observed=t.uint64Number();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(M3||(M3={}));var U3;(function(r){let e;r.codec=()=>(e==null&&(e=_e((t,n,o={})=>{o.lengthDelimited!==!1&&n.fork(),t.value!=null&&t.value!==0&&(n.uint32(8),n.uint32(t.value)),t.expiry!=null&&(n.uint32(16),n.uint64(t.expiry)),o.lengthDelimited!==!1&&n.ldelim()},(t,n,o={})=>{let i={value:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{i.value=t.uint32();break}case 2:{i.expiry=t.uint64();break}default:{t.skipType(a&7);break}}}return i})),e),r.encode=t=>Ae(t,r.codec()),r.decode=(t,n)=>Se(t,r.codec(),n)})(U3||(U3={}));function gH(r,e){if(r.publicKey!=null||e.publicKey==null)return r;let t;if(r.type==="RSA"){let o=He.decode(`z${r}`);t=Ye(o)}let n=$t(e.publicKey,t);return ei(n)}function F3(r,e,t){let n=ts.decode(e);return $3(r,n,t)}function $3(r,e,t){let n=new Map,o=BigInt(Date.now());for(let[i,s]of e.tags.entries())s.expiry!=null&&s.expiry<o||n.set(i,s);return{...e,id:gH(r,e),addresses:e.addresses.filter(({observed:i})=>i!=null&&i>Date.now()-t).map(({multiaddr:i,isCertified:s})=>({multiaddr:oe(i),isCertified:s??!1})),metadata:e.metadata,peerRecordEnvelope:e.peerRecordEnvelope??void 0,tags:n}}function yR(r,e){return yH(r.addresses,e.addresses)&&wH(r.protocols,e.protocols)&&bH(r.publicKey,e.publicKey)&&xH(r.peerRecordEnvelope,e.peerRecordEnvelope)&&vH(r.metadata,e.metadata)&&EH(r.tags,e.tags)}function yH(r,e){return bR(r,e,(t,n)=>!(t.isCertified!==n.isCertified||!ge(t.multiaddr,n.multiaddr)))}function wH(r,e){return bR(r,e,(t,n)=>t===n)}function bH(r,e){return wR(r,e)}function xH(r,e){return wR(r,e)}function vH(r,e){return xR(r,e,(t,n)=>ge(t,n))}function EH(r,e){return xR(r,e,(t,n)=>t.value===n.value&&t.expiry===n.expiry)}function wR(r,e){return r==null&&e==null?!0:r!=null&&e!=null?ge(r,e):!1}function bR(r,e,t){if(r.length!==e.length)return!1;for(let n=0;n<r.length;n++)if(!t(r[n],e[n]))return!1;return!0}function xR(r,e,t){if(r.size!==e.size)return!1;for(let[n,o]of r.entries()){let i=e.get(n);if(i==null||!t(o,i))return!1}return!0}var Pw="/peers/";function pp(r){if(!Tp(r)||r.type==null)throw new D("Invalid PeerId");let e=r.toCID().toString();return new ct(`${Pw}${e}`)}async function vR(r,e,t,n){let o=new Map;for(let i of t){if(i==null)continue;if(i.multiaddr instanceof Uint8Array&&(i.multiaddr=oe(i.multiaddr)),!ks(i.multiaddr))throw new D("Multiaddr was invalid");if(!await e(r,i.multiaddr))continue;let s=i.isCertified??!1,a=i.multiaddr.toString(),c=o.get(a);c!=null?i.isCertified=c.isCertified||s:o.set(a,{multiaddr:i.multiaddr,isCertified:s})}return[...o.values()].sort((i,s)=>i.multiaddr.toString().localeCompare(s.multiaddr.toString())).map(({isCertified:i,multiaddr:s})=>({isCertified:i,multiaddr:s.bytes}))}async function V3(r,e,t,n){if(e==null)throw new D("Invalid PeerData");if(e.publicKey!=null&&r.publicKey!=null&&!e.publicKey.equals(r.publicKey))throw new D("publicKey bytes do not match peer id publicKey bytes");let o=n.existingPeer?.peer;if(o!=null&&!r.equals(o.id))throw new D("peer id did not match existing peer id");let i=o?.addresses??[],s=new Set(o?.protocols??[]),a=o?.metadata??new Map,c=o?.tags??new Map,l=o?.peerRecordEnvelope;if(t==="patch"){if((e.multiaddrs!=null||e.addresses!=null)&&(i=[],e.multiaddrs!=null&&i.push(...e.multiaddrs.map(h=>({isCertified:!1,multiaddr:h}))),e.addresses!=null&&i.push(...e.addresses)),e.protocols!=null&&(s=new Set(e.protocols)),e.metadata!=null){let h=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);a=K3(h,{validate:ER})}if(e.tags!=null){let h=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags);c=K3(h,{validate:SR,map:AR})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}if(t==="merge"){if(e.multiaddrs!=null&&i.push(...e.multiaddrs.map(h=>({isCertified:!1,multiaddr:h}))),e.addresses!=null&&i.push(...e.addresses),e.protocols!=null&&(s=new Set([...s,...e.protocols])),e.metadata!=null){let h=e.metadata instanceof Map?[...e.metadata.entries()]:Object.entries(e.metadata);for(let[m,g]of h)g==null?a.delete(m):a.set(m,g);a=K3([...a.entries()],{validate:ER})}if(e.tags!=null){let h=e.tags instanceof Map?[...e.tags.entries()]:Object.entries(e.tags),m=new Map(c);for(let[g,w]of h)w==null?m.delete(g):m.set(g,w);c=K3([...m.entries()],{validate:SR,map:AR})}e.peerRecordEnvelope!=null&&(l=e.peerRecordEnvelope)}let u;o?.id.publicKey!=null?u=nr(o.id.publicKey):e.publicKey!=null?u=nr(e.publicKey):r.publicKey!=null&&(u=nr(r.publicKey));let d={addresses:await vR(r,n.addressFilter??(async()=>!0),i,n.existingPeer?.peerPB.addresses),protocols:[...s.values()].sort((h,m)=>h.localeCompare(m)),metadata:a,tags:c,publicKey:u,peerRecordEnvelope:l};return d.addresses.forEach(h=>{h.observed=n.existingPeer?.peerPB.addresses?.find(m=>ge(m.multiaddr,m.multiaddr))?.observed??Date.now()}),r.type!=="RSA"&&delete d.publicKey,d}function K3(r,e){let t=new Map;for(let[n,o]of r)o!=null&&e.validate(n,o);for(let[n,o]of r.sort(([i],[s])=>i.localeCompare(s)))o!=null&&t.set(n,e.map?.(n,o)??o);return t}function ER(r,e){if(typeof r!="string")throw new D("Metadata key must be a string");if(!(e instanceof Uint8Array))throw new D("Metadata value must be a Uint8Array")}function SR(r,e){if(typeof r!="string")throw new D("Tag name must be a string");if(e.value!=null){if(parseInt(`${e.value}`,10)!==e.value)throw new D("Tag value must be an integer");if(e.value<0||e.value>100)throw new D("Tag value must be between 0-100")}if(e.ttl!=null){if(parseInt(`${e.ttl}`,10)!==e.ttl)throw new D("Tag ttl must be an integer");if(e.ttl<0)throw new D("Tag ttl must be between greater than 0")}}function AR(r,e){let t;return e.expiry!=null&&(t=e.expiry),e.ttl!=null&&(t=BigInt(Date.now()+Number(e.ttl))),{value:e.value??0,expiry:t}}function _R(r){let e=r.toString().split("/")[2],t=le.parse(e,Xt);return Eo(t)}function Rw(r,e,t){let n=_R(r);return F3(n,e,t)}function SH(r,e){return{prefix:Pw,filters:(r.filters??[]).map(t=>({key:n,value:o})=>t(Rw(n,o,e))),orders:(r.orders??[]).map(t=>(n,o)=>t(Rw(n.key,n.value,e),Rw(o.key,o.value,e)))}}var H3=class{peerId;datastore;lock;addressFilter;log;maxAddressAge;maxPeerAge;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-store"),this.peerId=e.peerId,this.datastore=e.datastore,this.addressFilter=t.addressFilter,this.lock=ja({name:"peer-store",singleProcess:!0}),this.maxAddressAge=t.maxAddressAge??36e5,this.maxPeerAge=t.maxPeerAge??216e5}async has(e){try{return await this.load(e),!0}catch(t){if(t.name!=="NotFoundError")throw t}return!1}async delete(e){this.peerId.equals(e)||await this.datastore.delete(pp(e))}async load(e){let t=pp(e),n=await this.datastore.get(t),o=ts.decode(n);if(this.#r(e,o))throw await this.datastore.delete(t),new ze;return $3(e,o,this.peerId.equals(e)?1/0:this.maxAddressAge)}async save(e,t){let n=await this.#e(e),o=await V3(e,t,"patch",{addressFilter:this.addressFilter});return this.#t(e,o,n)}async patch(e,t){let n=await this.#e(e),o=await V3(e,t,"patch",{addressFilter:this.addressFilter,existingPeer:n});return this.#t(e,o,n)}async merge(e,t){let n=await this.#e(e),o=await V3(e,t,"merge",{addressFilter:this.addressFilter,existingPeer:n});return this.#t(e,o,n)}async*all(e){for await(let{key:t,value:n}of this.datastore.query(SH(e??{},this.maxAddressAge))){let o=_R(t);if(o.equals(this.peerId))continue;let i=ts.decode(n);if(this.#r(o,i)){await this.datastore.delete(t);continue}yield $3(o,i,this.peerId.equals(o)?1/0:this.maxAddressAge)}}async#e(e){try{let t=pp(e),n=await this.datastore.get(t),o=ts.decode(n);if(this.#r(e,o))throw await this.datastore.delete(t),new ze;return{peerPB:o,peer:F3(e,n,this.maxAddressAge)}}catch(t){t.name!=="NotFoundError"&&this.log.error("invalid peer data found in peer store - %e",t)}}async#t(e,t,n){t.updated=Date.now();let o=ts.encode(t);return await this.datastore.put(pp(e),o),{peer:F3(e,o,this.maxAddressAge),previous:n?.peer,updated:n==null||!yR(t,n.peerPB)}}#r(e,t){if(t.updated==null)return!0;if(this.peerId.equals(e))return!1;let n=t.updated<Date.now()-this.maxPeerAge,o=Date.now()-this.maxAddressAge,i=t.addresses.filter(s=>s.observed!=null&&s.observed>o);return n&&i.length===0}};var Nw=class{store;events;peerId;log;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-store"),this.events=e.events,this.peerId=e.peerId,this.store=new H3(e,t)}[Symbol.toStringTag]="@libp2p/peer-store";async forEach(e,t){this.log.trace("forEach await read lock");let n=await this.store.lock.readLock();this.log.trace("forEach got read lock");try{for await(let o of this.store.all(t))e(o)}finally{this.log.trace("forEach release read lock"),n()}}async all(e){this.log.trace("all await read lock");let t=await this.store.lock.readLock();this.log.trace("all got read lock");try{return await tc(this.store.all(e))}finally{this.log.trace("all release read lock"),t()}}async delete(e){this.log.trace("delete await write lock");let t=await this.store.lock.writeLock();this.log.trace("delete got write lock");try{await this.store.delete(e)}finally{this.log.trace("delete release write lock"),t()}}async has(e){this.log.trace("has await read lock");let t=await this.store.lock.readLock();this.log.trace("has got read lock");try{return await this.store.has(e)}finally{this.log.trace("has release read lock"),t()}}async get(e){this.log.trace("get await read lock");let t=await this.store.lock.readLock();this.log.trace("get got read lock");try{return await this.store.load(e)}finally{this.log.trace("get release read lock"),t()}}async save(e,t){this.log.trace("save await write lock");let n=await this.store.lock.writeLock();this.log.trace("save got write lock");try{let o=await this.store.save(e,t);return this.#e(e,o),o.peer}finally{this.log.trace("save release write lock"),n()}}async patch(e,t){this.log.trace("patch await write lock");let n=await this.store.lock.writeLock();this.log.trace("patch got write lock");try{let o=await this.store.patch(e,t);return this.#e(e,o),o.peer}finally{this.log.trace("patch release write lock"),n()}}async merge(e,t){this.log.trace("merge await write lock");let n=await this.store.lock.writeLock();this.log.trace("merge got write lock");try{let o=await this.store.merge(e,t);return this.#e(e,o),o.peer}finally{this.log.trace("merge release write lock"),n()}}async consumePeerRecord(e,t){let n=await Dn.openAndCertify(e,zr.DOMAIN),o=Eo(n.publicKey.toCID());if(t?.equals(o)===!1)return this.log("envelope peer id was not the expected peer id - expected: %p received: %p",t,o),!1;let i=zr.createFromProtobuf(n.payload),s;try{s=await this.get(o)}catch(a){if(a.name!=="NotFoundError")throw a}if(s?.peerRecordEnvelope!=null){let a=await Dn.createFromProtobuf(s.peerRecordEnvelope),c=zr.createFromProtobuf(a.payload);if(c.seqNumber>=i.seqNumber)return this.log("sequence number was lower or equal to existing sequence number - stored: %d received: %d",c.seqNumber,i.seqNumber),!1}return await this.patch(i.peerId,{peerRecordEnvelope:e,addresses:i.multiaddrs.map(a=>({isCertified:!0,multiaddr:a}))}),!0}#e(e,t){t.updated&&(this.peerId.equals(e)?this.events.safeDispatchEvent("self:peer:update",{detail:t}):this.events.safeDispatchEvent("peer:update",{detail:t}))}};function IR(r,e={}){return new Nw(r,e)}function TR(r,e){let t,n=function(){let o=function(){t=void 0,r()};clearTimeout(t),t=setTimeout(o,e)};return n.start=()=>{},n.stop=()=>{clearTimeout(t)},n}var CR=864e13;var AH=448,Dw=449,_H=53,IH=54,TH=55,CH=56,q3=class{log;mappings;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:dns-mappings"),this.mappings=new Map}has(e){let t=this.findHost(e);for(let n of this.mappings.values())if(n.domain===t)return!0;return!1}add(e,t){t.forEach(n=>{this.log("add DNS mapping %s to %s",n,e);let o=Gr(n)===!0;this.mappings.set(n,{domain:e,verified:o,expires:o?CR-Date.now():0,lastVerified:o?CR-Date.now():void 0})})}remove(e){let t=this.findHost(e),n=!1;for(let[o,i]of this.mappings.entries())i.domain===t&&(this.log("removing %s to %s DNS mapping %e",o,i.domain,new Error("where")),this.mappings.delete(o),n=n||i.verified);return n}getAll(e){let t=[];for(let n=0;n<e.length;n++){let i=e[n].multiaddr.stringTuples(),s=i[0][1];if(s!=null)for(let[a,c]of this.mappings.entries()){if(s!==a)continue;this.maybeAddSNITuple(i,c.domain)&&(e.splice(n,1),n--,t.push({multiaddr:oe(`/${i.map(u=>[Ie(u[0]).name,u[1]].join("/")).join("/")}`),verified:c.verified,type:"dns-mapping",expires:c.expires,lastVerified:c.lastVerified}))}}return t}maybeAddSNITuple(e,t){for(let n=0;n<e.length;n++)if(e[n][0]===AH&&e[n+1]?.[0]!==Dw)return e.splice(n+1,0,[Dw,t]),!0;return!1}confirm(e,t){let n=this.findHost(e),o=!1;for(let[i,s]of this.mappings.entries())s.domain===n&&(this.log("marking %s to %s DNS mapping as verified",i,s.domain),o=s.verified,s.verified=!0,s.expires=Date.now()+t,s.lastVerified=Date.now());return o}unconfirm(e,t){let n=this.findHost(e),o=!1;for(let[i,s]of this.mappings.entries())s.domain===n&&(this.log("removing verification of %s to %s DNS mapping",i,s.domain),o=o||s.verified,s.verified=!1,s.expires=Date.now()+t);return o}findHost(e){for(let t of e.stringTuples())if(t[0]===Dw||t[0]===_H||t[0]===IH||t[0]===TH||t[0]===CH)return t[1]}};var Ow=4,Lw=41,Bw=6,kH=273,j3=class{log;mappings;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:ip-mappings"),this.mappings=new Map}has(e){let t=e.stringTuples();for(let n of this.mappings.values())for(let o of n)if(o.externalIp===t[0][1])return!0;return!1}add(e,t,n,o=t,i="tcp"){let s=`${e}-${t}-${i}`,a=this.mappings.get(s)??[],c={internalIp:e,internalPort:t,externalIp:n,externalPort:o,externalFamily:ko(n)?4:6,protocol:i,verified:!1,expires:0};a.push(c),this.mappings.set(s,a)}remove(e){let t=e.stringTuples(),n=t[0][1]??"",o=t[1][0]===Bw?"tcp":"udp",i=parseInt(t[1][1]??"0"),s=!1;for(let[a,c]of this.mappings.entries()){for(let l=0;l<c.length;l++){let u=c[l];u.externalIp===n&&u.externalPort===i&&u.protocol===o&&(this.log("removing %s:%s to %s:%s %s IP mapping",u.externalIp,u.externalPort,n,i,o),s=s||u.verified,c.splice(l,1),l--)}c.length===0&&this.mappings.delete(a)}return s}getAll(e){let t=[];for(let{multiaddr:n}of e){let o=n.stringTuples(),i;if((o[0][0]===Ow||o[0][0]===Lw)&&o[1][0]===Bw?i=`${o[0][1]}-${o[1][1]}-tcp`:(o[0][0]===Ow||o[0][0]===Lw)&&o[1][0]===kH&&(i=`${o[0][1]}-${o[1][1]}-udp`),i==null)continue;let s=this.mappings.get(i);if(s!=null)for(let a of s)o[0][0]=a.externalFamily===4?Ow:Lw,o[0][1]=a.externalIp,o[1][1]=`${a.externalPort}`,t.push({multiaddr:oe(`/${o.map(c=>[Ie(c[0]).name,c[1]].join("/")).join("/")}`),verified:a.verified,type:"ip-mapping",expires:a.expires,lastVerified:a.lastVerified})}return t}confirm(e,t){let o=e.stringTuples()[0][1],i=!1;for(let s of this.mappings.values())for(let a of s)a.externalIp===o&&(this.log("marking %s to %s IP mapping as verified",a.internalIp,a.externalIp),i=a.verified,a.verified=!0,a.expires=Date.now()+t,a.lastVerified=Date.now());return i}unconfirm(e,t){let n=e.stringTuples(),o=n[0][1]??"",i=n[1][0]===Bw?"tcp":"udp",s=parseInt(n[1][1]??"0"),a=!1;for(let c of this.mappings.values())for(let l=0;l<c.length;l++){let u=c[l];u.externalIp===o&&u.externalPort===s&&u.protocol===i&&(this.log("removing verification of %s:%s to %s:%s %s IP mapping",u.externalIp,u.externalPort,o,s,i),a=a||u.verified,u.verified=!1,u.expires=Date.now()+t)}return a}};function kR(r){try{let[[e,t]]=r.stringTuples();if(t==null)return!1;if(e===4)return t.startsWith("169.254.");if(e===41)return t.toLowerCase().startsWith("fe80")}catch{}return!1}var PH={maxObservedAddresses:10},W3=class{log;addresses;maxObservedAddresses;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:observed-addresses"),this.addresses=new Map,this.maxObservedAddresses=t.maxObservedAddresses??PH.maxObservedAddresses}has(e){return this.addresses.has(e.toString())}removePrefixed(e){for(let t of this.addresses.keys())t.toString().startsWith(e)&&this.addresses.delete(t)}add(e){this.addresses.size!==this.maxObservedAddresses&&(Yn(e)||kR(e)||(this.log("adding observed address %a",e),this.addresses.set(e.toString(),{verified:!1,expires:0})))}getAll(){return Array.from(this.addresses).map(([e,t])=>({multiaddr:oe(e),verified:t.verified,type:"observed",expires:t.expires,lastVerified:t.lastVerified}))}remove(e){let t=this.addresses.get(e.toString())?.verified??!1;return this.log("removing observed address %a",e),this.addresses.delete(e.toString()),t}confirm(e,t){let n=e.toString(),o=this.addresses.get(n)??{verified:!1,expires:Date.now()+t,lastVerified:Date.now()},i=o.verified;return o.verified=!0,o.expires=Date.now()+t,o.lastVerified=Date.now(),this.log("marking observed address %a as verified",n),this.addresses.set(n,o),i}};var RH=[4,41,53,54,55,56];function Mw(r){try{let[[e]]=r.stringTuples();return RH.includes(e)}catch{}return!1}var NH={maxObservedAddresses:10},G3=class{log;addresses;maxObservedAddresses;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:address-manager:observed-addresses"),this.addresses=new Map,this.maxObservedAddresses=t.maxObservedAddresses??NH.maxObservedAddresses}get(e,t){if(Yn(e))return{multiaddr:e,verified:!0,type:"transport",expires:Date.now()+t,lastVerified:Date.now()};let n=this.toKey(e),o=this.addresses.get(n);return o==null&&(o={verified:!Mw(e),expires:0},this.addresses.set(n,o)),{multiaddr:e,verified:o.verified,type:"transport",expires:o.expires,lastVerified:o.lastVerified}}has(e){let t=this.toKey(e);return this.addresses.has(t)}remove(e){let t=this.toKey(e),n=this.addresses.get(t)?.verified??!1;return this.log("removing observed address %a",e),this.addresses.delete(t),n}confirm(e,t){let n=this.toKey(e),o=this.addresses.get(n)??{verified:!1,expires:0,lastVerified:0},i=o.verified;return o.verified=!0,o.expires=Date.now()+t,o.lastVerified=Date.now(),this.addresses.set(n,o),i}unconfirm(e,t){let n=this.toKey(e),o=this.addresses.get(n)??{verified:!1,expires:0},i=o.verified;return o.verified=!1,o.expires=Date.now()+t,this.addresses.set(n,o),i}toKey(e){if(Mw(e)){let t=e.toOptions();return`${t.host}-${t.port}-${t.transport}`}return e.toString()}};var PR=6e4,RR={maxObservedAddresses:10,addressVerificationTTL:PR*10,addressVerificationRetry:PR*5},DH=r=>r;function Uw(r,e){let t=r.getPeerId();return t!=null&&bt(t).equals(e)&&(r=r.decapsulate(oe(`/p2p/${e.toString()}`))),r}var z3=class{log;components;listen;announce;appendAnnounce;announceFilter;observed;dnsMappings;ipMappings;transportAddresses;observedAddressFilter;addressVerificationTTL;addressVerificationRetry;constructor(e,t={}){let{listen:n=[],announce:o=[],appendAnnounce:i=[]}=t;this.components=e,this.log=e.logger.forComponent("libp2p:address-manager"),this.listen=n.map(s=>s.toString()),this.announce=new Set(o.map(s=>s.toString())),this.appendAnnounce=new Set(i.map(s=>s.toString())),this.observed=new W3(e,t),this.dnsMappings=new q3(e,t),this.ipMappings=new j3(e,t),this.transportAddresses=new G3(e,t),this.announceFilter=t.announceFilter??DH,this.observedAddressFilter=tn(1024),this.addressVerificationTTL=t.addressVerificationTTL??RR.addressVerificationTTL,this.addressVerificationRetry=t.addressVerificationRetry??RR.addressVerificationRetry,this._updatePeerStoreAddresses=TR(this._updatePeerStoreAddresses.bind(this),1e3),e.events.addEventListener("transport:listening",()=>{this._updatePeerStoreAddresses()}),e.events.addEventListener("transport:close",()=>{this._updatePeerStoreAddresses()})}[Symbol.toStringTag]="@libp2p/address-manager";_updatePeerStoreAddresses(){let e=this.getAddresses().map(t=>t.getPeerId()===this.components.peerId.toString()?t.decapsulate(`/p2p/${this.components.peerId.toString()}`):t);this.components.peerStore.patch(this.components.peerId,{multiaddrs:e}).catch(t=>{this.log.error("error updating addresses",t)})}getListenAddrs(){return Array.from(this.listen).map(e=>oe(e))}getAnnounceAddrs(){return Array.from(this.announce).map(e=>oe(e))}getAppendAnnounceAddrs(){return Array.from(this.appendAnnounce).map(e=>oe(e))}getObservedAddrs(){return this.observed.getAll().map(e=>e.multiaddr)}addObservedAddr(e){let t=e.stringTuples(),n=`${t[0][1]}:${t[1][1]}`;this.observedAddressFilter.has(n)||(this.observedAddressFilter.add(n),e=Uw(e,this.components.peerId),!this.ipMappings.has(e)&&(this.dnsMappings.has(e)||this.observed.add(e)))}confirmObservedAddr(e,t){e=Uw(e,this.components.peerId);let n=!0;(t?.type==="transport"||this.transportAddresses.has(e))&&!this.transportAddresses.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1),(t?.type==="dns-mapping"||this.dnsMappings.has(e))&&!this.dnsMappings.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1),(t?.type==="ip-mapping"||this.ipMappings.has(e))&&!this.ipMappings.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1),(t?.type==="observed"||this.observed.has(e))&&(this.maybeUpgradeToIPMapping(e)?(this.ipMappings.confirm(e,t?.ttl??this.addressVerificationTTL),n=!1):!this.observed.confirm(e,t?.ttl??this.addressVerificationTTL)&&n&&(n=!1)),n||this._updatePeerStoreAddresses()}removeObservedAddr(e,t){e=Uw(e,this.components.peerId);let n=!1;this.observed.has(e)&&!this.observed.remove(e)&&n&&(n=!1),this.transportAddresses.has(e)&&!this.transportAddresses.unconfirm(e,t?.ttl??this.addressVerificationRetry)&&n&&(n=!1),this.dnsMappings.has(e)&&!this.dnsMappings.unconfirm(e,t?.ttl??this.addressVerificationRetry)&&n&&(n=!1),this.ipMappings.has(e)&&!this.ipMappings.unconfirm(e,t?.ttl??this.addressVerificationRetry)&&n&&(n=!1),n&&this._updatePeerStoreAddresses()}getAddresses(){let e=new Set,t=this.getAddressesWithMetadata().filter(n=>{if(!n.verified)return!1;let o=n.multiaddr.toString();return e.has(o)?!1:(e.add(o),!0)}).map(n=>n.multiaddr);return this.announceFilter(t.map(n=>{let o=oe(n);return o.protos().pop()?.path===!0||o.getPeerId()===this.components.peerId.toString()?o:o.encapsulate(`/p2p/${this.components.peerId.toString()}`)}))}getAddressesWithMetadata(){let e=this.getAnnounceAddrs();if(e.length>0)return this.components.transportManager.getListeners().forEach(o=>{o.updateAnnounceAddrs(e)}),e.map(o=>({multiaddr:o,verified:!0,type:"announce",expires:Date.now()+this.addressVerificationTTL,lastVerified:Date.now()}));let t=[];t=t.concat(this.components.transportManager.getAddrs().map(o=>this.transportAddresses.get(o,this.addressVerificationTTL)));let n=this.getAppendAnnounceAddrs();return n.length>0&&(this.components.transportManager.getListeners().forEach(o=>{o.updateAnnounceAddrs(n)}),t=t.concat(n.map(o=>({multiaddr:o,verified:!0,type:"announce",expires:Date.now()+this.addressVerificationTTL,lastVerified:Date.now()})))),t=t.concat(this.observed.getAll()),t=t.concat(this.ipMappings.getAll(t)),t=t.concat(this.dnsMappings.getAll(t)),t}addDNSMapping(e,t){this.dnsMappings.add(e,t)}removeDNSMapping(e){this.dnsMappings.remove(oe(`/dns/${e}`))&&this._updatePeerStoreAddresses()}addPublicAddressMapping(e,t,n,o=t,i="tcp"){this.ipMappings.add(e,t,n,o,i),this.observed.removePrefixed(`/ip${ko(n)?4:6}/${n}/${i}/${o}`)}removePublicAddressMapping(e,t,n,o=t,i="tcp"){this.ipMappings.remove(oe(`/ip${ko(n)?4:6}/${n}/${i}/${o}`))&&this._updatePeerStoreAddresses()}maybeUpgradeToIPMapping(e){if(this.ipMappings.has(e))return!1;let t=e.toOptions();if(t.family===6||t.host==="127.0.0.1"||Gr(t.host)===!0)return!1;let n=this.components.transportManager.getListeners(),o=[i=>Oi.exactMatch(i)||Qa.exactMatch(i),i=>Ya.exactMatch(i),i=>pS.exactMatch(i)];for(let i of o){if(!i(e))continue;let s=n.filter(l=>l.getAddrs().filter(u=>u.toOptions().family===4&&i(u)).length>0);if(s.length!==1)continue;let a=s[0].getAddrs().filter(l=>l.toOptions().host!=="127.0.0.1").pop();if(a==null)continue;let c=a.toOptions();return this.observed.remove(e),this.ipMappings.add(c.host,c.port,t.host,t.port,t.transport),!0}return!1}};var NR;(function(r){r.NOT_STARTED_YET="The libp2p node is not started yet",r.NOT_FOUND="Not found"})(NR||(NR={}));var X3=class extends Error{constructor(e="Missing service"){super(e),this.name="MissingServiceError"}},Y3=class extends Error{constructor(e="Unmet service dependencies"){super(e),this.name="UnmetServiceDependenciesError"}},wd=class extends Error{constructor(e="No content routers available"){super(e),this.name="NoContentRoutersError"}},mp=class extends Error{constructor(e="No peer routers available"){super(e),this.name="NoPeerRoutersError"}},Q3=class extends Error{constructor(e="Should not try to find self"){super(e),this.name="QueriedForSelfError"}},Z3=class extends Error{constructor(e="Unhandled protocol error"){super(e),this.name="UnhandledProtocolError"}},J3=class extends Error{constructor(e="Duplicate protocol handler error"){super(e),this.name="DuplicateProtocolHandlerError"}},gp=class extends Error{constructor(e="Dial denied error"){super(e),this.name="DialDeniedError"}},ey=class extends Error{constructor(e="No transport was configured to listen on this address"){super(e),this.name="UnsupportedListenAddressError"}},ty=class extends Error{constructor(e="Configured listen addresses could not be listened on"){super(e),this.name="UnsupportedListenAddressesError"}},ry=class extends Error{constructor(e="No valid addresses"){super(e),this.name="NoValidAddressesError"}},ny=class extends Error{constructor(e="Connection intercepted"){super(e),this.name="ConnectionInterceptedError"}},oy=class extends Error{constructor(e="Connection denied"){super(e),this.name="ConnectionDeniedError"}},cl=class extends Error{constructor(e="Stream is not multiplexed"){super(e),this.name="MuxerUnavailableError"}},ll=class extends Error{constructor(e="Encryption failed"){super(e),this.name="EncryptionFailedError"}},iy=class extends Error{constructor(e="Transport unavailable"){super(e),this.name="TransportUnavailableError"}};var Fw=class{components={};_started=!1;constructor(e={}){this.components={};for(let[t,n]of Object.entries(e))this.components[t]=n;this.components.logger==null&&(this.components.logger=Es())}isStarted(){return this._started}async _invokeStartableMethod(e){await Promise.all(Object.values(this.components).filter(t=>Lp(t)).map(async t=>{await t[e]?.()}))}async beforeStart(){await this._invokeStartableMethod("beforeStart")}async start(){await this._invokeStartableMethod("start"),this._started=!0}async afterStart(){await this._invokeStartableMethod("afterStart")}async beforeStop(){await this._invokeStartableMethod("beforeStop")}async stop(){await this._invokeStartableMethod("stop"),this._started=!1}async afterStop(){await this._invokeStartableMethod("afterStop")}},LH=["metrics","connectionProtector","dns"],BH=["components","isStarted","beforeStart","start","afterStart","beforeStop","stop","afterStop","then","_invokeStartableMethod"];function DR(r={}){let e=new Fw(r);return new Proxy(e,{get(n,o,i){if(typeof o=="string"&&!BH.includes(o)){let s=e.components[o];if(s==null&&!LH.includes(o))throw new X3(`${o} not set`);return s}return Reflect.get(n,o,i)},set(n,o,i){return typeof o=="string"?e.components[o]=i:Reflect.set(n,o,i),!0}})}function OR(r){let e={};for(let t of Object.values(r.components))for(let n of MH(t))e[n]=!0;for(let t of Object.values(r.components))for(let n of UH(t))if(e[n]!==!0)throw new Y3(`Service "${FH(t)}" required capability "${n}" but it was not provided by any component, you may need to add additional configuration when creating your node.`)}function MH(r){return Array.isArray(r?.[Xe])?r[Xe]:[]}function UH(r){return Array.isArray(r?.[Sn])?r[Sn]:[]}function FH(r){return r?.[Symbol.toStringTag]??r?.toString()??"unknown"}var $H=4,KH=41;function LR(r={}){return{denyDialPeer:async()=>!1,denyDialMultiaddr:async e=>{if(Oi.matches(e))return!1;let t=e.stringTuples();return t[0][0]===$H||t[0][0]===KH?!!Gr(`${t[0][1]}`):!1},denyInboundConnection:async()=>!1,denyOutboundConnection:async()=>!1,denyInboundEncryptedConnection:async()=>!1,denyOutboundEncryptedConnection:async()=>!1,denyInboundUpgradedConnection:async()=>!1,denyOutboundUpgradedConnection:async()=>!1,filterMultiaddrForPeer:async()=>!0,...r}}function sy(r){if(Tp(r))return{peerId:r,multiaddrs:[]};let e=Array.isArray(r)?r:[r],t;if(e.length>0){let n=e[0].getPeerId();t=n==null?void 0:bt(n),e.forEach(o=>{if(!ks(o))throw new os("Invalid multiaddr");let i=o.getPeerId();if(i==null){if(t!=null)throw new D("Multiaddrs must all have the same peer id or have no peer id")}else{let s=bt(i);if(t?.equals(s)!==!0)throw new D("Multiaddrs must all have the same peer id or have no peer id")}})}return e=e.filter(n=>!lS.exactMatch(n)),{peerId:t,multiaddrs:e}}var VH=["/ipfs/id/1.0.0","/ipfs/id/push/1.0.0","/libp2p/autonat/1.0.0","/libp2p/dcutr"];async function BR(r,e){let t=r?.streams?.map(o=>o.protocol)??[],n=e?.closableProtocols??VH;if(!(t.filter(o=>o!=null&&!n.includes(o)).length>0))try{await r?.close(e)}catch(o){r?.abort(o)}}var MR="last-dial-failure",UR="last-dial-success";var ay=100,cy=50;async function FR(r,e){let t=!1;for(let o of tu.keys())if(t=r.protoNames().includes(o),t)break;if(!t)return[r];let n=await r.resolve(e);return e.log("resolved %s to",r,n.map(o=>o.toString())),n}function yp(r){try{let e;if(typeof r=="string"?e=oe(r):e=r,!e.protoNames().includes("ipcidr")){let n=e.protoNames().includes("ip6")?"/ipcidr/128":"/ipcidr/32";e=e.encapsulate(n)}return F5(e)}catch{throw new Error(`Can't convert to IpNet, Invalid multiaddr format: ${r}`)}}var HH={maxConnections:ay,allow:[]},ly=class{maxConnections;connectionManager;peerStore;allow;events;log;constructor(e,t={}){this.maxConnections=t.maxConnections??HH.maxConnections,this.allow=(t.allow??[]).map(n=>yp(n)),this.connectionManager=e.connectionManager,this.peerStore=e.peerStore,this.events=e.events,this.log=e.logger.forComponent("libp2p:connection-manager:connection-pruner"),this.maybePruneConnections=this.maybePruneConnections.bind(this)}start(){this.events.addEventListener("connection:open",this.maybePruneConnections)}stop(){this.events.removeEventListener("connection:open",this.maybePruneConnections)}maybePruneConnections(){this._maybePruneConnections().catch(e=>{this.log.error("error while pruning connections %e",e)})}async _maybePruneConnections(){let e=this.connectionManager.getConnections(),t=e.length;if(this.log("checking max connections limit %d/%d",t,this.maxConnections),t<=this.maxConnections)return;let n=new ir;for(let a of e){let c=a.remotePeer;if(!n.has(c)){n.set(c,0);try{let l=await this.peerStore.get(c);n.set(c,[...l.tags.values()].reduce((u,d)=>u+d.value,0))}catch(l){l.name!=="NotFoundError"&&this.log.error("error loading peer tags",l)}}}let o=this.sortConnections(e,n),i=Math.max(t-this.maxConnections,0),s=[];for(let a of o)if(this.log("too many connections open - closing a connection to %p",a.remotePeer),this.allow.some(l=>l.contains(a.remoteAddr.nodeAddress().address))||s.push(a),s.length===i)break;await Promise.all(s.map(async a=>{await BR(a,{signal:AbortSignal.timeout(1e3)})})),this.events.safeDispatchEvent("connection:prune",{detail:s})}sortConnections(e,t){return e.sort((n,o)=>{let i=n.timeline.open,s=o.timeline.open;return i<s?1:i>s?-1:0}).sort((n,o)=>n.direction==="outbound"&&o.direction==="inbound"?1:n.direction==="inbound"&&o.direction==="outbound"?-1:0).sort((n,o)=>n.streams.length>o.streams.length?1:n.streams.length<o.streams.length?-1:0).sort((n,o)=>{let i=t.get(n.remotePeer)??0,s=t.get(o.remotePeer)??0;return i>s?1:i<s?-1:0})}};var uy=class extends $r{constructor(e={}){super({...e,sort:(t,n)=>t.options.priority>n.options.priority?-1:t.options.priority<n.options.priority?1:0})}};function $R(r){return/^127\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(r)||/^::1$/.test(r)}function $w(r){if(!p0(r))return!1;let{address:e}=r.nodeAddress();return $R(e)}function qH(r,e){let t=Ya.exactMatch(r.multiaddr),n=Ya.exactMatch(e.multiaddr);if(t&&!n)return-1;if(!t&&n)return 1;let o=Qa.exactMatch(r.multiaddr),i=Qa.exactMatch(e.multiaddr);if(o&&!i)return-1;if(!o&&i)return 1;let s=Oi.exactMatch(r.multiaddr),a=Oi.exactMatch(e.multiaddr);if(s&&!a)return-1;if(!s&&a)return 1;let c=Sf.exactMatch(r.multiaddr),l=Sf.exactMatch(e.multiaddr);if(c&&!l)return-1;if(!c&&l)return 1;let u=Ef.exactMatch(r.multiaddr),d=Ef.exactMatch(e.multiaddr);if(u&&!d)return-1;if(!u&&d)return 1;let h=C5.exactMatch(r.multiaddr),m=C5.exactMatch(e.multiaddr);return h&&!m?-1:!h&&m?1:0}function jH(r,e){let t=$w(r.multiaddr),n=$w(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function WH(r,e){let t=Yn(r.multiaddr),n=Yn(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function GH(r,e){return r.isCertified&&!e.isCertified?-1:!r.isCertified&&e.isCertified?1:0}function zH(r,e){let t=nn.exactMatch(r.multiaddr),n=nn.exactMatch(e.multiaddr);return t&&!n?1:!t&&n?-1:0}function KR(r){return r.sort(qH).sort(GH).sort(zH).sort(WH).sort(jH)}var dy={maxParallelDials:cy,maxDialQueueLength:500,maxPeerAddrsToDial:25,dialTimeout:1e4,resolvers:{dnsaddr:al}},fy=class{queue;components;addressSorter;maxPeerAddrsToDial;maxDialQueueLength;dialTimeout;shutDownController;connections;log;constructor(e,t={}){this.addressSorter=t.addressSorter,this.maxPeerAddrsToDial=t.maxPeerAddrsToDial??dy.maxPeerAddrsToDial,this.maxDialQueueLength=t.maxDialQueueLength??dy.maxDialQueueLength,this.dialTimeout=t.dialTimeout??dy.dialTimeout,this.connections=t.connections??new ir,this.log=e.logger.forComponent("libp2p:connection-manager:dial-queue"),this.components=e,this.shutDownController=new AbortController,this.shutDownController.signal;for(let[n,o]of Object.entries(t.resolvers??{}))tu.set(n,o);this.queue=new uy({concurrency:t.maxParallelDials??dy.maxParallelDials,metricName:"libp2p_dial_queue",metrics:e.metrics}),this.queue.addEventListener("error",n=>{n.detail?.name!==cr.name&&this.log.error("error in dial queue - %e",n.detail)})}start(){this.shutDownController=new AbortController,this.shutDownController.signal}stop(){this.shutDownController.abort(),this.queue.abort()}async dial(e,t={}){let{peerId:n,multiaddrs:o}=sy(e),i=Array.from(this.connections.values()).flat().find(a=>t.force===!0?!1:a.remotePeer.equals(n)?!0:o.find(c=>c.equals(a.remoteAddr)));if(i?.status==="open")return this.log("already connected to %a",i.remoteAddr),t.onProgress?.(new ae("dial-queue:already-connected")),i;let s=this.queue.queue.find(a=>{if(n?.equals(a.options.peerId)===!0)return!0;let c=a.options.multiaddrs;if(c==null)return!1;for(let l of o)if(c.has(l.toString()))return!0;return!1});if(s!=null){this.log("joining existing dial target for %p",n);for(let a of o)s.options.multiaddrs.add(a.toString());return t.onProgress?.(new ae("dial-queue:already-in-dial-queue")),s.join(t)}if(this.queue.size>=this.maxDialQueueLength)throw new Ei("Dial queue is full");return this.log("creating dial target for %p",n,o.map(a=>a.toString())),t.onProgress?.(new ae("dial-queue:add-to-dial-queue")),this.queue.add(async a=>{a.onProgress?.(new ae("dial-queue:start-dial"));let c=Ne([this.shutDownController.signal,a.signal]);try{return await this.dialPeer(a,c)}finally{c.clear()}},{peerId:n,priority:t.priority??qw,multiaddrs:new Set(o.map(a=>a.toString())),signal:t.signal??AbortSignal.timeout(this.dialTimeout),onProgress:t.onProgress})}async dialPeer(e,t){let n=e.peerId,o=e.multiaddrs,i=new Set,s=e.multiaddrs.size===0,a=0,c=0,l=[];for(this.log("starting dial to %p",n);s||o.size>0;){c++,s=!1;let u=[],d=new Set(e.multiaddrs);o.clear(),this.log("calculating addrs to dial %p from %s",n,[...d]);let h=await this.calculateMultiaddrs(n,d,{...e,signal:t});for(let m of h){if(i.has(m.multiaddr.toString())){this.log.trace("skipping previously failed multiaddr %a while dialing %p",m.multiaddr,n);continue}u.push(m)}this.log("%s dial to %p with %s",c===1?"starting":"continuing",n,u.map(m=>m.multiaddr.toString())),e?.onProgress?.(new ae("dial-queue:calculated-addresses",u));for(let m of u){if(a===this.maxPeerAddrsToDial)throw this.log("dialed maxPeerAddrsToDial (%d) addresses for %p, not trying any others",a,e.peerId),new Ei("Peer had more than maxPeerAddrsToDial");a++;try{let g=await this.components.transportManager.dial(m.multiaddr,{...e,signal:t});this.log("dial to %a succeeded",m.multiaddr);try{await this.components.peerStore.merge(g.remotePeer,{multiaddrs:[g.remoteAddr],metadata:{[UR]:V(Date.now().toString())}})}catch(w){this.log.error("could not update last dial failure key for %p",n,w)}return g}catch(g){if(this.log.error("dial failed to %a",m.multiaddr,g),i.add(m.multiaddr.toString()),n!=null)try{await this.components.peerStore.merge(n,{metadata:{[MR]:V(Date.now().toString())}})}catch(w){this.log.error("could not update last dial failure key for %p",n,w)}if(t.aborted)throw new zo(g.message);l.push(g)}}}throw l.length===1?l[0]:new AggregateError(l,"All multiaddr dials failed")}async calculateMultiaddrs(e,t=new Set,n={}){let o=[...t].map(d=>({multiaddr:oe(d),isCertified:!1}));if(e!=null){if(this.components.peerId.equals(e))throw new Ei("Tried to dial self");if(await this.components.connectionGater.denyDialPeer?.(e)===!0)throw new gp("The dial request is blocked by gater.allowDialPeer");if(o.length===0){this.log("loading multiaddrs for %p",e);try{let d=await this.components.peerStore.get(e);o.push(...d.addresses),this.log("loaded multiaddrs for %p",e,o.map(({multiaddr:h})=>h.toString()))}catch(d){if(d.name!=="NotFoundError")throw d}}if(o.length===0){this.log("looking up multiaddrs for %p in the peer routing",e);try{let d=await this.components.peerRouting.findPeer(e,n);this.log("found multiaddrs for %p in the peer routing",e,o.map(({multiaddr:h})=>h.toString())),o.push(...d.multiaddrs.map(h=>({multiaddr:h,isCertified:!1})))}catch(d){d.name==="NoPeerRoutersError"?this.log("no peer routers configured",e):this.log.error("looking up multiaddrs for %p in the peer routing failed - %e",e,d)}}}let i=(await Promise.all(o.map(async d=>{let h=await FR(d.multiaddr,{dns:this.components.dns,...n,log:this.log});return h.length===1&&h[0].equals(d.multiaddr)?d:h.map(m=>({multiaddr:m,isCertified:!1}))}))).flat();if(e!=null){let d=`/p2p/${e.toString()}`;i=i.map(h=>h.multiaddr.protos().pop()?.path===!0?h:h.multiaddr.getPeerId()==null?{multiaddr:h.multiaddr.encapsulate(d),isCertified:h.isCertified}:h)}let s=i.filter(d=>{if(this.components.transportManager.dialTransportForMultiaddr(d.multiaddr)==null)return!1;let h=d.multiaddr.getPeerId();return e!=null&&h!=null?e.equals(h):!0}),a=new Map;for(let d of s){let h=d.multiaddr.toString(),m=a.get(h);if(m!=null){m.isCertified=m.isCertified||d.isCertified||!1;continue}a.set(h,d)}let c=[...a.values()];if(c.length===0)throw new ry("The dial request has no valid addresses");let l=[];for(let d of c)this.components.connectionGater.denyDialMultiaddr!=null&&await this.components.connectionGater.denyDialMultiaddr(d.multiaddr)||l.push(d);let u=this.addressSorter==null?KR(l):l.sort(this.addressSorter);if(u.length===0)throw new gp("The connection gater denied all addresses in the dial request");return this.log.trace("addresses for %p before filtering",e??"unknown peer",i.map(({multiaddr:d})=>d.toString())),this.log.trace("addresses for %p after filtering",e??"unknown peer",u.map(({multiaddr:d})=>d.toString())),u}async isDialable(e,t={}){Array.isArray(e)||(e=[e]);try{let n=await this.calculateMultiaddrs(void 0,new Set(e.map(o=>o.toString())),t);return t.runOnLimitedConnection===!1?n.find(o=>!nn.matches(o.multiaddr))!=null:!0}catch(n){this.log.trace("error calculating if multiaddr(s) were dialable",n)}return!1}};var zR=Vt(WR(),1);var YH=Object.prototype.toString,QH=r=>YH.call(r)==="[object Error]",ZH=new Set(["network error","Failed to fetch","NetworkError when attempting to fetch resource.","The Internet connection appears to be offline.","Load failed","Network request failed","fetch failed","terminated"]);function jw(r){return r&&QH(r)&&r.name==="TypeError"&&typeof r.message=="string"?r.message==="Load failed"?r.stack===void 0:ZH.has(r.message):!1}var Ww=class extends Error{constructor(e){super(),e instanceof Error?(this.originalError=e,{message:e}=e):(this.originalError=new Error(e),this.originalError.stack=this.stack),this.name="AbortError",this.message=e}},GR=(r,e,t)=>{let n=t.retries-(e-1);return r.attemptNumber=e,r.retriesLeft=n,r};async function Gw(r,e){return new Promise((t,n)=>{e={...e},e.onFailedAttempt??=()=>{},e.shouldRetry??=()=>!0,e.retries??=10;let o=zR.default.operation(e),i=()=>{o.stop(),n(e.signal?.reason)};e.signal&&!e.signal.aborted&&e.signal.addEventListener("abort",i,{once:!0});let s=()=>{e.signal?.removeEventListener("abort",i),o.stop()};o.attempt(async a=>{try{let c=await r(a);s(),t(c)}catch(c){try{if(!(c instanceof Error))throw new TypeError(`Non-error was thrown: "${c}". You should only throw errors.`);if(c instanceof Ww)throw c.originalError;if(c instanceof TypeError&&!jw(c))throw c;if(GR(c,a,e),await e.shouldRetry(c)||(o.stop(),n(c)),await e.onFailedAttempt(c),!o.retry(c))throw o.mainError()}catch(l){GR(l,a,e),s(),n(l)}}})})}var hy=class{log;queue;started;peerStore;retries;retryInterval;backoffFactor;connectionManager;events;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:reconnect-queue"),this.peerStore=e.peerStore,this.connectionManager=e.connectionManager,this.queue=new ur({concurrency:t.maxParallelReconnects??5,metricName:"libp2p_reconnect_queue",metrics:e.metrics}),this.started=!1,this.retries=t.retries??5,this.backoffFactor=t.backoffFactor,this.retryInterval=t.retryInterval,this.events=e.events,e.events.addEventListener("peer:disconnect",n=>{this.maybeReconnect(n.detail).catch(o=>{this.log.error("failed to maybe reconnect to %p - %e",n.detail,o)})})}async maybeReconnect(e){if(!this.started)return;let t=await this.peerStore.get(e);XR(t)&&(this.queue.has(e)||this.queue.add(async n=>{await Gw(async o=>{if(this.started)try{await this.connectionManager.openConnection(e,{signal:n?.signal})}catch(i){throw this.log("reconnecting to %p attempt %d of %d failed - %e",e,o,this.retries,i),i}},{signal:n?.signal,retries:this.retries,factor:this.backoffFactor,minTimeout:this.retryInterval})},{peerId:e}).catch(async n=>{this.log.error("failed to reconnect to %p - %e",e,n);let o={};[...t.tags.keys()].forEach(i=>{i.startsWith(rs)&&(o[i]=void 0)}),await this.peerStore.merge(e,{tags:o}),this.events.safeDispatchEvent("peer:reconnect-failure",{detail:e})}).catch(async n=>{this.log.error("failed to remove keep-alive tag from %p - %e",e,n)}))}start(){this.started=!0}async afterStart(){Promise.resolve().then(async()=>{let e=await this.peerStore.all({filters:[t=>XR(t)]});await Promise.all(e.map(async t=>{await this.connectionManager.openConnection(t.id).catch(n=>{this.log.error(n)})}))}).catch(e=>{this.log.error(e)})}stop(){this.started=!1,this.queue.abort()}};function XR(r){for(let e of r.tags.keys())if(e.startsWith(rs))return!0;return!1}var qw=50,zw={maxConnections:ay,inboundConnectionThreshold:5,maxIncomingPendingConnections:10},py=class{started;connections;allow;deny;maxIncomingPendingConnections;incomingPendingConnections;outboundPendingConnections;maxConnections;dialQueue;reconnectQueue;connectionPruner;inboundConnectionRateLimiter;peerStore;metrics;events;log;peerId;constructor(e,t={}){if(this.maxConnections=t.maxConnections??zw.maxConnections,this.maxConnections<1)throw new D("Connection Manager maxConnections must be greater than 0");this.connections=new ir,this.started=!1,this.peerId=e.peerId,this.peerStore=e.peerStore,this.metrics=e.metrics,this.events=e.events,this.log=e.logger.forComponent("libp2p:connection-manager"),this.onConnect=this.onConnect.bind(this),this.onDisconnect=this.onDisconnect.bind(this),this.allow=(t.allow??[]).map(n=>yp(n)),this.deny=(t.deny??[]).map(n=>yp(n)),this.incomingPendingConnections=0,this.maxIncomingPendingConnections=t.maxIncomingPendingConnections??zw.maxIncomingPendingConnections,this.outboundPendingConnections=0,this.inboundConnectionRateLimiter=new Du({points:t.inboundConnectionThreshold??zw.inboundConnectionThreshold,duration:1}),this.connectionPruner=new ly({connectionManager:this,peerStore:e.peerStore,events:e.events,logger:e.logger},{maxConnections:this.maxConnections,allow:t.allow?.map(n=>oe(n))}),this.dialQueue=new fy(e,{addressSorter:t.addressSorter,maxParallelDials:t.maxParallelDials??cy,maxDialQueueLength:t.maxDialQueueLength??500,maxPeerAddrsToDial:t.maxPeerAddrsToDial??25,dialTimeout:t.dialTimeout??1e4,resolvers:t.resolvers??{dnsaddr:al},connections:this.connections}),this.reconnectQueue=new hy({events:e.events,peerStore:e.peerStore,logger:e.logger,connectionManager:this},{retries:t.reconnectRetries,retryInterval:t.reconnectRetryInterval,backoffFactor:t.reconnectBackoffFactor,maxParallelReconnects:t.maxParallelReconnects})}[Symbol.toStringTag]="@libp2p/connection-manager";async start(){this.metrics?.registerMetricGroup("libp2p_connection_manager_connections",{calculate:()=>{let e={inbound:0,"inbound pending":this.incomingPendingConnections,outbound:0,"outbound pending":this.outboundPendingConnections};for(let t of this.connections.values())for(let n of t)e[n.direction]++;return e}}),this.metrics?.registerMetricGroup("libp2p_protocol_streams_total",{label:"protocol",calculate:()=>{let e={};for(let t of this.connections.values())for(let n of t)for(let o of n.streams){let i=`${o.direction} ${o.protocol??"unnegotiated"}`;e[i]=(e[i]??0)+1}return e}}),this.metrics?.registerMetricGroup("libp2p_connection_manager_protocol_streams_per_connection_90th_percentile",{label:"protocol",calculate:()=>{let e={};for(let n of this.connections.values())for(let o of n){let i={};for(let s of o.streams){let a=`${s.direction} ${s.protocol??"unnegotiated"}`;i[a]=(i[a]??0)+1}for(let[s,a]of Object.entries(i))e[s]=e[s]??[],e[s].push(a)}let t={};for(let[n,o]of Object.entries(e)){o=o.sort((s,a)=>s-a);let i=Math.floor(o.length*.9);t[n]=o[i]}return t}}),this.events.addEventListener("connection:open",this.onConnect),this.events.addEventListener("connection:close",this.onDisconnect),await lr(this.dialQueue,this.reconnectQueue,this.connectionPruner),this.started=!0,this.log("started")}async stop(){this.events.removeEventListener("connection:open",this.onConnect),this.events.removeEventListener("connection:close",this.onDisconnect),await Cr(this.reconnectQueue,this.dialQueue,this.connectionPruner);let e=[];for(let t of this.connections.values())for(let n of t)e.push((async()=>{try{await n.close()}catch(o){this.log.error(o)}})());this.log("closing %d connections",e.length),await Promise.all(e),this.connections.clear(),this.log("stopped")}getMaxConnections(){return this.maxConnections}onConnect(e){this._onConnect(e).catch(t=>{this.log.error(t)})}async _onConnect(e){let{detail:t}=e;if(!this.started){await t.close();return}if(t.status!=="open")return;let n=t.remotePeer,o=!this.connections.has(n),i=this.connections.get(n)??[];i.push(t),this.connections.set(n,i),n.publicKey!=null&&n.type==="RSA"&&await this.peerStore.patch(n,{publicKey:n.publicKey}),o&&this.events.safeDispatchEvent("peer:connect",{detail:t.remotePeer})}onDisconnect(e){let{detail:t}=e,n=t.remotePeer,i=(this.connections.get(n)??[]).filter(s=>s.id!==t.id);this.connections.set(n,i),i.length===0&&(this.log("onDisconnect remove all connections for peer %p",n),this.connections.delete(n),this.events.safeDispatchEvent("peer:disconnect",{detail:t.remotePeer}))}getConnections(e){if(e!=null)return this.connections.get(e)??[];let t=[];for(let n of this.connections.values())t=t.concat(n);return t}getConnectionsMap(){return this.connections}async openConnection(e,t={}){if(!this.started)throw new En("Not started");this.outboundPendingConnections++;try{t.signal?.throwIfAborted();let{peerId:n}=sy(e);if(this.peerId.equals(n))throw new pl("Can not dial self");if(n!=null&&t.force!==!0){this.log("dial %p",n);let a=this.getConnections(n).find(c=>c.limits==null);if(a!=null)return this.log("had an existing non-limited connection to %p",n),t.onProgress?.(new ae("dial-queue:already-connected")),a}let o=await this.dialQueue.dial(e,{...t,priority:t.priority??qw});if(o.status!=="open")throw new fl("Remote closed connection during opening");let i=this.connections.get(o.remotePeer);i==null&&(i=[],this.connections.set(o.remotePeer,i));let s=!1;for(let a of i)if(a.id===o.id&&(s=!0),t.force!==!0&&a.id!==o.id&&a.remoteAddr.equals(o.remoteAddr))return o.abort(new os("Duplicate multiaddr connection")),a;return s||i.push(o),o}finally{this.outboundPendingConnections--}}async closeConnections(e,t={}){let n=this.connections.get(e)??[];await Promise.all(n.map(async o=>{try{await o.close(t)}catch(i){o.abort(i)}}))}async acceptIncomingConnection(e){if(this.deny.some(o=>o.contains(e.remoteAddr.nodeAddress().address)))return this.log("connection from %a refused - connection remote address was in deny list",e.remoteAddr),!1;if(this.allow.some(o=>o.contains(e.remoteAddr.nodeAddress().address)))return this.incomingPendingConnections++,!0;if(this.incomingPendingConnections===this.maxIncomingPendingConnections)return this.log("connection from %a refused - incomingPendingConnections exceeded by host",e.remoteAddr),!1;if(e.remoteAddr.isThinWaistAddress()){let o=e.remoteAddr.nodeAddress().address;try{await this.inboundConnectionRateLimiter.consume(o,1)}catch{return this.log("connection from %a refused - inboundConnectionThreshold exceeded by host %s",e.remoteAddr,o),!1}}return this.getConnections().length<this.maxConnections?(this.incomingPendingConnections++,!0):(this.log("connection from %a refused - maxConnections exceeded",e.remoteAddr),!1)}afterUpgradeInbound(){this.incomingPendingConnections--}getDialQueue(){let e={queued:"queued",running:"active",errored:"error",complete:"success"};return this.dialQueue.queue.queue.map(t=>({id:t.id,status:e[t.status],peerId:t.options.peerId,multiaddrs:[...t.options.multiaddrs].map(n=>oe(n))}))}async isDialable(e,t={}){return this.dialQueue.isDialable(e,t)}};var tq=1e4,rq="1.0.0",nq="ping",oq="ipfs",YR=32,iq=!0,my=class{protocol;components;log;heartbeatInterval;pingIntervalMs;abortController;timeout;abortConnectionOnPingFailure;constructor(e,t={}){this.components=e,this.protocol=`/${t.protocolPrefix??oq}/${nq}/${rq}`,this.log=e.logger.forComponent("libp2p:connection-monitor"),this.pingIntervalMs=t.pingInterval??tq,this.abortConnectionOnPingFailure=t.abortConnectionOnPingFailure??iq,this.timeout=new Mo({...t.pingTimeout??{},metrics:e.metrics,metricName:"libp2p_connection_monitor_ping_time_milliseconds"})}[Symbol.toStringTag]="@libp2p/connection-monitor";[Xe]=["@libp2p/connection-monitor"];start(){this.abortController=new AbortController,this.abortController.signal,this.heartbeatInterval=setInterval(()=>{this.components.connectionManager.getConnections().forEach(e=>{Promise.resolve().then(async()=>{let t=Date.now();try{let n=this.timeout.getTimeoutSignal({signal:this.abortController?.signal}),o=await e.newStream(this.protocol,{signal:n,runOnLimitedConnection:!0}),i=Qt(o);t=Date.now(),await Promise.all([i.write(qr(YR),{signal:n}),i.read({bytes:YR,signal:n})]),e.rtt=Date.now()-t,await i.unwrap().close({signal:n})}catch(n){if(n.name!=="UnsupportedProtocolError")throw n;e.rtt=(Date.now()-t)/2}}).catch(t=>{this.log.error("error during heartbeat",t),this.abortConnectionOnPingFailure?(this.log.error("aborting connection due to ping failure"),e.abort(t)):this.log("connection ping failed, but not aborting due to abortConnectionOnPingFailure flag")})})},this.pingIntervalMs)}stop(){this.abortController?.abort(),this.heartbeatInterval!=null&&clearInterval(this.heartbeatInterval)}};var gy=class{routers;started;components;constructor(e,t){this.routers=t.routers??[],this.started=!1,this.components=e,this.findProviders=e.metrics?.traceFunction("libp2p.contentRouting.findProviders",this.findProviders.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,cid:n.toString()}),getAttributesFromYieldedValue:(n,o)=>({...o,providers:[...Array.isArray(o.providers)?o.providers:[],n.id.toString()]})})??this.findProviders,this.provide=e.metrics?.traceFunction("libp2p.contentRouting.provide",this.provide.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,cid:n.toString()})})??this.provide,this.cancelReprovide=e.metrics?.traceFunction("libp2p.contentRouting.cancelReprovide",this.cancelReprovide.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,cid:n.toString()})})??this.cancelReprovide,this.put=e.metrics?.traceFunction("libp2p.contentRouting.put",this.put.bind(this),{optionsIndex:2,getAttributesFromArgs:([n])=>({key:M(n,"base36")})})??this.put,this.get=e.metrics?.traceFunction("libp2p.contentRouting.get",this.get.bind(this),{optionsIndex:1,getAttributesFromArgs:([n])=>({key:M(n,"base36")})})??this.get}[Symbol.toStringTag]="@libp2p/content-routing";isStarted(){return this.started}async start(){this.started=!0}async stop(){this.started=!1}async*findProviders(e,t={}){if(this.routers.length===0)throw new wd("No content routers available");let n=this,o=new jr;for await(let i of Kr(...n.routers.map(s=>s.findProviders(e,t))))i!=null&&(i.multiaddrs.length>0&&await this.components.peerStore.merge(i.id,{multiaddrs:i.multiaddrs}),!o.has(i.id)&&(o.add(i.id),yield i))}async provide(e,t={}){if(this.routers.length===0)throw new wd("No content routers available");await Promise.all(this.routers.map(async n=>{await n.provide(e,t)}))}async cancelReprovide(e,t={}){if(this.routers.length===0)throw new wd("No content routers available");await Promise.all(this.routers.map(async n=>{await n.cancelReprovide(e,t)}))}async put(e,t,n){if(!this.isStarted())throw new En;await Promise.all(this.routers.map(async o=>{await o.put(e,t,n)}))}async get(e,t){if(!this.isStarted())throw new En;return Promise.any(this.routers.map(async n=>n.get(e,t)))}};var yy=class{log;peerId;peerStore;routers;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:peer-routing"),this.peerId=e.peerId,this.peerStore=e.peerStore,this.routers=t.routers??[],this.findPeer=e.metrics?.traceFunction("libp2p.peerRouting.findPeer",this.findPeer.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,peer:n.toString()})})??this.findPeer,this.getClosestPeers=e.metrics?.traceFunction("libp2p.peerRouting.getClosestPeers",this.getClosestPeers.bind(this),{optionsIndex:1,getAttributesFromArgs:([n],o)=>({...o,key:M(n,"base36")}),getAttributesFromYieldedValue:(n,o)=>({...o,peers:[...Array.isArray(o.peers)?o.peers:[],n.id.toString()]})})??this.getClosestPeers}[Symbol.toStringTag]="@libp2p/peer-routing";async findPeer(e,t){if(this.routers.length===0)throw new mp("No peer routers available");if(e.toString()===this.peerId.toString())throw new Q3("Should not try to find self");let n=this,o=Kr(...this.routers.map(i=>async function*(){try{yield await i.findPeer(e,t)}catch(s){n.log.error(s)}}()));for await(let i of o)if(i!=null)return i.multiaddrs.length>0&&await this.peerStore.merge(i.id,{multiaddrs:i.multiaddrs}),i;throw new ze}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new mp("No peer routers available");let n=this,o=tn(1024);for await(let i of Bo(async function*(){let s=Kr(...n.routers.map(a=>a.getClosestPeers(e,t)));for await(let a of s)yield async()=>{if(a.multiaddrs.length===0)try{a=await n.findPeer(a.id,{...t,useCache:!1})}catch(c){n.log.error("could not find peer multiaddrs",c);return}return a}}()))i!=null&&(i.multiaddrs.length>0&&await this.peerStore.merge(i.id,{multiaddrs:i.multiaddrs}),!o.has(i.id.toMultihash().bytes)&&(o.add(i.id.toMultihash().bytes),yield i))}};var wy=class extends Le{peerRouting;log;walking;walkers;shutdownController;walkController;needNext;constructor(e){super(),this.log=e.logger.forComponent("libp2p:random-walk"),this.peerRouting=e.peerRouting,this.walkers=0,this.walking=!1,this.shutdownController=new AbortController,this.shutdownController.signal}[Symbol.toStringTag]="@libp2p/random-walk";start(){this.shutdownController=new AbortController,this.shutdownController.signal}stop(){this.shutdownController.abort()}async*walk(e){this.walking||this.startWalk(),this.walkers++;let t=Ne([this.shutdownController.signal,e?.signal]);try{for(;;)this.needNext?.resolve(),this.needNext=de(),yield(await tr(this,"walk:peer",t,{errorEvent:"walk:error"})).detail}finally{t.clear(),this.walkers--,this.walkers===0&&(this.walkController?.abort(),this.walkController=void 0)}}startWalk(){this.walking=!0,this.walkController=new AbortController,this.walkController.signal;let e=Ne([this.walkController.signal,this.shutdownController.signal]);let t=Date.now(),n=0;Promise.resolve().then(async()=>{for(this.log("start walk");this.walkers>0;)try{let o=qr(32),i=Date.now();for await(let s of this.peerRouting.getClosestPeers(o,{signal:e}))e.aborted&&this.log("aborting walk"),e.throwIfAborted(),this.log("found peer %p after %dms for %d walkers",s.id,Date.now()-i,this.walkers),n++,this.safeDispatchEvent("walk:peer",{detail:s}),this.walkers===1&&this.needNext!=null&&(this.log("wait for need next"),await dt(this.needNext.promise,e)),i=Date.now();this.log("walk iteration for %b and %d walkers finished, found %d peers",o,this.walkers,n)}catch(o){this.log.error("random walk errored",o),this.safeDispatchEvent("walk:error",{detail:o})}this.log("no walkers left, ended walk")}).catch(o=>{this.log.error("random walk errored",o)}).finally(()=>{this.log("finished walk, found %d peers after %dms",n,Date.now()-t),this.walking=!1})}};var Xw=32,Yw=64,by=class{log;topologies;handlers;components;constructor(e){this.log=e.logger.forComponent("libp2p:registrar"),this.topologies=new Map,this.handlers=new Map,this.components=e,this._onDisconnect=this._onDisconnect.bind(this),this._onPeerUpdate=this._onPeerUpdate.bind(this),this._onPeerIdentify=this._onPeerIdentify.bind(this),this.components.events.addEventListener("peer:disconnect",this._onDisconnect),this.components.events.addEventListener("peer:update",this._onPeerUpdate),this.components.events.addEventListener("peer:identify",this._onPeerIdentify)}[Symbol.toStringTag]="@libp2p/registrar";getProtocols(){return Array.from(new Set([...this.handlers.keys()])).sort()}getHandler(e){let t=this.handlers.get(e);if(t==null)throw new Z3(`No handler registered for protocol ${e}`);return t}getTopologies(e){let t=this.topologies.get(e);return t==null?[]:[...t.values()]}async handle(e,t,n){if(this.handlers.has(e)&&n?.force!==!0)throw new J3(`Handler already registered for protocol ${e}`);let o=_u.bind({ignoreUndefined:!0})({maxInboundStreams:Xw,maxOutboundStreams:Yw},n);this.handlers.set(e,{handler:t,options:o}),await this.components.peerStore.merge(this.components.peerId,{protocols:[e]})}async unhandle(e){(Array.isArray(e)?e:[e]).forEach(n=>{this.handlers.delete(n)}),await this.components.peerStore.patch(this.components.peerId,{protocols:this.getProtocols()})}async register(e,t){if(t==null)throw new D("invalid topology");let n=`${(Math.random()*1e9).toString(36)}${Date.now()}`,o=this.topologies.get(e);return o==null&&(o=new Map,this.topologies.set(e,o)),o.set(n,t),n}unregister(e){for(let[t,n]of this.topologies.entries())n.has(e)&&(n.delete(e),n.size===0&&this.topologies.delete(t))}_onDisconnect(e){let t=e.detail;this.components.peerStore.get(t).then(n=>{for(let o of n.protocols){let i=this.topologies.get(o);if(i!=null)for(let s of i.values())s.filter?.has(t)!==!1&&(s.filter?.remove(t),s.onDisconnect?.(t))}}).catch(n=>{n.name!=="NotFoundError"&&this.log.error("could not inform topologies of disconnecting peer %p",t,n)})}_onPeerUpdate(e){let{peer:t,previous:n}=e.detail,o=(n?.protocols??[]).filter(i=>!t.protocols.includes(i));for(let i of o){let s=this.topologies.get(i);if(s!=null)for(let a of s.values())a.filter?.has(t.id)!==!1&&(a.filter?.remove(t.id),a.onDisconnect?.(t.id))}}_onPeerIdentify(e){let t=e.detail.protocols,n=e.detail.connection,o=e.detail.peerId;for(let i of t){let s=this.topologies.get(i);if(s!=null)for(let a of s.values())n.limits!=null&&a.notifyOnLimitedConnection!==!0||a.filter?.has(o)!==!0&&(a.filter?.add(o),a.onConnect?.(o,n))}}};var xy=class{log;components;transports;listeners;faultTolerance;started;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:transports"),this.components=e,this.started=!1,this.transports=new Map,this.listeners=am({name:"libp2p_transport_manager_listeners",metrics:this.components.metrics}),this.faultTolerance=t.faultTolerance??ga.FATAL_ALL}[Symbol.toStringTag]="@libp2p/transport-manager";add(e){let t=e[Symbol.toStringTag];if(t==null)throw new D("Transport must have a valid tag");if(this.transports.has(t))throw new D(`There is already a transport with the tag ${t}`);this.log("adding transport %s",t),this.transports.set(t,e),this.listeners.has(t)||this.listeners.set(t,[])}isStarted(){return this.started}start(){this.started=!0}async afterStart(){let e=this.components.addressManager.getListenAddrs();await this.listen(e)}async stop(){let e=[];for(let[t,n]of this.listeners)for(this.log("closing listeners for %s",t);n.length>0;){let o=n.pop();o!=null&&e.push(o.close())}await Promise.all(e),this.log("all listeners closed");for(let t of this.listeners.keys())this.listeners.set(t,[]);this.started=!1}async dial(e,t){let n=this.dialTransportForMultiaddr(e);if(n==null)throw new iy(`No transport available for address ${String(e)}`);return t?.onProgress?.(new ae("transport-manager:selected-transport",n[Symbol.toStringTag])),n.dial(e,{...t,upgrader:this.components.upgrader})}getAddrs(){let e=[];for(let t of this.listeners.values())for(let n of t)e=[...e,...n.getAddrs()];return e}getTransports(){return Array.of(...this.transports.values())}getListeners(){return Array.of(...this.listeners.values()).flat()}dialTransportForMultiaddr(e){for(let t of this.transports.values())if(t.dialFilter([e]).length>0)return t}listenTransportForMultiaddr(e){for(let t of this.transports.values())if(t.listenFilter([e]).length>0)return t}async listen(e){if(!this.isStarted())throw new En("Not started");if(e==null||e.length===0){this.log("no addresses were provided for listening, this node is dial only");return}let t={errors:new Map,ipv4:{success:0,attempts:0},ipv6:{success:0,attempts:0}};e.forEach(i=>{t.errors.set(i.toString(),new ey)});let n=[];for(let[i,s]of this.transports.entries()){let a=s.listenFilter(e);for(let c of a){this.log("creating listener for %s on %a",i,c);let l=s.createListener({upgrader:this.components.upgrader}),u=this.listeners.get(i)??[];u==null&&(u=[],this.listeners.set(i,u)),u.push(l),l.addEventListener("listening",()=>{this.components.events.safeDispatchEvent("transport:listening",{detail:l})}),l.addEventListener("close",()=>{let d=u.findIndex(h=>h===l);u.splice(d,1),this.components.events.safeDispatchEvent("transport:close",{detail:l})}),A5.matches(c)?t.ipv4.attempts++:_5.matches(c)&&t.ipv6.attempts++,n.push(l.listen(c).then(()=>{t.errors.delete(c.toString()),A5.matches(c)&&t.ipv4.success++,_5.matches(c)&&t.ipv6.success++},d=>{throw this.log.error("transport %s could not listen on address %a - %e",i,c,d),t.errors.set(c.toString(),d),d}))}}let o=await Promise.allSettled(n);if(!(o.length>0&&o.every(i=>i.status==="fulfilled"))){if(this.ipv6Unsupported(t)){this.log("all IPv4 addresses succeed but all IPv6 failed");return}if(this.faultTolerance===ga.NO_FATAL){this.log("failed to listen on any address but fault tolerance allows this");return}throw new ty(`Some configured addresses failed to be listened on, you may need to remove one or more listen addresses from your configuration or set \`transportManager.faultTolerance\` to NO_FATAL:
65
+ ${[...t.errors.entries()].map(([i,s])=>`
66
+ ${i}: ${`${s.stack??s}`.split(`
67
+ `).join(`
68
+ `)}
69
+ `).join("")}`)}}ipv6Unsupported(e){if(e.ipv4.attempts===0||e.ipv6.attempts===0)return!1;let t=e.ipv4.attempts===e.ipv4.success,n=e.ipv6.success===0;return t&&n}async remove(e){let t=this.listeners.get(e)??[];this.log.trace("removing transport %s",e);let n=[];for(this.log.trace("closing listeners for %s",e);t.length>0;){let o=t.pop();o!=null&&n.push(o.close())}await Promise.all(n),this.transports.delete(e),this.listeners.delete(e)}async removeAll(){let e=[];for(let t of this.transports.keys())e.push(this.remove(t));await Promise.all(e)}};var Ir="/multistream/1.0.0";var vy=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},Ey=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},Sy=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function wp(r,e={}){let t=Qt(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=Ce(e.maxDataLength));let n=e?.lengthDecoder??nt,o=e?.lengthEncoder??Fe;return{read:async s=>{let a=-1,c=new J;for(;;){c.append(await t.read({...s,bytes:1}));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(a<0)throw new vy("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new Sy("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new Ey("message length too long");return t.read({...s,bytes:a})},write:async(s,a)=>{await t.write(new J(o(s.byteLength),s),a)},writeV:async(s,a)=>{let c=new J(...s.flatMap(l=>[o(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}var sq=V(`
70
+ `);async function dl(r,e,t){await r.write(e,t)}async function QR(r,e,t){await r.writeV(e,t)}async function aq(r,e){let t=await r.read(e);if(t.byteLength===0||t.get(t.byteLength-1)!==sq[0])throw e.log.error("Invalid mss message - missing newline",t),new Oe("Missing newline");return t.sublist(0,-1)}async function pa(r,e){let t=await aq(r,e);return M(t.subarray())}async function bp(r,e,t){if(e=Array.isArray(e)?[...e]:[e],e.length===1&&t.negotiateFully===!1)return cq(r,e[0],t);let n=wp(r,{...t,maxDataLength:1024}),o=e.shift();if(o==null)throw new Error("At least one protocol must be specified");t.log.trace('select: write ["%s", "%s"]',Ir,o);let i=V(`${Ir}
71
+ `),s=V(`${o}
72
+ `);await QR(n,[i,s],t),t.log.trace("select: reading multistream-select header");let a=await pa(n,t);if(t.log.trace('select: read "%s"',a),a===Ir&&(t.log.trace("select: reading protocol response"),a=await pa(n,t),t.log.trace('select: read "%s"',a)),a===o)return{stream:n.unwrap(),protocol:o};for(let c of e){t.log.trace('select: write "%s"',c),await dl(n,V(`${c}
73
+ `),t),t.log.trace("select: reading protocol response");let l=await pa(n,t);if(t.log.trace('select: read "%s" for "%s"',l,c),l===c)return{stream:n.unwrap(),protocol:c}}throw new vi("protocol selection failed")}function cq(r,e,t){let n=r.sink.bind(r),o=r.source,i=!1,s=!1,a=de(),c=!1,l=!1,u=de(),d=!1,h=!1,m=de(),g=wp({sink:n,source:o},{...t,maxDataLength:1024});r.sink=async S=>{let{sink:v}=g.unwrap();await v(async function*(){let N=!1;for await(let W of S){if(l&&await u.promise,c)yield W;else{l=!0,t.log.trace('optimistic: write ["%s", "%s", data(%d)] in sink',Ir,e,W.byteLength);let H=`${e}
74
+ `;yield new J(Uint8Array.from([19]),V(`${Ir}
75
+ `),Fe(H.length),V(H),W).subarray(),t.log.trace('optimistic: wrote ["%s", "%s", data(%d)] in sink',Ir,e,W.byteLength),c=!0,l=!1,u.resolve(),w().catch($=>{t.log.error("could not finish optimistic protocol negotiation of %s",e,$)})}N=!0}N||await w()}())};async function w(){if(s){t.log.trace("optimistic: already negotiating %s stream",e),await a.promise;return}s=!0;try{c||(t.log.trace("optimistic: doing send protocol for %s stream",e),await y()),d||(t.log.trace("optimistic: doing read protocol for %s stream",e),await x())}finally{s=!1,i=!0,a.resolve()}}async function y(){if(l){await u.promise;return}l=!0;try{t.log.trace('optimistic: write ["%s", "%s", data] in source',Ir,e),await g.writeV([V(`${Ir}
76
+ `),V(`${e}
77
+ `)]),t.log.trace('optimistic: wrote ["%s", "%s", data] in source',Ir,e)}finally{c=!0,l=!1,u.resolve()}}async function x(){if(h){await m.promise;return}h=!0;try{t.log.trace("optimistic: reading multistream select header");let S=await pa(g,t);if(t.log.trace('optimistic: read multistream select header "%s"',S),S===Ir&&(S=await pa(g,t)),t.log.trace('optimistic: read protocol "%s", expecting "%s"',S,e),S!==e)throw new vi("protocol selection failed")}finally{d=!0,h=!1,m.resolve()}}if(r.source=async function*(){await w(),t.log.trace('optimistic: reading data from "%s" stream',e),yield*g.unwrap().source}(),r.closeRead!=null){let S=r.closeRead.bind(r);r.closeRead=async v=>{i||await w().catch(N=>{t.log.error("could not negotiate protocol before close read",N)}),await S(v)}}if(r.closeWrite!=null){let S=r.closeWrite.bind(r);r.closeWrite=async v=>{i||await w().catch(N=>{t.log.error("could not negotiate protocol before close write",N)}),await S(v)}}if(r.close!=null){let S=r.close.bind(r);r.close=async v=>{let N=[];l&&N.push(u.promise),h&&N.push(m.promise),N.length>0?await dt(Promise.all(N),v?.signal):(i=!0,s=!1,a.resolve()),await S(v)}}return{stream:r,protocol:e}}async function xp(r,e,t){e=Array.isArray(e)?e:[e],t.log.trace("handle: available protocols %s",e);let n=wp(r,{...t,maxDataLength:1024,maxLengthLength:2});for(;;){t.log.trace("handle: reading incoming string");let o=await pa(n,t);if(t.log.trace('handle: read "%s"',o),o===Ir){t.log.trace('handle: respond with "%s" for "%s"',Ir,o),await dl(n,V(`${Ir}
78
+ `),t),t.log.trace('handle: responded with "%s" for "%s"',Ir,o);continue}if(e.includes(o))return t.log.trace('handle: respond with "%s" for "%s"',o,o),await dl(n,V(`${o}
79
+ `),t),t.log.trace('handle: responded with "%s" for "%s"',o,o),{stream:n.unwrap(),protocol:o};if(o==="ls"){let i=new J(...e.map(s=>po.single(V(`${s}
80
+ `))),V(`
81
+ `));t.log.trace('handle: respond with "%s" for %s',e,o),await dl(n,i,t),t.log.trace('handle: responded with "%s" for %s',e,o);continue}t.log.trace('handle: respond with "na" for "%s"',o),await dl(n,V(`na
82
+ `),t),t.log('handle: responded with "na" for "%s"',o)}}var uq=500,Zw=class{id;remoteAddr;remotePeer;direction;timeline;multiplexer;encryption;status;limits;log;tags;_newStream;_close;_abort;_getStreams;constructor(e){let{remoteAddr:t,remotePeer:n,newStream:o,close:i,abort:s,getStreams:a}=e;this.id=`${parseInt(String(Math.random()*1e9)).toString(36)}${Date.now()}`,this.remoteAddr=t,this.remotePeer=n,this.direction=e.direction,this.status="open",this.timeline=e.timeline,this.multiplexer=e.multiplexer,this.encryption=e.encryption,this.limits=e.limits,this.log=e.logger.forComponent(`libp2p:connection:${this.direction}:${this.id}`),this.remoteAddr.getPeerId()==null&&(this.remoteAddr=this.remoteAddr.encapsulate(`/p2p/${this.remotePeer}`)),this._newStream=o,this._close=i,this._abort=s,this._getStreams=a,this.tags=[]}[Symbol.toStringTag]="Connection";[tb]=!0;get streams(){return this._getStreams()}async newStream(e,t){if(this.status==="closing")throw new Pp("the connection is being closed");if(this.status==="closed")throw new fl("the connection is closed");if(Array.isArray(e)||(e=[e]),this.limits!=null&&t?.runOnLimitedConnection!==!0)throw new ml("Cannot open protocol stream on limited connection");let n=await this._newStream(e,t);return n.direction="outbound",n}async close(e={}){if(!(this.status==="closed"||this.status==="closing")){if(this.log("closing connection to %a",this.remoteAddr),this.status="closing",e.signal==null){let t=AbortSignal.timeout(uq);e={...e,signal:t}}try{this.log.trace("closing underlying transport"),await this._close(e),this.log.trace("updating timeline with close time"),this.status="closed",this.timeline.close=Date.now()}catch(t){this.log.error("error encountered during graceful close of connection to %a",this.remoteAddr,t),this.abort(t)}}}abort(e){this.status!=="closed"&&(this.log.error("aborting connection to %a due to error",this.remoteAddr,e),this.status="closing",this._abort(e),this.status="closed",this.timeline.close=Date.now())}};function JR(r){return new Zw(r)}function fq(r,e){try{let{options:t}=e.getHandler(r);return t.maxInboundStreams}catch(t){if(t.name!=="UnhandledProtocolError")throw t}return Xw}function hq(r,e,t={}){try{let{options:n}=e.getHandler(r);if(n.maxOutboundStreams!=null)return n.maxOutboundStreams}catch(n){if(n.name!=="UnhandledProtocolError")throw n}return t.maxOutboundStreams??Yw}function eN(r,e,t){let n=0;return t.streams.forEach(o=>{o.direction===e&&o.protocol===r&&n++}),n}var Ay=class{components;connectionEncrypters;streamMuxers;inboundUpgradeTimeout;inboundStreamProtocolNegotiationTimeout;outboundStreamProtocolNegotiationTimeout;events;metrics;constructor(e,t){this.components=e,this.connectionEncrypters=new Map,t.connectionEncrypters.forEach(n=>{this.connectionEncrypters.set(n.protocol,n)}),this.streamMuxers=new Map,t.streamMuxers.forEach(n=>{this.streamMuxers.set(n.protocol,n)}),this.inboundUpgradeTimeout=t.inboundUpgradeTimeout??1e4,this.inboundStreamProtocolNegotiationTimeout=t.inboundStreamProtocolNegotiationTimeout??1e4,this.outboundStreamProtocolNegotiationTimeout=t.outboundStreamProtocolNegotiationTimeout??1e4,this.events=e.events,this.metrics={dials:e.metrics?.registerCounterGroup("libp2p_connection_manager_dials_total"),errors:e.metrics?.registerCounterGroup("libp2p_connection_manager_dial_errors_total")}}[Symbol.toStringTag]="@libp2p/upgrader";async shouldBlockConnection(e,...t){let n=this.components.connectionGater[e];if(n==null)return;if(await n.apply(this.components.connectionGater,t)===!0)throw new ny(`The multiaddr connection is blocked by gater.${e}`)}createInboundAbortSignal(e){let t=Ne([AbortSignal.timeout(this.inboundUpgradeTimeout),e]);return t}async upgradeInbound(e,t){let n=!1,o=this.createInboundAbortSignal(t.signal);try{if(this.metrics.dials?.increment({inbound:!0}),n=await this.components.connectionManager.acceptIncomingConnection(e),!n)throw new oy("Connection denied");await this.shouldBlockConnection("denyInboundConnection",e),await this._performUpgrade(e,"inbound",{...t,signal:o})}catch(i){throw this.metrics.errors?.increment({inbound:!0}),i}finally{o.clear(),n&&this.components.connectionManager.afterUpgradeInbound()}}async upgradeOutbound(e,t){try{this.metrics.dials?.increment({outbound:!0});let n=e.remoteAddr.getPeerId(),o;n!=null&&(o=bt(n),await this.shouldBlockConnection("denyOutboundConnection",o,e));let i="outbound";return t.initiator===!1&&(i="inbound"),await this._performUpgrade(e,i,t)}catch(n){throw this.metrics.errors?.increment({outbound:!0}),n}}async _performUpgrade(e,t,n){let o,i,s,a,c;this.components.metrics?.trackMultiaddrConnection(e),e.log.trace("starting the %s connection upgrade",t);let l=e;if(n?.skipProtection!==!0){let u=this.components.connectionProtector;u!=null&&(e.log("protecting the %s connection",t),l=await u.protect(e,n))}try{if(o=l,n?.skipEncryption!==!0){n?.onProgress?.(new ae(`upgrader:encrypt-${t}-connection`)),{conn:o,remotePeer:i,protocol:c,streamMuxer:a}=await(t==="inbound"?this._encryptInbound(l,n):this._encryptOutbound(l,n));let u={...l,...o};await this.shouldBlockConnection(t==="inbound"?"denyInboundEncryptedConnection":"denyOutboundEncryptedConnection",i,u)}else{let u=e.remoteAddr.getPeerId();if(u==null)throw new os(`${t} connection that skipped encryption must have a peer id`);let d=bt(u);c="native",i=d}if(i.equals(this.components.peerId)){let u=new pl("Can not dial self");throw e.abort(u),u}if(s=o,n?.muxerFactory!=null)a=n.muxerFactory;else if(a==null&&this.streamMuxers.size>0){n?.onProgress?.(new ae(`upgrader:multiplex-${t}-connection`));let u=await(t==="inbound"?this._multiplexInbound({...l,...o},this.streamMuxers,n):this._multiplexOutbound({...l,...o},this.streamMuxers,n));a=u.muxerFactory,s=u.stream}}catch(u){throw e.log.error("failed to upgrade inbound connection %s %a - %e",t==="inbound"?"from":"to",e.remoteAddr,u),u}return await this.shouldBlockConnection(t==="inbound"?"denyInboundUpgradedConnection":"denyOutboundUpgradedConnection",i,e),e.log("successfully upgraded %s connection",t),this._createConnection({cryptoProtocol:c,direction:t,maConn:e,upgradedConn:s,muxerFactory:a,remotePeer:i,limits:n?.limits})}_createConnection(e){let{cryptoProtocol:t,direction:n,maConn:o,upgradedConn:i,remotePeer:s,muxerFactory:a,limits:c}=e,l,u,d;a!=null&&(l=a.createStreamMuxer({direction:n,onIncomingStream:g=>{d!=null&&Promise.resolve().then(async()=>{let w=this.components.registrar.getProtocols(),y=AbortSignal.timeout(this.inboundStreamProtocolNegotiationTimeout);let{stream:x,protocol:S}=await xp(g,w,{signal:y,log:g.log,yieldBytes:!1});if(d==null)return;d.log("incoming stream opened on %s",S);let v=fq(S,this.components.registrar);if(eN(S,"inbound",d)===v){let W=new Op(`Too many inbound protocol streams for protocol "${S}" - limit ${v}`);throw g.abort(W),W}g.source=x.source,g.sink=x.sink,g.protocol=S,x.closeWrite!=null&&(g.closeWrite=x.closeWrite),x.closeRead!=null&&(g.closeRead=x.closeRead),x.close!=null&&(g.close=x.close),await this.components.peerStore.merge(s,{protocols:[S]}),this.components.metrics?.trackProtocolStream(g,d),this._onStream({connection:d,stream:g,protocol:S})}).catch(async w=>{d.log.error("error handling incoming stream id %s - %e",g.id,w),g.timeline.close==null&&await g.close()})}}),u=async(g,w={})=>{if(l==null)throw new cl("Connection is not multiplexed");d.log.trace("starting new stream for protocols %s",g);let y=await l.newStream();d.log.trace("started new stream %s for protocols %s",y.id,g);try{if(w.signal==null){y.log("no abort signal was passed while trying to negotiate protocols %s falling back to default timeout",g);let W=AbortSignal.timeout(this.outboundStreamProtocolNegotiationTimeout);w={...w,signal:W}}y.log.trace("selecting protocol from protocols %s",g);let{stream:x,protocol:S}=await bp(y,g,{...w,log:y.log,yieldBytes:!0});y.log.trace("selected protocol %s",S);let v=hq(S,this.components.registrar,w),N=eN(S,"outbound",d);if(N>=v){let W=new ss(`Too many outbound protocol streams for protocol "${S}" - ${N}/${v}`);throw y.abort(W),W}return await this.components.peerStore.merge(s,{protocols:[S]}),y.source=x.source,y.sink=x.sink,y.protocol=S,x.closeWrite!=null&&(y.closeWrite=x.closeWrite),x.closeRead!=null&&(y.closeRead=x.closeRead),x.close!=null&&(y.close=x.close),this.components.metrics?.trackProtocolStream(y,d),y}catch(x){throw d.log.error("could not create new outbound stream on connection %s %a for protocols %s - %e",n==="inbound"?"from":"to",e.maConn.remoteAddr,g,x),y.timeline.close==null&&y.abort(x),x}},Promise.all([l.sink(i.source),i.sink(l.source)]).catch(g=>{d.log.error("error piping data through muxer - %e",g)}));let h=o.timeline;o.timeline=new Proxy(h,{set:(...g)=>(g[1]==="close"&&g[2]!=null&&h.close==null&&(async()=>{try{d.status==="open"&&await d.close()}catch(w){d.log.error("error closing connection after timeline close %e",w)}finally{this.events.safeDispatchEvent("connection:close",{detail:d})}})().catch(w=>{d.log.error("error thrown while dispatching connection:close event %e",w)}),Reflect.set(...g))}),o.timeline.upgraded=Date.now();let m=()=>{throw new cl("Connection is not multiplexed")};return d=JR({remoteAddr:o.remoteAddr,remotePeer:s,status:"open",direction:n,timeline:o.timeline,multiplexer:l?.protocol,encryption:t,limits:c,logger:this.components.logger,newStream:u??m,getStreams:()=>l?.streams??[],close:async g=>{await l?.close(g),await o.close(g)},abort:g=>{o.abort(g),l?.abort(g)}}),this.events.safeDispatchEvent("connection:open",{detail:d}),d.__maConnTimeline=h,d}_onStream(e){let{connection:t,stream:n,protocol:o}=e,{handler:i,options:s}=this.components.registrar.getHandler(o);if(t.limits!=null&&s.runOnLimitedConnection!==!0)throw new ml("Cannot open protocol stream on limited connection");i({connection:t,stream:n})}async _encryptInbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{let{stream:o,protocol:i}=await xp(e,n,{...t,log:e.log}),s=this.connectionEncrypters.get(i);if(s==null)throw new ll(`no crypto module found for ${i}`);return e.log("encrypting inbound connection to %a using %s",e.remoteAddr,i),{...await s.secureInbound(o,t),protocol:i}}catch(o){throw e.log.error("encrypting inbound connection from %a failed",e.remoteAddr,o),new ll(o.message)}}async _encryptOutbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{e.log.trace("selecting encrypter from %s",n);let{stream:o,protocol:i}=await bp(e,n,{...t,log:e.log,yieldBytes:!0}),s=this.connectionEncrypters.get(i);if(s==null)throw new ll(`no crypto module found for ${i}`);return e.log("encrypting outbound connection to %a using %s",e.remoteAddr,i),{...await s.secureOutbound(o,t),protocol:i}}catch(o){throw e.log.error("encrypting outbound connection to %a failed",e.remoteAddr,o),new ll(o.message)}}async _multiplexOutbound(e,t,n){let o=Array.from(t.keys());e.log("outbound selecting muxer %s",o);try{e.log.trace("selecting stream muxer from %s",o);let{stream:i,protocol:s}=await bp(e,o,{...n,log:e.log,yieldBytes:!0});e.log("selected %s as muxer protocol",s);let a=t.get(s);return{stream:i,muxerFactory:a}}catch(i){throw e.log.error("error multiplexing outbound connection",i),new cl(String(i))}}async _multiplexInbound(e,t,n){let o=Array.from(t.keys());e.log("inbound handling muxers %s",o);try{let{stream:i,protocol:s}=await xp(e,o,{...n,log:e.log}),a=t.get(s);return{stream:i,muxerFactory:a}}catch(i){throw e.log.error("error multiplexing inbound connection",i),new cl(String(i))}}getConnectionEncrypters(){return this.connectionEncrypters}getStreamMuxers(){return this.streamMuxers}};var _y=class extends Le{peerId;peerStore;contentRouting;peerRouting;metrics;services;logger;status;components;log;constructor(e){super(),this.status="stopped";let t=new Le,n=t.dispatchEvent.bind(t);t.dispatchEvent=l=>{let u=n(l),d=this.dispatchEvent(new CustomEvent(l.type,{detail:l.detail}));return u||d},this.peerId=e.peerId,this.logger=e.logger??Es(),this.log=this.logger.forComponent("libp2p"),this.services={};let o=e.nodeInfo?.name??O3,i=e.nodeInfo?.version??D3,s=this.components=DR({peerId:e.peerId,privateKey:e.privateKey,nodeInfo:{name:o,version:i,userAgent:e.nodeInfo?.userAgent??L3(o,i)},logger:this.logger,events:t,datastore:e.datastore??new rc,connectionGater:LR(e.connectionGater),dns:e.dns});this.peerStore=this.configureComponent("peerStore",IR(s,{addressFilter:this.components.connectionGater.filterMultiaddrForPeer,...e.peerStore})),e.metrics!=null&&(this.metrics=this.configureComponent("metrics",e.metrics(this.components))),s.events.addEventListener("peer:update",l=>{if(l.detail.previous==null){let u={id:l.detail.peer.id,multiaddrs:l.detail.peer.addresses.map(d=>d.multiaddr)};s.events.safeDispatchEvent("peer:discovery",{detail:u})}}),e.connectionProtector!=null&&this.configureComponent("connectionProtector",e.connectionProtector(s)),this.components.upgrader=new Ay(this.components,{connectionEncrypters:(e.connectionEncrypters??[]).map((l,u)=>this.configureComponent(`connection-encryption-${u}`,l(this.components))),streamMuxers:(e.streamMuxers??[]).map((l,u)=>this.configureComponent(`stream-muxers-${u}`,l(this.components))),inboundUpgradeTimeout:e.connectionManager?.inboundUpgradeTimeout,inboundStreamProtocolNegotiationTimeout:e.connectionManager?.inboundStreamProtocolNegotiationTimeout??e.connectionManager?.protocolNegotiationTimeout,outboundStreamProtocolNegotiationTimeout:e.connectionManager?.outboundStreamProtocolNegotiationTimeout??e.connectionManager?.protocolNegotiationTimeout}),this.configureComponent("transportManager",new xy(this.components,e.transportManager)),this.configureComponent("connectionManager",new py(this.components,e.connectionManager)),e.connectionMonitor?.enabled!==!1&&this.configureComponent("connectionMonitor",new my(this.components,e.connectionMonitor)),this.configureComponent("registrar",new by(this.components)),this.configureComponent("addressManager",new z3(this.components,e.addresses));let a=(e.peerRouters??[]).map((l,u)=>this.configureComponent(`peer-router-${u}`,l(this.components)));this.peerRouting=this.components.peerRouting=this.configureComponent("peerRouting",new yy(this.components,{routers:a}));let c=(e.contentRouters??[]).map((l,u)=>this.configureComponent(`content-router-${u}`,l(this.components)));if(this.contentRouting=this.components.contentRouting=this.configureComponent("contentRouting",new gy(this.components,{routers:c})),this.configureComponent("randomWalk",new wy(this.components)),(e.peerDiscovery??[]).forEach((l,u)=>{this.configureComponent(`peer-discovery-${u}`,l(this.components)).addEventListener("peer",h=>{this.#e(h)})}),e.transports?.forEach((l,u)=>{this.components.transportManager.add(this.configureComponent(`transport-${u}`,l(this.components)))}),e.services!=null)for(let l of Object.keys(e.services)){let u=e.services[l],d=u(this.components);if(d==null){this.log.error("service factory %s returned null or undefined instance",l);continue}this.services[l]=d,this.configureComponent(l,d),d[jo]!=null&&(this.log("registering service %s for content routing",l),c.push(d[jo])),d[Wo]!=null&&(this.log("registering service %s for peer routing",l),a.push(d[Wo])),d[ma]!=null&&(this.log("registering service %s for peer discovery",l),d[ma].addEventListener?.("peer",h=>{this.#e(h)}))}OR(s)}configureComponent(e,t){return t==null&&this.log.error("component %s was null or undefined",e),this.components[e]=t,t}async start(){if(this.status==="stopped"){this.status="starting",this.log("libp2p is starting");try{await this.components.beforeStart?.(),await this.components.start(),await this.components.afterStart?.(),this.status="started",this.safeDispatchEvent("start",{detail:this}),this.log("libp2p has started")}catch(e){throw this.log.error("An error occurred starting libp2p",e),this.status="started",await this.stop(),e}}}async stop(){this.status==="started"&&(this.log("libp2p is stopping"),this.status="stopping",await this.components.beforeStop?.(),await this.components.stop(),await this.components.afterStop?.(),this.status="stopped",this.safeDispatchEvent("stop",{detail:this}),this.log("libp2p has stopped"))}getConnections(e){return this.components.connectionManager.getConnections(e)}getDialQueue(){return this.components.connectionManager.getDialQueue()}getPeers(){let e=new jr;for(let t of this.components.connectionManager.getConnections())e.add(t.remotePeer);return Array.from(e)}async dial(e,t={}){return this.components.connectionManager.openConnection(e,{priority:75,...t})}async dialProtocol(e,t,n={}){if(t==null)throw new D("no protocols were provided to open a stream");if(t=Array.isArray(t)?t:[t],t.length===0)throw new D("no protocols were provided to open a stream");return(await this.dial(e,n)).newStream(t,n)}getMultiaddrs(){return this.components.addressManager.getAddresses()}getProtocols(){return this.components.registrar.getProtocols()}async hangUp(e,t={}){ks(e)&&(e=bt(e.getPeerId()??"")),await this.components.connectionManager.closeConnections(e,t)}async getPublicKey(e,t={}){if(this.log("getPublicKey %p",e),e.publicKey!=null)return e.publicKey;try{let s=await this.peerStore.get(e);if(s.id.publicKey!=null)return s.id.publicKey}catch(s){if(s.name!=="NotFoundError")throw s}let n=st([V("/pk/"),e.toMultihash().bytes]),o=await this.contentRouting.get(n,t),i=$t(o);return await this.peerStore.patch(e,{publicKey:i}),i}async handle(e,t,n){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async o=>{await this.components.registrar.handle(o,t,n)}))}async unhandle(e){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async t=>{await this.components.registrar.unhandle(t)}))}async register(e,t){return this.components.registrar.register(e,t)}unregister(e){this.components.registrar.unregister(e)}async isDialable(e,t={}){return this.components.connectionManager.isDialable(e,t)}#e(e){let{detail:t}=e;if(t.id.toString()===this.peerId.toString()){this.log.error("peer discovery mechanism discovered self");return}this.components.peerStore.merge(t.id,{multiaddrs:t.multiaddrs}).catch(n=>{this.log.error(n)})}};async function tN(r={}){r.privateKey??=await $l("Ed25519");let e=new _y({...await gR(r),peerId:ov(r.privateKey)});return r.start!==!1&&await e.start(),e}async function rN(r){let e=r.libp2p??{};e.privateKey==null&&r.datastore!=null&&(e.privateKey=await Cw(r.datastore,r.keychain));let t=B3(e);return t.datastore=t.datastore??r.datastore,await tN({...t,...e,start:!1})}async function pq(r={}){let e=r.datastore??new rc,t=r.blockstore??new kf,n;mq(r.libp2p)?n=r.libp2p:n=await rN({...r,libp2p:{dns:r.dns,...r.libp2p,start:void 0},datastore:e});let o=new jm({...r,libp2p:n,datastore:e,blockstore:t,blockBrokers:r.blockBrokers??[W5(),b5()],routers:r.routers??[i8(n),n8()],metrics:n.metrics});return r.start!==!1&&await o.start(),o}function mq(r){return r==null?!1:["dial","dialProtocol","hangUp","handle","unhandle","getMultiaddrs","getProtocols"].every(t=>typeof r[t]=="function")}return yN(gq);})();
52
83
  /*! Bundled license information:
53
84
 
54
85
  pvtsutils/build/index.js:
@@ -77,6 +108,38 @@ pvtsutils/build/index.js:
77
108
  *
78
109
  *)
79
110
 
111
+ reflect-metadata/Reflect.js:
112
+ (*! *****************************************************************************
113
+ Copyright (C) Microsoft. All rights reserved.
114
+ Licensed under the Apache License, Version 2.0 (the "License"); you may not use
115
+ this file except in compliance with the License. You may obtain a copy of the
116
+ License at http://www.apache.org/licenses/LICENSE-2.0
117
+
118
+ THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
119
+ KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
120
+ WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
121
+ MERCHANTABLITY OR NON-INFRINGEMENT.
122
+
123
+ See the Apache Version 2.0 License for specific language governing permissions
124
+ and limitations under the License.
125
+ ***************************************************************************** *)
126
+
127
+ tslib/tslib.js:
128
+ (*! *****************************************************************************
129
+ Copyright (c) Microsoft Corporation.
130
+
131
+ Permission to use, copy, modify, and/or distribute this software for any
132
+ purpose with or without fee is hereby granted.
133
+
134
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
135
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
136
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
137
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
138
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
139
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
140
+ PERFORMANCE OF THIS SOFTWARE.
141
+ ***************************************************************************** *)
142
+
80
143
  @noble/hashes/esm/utils.js:
81
144
  (*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
82
145
 
@@ -98,6 +161,18 @@ pvtsutils/build/index.js:
98
161
  @noble/curves/esm/ed25519.js:
99
162
  (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
100
163
 
164
+ @noble/curves/esm/abstract/weierstrass.js:
165
+ (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
166
+
167
+ @noble/curves/esm/_shortw_utils.js:
168
+ (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
169
+
170
+ @noble/curves/esm/secp256k1.js:
171
+ (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
172
+
173
+ @noble/ciphers/esm/utils.js:
174
+ (*! noble-ciphers - MIT License (c) 2023 Paul Miller (paulmillr.com) *)
175
+
101
176
  pvutils/build/utils.es.js:
102
177
  (*!
103
178
  Copyright (c) Peculiar Ventures, LLC
@@ -138,16 +213,30 @@ asn1js/build/index.es.js:
138
213
  *
139
214
  *)
140
215
 
141
- @noble/curves/esm/abstract/weierstrass.js:
142
- (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
143
-
144
- @noble/curves/esm/_shortw_utils.js:
145
- (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
146
-
147
- @noble/curves/esm/secp256k1.js:
148
- (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
149
-
150
- @noble/ciphers/esm/utils.js:
151
- (*! noble-ciphers - MIT License (c) 2023 Paul Miller (paulmillr.com) *)
216
+ @peculiar/x509/build/x509.es.js:
217
+ (*!
218
+ * MIT License
219
+ *
220
+ * Copyright (c) Peculiar Ventures. All rights reserved.
221
+ *
222
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
223
+ * of this software and associated documentation files (the "Software"), to deal
224
+ * in the Software without restriction, including without limitation the rights
225
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
226
+ * copies of the Software, and to permit persons to whom the Software is
227
+ * furnished to do so, subject to the following conditions:
228
+ *
229
+ * The above copyright notice and this permission notice shall be included in all
230
+ * copies or substantial portions of the Software.
231
+ *
232
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
233
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
234
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
235
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
236
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
237
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
238
+ * SOFTWARE.
239
+ *
240
+ *)
152
241
  */
153
242
  return Helia}));